Фильтр деформации изображения - алгоритм и растеризация - PullRequest
2 голосов
/ 18 мая 2011

Я хотел бы реализовать Фильтр, который позволяет передискретизировать изображение путем перемещения ряда контрольных точек, которые отмечают края и направления касательной. Цель состоит в том, чтобы иметь возможность свободно преобразовывать изображение, как видно в Photoshop, когда вы используете «Свободное преобразование» и выбираете Warpmode «Custom». Изображение помещается в некий Spline-Patch (если это правильное имя), которым можно манипулировать.

Я понимаю, как работают простые сплайны (пути), но как их соединить, чтобы сформировать патч? И как вы можете попробовать такой патч для рендеринга морфированного изображения? Для каждого пикселя в цели мне нужно знать, какой пиксель в исходном изображении соответствует. Я даже не знаю, с чего начать поиск ...

Любая полезная информация (ключевые слова, ссылки, статьи, реализации ссылок) очень ценится!

1 Ответ

3 голосов
/ 13 июля 2011

Этот документ поможет вам получить представление о деформации: http://www.gson.org/thesis/warping-thesis.pdf

Однако это будет включать в себя фильтрацию высоких частот, что значительно усложнит реализацию, но даст лучший результат.

Самый простой способ выполнить то, что вы хотите сделать, - это перебрать каждый пиксель в вашем окончательном изображении, вставить координаты в сплайны и получить пиксель в исходном изображении. Этот пиксель может иметь координаты 0,4 / 1,2, чтобы вы могли билинейно интерполировать между 0/1, 1/1, 0/2 и 1/2.

Что касается сплайнов: есть много ресурсов и решений онлайн для одномерного случая. Что касается 2D, становится немного сложнее найти полезные ресурсы. Простой пример для одномерного случая: http://www -users.cselabs.umn.edu / classes / Spring-2009 / csci2031 / quad_spline.pdf

Вот отличное руководство для 2D-случая: http://en.wikipedia.org/wiki/Bicubic_interpolation

На основании этого вы можете получить собственную схему для сплайнов для 2D-случая. Определите двумерный (с x и y) многочлен и задайте свои ограничения для решения коэффициентов многочлена. Просто помните, что границы сплайновых патчей должны быть согласованными (как по значению, так и по производным), чтобы избежать уродливых скачков.

Удачи!

...