Trova una linea specifica in una foto


9

Voglio trovare la linea tra il colore blu e il colore grigio nella seguente immagine:

inserisci qui la descrizione dell'immagine

Più esattamente, i punti finali di quella linea.

La trasformazione di Hough è una scelta? Se sì, come devo impostare l'immagine prima di utilizzare Hough?

Qualsiasi modo di risolvere questo sarebbe utile.


Effettua un rilevamento dei bordi prima della trasformazione di Hough. Trasformerà quella transizione in una linea luminosa con il nero su entrambi i lati
endolito il

Risposte:


10

In generale, si desidera un rilevatore di bordi, come il rilevatore di bordi Canny, per questo tipo di problema. La trasformazione di Hough è utile per l'estrazione di linee anziché di bordi.

Tuttavia, in questo caso specifico, è meglio fare qualcosa del tipo:

imdata = imread('grayblue.jpg');
colidx = find(diff(imdata(1,:) ~= 0);

dal momento che è un'immagine così semplice.


0

Per un'immagine così semplice un kernel di convoluzione come il seguente troverà bene i bordi:

[-1 2 - 1]

Ciò produce un singolo pixel del bordo in ciascun punto del bordo. Niente storie, niente storie. Canny è troppo coinvolto per questo problema. Se vuoi trovare punti di spigolo per le linee in qualsiasi angolo, puoi usare un semplice Laplaciano, Laplaciano di Gaussiano (LoG) o Differenza di Gaussiano (DoG). Anche Sobel e Prewitt sono semplici ma inappropriati poiché producono una linea a "doppio spessore".

C'è un'implementazione veloce e malvagia di Hough qui descritta: http://www.ic.uff.br/~laffernandes/projects/kht/index.html

Esistono anche algoritmi "senza parametri Hough" che sono molto veloci, ma un po 'difficili da implementare e eseguire il debug.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.