Salve CV / Pattern Recognition Community,
Ho un problema serio riguardo alla segmentazione di un'immagine. Lo scenario è un'atmosfera all'interno di una fornace che mi fa impazzire la testa. E ho bisogno di rilevare i contorni degli oggetti di diversi materiali (vetro, ceramica, Al, Ir, ..) in un breve periodo di tempo (<10 secondi) e non solo per un caso speciale. Ho anche bisogno del contorno in una fila sequenziale di pixel per il codice. Pertanto è necessario anche un codice catena o il cosiddetto seguito di bordo / contorno, quindi i fori aperti non sono buoni. Sullo sfondo ci sono rumori non lineari, approssimativamente di polvere, particelle o qualcosa del genere, che appaiono di volta in volta.
Suggerimenti Matlab o OpenCV sono benvenuti.
Per renderlo più chiaro, ho pubblicato un'altra immagine del mio obiettivo e un oggetto semitrasparente, che deve anche essere rilevato. Ulteriori esempi di cui è necessario essere consapevoli.
Come puoi vedere nell'immagine n. 1, ci sono particelle nella parte destra dell'immagine e vicino al contorno esterno della stella, che è l'oggetto. Anche il contrasto complessivo non è molto buono. L'oggetto stesso si trova su un sottosuolo, che non è rilevante per il rilevamento del contorno. L'immagine n. 2 mostra un oggetto semitrasparente, che è anche possibile.
Voglio trovare il contorno / perimetro di quell'oggetto, come nella schermata successiva (linea rossa). I due rettangoli (gialli) indicano il punto iniziale (a sinistra) e il punto finale (a destra). La linea blu è ignorabile.
All'inizio ho pensato di poter risolvere il problema di quell'atmosfera sporca con solo filtri. Ma dopo un'onorevole quantità di tempo investito, mi sono appena reso conto che devo eliminare o ridurre significativamente i rumori per aumentare il contrasto tra primo piano e sfondo. Avevo provato molti metodi, come l'equalizzazione dell'istogramma, l'equalizzazione adattativa Otsu, i filtri lineari (ad es. Gauss), i filtri non lineari (mediana, diffusione), i contorni attivi, i mezzi k, i fuzzy-c e anche i Canny per puro Edge Detection in combinazione con operatori morfologici.
- Canny: le particelle e l'atmosfera stanno causando buchi, ma ho bisogno di un contorno completo dell'oggetto. Ancora con la chiusura, la dilatazione degli operatori morfologici non è abbastanza bene. Canny ha ancora i migliori risultati di tutti i metodi che ho studiato a causa dell'isteresi.
- Contorni attivi: funzionano anche su bordi / gradienti, agiscono completamente in modo folle dopo l'inizializzazione all'interno dell'oggetto, che forse è causata dalla mappa dei bordi risultante nell'oggetto 'aperto'. Per quanto ne so, il contorno deve essere chiuso. Provato con diversi derivati (GVF / VFC / Classic Snake).
- Mezzi k: i risultati includono l'atmosfera della fornace, a causa dello sfondo nebbioso. Lo stesso per fuzzy-c-significa. Ho scelto due cluster, a causa della separazione dell'oggetto dallo sfondo. Più cluster portano a risultati più deboli.
- Istogramma / Otsu: a causa dell'intensità grigia molto vicina (imho!), Sta fondendo l'oggetto con lo sfondo. Provato con metodi locali e globali.
- Filtri: Soprattutto GLPF o altri LPF stanno imbrattando i bordi, il che non è così buono e non riduce nemmeno l'atmosfera nebbiosa.
- I filtri non lineari preservano i bordi. La maggior parte impiega troppo tempo per calcolare le immagini di grandi dimensioni. Ho preso un filtro bilaterale veloce per ora. I risultati vedi sotto.
Pertanto, non un singolo metodo è abbastanza buono per le fasi di post-elaborazione, poiché i risultati ottenuti del segmento di oggetti sono in scarsa concorrenza con un algoritmo esistente. L'algoritmo esistente è molto locale e quindi funziona per questo scenario molto speciale.
Quindi ti sto chiedendo se ho perso qualcosa completamente ... Non ho più idea di come elaborare e come dovrei ottenere buoni risultati di contorno, senza buchi o buchi .. È possibile senza apportare molte modifiche al CCD e ambiente fisico? Grazie in anticipo!
Last Approach finora (dopo una lunga notte di esperimenti con MO):
- Filtro bilaterale (preservando i bordi, ma levigando le aree omogenee)
- Canny (Sigma = 2, Soglia = [0,04 0,08])
- Morfologica Operations (MO):
bwareopen
,closing
,remove
&bridge
bwlabel
per selezionare solo il perimetro del contorno, che rimuove i rumori indesiderati. non sono ancora presenti schermate aggiornate, ma funziona per la stella. il vetro ha un contorno interno che è collegato al contorno esterno, che può anche essere visto nella schermata qui sotto.
Quindi temo di aver bisogno di un algoritmo speciale per l'attraversamento del contorno esterno. Sarà una ricerca del vicinato in senso orario / antiorario. Questo passaggio in senso orario / antiorario può cambiare, se c'è un punto d'angolo. se c'è un divario, aumentare il raggio e guardare di nuovo. se ci sono due o più possibili punti seguenti, prendi quello che ha ottenuto la stessa direzione del precedente. Pensi che il profilo che segue l'algoritmo abbia un senso?