Ресурсы для алгоритмов искажения изображения - PullRequest
20 голосов
/ 22 октября 2008

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

Ответы [ 5 ]

28 голосов
/ 22 октября 2008

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

Ключом искажения является функция, которая берет две координаты (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 = a*(x*x+y*y)
20 голосов
/ 22 октября 2008

В Java реализовано множество фильтров / эффектов изображений Фильтры изображений Java Джерри Может быть, вы можете черпать вдохновение оттуда.

5 голосов
/ 22 октября 2008

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

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

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

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

2 голосов
/ 13 октября 2009

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

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

0 голосов
/ 22 октября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...