Ресурсы по алгоритмам искажения изображения

Где найти алгоритмы искажения изображения? Существует так много информации о Blur и других классических алгоритмах, но так мало о более сложных. В частности, меня интересует алгоритм искажения изображения с эффектом завихрения.


person Jonas    schedule 22.10.2008    source источник


Ответы (5)


Я не могу найти никаких ссылок, но я могу дать общее представление о том, как работают эффекты искажения.

Ключом к искажению является функция, которая берет две координаты (x, y) искаженного изображения и преобразует их в координаты (u, v) исходного изображения. Это определяет обратную функцию искажения, поскольку возвращает искаженное изображение к исходному изображению.

Чтобы сгенерировать искаженное изображение, нужно выполнить цикл по x и y, вычислить точку (u, v) по (x, y) с помощью функции обратного искажения и установить компоненты цвета в (x, y) такими же, как те. в (u, v) на исходном изображении. Обычно используется интерполяция (например, http://en.wikipedia.org/wiki/Bilinear_interpolation ) для определить цвет в точке (u,v), так как (u,v) обычно лежит не точно в центре пикселя, а в некоторой дробной точке между пикселями.

Вихрь — это, по сути, вращение, угол поворота которого зависит от расстояния от центра изображения. Примером может быть:

a = amount of rotation
b = size of effect

angle = a*exp(-(x*x+y*y)/(b*b))
u = cos(angle)*x + sin(angle)*y
v = -sin(angle)*x + cos(angle)*y

Здесь для простоты я предполагаю, что центр завихрения находится в точке (0,0). Завихрение можно разместить где угодно, вычитая координаты положения завихрения из x и y перед функцией искажения и добавляя их к u и v после нее.

Существуют различные эффекты завихрения: некоторые (например, приведенные выше) закручивают только локализованную область, а степень завихрения уменьшается к краю изображения. Другие увеличивают завихрение к краю изображения. Такого рода вещи можно сделать, играя с линией angle =, например.

angle = a*(x*x+y*y)
person Chris Johnson    schedule 22.10.2008

На Jerry's Java Image Filters. Может быть, вы можете черпать оттуда вдохновение.

person PhiLho    schedule 22.10.2008
comment
но это принимает BufferedImage как ввод файлов, который не поддерживается в Android - person AAnkit; 27.02.2013
comment
да, буферизованные изображения не поддерживаются в Android .. тогда есть ли у вас какие-либо другие идеи для этого эффекта. - person neeraj kirola; 08.05.2014

Завихрение и тому подобное — это матричное преобразование расположения пикселей. Вы создаете новое изображение и получаете цвет из позиции на изображении, полученной путем умножения текущей позиции на матрицу.

Матрица зависит от текущей позиции.

вот хороший CodeProject, показывающий, как это сделать

http://www.codeproject.com/KB/GDI-plus/displacementfilters.aspx

person Lou Franco    schedule 22.10.2008

есть новая графическая библиотека с множеством функций

http://code.google.com/p/picasso-graphic/

person Community    schedule 13.10.2009

Взгляните на ImageMagick. Это набор инструментов для преобразования и редактирования изображений с интерфейсами для всех популярных языков.

Оператор -displace может создавать завихрения с правильной картой смещения.

Если вас по какой-то причине не устраивает интерфейс ImageMagick, вы всегда можете взглянуть на исходный код фильтров и перейти оттуда.

person lajos    schedule 22.10.2008