Pregunta

¿Dónde puedo encontrar algoritmos para distorsiones de imagen? Hay mucha información sobre Blur y otros algoritmos clásicos, pero muy pocos de los más complejos. En particular, estoy interesado en el algoritmo de distorsión de imagen de efecto de remolino.

¿Fue útil?

Solución

No puedo encontrar ninguna referencia, pero puedo dar una idea básica de cómo funcionan los efectos de distorsión.

La clave de la distorsión es una función que toma dos coordenadas (x, y) en la imagen distorsionada y las transforma en coordenadas (u, v) en la imagen original. Esto especifica la función inversa de la distorsión, ya que devuelve la imagen distorsionada a la imagen original

Para generar la imagen distorsionada, uno hace un bucle sobre x e y, calcula el punto (u, v) desde (x, y) usando la función de distorsión inversa, y establece los componentes de color en (x, y) como el igual que los de (u, v) en la imagen original. Ususally usa interpolación (por ejemplo, http://en.wikipedia.org/wiki/Bilinear_interpolation ) para determine el color en (u, v), ya que (u, v) generalmente no se encuentra exactamente en el centro de un píxel, sino en algún punto fraccional entre los píxeles.

Un remolino es esencialmente una rotación, donde el ángulo de rotación depende de la distancia desde el centro de la imagen. Un ejemplo sería:

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

Aquí, asumo por simplicidad que el centro del remolino está en (0,0). El remolino puede colocarse en cualquier lugar restando las coordenadas de la posición del remolino de xey antes de la función de distorsión, y agregándolas au yv después.

Hay varios efectos de remolino alrededor: algunos (como el anterior) giran solo en un área localizada, y la cantidad de remolino disminuye hacia el borde de la imagen. Otros aumentan los remolinos hacia el borde de la imagen. Este tipo de cosas se pueden hacer jugando con la línea angle =, por ejemplo,

angle = a*(x*x+y*y)

Otros consejos

Hay una implementación de Java de muchos filtros / efectos de imagen en Filtros de imagen Java de Jerry . Quizás puedas inspirarte desde allí.

El remolino y otros similares son una transformación de matriz en las ubicaciones de píxeles. Crea una nueva imagen y obtiene el color de una posición en la imagen que obtiene al multiplicar la posición actual por una matriz.

La matriz depende de la posición actual.

Aquí hay un buen CodeProject que muestra cómo hacerlo

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

hay una nueva biblioteca gráfica con muchas características

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

Eche un vistazo a ImageMagick . Es un kit de herramientas de conversión y edición de imágenes y tiene interfaces para todos los idiomas populares.

El operador -displace puede crear remolinos con el mapa de desplazamiento correcto.

Si por alguna razón no está satisfecho con la interfaz de ImageMagick, siempre puede mirar el código fuente de los filtros e ir desde allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top