Pregunta

Estoy tratando de desarrollar un enfoque de imagen algoritmo para algunos trabajos de automatización de pruebas. He optado por utilizar AForge.net, ya que parece un buen sistema de madurar .net usar.

Por desgracia, no puedo parecen encontrar información sobre la construcción de algoritmos de enfoque automático a partir de cero, así que le he dado mi mejor intento:

tomar la imagen. aplicar el filtro de detección de bordes de Sobel, que genera un contorno de borde en escala de grises. generar un histograma y guardar el dev estándar. mover la cámara a un paso de tema y tomar otra foto. si el dev estándar es más pequeño que el anterior, estamos recibiendo más enfocado. de lo contrario, hemos pasado a la distancia óptima a tomar fotografías.

¿hay una manera mejor?

Actualización: Un error enorme en esto, por cierto. como consigo pasado el punto óptimo de enfoque, mi "imagen en foco" valor sigue creciendo. lo que espera una función parabólica-ish mirando a distancia / Focus-valor, pero en realidad se obtiene algo que es más logarítmica

Actualización 2: bien, así que volví a esto y el método actual que estamos explorando es dado unos bordes conocidos (bueno, así que sé exactamente lo que los objetos de la imagen son), hago un manual de intensidad de píxeles comparación. como el gráfico resultante se hace más empinada, me sale más enfocado. Voy a publicar el código una vez que el algoritmo central se portado de MATLAB en C # (sí, Matlab ..: S)

Actualización 3: yay actualización final. volvió a esto otra vez. las últimas miradas código como el siguiente:

Paso 1: obtener una imagen de la lista de imágenes (I 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 está siempre en el mismo lugar, por lo que puedo recortar un alto y estrecho rectángulo de uno de los bordes)

Paso 3:. Obtener los HorizontalIntensityStatistics (Aforge.net clase) para que la imagen recortada

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

paso 5: encontrar la derivada de los valores del histograma

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

¿Fue útil?

Solución

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

Otra cuestión es cuando la imagen es extremadamente fuera de foco, hay muy poca información de enfoque, por lo que es difícil saber en qué dirección está 'cada vez más cerca' o para evitar un máximo local.

Otros consejos

Se puede echar un vistazo a la técnica utilizada en la NASA Mars Rover Curiosity.

La técnica se describe en este artículo

Edgett, Kenneth S., et al. Marte de la mano de la lente de la curiosidad Imager (MAHLI) Investigación. Espacio críticas ciencia , 2012, 170,1-4:. 259-317

que está disponible como una PDF aquí .

Citando del artículo:

  

7.2.2 El enfoque automático

     

El enfoque automático se prevé que sea el método primario mediante el cual MAHLI es   centrado en Marte. El comando de enfoque automático instruye a la cámara moverse a   una posición de salida especificada recuento de motor y recoger una imagen, mover una   número determinado de pasos y recoger otra imagen, y seguir haciéndolo   hasta alcanzar un número total mandado de imágenes, cada uno separado por una   Valor mínimo de la cuenta del motor especificada. Cada una de estas imágenes es JPEG   comprimido (Joint Photographic Experts Group; véase el CCITT (1993)) con   el mismo factor de calidad de compresión aplicada. El tamaño de cada archivo   imagen comprimida es una medida de Detalle de escena, que es a su vez una   la función de enfoque (una imagen muestra más detalladamente en el foco de un borroso,   fuera de la vista foco de la misma escena). Como se ilustra en la Fig. 23, el   cámara determina la relación entre el tamaño del archivo JPEG y el motor   contar y se ajusta a una parábola a los tres vecinos tamaños máximos de archivo.   El vértice de la parábola proporciona una estimación de la mejor enfoque   posición de recuento del motor. Después de haber hecho esta determinación, MAHLI mueve el   grupo de enfoque del objetivo en la mejor posición del motor y adquiere una imagen;   esta imagen se almacena, las imágenes anteriores utilizan para determinar la   la posición de enfoque automático no se guardan.

     

El enfoque automático puede ser realizada sobre el   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   eligen para 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 está   suficiente para determinar dónde debe ser situado el sub-bastidor. Uso de   sub-tramas para realizar el enfoque automático es muy recomendable ya que este   por lo general resulta en el tema de estar en un mejor enfoque que en el caso   cuando el autofoco se aplica a la CCD completo; Además, el resultante   posición recuento de motor de enfoque automático usando un sub-bastidor por lo general resultados   en una determinación más precisa de la distancia de trabajo de la escala de píxeles.

La siguiente es Figura 23:

El enfoque automático de la NASA Mars Rover Curiosity

Esta idea fue sugerida también en esta respuesta: https://stackoverflow.com/a/2173259/15485

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

  

Contraste medición

     

contraste de la medida se consigue por   la medición de contraste dentro de un sensor   campo, a través de la lente. La intensidad   diferencia entre los píxeles adyacentes de   el sensor aumenta naturalmente con   enfoque de la imagen correcta. la óptica   sistema de este modo se puede ajustar hasta   se detecta el máximo contraste. En   este método, la FA no implica   la medición de la distancia real en absoluto y   es generalmente más lenta que la fase   sistemas de detección, especialmente cuando   que opera bajo la luz tenue. Como lo hace   No utilice un sensor separado, sin embargo,   de detección de contraste de enfoque automático puede ser más   flexible (como se implementa en   software) y potencialmente más   preciso. Este es un método común en   cámaras de vídeo y a nivel de consumidor   cámaras digitales que carecen de persianas y   espejos reflejo. Algunas réflex digitales (incluyendo   Olympus E-420, Panasonic L10, Nikon   D90, Nikon D5000, Nikon D300 en el trípode   Modo, Canon EOS 5D Mark II, Canon EOS   50D) utilizar este método cuando se enfoca en   sus modos de visualización en directo. Un nuevo   sistema de lentes intercambiables, Micro   Cuatro Tercios, utiliza exclusivamente contraste   medición de enfoque automático, y se dice que   ofrecen un rendimiento comparable a la fase de   detectar sistemas.

No he construido uno mismo, pero lo primero que pensé sería hacer una DFT 2D en una parte de la imagen. Cuando fuera de foco, las altas frecuencias 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 la mirada en el tamaño de la secuencia de salida. Un archivo grande significa una gran cantidad de detalles, lo que implica a su vez la imagen está enfocada. Tenga en cuenta que la cámara no debe ser demasiado ruidoso, y que no se puede comparar los tamaños de archivo a través de diferentes escenas de curso.

Mientras que el Sobel es una opción decente, probablemente decida hacer un cálculo de magnitud ventaja sobre las proyecciones en direcciones X e Y durante varias pequeñas regiones representativas. Otra de las opciones amigables .NET basado en OpenCV es @ http://www.emgu.com/ wiki / index.php / Main_Page.

Me pregunto si la desviación estándar es la mejor opción: Si la imagen se vuelve más nítida, la imagen filtro de Sobel contendrá píxeles más brillantes en los bordes, pero al mismo tiempo menos píxeles brillantes, debido a que los bordes están cada vez más delgada. Tal vez usted podría tratar de usar un promedio de 1% de los más altos valores de píxel en la imagen Sobel?

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

agarre varias imágenes y (reducción de ruido) promedio de los mismos. Entonces FFT la imagen promediada y utilizar la alta proporción de energía bajas frecuencias. Cuanto mayor sea esta ración el mejor enfoque. A Matlab demostración está disponible (con exclusión de la etapa de promediación) dentro de las demostraciones de la caja de herramientas:)

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