tutorial selectroi goturn espaƱol and c++ opencv video feature-detection

c++ - selectroi - tracking and detection opencv



Detectando una cruz en una imagen con OpenCV (2)

Estoy tratando de detectar una forma (una cruz) en mi transmisión de video de entrada con la ayuda de OpenCV . Actualmente estoy ingresando para obtener una imagen binaria de mi cruz que funciona bastante bien. Desafortunadamente, mi algoritmo para decidir si la burbuja extraída es una cruz o no, no funciona muy bien. Como puede ver en la imagen a continuación, no todas las esquinas se detectan bajo ciertas perspectivas.

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

¿Hay alguna forma mejor 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 el tiempo real.


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

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


Tengo un par de sugerencias que pueden proporcionar algunos resultados interesantes, aunque tampoco estoy seguro de ninguna.

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

Alternativamente, podría intentar entrenar a un clasificador basado en Haar para reconocer la cruz. Este tipo de clasificador se usa a menudo en la detección de rostros y detecta bordes orientados en imágenes, clasificando rostros 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 garantizar su precisión en esta situación particular, podría proporcionar buenos resultados para formas simples como una cruz.