7

Ho bisogno di estrarre TUTTI i bordi (compresi il pavimento, le intersezioni del muro e le intersezioni tra le pareti e le porte) dall'immagine seguente.Se utilizzo la rivelazione abile e la trasformazione di hough (probabilistica). Mi dà molte linee ridondanti e inutili. Stavo guardando se potevo perfezionare l'immagine astuta prima che la trasformazione di hough venisse eseguita su di essa.Estrazione di linea robusta dall'immagine

ingresso Immagine Input Image

Ciò che segue è l'immagine canny proposta dal algoritmo di rilevamento astuto
Sto usando parametri astuti come 0,20 per min e la soglia max. Non posso usare un valore molto alto per la soglia massima altrimenti perderò i bordi della parete, ma il gradiente sarà basso rispetto al resto dell'immagine.
Normal Canny Image

ho pensato di individuare un cluster ad alta densità di punti in una finestra e li azzerati se è superiore a una certa soglia.

Quanto segue è l'immagine astuta ottenuta dopo. Puoi vedere i bordi del muro sono conservati. Modified Canny Image

Qualcuno può suggerirmi un modo migliore di gestire questo problema? Intendo perfezionare l'immagine astuta in modo da poter identificare un gruppo di punti casuali e farla franca con quelli, ma impostandoli a zero. Stavo pensando di controllare i punti collineari in una finestra ma non so quanto sarebbe efficace? Qualsiasi commento sarebbe il benvenuto

risposta

7

Penso che si possano filtrare le linee più lunghe e quasi verticali, dopo aver usato la trasformazione del groviglio. Dai un'occhiata a questo link.

SimpleCV è solo una libreria di collegamenti che include le funzioni OpenCV, non è necessario utilizzarlo. Non penso che incontrerai problemi nell'implementazione dell'algoritmo dopo aver ricevuto l'idea.

Modifica: Ok, ho pensato di più al tuo problema. Impostare i cluster a zero come un passo di pre-elaborazione non è male in realtà. Cosa ne pensi di aumentare le dimensioni della finestra passo dopo passo? Voglio dire, dopo aver ottenuto la seconda immagine, applicare un altro filtro cluster con 2 * dimensioni della finestra, stessa soglia. Penso che tu possa andare avanti così, dato che i bordi del muro sono difficili da cancellare.

Un altro modo, utilizzare una finestra rettangolare (larghezza> = 5 * altezza) per il filtro del cluster in quanto sono necessari i bordi verticali.

Un altro modo, giocare con l'erosione e la dilatazione e filtrare i blob che hanno una vasta area.

Un altro modo, controlla la parte superiore dell'immagine, ci sono solo i bordi della parete e il lampadario. È possibile cercare in orizzontale per un motivo bianco, quindi seguire i suoi vicini per specificare la lunghezza dei punti collegati. Quindi filtra quelli più lunghi.

+0

Non voglio nemmeno perdere l'intersezione tra muro e pavimento. e l'algoritmo dovrebbe essere un po 'generico su tutte le immagini delle stanze –

+0

perché non pensi al semplice rilevamento del colore della parete? ottieni wall HSV dall'angolo superiore sinistro o destro, quindi filtra i pixel con la differenza di tonalità> qualche soglia. Quindi il filtro passa-basso (sfocatura gaussiana) o la dilatazione dell'immagine dovrebbero funzionare bene. – baci

+0

disomogeneo ai limiti = ecco perché dovresti dilatare + erodere, morfologicamente vicino. colori diversi = non è un problema finché si prende il colore dall'angolo dell'immagine. condizioni di lampo = equalizzazione dell'istogramma. Questo è tutto ciò che ho qui :) – baci