Интерполяция высшего порядка для контурных графиков в питоне
Кто-нибудь из вас знает о методе интерполяции более высокого порядка (сплайны Катмулла-Рома, кубическая интерполяция и т. Д.) Для 2D контуров в Python?
Skimage, Matplotlib и OpenCV предоставляют функции measure.find_contours(), contours() и findContours() соответственно, но все они основаны на линейной интерполяции (также называемой марширующими квадратами), я ищу что-то с более высокой точностью в Python предпочтительно. Любые указатели будут высоко оценены.
https://www.dropbox.com/s/orgr2yqhbbk2xnr/test.PNG
На изображении выше я пытаюсь извлечь изо-значение 25 из скалярного поля f(x,y)=x^3+y^3. Я ищу 6 точек с большей точностью, чем 6 красных точек, заданных линейной интерполяцией.
1 ответ
Для неструктурированных 2d-данных (или триангулированных данных) вас может заинтересовать следующий класс:
http://matplotlib.org/api/tri_api.html?highlight=cubictriinterpolator
который обеспечивает интерполятор Clough-Tocher (кубический) из определенного пользователем Triangulation
и поле, определенное в узлах триангуляции. Он также может быть использован через класс помощника UniformTriRefiner
:
http://matplotlib.org/api/tri_api.html?highlight=refine_field http://matplotlib.org/mpl_examples/pylab_examples/tricontour_smooth_user.png
Тем не менее выбор адаптированной интерполяции зависит, конечно, от вашего набора данных.