2010-01-25 19 views
15

Estoy tratando de desarrollar un algoritmo de enfoque de imagen para algunos trabajos de automatización de pruebas. Elegí usar AForge.net, ya que parece un buen sistema maduro de .net.cálculo de foco de imagen

Por desgracia, me parece que no puede encontrar información sobre la construcción de algoritmos de enfoque automático a partir de cero, por lo que he dado mi mejor intento:

imagen toma. aplique el filtro de detección de borde sobel, que genera un contorno de borde en escala de grises. generar un histograma y guardar el dev. estándar mueva la cámara un paso más cerca del sujeto y tome otra fotografía. si el desarrollador estándar es más pequeño que el anterior, estamos enfocando más. de lo contrario, hemos pasado la distancia óptima para tomar fotografías.

¿hay una manera mejor?

actualización: gran defecto en esto, por cierto. cuando obtengo pasado el punto de enfoque óptimo, mi valor de "imagen en foco" continúa creciendo. esperarías una función parabólica ish mirando a la distancia/valor de foco, pero en realidad obtienes algo que es más logarítmico

actualización 2: está bien, así que volví a esto y el método actual que estamos explorando es dado algunos bordes conocidos (está bien, entonces sé exactamente cuáles son los objetos en la imagen), hago una comparación manual de intensidad de píxeles. a medida que el gráfico resultante se hace más pronunciado, me enfoco más. Voy a publicar el código una vez que el algoritmo central se transporta desde matlab a C# (sí, matlab ..: S)

actualización 3: yay actualización final. volvimos a esto de nuevo. el código final es el siguiente:

Paso 1: imagen de la lista de imágenes (Tomé un centenar de fotos a través del punto enfocado)

Paso 2: encontrar una ventaja para el objeto que estoy de enfoque (En mi caso es un objeto rectangular que siempre está en el mismo lugar, así que recorto un rectángulo ALTO y ESTRECHO de un borde)

paso 3: obtenga la HorizontalIntensityStatistics (clase Aforge.net) para esa imagen recortada.

paso 4: obtener el histograma (gris, en mi caso)

paso 5: encontrar la derivada de los valores del histograma

paso 6: cuando la pendiente es el más grande, es cuando se está en el punto más centrado.

+0

creo que son, al menos en el camino correcto. Si recuerdo correctamente el enfoque automático en cámaras digitales, haga algo similar. –

+0

Me di cuenta de eso anoche cuando en realidad estaba jugando con una cámara que hace AF. el que está en el trabajo es esencialmente un tonto. cuando AF está activado, por lo general puede escuchar zumbidos. esa es la cámara que toma muestras a diferentes distancias y adivina la mejor distancia. –

Respuesta

5

Puede ser un poco simplista para sus necesidades, pero he tenido buenos resultados con un algoritmo simple que analiza la diferencia con los píxeles vecinos. La suma de la diferencia de píxeles de 2 intentos parece ser una medida razonable del contraste de la imagen. No pude encontrar el documento original de Brenner en los años 70, pero se menciona en http://www2.die.upm.es/im/papers/Autofocus.pdf

Otro problema es cuando la imagen está muy desenfocada, hay muy poca información de enfoque, por lo que es difícil decir de qué manera 'acercándose' o para evitar un máximo local.

+0

su último punto es uno que encontré el viernes cuando mi cámara comenzó demasiado lejos del IC. Lo solucioné cuando se me ocurrió que siempre iba a estar a la misma altura para obtener el mejor enfoque, así que tengo que pasar de una imagen levemente desenfocada a una más nítida. ese artículo es bastante impresionante, por cierto. especialmente porque tomar fotos de microorganismos está muy cerca de tomar fotos de circuitos integrados, que es lo que estoy haciendo. –

+0

@Stew BRENNER, John F., et al. Un microscopio automatizado para investigación citológica una evaluación preliminar. * Journal of Histochemistry & Cytochemistry *, 1976, 24.1: 100-111. http://jhc.sagepub.com/content/24/1/100.full.pdf –

0

Me pregunto si la desviación estándar es la mejor opción: si la imagen se vuelve más nítida, la imagen del filtro sobel contendrá píxeles más brillantes en los bordes, pero al mismo tiempo menos píxeles brillantes, porque los bordes se vuelven más delgados. ¿Tal vez podrías intentar usar un promedio del 1% de los valores de píxeles más altos en la imagen Sobel?

+0

por la misma lógica elegí ir con desviación estándar. cuanto más nítida es la imagen, mayor es el contraste, menor es la variación en el histograma. si capturo algunos de los valores de píxeles más altos (es decir,obtener los puntos más brillantes), eso solo me dará la cantidad de puntos brillantes que hay en esta imagen en comparación con todos los otros lugares que hay en esta imagen. es decir, el gráfico desliza desplazamientos: plano enfocado: media = 23, stddev = 15 ligeramente desenfocado: media: 27, dev. estándar = 16 realmente fuera de foco: media: 40, dev. estándar = 20 –

3

Esto podría ser útil. Es la forma de sistema de enfoque automático de la cámara realmente funciona - Passive Autofocus

medición de contraste

