2011-02-07 14 views
18

Para darle algunos antecedentes sobre lo que estoy haciendo: Estoy tratando de registrar cuantitativamente las variaciones en el flujo de un fluido compresible a través del análisis de imágenes. Una forma de hacerlo es explotar el hecho de que el índice de refracción del fluido está directamente relacionado con su densidad. Si configura algún tipo de imagen detrás del flujo, la distorsión en la imagen debido a cambios en el índice de refracción en todo el campo de fluido lo lleva a un gradiente de densidad, lo que ayuda a caracterizar el patrón de flujo.Reconocimiento de distorsiones en una cuadrícula regular

Tengo un conjunto de rutinas que lo hacen con éxito con un patrón regular de puntos en 2D. El patrón de puntos está ligeramente distorsionado, y al comparar la posición de los puntos en la imagen distorsionada con la de la imagen no distorsionada, obtengo un campo de desplazamiento, que es exactamente lo que necesito. El problema con este método es la resolución. La resolución está limitada a la cantidad de puntos en el campo, y estoy explorando métodos que me brindan más datos.

Una idea que he tenido es utilizar una cuadrícula regular de líneas horizontales y verticales. Esta imagen se distorsionará de la misma manera, pero en lugar de obtener solo el desplazamiento de un punto, tendré la distorsión continua de una cuadrícula. Parece que debe haber algún algoritmo o procedimiento estándar para comparar una rejilla geométrica con otra e inferir algún tipo de campo de desplazamiento. Sin embargo, no he encontrado nada como esto en mi investigación.

¿Alguien tiene algunas ideas que puedan orientarme en la dirección correcta? FYI, no soy científico informático, soy ingeniero. Digo eso solo porque puede haber un enfoque obvio que estoy descuidando debido a que proviene de un campo diferente. Pero puedo programar. Estoy usando MATLAB, pero puedo leer Python, C/C++, etc.

Éstos son ejemplos del tipo de imágenes que estoy trabajando con:

 Regular:        Distorted: 

enter image description here ------ - enter image description here

+0

Echa un vistazo a este software (comercial) http://www.correlatedsolutions.com/index.php/home –

Respuesta

19

Creo que está buscando el algoritmo Digital Image Correlation.

Here you can see a demo.

Here is a Matlab Implementation.

De Wikipedia:

Correlación Digital de Imágenes y Seguimiento (DIC/DDIT) es un método óptico que emplea el seguimiento & técnicas de registro de imágenes de 2D preciso y mediciones 3D de cambios en las imágenes. Esto se usa a menudo para medir la deformación (ingeniería), el desplazamiento y la deformación, pero se aplica ampliamente en muchas áreas de la ciencia y la ingeniería.

Editar

Aquí aplica el algoritmo de DIC a su imagen distorsionada usando Mathematica, mostrando los desplazamientos relativos.

enter image description here

Editar

También puede identificar fácilmente la zona de desplazamiento máximo:

enter image description here

Editar

Después de un poco de trabajo (dejar de fumar ea poco, francamente) que puede llegar a algo como esto, lo que representa el "campo de desplazamiento", mostrando claramente que se trata de un vórtice:

enter image description here

(más oscuro y las flechas más grandes significa más el desplazamiento (velocidad))

Publique un comentario si le interesa el código de Mathematica para este. Creo que mi código no va a ayudar a nadie más, así que omito publicarlo.

+1

Esto es increíble y creo exactamente lo que necesito. ¡Gracias por la respuesta rápida y la cálida bienvenida! – pdxmere

+0

@belisarius sería bueno tener más detalles sobre exactamente lo que hiciste (hasta la última figura, el campo de velocidad) :-) – Szabolcs

+0

@Szabolcs No es realmente "velocidad", solo desplazamiento. De todos modos, fue complicado porque la deformación de la cuadrícula requirió algún trabajo para poder identificar a qué punto fuente había llegado. Por último, el hecho de que los márgenes no se deformen fue la clave. Veré si guardé el código fuente para la posteridad (:)) y lo publicaré aquí si no me hace sonrojar –

1

También sugeriría que un algoritmo de seguimiento de línea funcionaría bien.

Simplemente comience en la primera línea de píxeles de la imagen y comience a seguir cada una de las líneas verticales hacia abajo (solo necesita comenzar esto en la primera línea para obtener los puntos de partida. Esto se puede hacer mediante un patrón simple que se mueve ortogonalmente al gradiente de esa línea, ergo sigue una línea. Cuando alcances un cruce de una línea horizontal puedes medir ese punto (en coordenadas x, y) y compararlo con el punto de cruce correspondiente en tu imagen distorsionada.

Como su cuadrícula es regular, sabe que el noveno punto de cruce medido en la línea negra vertical m.th se corresponde con ambas imágenes. Luego, simplemente compare ambos puntos calculando su distancia. Haga esto para cada línea en su cuadrícula y obtendrá, en qué medida cada punto de cruce de la grilla está distorsionada

Este algoritmo de línea siguiente también se utiliza en los algoritmos básicos de enlace Edge o en el detector Canny Edge.

(Todo esto son sólo ideas teóricas y no puede proporcionarle un algoritmo para él. Pero supongo que debería funcionar fácilmente en imágenes distorsionadas como que tiene allí ... pero tal vez es útil para usted)