2012-07-29 15 views
9

Sto lavorando, usando framework OpenCV/C++, su un programma che conta fondamentalmente oggetti ellitici che possono sovrapporsi.Come filtrare i contorni fatti di cerchi sovrapposti in OpenCV

Dopo soglia l'immagine e trovare i contorni di tutti gli oggetti

Il mio prossimo passo prevede escluso oggetto che non sono fatti di sovrapposizione ellissi (io segmento i rimanenti in seguito).

I fine-up con oggetti come questi:

enter image description here

In questa immagine esempio, tutti gli oggetti destra sono negative, mentre quelle in sinistra sono validi.

Il mio filtro corrente esclude l'oggetto principalmente sul terreno del loro isoperimetric quotient. Tuttavia, poiché ho oggetti con dimensioni e rumore diversi, non sono sempre soddisfatto di questo approccio.

Idealmente, mi piacerebbe avere una metrica aggiuntiva per aumentare l'efficienza del mio filtro corrente.

Poiché devo ripetere questa analisi su molti contorni, non dovrebbe essere costoso.

ho pensato approcci come:

  • Qualcosa basato su un istogramma del valore dell'angolo tra tutti triplette di punti successivi del contorno?
  • Adattare matematicamente una "poly-ellipse" (non avrei idea di come farlo)?
  • Abbinare catene freeman?

Ma sono convinto di aver perso qualcosa di ovvio che è più efficiente e meno disordinato. Avete suggerimenti, Grazie :),

EDIT: Come Regis giustamente suggerito, qualsiasi forma potrebbe infatti essere fatto di un numero sufficiente di cerchi. Pertanto, al fine di rendere il mio problema risolvibile, vorrei aggiungere le seguenti ipotesi:

  1. Non più di 16 ellissi/oggetto.
  2. Le ellissi non possono essere piatto: asse maggiore/asse minore < 3.
  3. Da un oggetto, l'area della grande ellisse sull'area del più piccolo deve essere inferiore a 10.

risposta

2

Una possibilità sarebbe di provare:

  1. contorni di estrazione degli oggetti
  2. punti campione a spaziatura regolare lungo il contorno
  3. utilizzare questi punti per determinare la direzione a distanza regolare (esso può si consiglia di utilizzare un numero complesso per esprimere questa direzione per evitare problemi involontari)
  4. Utilizzare queste istruzioni per calcolare la curvatura a intervalli regolari
  5. Basare una metrica su questa curvatura, ad es. cercare oggetti che abbiano più dell'80% dei campioni di curvatura nell'intervallo corretto.

Il grafico vi aspettate di vedere di curvatura è una serie di valori costanti (o lentamente variabile se la forma è un'ellisse di cerchio), con discontinuità improvvise cui si passa da una zona all'altra.

Se l'immagine è disturbata, è consigliabile passare prima il filtro per i valori di curvatura.

Le forme fatte di cerchi/ellissi avranno per lo più una notevole curvatura su tutto il perimetro, mentre le forme ricavate da bordi diritti avranno parti di bassa curvatura.

+0

Rispetto a te, proverò a capirlo. Hai qualche link con cui potrei iniziare? –

0

Sospetto che qualsiasi forma possa essere creata da un insieme sufficientemente grande di ellissi sovrapposte e che si abbia un problema non ben definito tra le mani. A meno che non abbia frainteso la tua affermazione sul problema.

+0

Grazie, hai ragione, un numero sufficiente di piccoli cerchi/ellissi potrebbe effettivamente definire qualsiasi forma. Avrei dovuto aggiungere ulteriori ipotesi (che sono giuste per il mio problema) come ad esempio: 1) È molto improbabile che si osservino più di 10 cerchi sovrapposti. 2) All'interno della stessa forma, l'area dell'ellisse più piccola non sarà inferiore ad un decimo dell'area di quella più grande. –

0

Hai esaminato lo Hough-Transformations per cerchi ed ellissi? C'è anche un OpenCV implementation per cerchi disponibili. Queste trasformazioni devono essere applicate ai contorni dei tuoi oggetti.

+0

grazie, ho provato davvero, grazie: D. Per me, ha funzionato male sugli oggetti bloccati ... Ora sto studiando il seguente approccio: 1) Creazione di una libreria di campioni positivi e negativi. 2) Calcolo delle caratteristiche dalle immagini binarie. 3) Utilizzo di tecniche di apprendimento automatico per addestrare un classificatore ... –

Problemi correlati