medición de contraste se logra mediante medición de contraste dentro de un campo de sensores , a través de la lente. La intensidad diferencia entre los píxeles adyacentes de el sensor aumenta naturalmente con enfoque de imagen correcto.El sistema óptico se puede ajustar hasta para detectar el máximo contraste. En este método, AF no involucra medición de distancia real y generalmente es más lento que los sistemas de detección de fase , especialmente cuando opera bajo luz tenue. Como lo hace no utiliza un sensor separado, sin embargo, de detección de contraste de enfoque automático puede ser más flexible (ya que se implementa en software ) y potencialmente más precisa. Este es un método común en las cámaras de video y las cámaras digitales de nivel de consumidor que carecen de obturadores y espejos réplicas . Algunas réflex digitales (incluyendo Olympus E-420, Panasonic L10, Nikon D90, Nikon D5000, Nikon D300 en trípode modo, Canon EOS 5D Mark II, Canon EOS 50D) utiliza este método cuando se enfoca en sus modos de visualización en directo . Un nuevo sistema de lentes intercambiables , Micro Four Thirds, utiliza exclusivamente autofoco de medición de contraste , y se dice que ofrece un rendimiento comparable al de los sistemas de detección de fase .

+0

La diferencia de intensidad entre píxeles está muy cerca de lo que dará la operación Sobel. – kenny

3

No he creado uno, pero lo primero que pensé fue hacer una DFT 2D en una parte de la imagen. Cuando esté fuera de foco, las frecuencias altas desaparecerán automáticamente.

Para un prototipo perezoso, usted podría tratar de comprimir una región de la imagen con JPEG (de alta calidad), y mirar el tamaño flujo de salida. Un archivo grande significa muchos detalles, lo que a su vez implica que la imagen está enfocada. Tenga en cuenta que la cámara no debería ser demasiado ruidosa y que, por supuesto, no puede comparar el tamaño de los archivos en diferentes escenas.

+0

¡Increíble idea sobre el prototipo! Bonito. –

1

Si bien el sobel es una opción decente, probablemente elegiría hacer un cálculo de magnitud de borde en las proyecciones en direcciones xey en varias regiones representativas pequeñas. Otra opción amigable de .NET basada en OpenCV es @http://www.emgu.com/wiki/index.php/Main_Page.

+0

No me di cuenta de que opencv es .net. Supongo que asumí erróneamente que era C++ y seguí adelante sin investigar más (en mi defensa la investigación fue iniciada por otra persona) –

+0

Es C/C++ pero el enlace providef es un contenedor C# alrededor de los DLL. – kenny

0

otro sabor de métrica enfoque podría ser:

agarre varias imágenes y promediarlos (reducción de ruido). Luego, FFT es la imagen promediada y usa la relación de energía de altas a bajas frecuencias. Cuanto mayor sea esta ración, mejor será el enfoque. Una demostración de Matlab está disponible (excluyendo la etapa de promediación) dentro de las demostraciones de la caja de herramientas :)

7

Puede echar un vistazo a la técnica utilizada en el Curiosity Mars Rover de la NASA.

La técnica se describe en este artículo

EDGETT, Kenneth S., et al. Curiosity’s Mars Hand Lens Imager (MAHLI) Investigation. Space science reviews, 2012, 170.1-4: 259-317.

que está disponible como un PDF here.

Citando el artículo:

7.2.2 El enfoque automático

El enfoque automático se prevé que sea el método principal por el cual MAHLI es centrado en Marte. El comando autofoco indica a la cámara que se mueva a una posición de recuento de motor de inicio especificada y recopile una imagen, mueva un número específico de pasos y recopile otra imagen, y continúe haciéndolo hasta obtener un total ordenado de imágenes, cada una separada por un incremento de conteo de motor especificado. Cada una de estas imágenes es JPEG comprimido (Joint Photographic Experts Group; consulte CCITT (1993)) con con el mismo factor de calidad de compresión aplicado. El tamaño de archivo de cada imagen comprimida es una medida del detalle de la escena, que a su vez es una función de enfoque (una imagen enfocada muestra más detalles que una vista borrosa, fuera de foco de la misma escena). Como se ilustra en la Fig. 23, la cámara determina la relación entre el tamaño del archivo JPEG y el recuento del motor y ajusta una parábola a los tres tamaños de archivo máximo contiguos. El vértice de la parábola proporciona una estimación de la mejor posición de recuento del motor . Una vez hecha esta determinación, MAHLI mueve el grupo de enfoque de lentes a la mejor posición del motor y adquiere una imagen; esta imagen se almacena, las imágenes anteriores utilizadas para determinar la posición de enfoque automático no se guardan.

enfoque automático puede ser realizada en todo el campo MAHLI de vista, o puede ser realizado en un sub-marco que corresponde a la parte de la escena que incluye el objeto (s) a ser estudiado. Dependiendo de la naturaleza de la materia y el conocimiento de las incertidumbres en robótica posicionamiento del brazo de Mahli, los usuarios podrían optar por adquirir un sub-marco de autoenfoque centrada o puede ser que seleccione un sub-bastidor fuera del centro de enfoque automático si el conocimiento de posicionamiento es suficiente para determinar dónde debe ubicarse el submarco. Se recomienda encarecidamente el uso de subtramas para realizar el enfoque automático porque generalmente da como resultado que el sujeto esté en mejor enfoque que el caso cuando se aplica el enfoque automático al CCD completo; Además, la posición del recuento de motor resultante del enfoque automático que utiliza un subtrama generalmente resulta en una determinación más precisa de la distancia de trabajo de la escala de píxeles.

El siguiente es Figura 23:

Autofocus in NASA Curiosity Mars Rover

se sugirió Esta idea también en esta respuesta: https://stackoverflow.com/a/2173259/15485

+0

thx, ¡muy interesante! – SubniC