Hallo CV / Pattern Recognition Community,
Ich habe ein ernstes Problem mit der Segmentierung eines Bildes. Das Szenario ist eine Atmosphäre in einem Ofen, die meinen Kopf verrückt macht. Und ich muss Objektkonturen aus verschiedenen Materialien (Glas, Keramik, Al, Ir, ..) in kurzer Zeit (<10 Sekunden) und nicht nur für einen Sonderfall erkennen. Ich brauche auch die Kontur in einer sequentiellen Reihe von Pixeln für den Code. Daher wird auch ein Kettencode oder ein sogenanntes Border / Contour-Follower benötigt, sodass offene Löcher nicht gut sind. Im Hintergrund treten von Zeit zu Zeit nichtlineare Geräusche auf, etwa von Staub, Partikeln oder Ähnlichem.
Matlab- oder OpenCV-Vorschläge sind willkommen.
Um es klarer zu machen, habe ich ein weiteres Bild meines Ziels und ein halbtransparentes Objekt gepostet, das ebenfalls erkannt werden muss. Auch weitere Beispiele, die es zu beachten gilt.
Wie Sie in Bild 1 sehen können, befinden sich Partikel im rechten Teil des Bildes und in der Nähe der Außenkontur des Sterns, bei dem es sich um das Objekt handelt. Auch der Gesamtkontrast ist nicht sehr gut. Das Objekt selbst steht auf einem Untergrund, der für die Konturerfassung nicht relevant ist. Das Bild # 2 zeigt ein halbtransparentes Objekt, was auch möglich ist.
Ich möchte die Kontur / den Umfang dieses Objekts finden, wie auf dem nächsten Bildschirm (rote Linie). Die beiden Rechtecke (gelb) markieren den Start- (links) und Endpunkt (rechts). Die blaue Linie ist ignorierbar.
Zuerst dachte ich, ich könnte das Problem dieser schmutzigen Atmosphäre mit nur Filtern lösen. Aber nach einer beachtlichen Menge an Zeit wurde mir klar, dass ich die Geräusche deutlich reduzieren oder eliminieren muss, um den Kontrast zwischen Vordergrund und Hintergrund zu erhöhen. Ich habe viele Methoden ausprobiert, wie Histogramm-Entzerrung, Otsu-adaptive Entzerrung, lineare Filter (z. B. Gauß), nichtlineare Filter (Median, Diffusion), aktive Konturen, k-Mittelwerte, Fuzzy-c-Mittelwerte und auch Canny for pure Kantenerkennung in Kombination mit morphologischen Operatoren.
- Canny: Die Partikel und die Atmosphäre verursachen Löcher, aber ich brauche eine vollständige Kontur des Objekts. Trotzdem reicht es nicht aus, die morphologischen Operatoren zu schließen und zu erweitern. Canny hat immer noch die besten Ergebnisse von allen Methoden, die ich wegen Hysterese studiert habe.
- Aktive Konturen: Sie arbeiten auch an Kanten / Verläufen, sie verhalten sich nach der Initialisierung innerhalb des Objekts völlig verrückt, was möglicherweise durch die Kantenabbildung verursacht wird, die zum "offenen" Objekt führt. Soweit ich weiß, muss die Kontur geschlossen werden. Versuchte es mit verschiedenen Derivaten (GVF / VFC / Classic Snake).
- k-Means: Die Ergebnisse beinhalten die Ofenatmosphäre aufgrund des nebligen Hintergrunds. Gleiches gilt für Fuzzy-C-Mittel. Ich habe zwei Cluster ausgewählt, um das Objekt vom Hintergrund zu trennen. Mehr Cluster führen zu schwächeren Ergebnissen.
- Histogramm / Otsu: Aufgrund der sehr engen Grauintensität (imho!) Verschmilzt das Objekt mit dem Hintergrund. Versuchte es mit lokalen und globalen Methoden.
- Filter: Besonders GLPF oder andere LPF verschmieren die Ränder, was nicht so gut ist und nicht einmal die Nebelatmosphäre mindert.
- Nichtlineare Filter erhalten die Kanten. Die meisten von ihnen brauchen zu lange, um die großen Bilder zu berechnen. Ich habe vorerst einen schnellen bilateralen Filter genommen. Ergebnisse siehe unten.
Daher ist keine einzige Methode für Nachbearbeitungsschritte gut genug, da die gewonnenen Ergebnisse des Objektsegments schlecht mit einem vorhandenen Algorithmus konkurrieren. Dieser vorhandene Algorithmus ist sehr lokal und funktioniert daher für dieses spezielle Szenario.
Ich frage Sie also, ob ich etwas völlig verpasst habe ... Ich habe keine Ahnung, wie ich es verarbeiten soll und wie ich gute Konturergebnisse erzielen soll, ohne Lücken oder Löcher zu haben CCD und die physische Umgebung? Danke im Voraus!
Letzter Ansatz bisher (nach einer langen Nacht voller Experimente mit MOs):
- Bilateraler Filter (kantenerhaltende, aber homogene Bereiche glättende)
- Canny (Sigma = 2, Threshold = [0.04 0.08])
- Morphologische Operationen (MO):
bwareopen
,closing
,remove
&bridge
bwlabel
Zum Auswählen nur des Umfangs der Kontur, wodurch unerwünschte Geräusche entfernt werden. Noch keine aktualisierten Screenshots, aber es funktioniert für den Star. Das Glas hat eine Innenkontur, die mit der Außenkontur verbunden ist. Dies ist auch auf dem folgenden Screenshot zu sehen.
Ich fürchte also, ich brauche einen speziellen Algorithmus zum Durchlaufen der Außenkontur. Es wird eine Suche im / gegen den Uhrzeigersinn der Nachbarschaft sein. Dieser Schritt im / gegen den Uhrzeigersinn kann wechseln, wenn es einen Eckpunkt gibt. Wenn es eine Lücke gibt, vergrößern Sie den Radius und schauen Sie erneut. Wenn es zwei oder mehr mögliche folgende Punkte gibt, nehmen Sie denjenigen, der dieselbe Richtung wie der vorherige hat. Denken Sie, dass der Konturfolgealgorithmus Sinn macht?