cálculo de enfoque de la imagen
-
22-09-2019 - |
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
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
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:
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:)