Detección de una cruz en una imagen con OpenCV


Estoy tratando de detectar una forma (una cruz) en mi flujo de vídeo de entrada con la ayuda de OpenCV. Actualmente estoy umbral para obtener una imagen binaria de mi cruz que funciona bastante bien. Desafortunadamente mi algoritmo para decidir si el blob extraído es una cruz o no no funciona muy bien. Como puede ver en la imagen de abajo, no todas las esquinas se detectan bajo ciertas perspectivas.

Introduzca la descripción de la imagen aquí

Estoy usando findContours() y approxPolyDP() para obtener una aproximación de mi contorno. Si soy al detectar 12 esquinas / vértices en esta curva aproximada, se asume que el blob es una cruz.

¿Hay alguna mejor manera de resolver este problema? Pensé en SIFT, pero el algoritmo tiene que funcionar en tiempo real y leí que SIFT no es realmente adecuado para tiempo real.

Author: Ilmari Karonen, 2013-01-30

2 answers

Tengo un par de sugerencias que podrían proporcionar algunos resultados interesantes, aunque no estoy seguro acerca de cualquiera.

Si la cruz está siempre cerca del centro de su imagen y siempre se encuentra en una superficie plana, podría intentar encontrar una homografía entre la cámara y el plano sobre el que se encuentra la cruz. Esto le permitiría transformar una imagen de muestra de la cruz (en una selección de diferentes rotaciones en plano) al sistema de coordenadas de la cruz visualizada. Podrías entonces genere plantillas que pueda coincidir con la imagen. Podría hacer algunas pruebas simples de acuerdo de píxeles para determinar si tiene una coincidencia.

Alternativamente podrías intentar entrenar a un clasificador basado en Haar para reconocer la cruz. Este tipo de clasificador se utiliza a menudo en la detección de caras y detecta bordes orientados en imágenes, clasificando caras por las posiciones relativas de varios bordes orientados. Tiene una buena precisión de clasificación en las caras y es extremadamente rápido. Aunque no puedo dar fe por su precisión en esta situación particular podría proporcionar algunos buenos resultados para formas simples como una cruz.

 9
Author: Max Allan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-30 20:17:42

Calcular el casco convexo y luego aprovechar los defectos de convexidad podría funcionar.

Todas las cruces deben tener cuatro defectos de convexidad, formando cuatro conjuntos de dos puntos, o cuatro vectores. Además, si su forma era una cruz, entonces estos cuatro vectores tendrán dos pares de ángulos suplementarios.

 8
Author: David Wurtz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-06 20:25:15