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





Я не могу найти никаких ссылок, но могу дать общее представление о том, как работают эффекты искажения.
Ключ к искажению - это функция, которая принимает две координаты (x, y) в искаженном изображении и преобразует их в координаты (u, v) в исходном изображении. Это определяет обратную функцию искажения, так как он возвращает искаженное изображение к исходному изображению.
Чтобы сгенерировать искаженное изображение, нужно перебирать x и y, вычислять точку (u, v) из (x, y) с помощью функции обратного искажения и устанавливать компоненты цвета в (x, y) такими же, как у at (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)
Взгляните на ImageMagick. Это набор инструментов для преобразования и редактирования изображений, имеющий интерфейсы для всех популярных языков.
Оператор -displace может создавать завихрения с правильной картой смещения.
Если вас по какой-то причине не устраивает интерфейс ImageMagick, вы всегда можете взглянуть на исходный код фильтров и продолжить работу.
Вихрь и ему подобные представляют собой матричное преобразование местоположения пикселей. Вы создаете новое изображение и получаете цвет из позиции на изображении, полученной при умножении текущей позиции на матрицу.
Матрица зависит от текущей позиции.
вот хороший CodeProject, показывающий, как это сделать
http://www.codeproject.com/KB/GDI-plus/displacementfilters.aspx
В Фильтры изображений Java Джерри есть реализация Java множества фильтров / эффектов изображений. Может быть, вы сможете почерпнуть оттуда вдохновение.
да bufferedImages не поддерживаются в android .. тогда у вас есть другие идеи для этого эффекта.
есть новая графическая библиотека, есть много функций
но это принимает BufferedImage в качестве входных файлов, что не поддерживается в Android