Alternativas a la transformación de Hough para detectar una estructura similar a una cuadrícula


16

Tengo una imagen que se compone de múltiples 'ángulos' que forman una forma de cuadrícula:

ingrese la descripción de la imagen aquí

Después de buscar un poco, Hough parecía encajar bien, porque no le molestan los saltos de línea. Sin embargo, el problema que tengo es que mis líneas son 'gruesas', y cualquier detección de bordes que ejecuto (Canny en este caso), selecciona los bordes de la línea y no el medio:

ingrese la descripción de la imagen aquí

Esto significa que la transformación de Hough termina seleccionando uno (o ambos) de los 'lados' de mis líneas de cuadrícula, y no el medio.

ingrese la descripción de la imagen aquí

Dado que sé lo que estoy buscando (esta forma de cuadrícula, siempre en aproximadamente la misma orientación), ¿hay una mejor manera de realizar la parte de 'detección de bordes' para darme las líneas centrales, o debería estar buscando? en un método totalmente diferente?


Por contexto, esta cuadrícula se comparará con una cuadrícula nominal para realizar la calibración de la cámara Tsai.
Benjol

"detección de bordes que ejecuto, selecciona los bordes de la línea" Sí, porque la detección de bordes convierte los bordes en aristas, y su imagen ya es aristas. Un borde es un límite entre la luz y la oscuridad.
endolito el

Respuestas:


10

La Transformación Hough de hecho ayudaría a recoger la Grilla en este caso. Para "adelgazar" las líneas, es posible que desee considerar la operación de esqueletización

Eso produciría una imagen como esta: Salida de esqueletización

Debido a la forma en que funciona la esqueletización, seguirá produciendo algunas líneas que parecerán irrelevantes para la cuadrícula, pero estas líneas hacia direcciones "erróneas" no son tantas (al menos en la imagen dada) para confundir la detección de línea de la Transformada de Hough demasiado y claramente seleccionará los dos conjuntos principales de líneas en direcciones distintas. (Así es como se ve la salida HT:) ingrese la descripción de la imagen aquí

Si está utilizando MATLAB, puede consultar esta página de ayuda


¡Gracias! Esto ayuda mucho. Todavía no tengo mi licencia de MATLAB, pero la probé usando SimpleSkeletonization de AForge, y funciona mejor ... Aunque todavía no es perfecto. Revisaré este tema más tarde cuando obtenga algunos datos reales para probarlo.
Benjol

Es posible que desee probar el umbral de su imagen original primero en algún umbral que parece estar produciendo líneas de cuadrícula gruesas "óptimas". Lo que quiero decir con óptimo es que al menos están conectados. Eso podría mejorar el rendimiento de la esqueletización, pero tendría un parámetro adicional para determinar (el umbral). Quizás también valga la pena estudiar cómo mejorar la adquisición de imágenes.
A_A

sí, como dije, cuando tenga los datos reales para jugar, valdrá la pena ajustar el sistema. Una duda importante que tengo sobre Hough en general es que la discretización de theta va a funcionar en contra de la precisión de subpíxeles que necesitamos. (Eso, y no estoy completamente convencido de que las aberraciones de la lente no signifiquen que las líneas podrían ser curvas, no rectas ...)
Benjol

11

Una alternativa a la Transformación de Hough sería la Transformación de Radón ( 1 , 2 ). Una descripción aproximada de un algoritmo para detectar una estructura similar a una cuadrícula podría verse así:

1. Perform Radon Transform from 0 to 180 degrees.
2. Find the two highest maxima in the angle bins.
3. For the two angles with maximal amplitude find the local maxima within the bin.
4. You can use the constraint that the maxima should have even spacing to deal with outliers.

EDITAR :

Aquí hay un pequeño fragmento de matlab para ilustrar los pasos 1-3:

im = imread('grid.png');
[R, xp] = radon(im, 0:180);
imagesc(0:180, xp, R)

Resultado de la transformación de radón

plot(max(R)) % the two maxima are at 65 & 117 degrees

Máxima sobre todos los ángulos

plot(R(:, 65))

Máxima a 65 grados

plot(R(:,117))

Máxima a 117 grados

Para responder a su pregunta de los comentarios: Me parece a partir de la imagen de ejemplo que proporcionó, que este método es más robusto contra pequeños defectos en la cuadrícula detectada. Los esqueletos rara vez producirán líneas rectas, lo que podría ser una desventaja para la Transformación de Hough posterior.


Gracias, ¿podría decirme en pocas palabras qué ventaja esperaría que me proporcionara la Transformación de radón, en comparación con la Transformada de Hough?
Benjol

@benjol, actualicé mi respuesta.
bjoernz

Muy bien, muchas gracias. Una vez que me dé acceso a Matlab, ¡lo intentaré!
Benjol

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.