Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ключом к искажению является функция, которая принимает две координаты (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)

Ответ 2

Существует реализация Java множества фильтров/эффектов изображения на Фильтры изображений Jerry Java. Может быть, вы можете вдохнуть оттуда.

Ответ 3

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

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

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

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

Ответ 5

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

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

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