2008-10-22 17 views
20

¿Dónde puedo encontrar algoritmos para distorsiones de imagen? Hay mucha información de 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.Recursos para algoritmos de distorsión de imagen

Respuesta

27

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. Especifica la función inversa de la distorsión, ya que devuelve la imagen distorsionada a la imagen original

Para generar la imagen distorsionada, una curva sobre xey, calcula el punto (u, v) de (x, y) utilizando la función de distorsión inversa, y establece las componentes de color en (x, y) para que sean las mismas que en (u, v) en la imagen original. Por lo general, uno utiliza la interpolación (por ejemplo, http://en.wikipedia.org/wiki/Bilinear_interpolation) para determinar 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 fraccionario entre 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í, supongo por simplicidad que el centro del remolino está en (0,0). El remolino puede colocarse en cualquier parte restando las coordenadas de posición del remolino de xey antes de la función de distorsión, y sumarlas a uyv después de ella.

Existen varios efectos de remolino: algunos (como el anterior) giran solo en un área localizada y la cantidad de remolinos disminuye hacia el borde de la imagen. Otros aumentan el remolino hacia el borde de la imagen. Este tipo de cosas se puede hacer jugando con el ángulo = línea, p.

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

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 de "desalojo" puede crear remolinos con el mapa de desplazamiento correcto.

Si por algún motivo no está satisfecho con la interfaz de ImageMagick, siempre puede echar un vistazo al código fuente de los filtros e ir desde allí.

4

El remolino y otros similares son una transformación de matriz en las ubicaciones de píxeles. Usted crea una imagen nueva 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í es una buena CodeProject mostrando cómo hacerlo

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

20

Hay una implementación Java de gran cantidad de filtros de imagen/efectos en Jerry's Java Image Filters. Tal vez puedas inspirarte desde allí.

+2

Me gustaría poder upvote esto 10 veces. Muchas gracias :) – fresskoma

+0

pero esto toma BufferedImage como entrada de filets, que no es compatible con Android – AAnkit

+1

sí, las imágenes almacenadas en búfer no son compatibles con Android ... entonces tienes u otra idea para estos efectos. –

Cuestiones relacionadas