¿Cómo puedo detectar un letrero cuadrilátero de una imagen capturada con un teléfono móvil? ¿Como puedo detectar formas como un rectángulo? rectángulo redondeado (esquinas redondeadas en lugar de esquinas de forma)?
Estoy usando opencv.wrapper pero soy nuevo en esto.
Gracias.
Aquí está la muestra: texto alternativo http://www.freeimagehosting.net/uploads/b03442fd36.png
texto alternativo http://www.freeimagehosting.net/uploads/e6b36040e8.png
Debido al ruido y muchas líneas allí, no puedo determinar cuál es la línea límite del letrero. A veces puedo encontrar el límite de las líneas después de la transformación de hough. Estoy atrapado ... en este tipo de escenario ...
Estas son las 2 imágenes en bruto tomadas desde la cámara del teléfono móvil
texto alternativo http://www.freeimagehosting.net/uploads/6dbd613edf.jpg texto alternativo http://www.freeimagehosting.net/uploads/720da20080.jpg
¿Necesito un consejo para ver cómo puedo procesar la imagen para sacar el letrero?
Muchas gracias
Respuestas:
Ambas imágenes contienen muchas líneas que no tienen nada que ver con el signo que está buscando. Y algunas de esas líneas son más largas / tienen un mayor contraste que las líneas que realmente desea, por lo que creo que detectar las líneas de borde (por ejemplo, usando una transformación de hough o sumando contrastes horizontal / verticalmente) no funcionará.
Pero: el signo que está buscando tiene otras características que deberían ser más fáciles de detectar:
Por lo tanto, está buscando una gran área conectada con bajo contraste. He pirateado un algoritmo de prueba de concepto en Mathematica. (No soy un experto en OpenCV, pero mencionaré la función de OpenCV correspondiente cuando los conozca).
Primero, uso filtros derivados de Gauss para detectar la magnitud del gradiente en cada píxel. El filtro derivado gaussiano tiene una apertura amplia (11x11 píxeles en este caso), por lo que es muy insensible al ruido. Luego normalizo la imagen de gradiente para que signifique = 1, de modo que pueda usar los mismos umbrales para ambas muestras.
Implementación de OpenCV: puede usar
sepFilter2D
para el filtrado real, pero aparentemente, tendrá que calcular los valores del núcleo del filtro usted mismo .El resultado se ve así:
En esta imagen, el fondo del letrero es oscuro y los bordes del letrero son brillantes. Entonces puedo binarizar esta imagen y buscar componentes conectados oscuros.
Implementación de OpenCV: los umbrales deben ser sencillos, pero creo que OpenCV no contiene análisis de componentes conectados; puede usar relleno de inundación o cvBlobsLib para eso.
Ahora, solo encuentre el blob más grande cerca del centro de la imagen y encuentre el casco convexo (simplemente he usado el blob más grande que no está conectado al fondo, pero que podría no ser suficiente para cada imagen).
Resultados:
fuente
Otro enfoque que puede adoptar y que es más robusto para los ruidos en esta situación es generar una curva del nivel de gris medio de la imagen a lo largo del eje xy a lo largo del eje y. Es decir, calcule el nivel medio de gris para cada línea / columna en la imagen.
Si, por ejemplo, el letrero (o sus bordes) es más claro que su entorno (como es el caso de todos los ejemplos que se muestran en la pregunta), tendrá dos picos en la curva del eje x (para los bordes izquierdo y derecho y los bordes ) y dos picos en la curva del eje y (para los bordes superior e inferior). Usando una técnica de detección de bordes para una señal de 1 dimensión (quizás un filtro de paso alto) puede deducir las coordenadas de las esquinas del letrero.
He visto que este enfoque se usa para detectar placas y también para el reconocimiento facial (la nariz tiende a ser la parte más brillante de la cara, por lo que genera un pico en las curvas del eje x y del eje y).
fuente
Esta podría ser una pequeña idea al revés, pero podría valer la pena probarla. En lugar de intentar detectar el rectángulo y pensar en el texto como ruido , tal vez pueda tratar el texto como información y usarlo para detectar el rectángulo más fácilmente.
Aquí está el bosquejo de la idea:
Las explicaciones y ventajas:
fuente