2013-01-17 22 views
5

Ciao, ho un problema con il poligono. Non so cosa cercare quindi ho deciso di chiedere qui. L'immagine sotto mostra una forma semplice. I contorni vengono rilevati con OpenCV findContours() e approssimati dal algoritmo CV_CHAIN_APPROX_TC89_KCOS (per coloro che vogliono sapere come è fatto), in modo che tutti i punti di una riga siano riassunti in una singola riga. Ad ogni modo alcuni contorni contengono una sorta di, lo chiamo rumore, nella forma. L'immagine sotto mostra cosa si intende con rumore. La linea rossa è il contorno. (Spiacente, non MS Paint competenze)Approssimazione del contorno contenente punti non desiderati

enter image description here

Il mio obiettivo è quello di ridefinire la forma di approssimare la forma, ma lasciare fuori questo "rumore". Quindi il contorno dovrebbe assomigliare a questo. La linea blu mostra il contorno corretto.

enter image description here

+0

Hai controllato [cv :: approxPolyDP] (http://opencv.willowgarage.com/documentation/cpp/structural_analysis_and_shape_descriptors.html#cv-approxpolydp)? Sembra che stia facendo quello che stai cercando di ottenere. Se hai angoli ripidi potresti dover applicare la funzione parzialmente e non all'intero poligono alla volta. –

+0

Farò un tentativo. Darò un feedback in pochi minuti –

+0

Beh, non c'è fortuna con cv :: approxPolyDP –

risposta

4
  1. tentare di rilevare angoli con ... cvGoodFeatuersToTrack() .... ma hanno un criterio che gli angoli devono essere separati da una buona quantità di distanza ... se angoli formano un cluster loro scartare.
  2. Dall'elenco di punti nel contorno ... selezionare il punto con (x più alto, più alto y), (x più alto, y minore), (x più basso, y più alto) e (più basso x, più basso y) .... ora unirsi a questi quattro punti ...
  3. Se si dispone di 'rumore' agli angoli si quindi provare a rilevare le linee rette nell'immagine utilizzando della trasformata di Hough ...
+0

Sembra abbastanza utile, ma cosa succede se il mio poligono non è un semplice rettangolo; qualcosa come un poligono a forma di L? (Aggiornerò rapidamente la mia domanda) –

+0

Qual è la possibilità che tu possa avere 'rumore' negli angoli di 90 gradi? –

+0

Vicino a zero. BTW ottimo approccio alla ricerca di cluster! +1 –

1

posso proporre un altro approccio:

1) È possibile utilizzare Hough Line Transform per rilevare linee sull'immagine (prima di utilizzare Canny per rilevare contorni). Non è possibile prendere in considerazione piccole righe utilizzando una soglia piuttosto grande (il numero minimo di intersezioni per "rilevare" una linea) nel metodo HoughLinesP.

2) Dopo aver trovato tutte le linee è possibile trovare la loro intersezione come è descritto here da @DanielHsH. Quindi sarai in grado di trovare tutti gli angoli.

Problemi correlati