Detección de funciones en imágenes ruidosas
-
28-10-2019 - |
Pregunta
He construido un sistema de imágenes con una cámara web y funciones de coincidencia, de modo que cuando muevo la cámara; Puedo seguir el movimiento de la cámara. Estoy haciendo algo similar a aquí , excepto con los marcos de la cámara web como entrada.
Funciona muy bien para imágenes "buenas", pero cuando se toman imágenes con muy poca luz aparece mucho ruido (alta ganancia de la cámara), y eso interfiere con la detección y coincidencia de funciones. Básicamente, no detecta ninguna característica buena y, cuando lo hace, no puede hacer coincidirlas correctamente entre marcos.
¿Alguien conoce una buena solución para esto? ¿Qué otros métodos se utilizan para buscar y hacer coincidir características?
Aquí hay dos imágenes de ejemplo con características muy bajas:
Solución
Creo que la correlación de fase será su mejor opción aquí. Está diseñado para indicarle el cambio de fase (es decir, la traducción) entre dos imágenes. Es mucho más resistente (pero no inmune) al ruido que la detección de características porque opera en el espacio de frecuencias; mientras que los detectores de características operan espacialmente. Otro beneficio es que es muy rápido en comparación con los métodos de detección de características. Tengo una implementación disponible en el tronco de OpenCV que tiene una precisión de subpíxeles ubicada aquí .
Sin embargo, sus imágenes son prácticamente "sin rasgos distintivos" con la excepción del pliegue en el medio, por lo que incluso la correlación de fase puede tener algunos problemas. Piense en ello como intentar detectar la traducción en una tormenta de nieve. Si todo lo que puede ver es blanco, no puede decir que ha traducido en absoluto, por lo tanto, el término desvanecimiento . En su caso, el algoritmo podría sufrir de "greenout" :)
¿Puede ajustar la configuración de la cámara para que funcione mejor en condiciones de poca luz? ¿Ha abierto completamente el iris? ¿Puedes vivir con velocidades de cuadro más bajas? Establecer un tiempo de exposición más largo permitirá que la cámara recoja más luz, lo que le brindará más funciones a costa de agregar desenfoque de movimiento. O, si la luz baja es su entorno predeterminado, probablemente desee algo diseñado para esto, como una cámara de infrarrojos, pero pueden ser costosos. Aparte de eso, un objetivo grande y exposiciones prolongadas son tus amigos :)
Ecualización de histograma puede resultar de interés para mejorar el contraste de la imagen. Pero, a veces, solo puede mejorar el ruido. OpenCV tiene una función de ecualización de histograma global llamada equalizeHist . Para una implementación más localizada, le recomendamos que consulte Ecualización de histograma adaptativo limitado de contraste o CLAHE para pequeño. Aquí hay un buen artículo al respecto. Esta página tiene algunos buenos ejemplos y algo de código.