Verschiedene Komponenten erkennen:
Wenn Sie versuchen, die verschiedenen Komponenten zu erkennen, gibt es wahrscheinlich andere Ansätze, als die Konturen zu erkennen. Hier ist ein Beispiel in Mathematica. Eine Erosion gefolgt von einer Erweiterung wird verwendet, um die Lücke in der zweiten Komponente vor der Erkennung zu schließen (wenn Sie dies nicht tun, wird sie nicht erkannt).
img = Binarize@Import["http://i.stack.imgur.com/yqDyu.png"];
Colorize[MorphologicalComponents[Dilation[Erosion[img,1],1]]]
Die Abbildung links unten zeigt die Erkennung unvollständiger Objekte (ohne die Lücke zu schließen) und rechts die korrekte Erkennung (unter Ausführung des obigen Codes).
Erkennen der verschiedenen Konturen:
Wenn Sie jedoch in der Tat nur die Konturen trennen möchten, finden Sie hier ein Beispiel. Die Erosion und Dilatation werden wie zuvor durchgeführt, um die Lücke zu schließen, und das resultierende Bild wird durch einen Canny-Kantendetektor geführt. Ich habe die Standardoptionen explizit festgelegt, damit Sie sehen können, was verwendet wird.
img2 = EdgeDetect[Dilation[Erosion[img, 1], 1], Method -> "Canny"]
Dadurch erhalten Sie sowohl die Innen- als auch die Außenkante (siehe Abbildung links unten), da die Pixelbreite umlaufend größer als 1 ist. Ich hatte nicht viel Glück, als ich versuchte, es dünner zu machen, da sich die Leistung verschlechtert (kann für Ihre anderen Bilder unterschiedlich sein). Die inneren Konturen sind diejenigen, die Sie möchten, und die äußere Kontur ist nur die kombinierte Kontur aller 4 Komponenten. Jetzt müssen wir nur noch den äußersten fallen lassen mit:
SelectComponents[img2, "EnclosingComponentCount", # > 0 &]
Das gibt Ihnen nur die inneren Konturen (siehe unten rechts). Mit anderen Worten, es werden nur die Konturen ausgewählt, die von mindestens einer anderen Kontur umschlossen sind, wodurch die äußerste automatisch disqualifiziert wird. Ich kenne das Äquivalent dieser Befehle / Operationen in openCV nicht.
Beachten Sie, dass die offensichtlichen Unterbrechungen in der Abbildung auf das Speichern von JPEG in einer kleineren Größe zurückzuführen sind. Auf meinem Bildschirm sieht es nicht so aus.