Hier ist eine Frage für Bildverarbeitungsexperten.
Ich arbeite an einem schwierigen Bildverarbeitungsproblem. Die Aufgabe besteht darin, die Stomata (unten markiert) in DIC-Mikroskopbildern zu zählen. Diese Bilder sind gegenüber den meisten oberflächlichen Bildverarbeitungstechniken wie morphologischen Operationen und Kantenerkennung beständig. Es unterscheidet sich auch von anderen Aufgaben zum Zählen von Zellen.
Ich benutze OpenCV. Mein Plan ist es, potenziell nützliche Funktionen für die Stomata-Diskriminierung zu überprüfen.
- Texturklassifizierer
- DCT (Diskrete Cosinustransformation / Frequenzbereichsanalyse)
- LBP (Local Binary Patterns)
- HOG (Histogramm orientierter Farbverläufe)
- Robuste Feature-Detektoren (Ich bin skeptisch)
- Harris Ecken
- SIEBEN, SURFEN, STERNEN usw.
- Haar-Kaskadenklassierer / Viola-Jones-Merkmale
Und möglicherweise einen neuartigen Feature-Deskriptor entwerfen. Ich lasse die Auswahl eines Klassifikators vorerst aus.
Was habe ich vermisst? Wie würden Sie das lösen? Lösungen für ähnliche Objekterkennungsprobleme wären sehr hilfreich.
Beispielbilder hier .
Nach dem Bandpassfilter:
Canny Edge Detection ist nicht vielversprechend. Einige Bildbereiche sind unscharf:
quelle
Antworten:
Leider kenne ich OpenCV nicht und dies ist eher ein Vorverarbeitungsschritt als eine vollständige Antwort:
Erstens möchten Sie keinen Kantendetektor. Ein Kantendetektor konvertiert Übergänge (wie diese von Dunkel nach Hell):
in Grate (helle Linien auf dunkel) wie folgt:
Es führt also eine Differenzierung durch.
In Ihren Bildern scheint jedoch ein Licht aus einer Richtung nach unten, das uns das Relief der 3D-Oberfläche zeigt. Wir nehmen dies als Linien und Kanten wahr, da wir es gewohnt sind, Dinge in 3D zu sehen, dies ist jedoch nicht der Fall, weshalb Kantendetektoren nicht funktionieren und der Vorlagenabgleich bei gedrehten Bildern nicht einfach funktioniert (perfekt) Eine Übereinstimmung bei einer Drehung um 0 Grad würde sich tatsächlich bei 180 Grad vollständig aufheben, da Licht und Dunkelheit in einer Linie zueinander liegen würden.
Wenn die Höhe einer dieser mazy lines von der Seite so aussieht:
dann sieht die Helligkeitsfunktion bei einseitiger Beleuchtung so aus:
Das sehen Sie in Ihren Bildern. Die zugewandte Fläche wird heller und die nachlaufende Fläche dunkler. Sie wollen also nicht differenzieren. Sie müssen sich integrieren das Bild entlang der Richtung der Beleuchtung, und es wird Ihnen die ursprüngliche Höhe Karte der Oberfläche (ungefähr) geben. Dann ist es einfacher, Dinge abzugleichen, ob durch Hough-Transformation oder Template-Matching oder was auch immer.
Ich bin mir nicht sicher, wie ich das Ermitteln der Beleuchtungsrichtung automatisieren soll. Wenn es für alle Ihre Bilder gleich ist, ist es großartig. Andernfalls müssten Sie die größte Kontrastlinie finden und davon ausgehen, dass das Licht senkrecht dazu ist oder so. In meinem Beispiel habe ich das Bild manuell in die richtige Richtung gedreht, wobei das Licht von links kommt:
Sie müssen jedoch auch alle niederfrequenten Änderungen im Bild entfernen, um nur die sich schnell ändernden linienartigen Funktionen hervorzuheben. Um Ringing-Artefakte zu vermeiden, habe ich 2D-Gauß-Unschärfe verwendet und diese dann vom Original subtrahiert:
Die Integration (kumulative Summe) kann leicht durchgehen, was horizontale Streifen erzeugt. Ich habe diese mit einem anderen Gaußschen Hochpass entfernt, diesmal jedoch nur in horizontaler Richtung:
Jetzt sind die Stomata ringsum weiße Ellipsen, statt an einigen Stellen weiß und an anderen schwarz.
Original:
Integriert:
Die Hough-Transformation kann verwendet werden, um Ridge-Ellipsen wie diese zu erkennen, die aus "Randpixeln" bestehen. Sie sind jedoch sehr rechen- und speicherintensiv und keine perfekten Ellipsen. Es müsste sich also um einen etwas "schlampigen" Detektor handeln. Ich habe es noch nie gemacht, aber es gibt viele Google-Ergebnisse für " Hough Ellipse Detection ". Ich würde sagen, wenn Sie eine Ellipse in der anderen innerhalb eines bestimmten Suchraums erkennen, sollte diese als Stoma gezählt werden.
Siehe auch:
quelle
Das erste, was ich versuchen würde, ist das Anpassen von Vorlagen, wobei die Vorlagen für alle Winkel mit einem Schritt gedreht werden. Drehschablone unbedingt dabei. Auch die Wahl der Vorlage kann nicht trivial sein - es können mehrere mit unterschiedlicher Beleuchtung sein, und es kann unscharf sein, um Unterschiede in den Formen zu berücksichtigen.
http://en.wikipedia.org/wiki/Template_matching#Template-based_matching_and_convolution
Weiter - HOG sieht hier vielversprechend aus. Eine andere Lösung könnte darin bestehen, einen starken Eckendetektor wie Moravec oder Shi-Tomasi (mit nicht maximaler Unterdrückung) zu verwenden und nach Gruppen von 2 Ecken oder 3-4 Ecken auf derselben Linie wie die Kandidaten zu suchen. Nachdem Sie Kandidaten gefunden haben, können Sie eine aktive Kontur zur Überprüfung anwenden (nicht sicher, ob dies wirklich helfen würde, aber das ist möglich).
http://en.wikipedia.org/wiki/Corner_detector
http://en.wikipedia.org/wiki/Active_contour
Eine weitere Möglichkeit ist die Verwendung der Hough-Transformation für Ellipsen, möglicherweise mit nicht 2, sondern 3-4 freien Parametern.
quelle
Teilweise Antwort. Kandidaten mit Mathematica finden:
quelle
Ich würde mit einem Detektor für empfindliche Kanten (z. B. Gradientengröße mit niedriger Schwelle) beginnen und dann mit der Hough-Transformation versuchen, die Ellipsen zu finden. Canny könnte auch noch funktionieren. Ich bin sicher, es gibt Parameter, die Sie optimieren können, um die Empfindlichkeit zu erhöhen und die unscharfen Kanten zu erkennen.
quelle