2011-06-30 7 views
6

Después de ejecutar Canny Edge Detector en una imagen obtengo líneas claras. Pero la función de línea Hough parece faltar en líneas bastante prominentes cuando se ejecuta en la imagen de mapa de bordes de Canny. Mantengo solo líneas Hough verticales y horizontales (una tolerancia de 15 grados). Se están preparando muchas líneas adicionales, pero las líneas claramente visibles que delimitan los rectángulos no se recogen.Líneas prominentes no detectadas por Hough Transform

Aquí está el fragmento:

cvCanny(img, canny, 0, 100, 3); 
lines = cvHoughLines2(canny, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 35, 20, 10); 

La intención principal es detectar las cajas rectangulares que denotan los nodos de la lista enlazada. Sin embargo, el programa de ejemplo squares.c detectará solo rectángulos perfectos, no si una punta de flecha está tocando el límite del rectángulo.

¿Podría explicar el tipo de cambios en la función de la línea Hough que me ayudarán a obtener líneas correspondientes a líneas claramente visibles en la imagen de borde Canny?

hough

+2

Nuevamente, por quinta vez esta semana: las funciones de procesamiento de imágenes consisten en utilizar los parámetros correctos. Juega con los parámetros que estás pasando a cvHoughLines2() hasta que encuentres un conjunto de parámetros que satisfagan tus necesidades. – karlphillip

Respuesta

9

(Agregado:. Un paso de procesamiento previo, sugerida por shernshiou)

pasos de preprocesamiento:

  1. umbralización de la imagen,
  2. Uso conectada componentes
  3. Desde el resultados de componentes conectados, detectar y eliminar los objetos pequeños: los conjuntos de cuatro dígitos a continuación y en el medio de cada caja.

(Nota. El paso de umbral es simplemente un paso de procesamiento previo requerido por-componente conectado.)


Si desea detectar líneas sólo es perfectamente horizontales y verticales, mi sugerencia es llevar a cabo mejora del borde horizontal y vertical (mediante convolución) antes de la transformación Hough.

Esto hará que las líneas verdaderas sean más propensas a "pico" en la proyección Hough, y aumenta la posibilidad de que la línea sea captada por OpenCV.

Los pasos serían:

  1. Compute imagen de bordes de Canny de entrada
  2. Aplicar el filtrado de Sobel horizontal imagen de bordes de Canny
  3. en Aplicar detección línea Hough imagen de bordes mejorada horizontalmente sobre.
  4. Aplicar filtro vertical Sobel en Canny edge image. (Nota: utilice el resultado del paso 1, no el paso 2)
  5. Aplique la detección de línea Hough en la imagen de borde mejorada verticalmente.
  6. Combina las líneas horizontales y verticales y presenta el resultado.
1

la gente normalmente no utilizan la línea recta Hough lejos de la caja. La práctica normal implica el procesamiento previo de la imagen (por ejemplo, cambiar la luminancia, cambiar el color, mejorar la nitidez de la imagen ...).

+0

Gracias, me recordó los dos pasos que se pueden agregar a las sugerencias: umbralizar la imagen, y luego usar el componente conectado para detectar las letras pequeñas (dígitos) y eliminarlas antes de realizar Hough, lo que reduciría el ruido. – rwong

6

Has leído the documentation ¿o sí?

que tienen algunas opciones para usted:

  1. Las líneas que se pierda (en particular la línea vertical más a la izquierda en el cuadro de la derecha en la imagen) son más bien corto. Intente bajar el umbral (quinta variable de entrada de cvHoughLines2). Este umbral es solo el número de píxeles que debe estar en la línea. A partir de la imagen, supongo que realmente hay menos de 35 píxeles en las líneas que extrañas.
  2. La sexta variable de entrada indica la longitud mínima de línea. Supongo que se trata de píxeles, por lo que con el quinto parámetro necesita 35 píxeles en la línea, sin embargo, busca líneas de 20 píxeles o más. La forma en que configuras esta variable no es funcional. Baje la 5ta variable, suba esta si encuentra muchas líneas cortas inútiles.
  3. Baje el 7mo parámetro para no permitir huecos grandes en sus líneas. Esto eliminará algunas de las líneas inclinadas.

En resumen, intentarlo de nuevo con diferentes valores para los parámetros de 5,6 y 7.

que iba a tratar algunos valores inferiores de los parámetros 5 y 7, y un valor similar o ligeramente superior para 6. Debido a 2 sobre 5, siempre debe ser menor o igual a 6 para tener un efecto. 7 debería al menos igualar la diferencia entre 5 y 6 si 5 es menor.

Cuestiones relacionadas