Finden Sie die Stomata in einem pflanzenmikroskopischen Bild


26

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 .

Stomata

Nach dem Bandpassfilter: Bandpass gefiltert

Canny Edge Detection ist nicht vielversprechend. Einige Bildbereiche sind unscharf: knifflige Kantenerkennung


1
Vielleicht könnten Sie versuchen, die mazy lines zu entfernen, anstatt zu versuchen, die Stomata zu finden?
Endolith

1
Wie viele Bilder müssen Sie verarbeiten? Wie schnell muss es sein? Wie automatisiert muss es sein?
Endolith

1
Es muss nicht sehr schnell sein. Wir verarbeiten in der Größenordnung von 1000 Bildern. Es sollte automatisch sein - Bilder in ein Verzeichnis speichern und loslegen.
Matt M.

Antworten:


15

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:

    ____ ∧v ____

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:

Original gedreht

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:

hochpassgefiltert

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:

Ausgabe

Jetzt sind die Stomata ringsum weiße Ellipsen, statt an einigen Stellen weiß und an anderen schwarz.

Original:

Bildbeschreibung hier eingeben

Integriert:

Bildbeschreibung hier eingeben

from pylab import *
import Image
from scipy.ndimage import gaussian_filter, gaussian_filter1d

filename = 'rotated_sample.jpg'
I = Image.open(filename).convert('L')
I = asarray(I)

# Remove DC offset
I = I - average(I)

close('all')
figure()
imshow(I)
gray()
show()
title('Original')

# Remove slowly-varying features
sigma_2d = 2
I = I - gaussian_filter(I, sigma_2d)

figure()
imshow(I)
title('2D filtered with %s' % sigma_2d)

# Integrate
summed = cumsum(I, 1)

# Remove slowly-changing streaks in horizontal direction
sigma_1d = 5
output = summed - gaussian_filter1d(summed, sigma_1d, axis=1)

figure()
imshow(output)
title('1D filtered with %s' % sigma_1d)

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:


PS Hat was ich hier gemacht habe einen Namen? Ist es ein üblicher Filtertyp?
Endolith

1
+1 - Tolle Antwort! Informationen zur Automatisierung des Lichtquellenwinkels - Sie können einen Kantendetektor verwenden, der sowohl die Größe als auch den Gradienten berechnet und dann den gewichteten (mag.) Durchschnitt des Gradienten berechnet. Die stärksten Reaktionen sollten in Richtung der Beleuchtung erfolgen.
Andrey Rubshtein

11

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.


7

Teilweise Antwort. Kandidaten mit Mathematica finden:

p = ColorConvert[Import@"http://i.stack.imgur.com/38Ysw.jpg", 
    "GrayScale"] // ImageAdjust;
m = DeleteSmallComponents[Erosion[Dilation[DeleteSmallComponents[
      Binarize[EntropyFilter[p, 1] // ImageAdjust, .97], 10], 3], 5], 100];
ImageMultiply[Dilation[m, 3], p]

Bildbeschreibung hier eingeben


Interessantes Ergebnis ... vielleicht mit einem anderen Schema kombinieren ...
Matt M.

@Matt Yep Ich denke, dass mindestens 80% der nicht anvisierten Oberfläche verworfen wurden. Nachdem Sie die Maske ein wenig erweitert haben, sollten Sie nach den Ellipsen suchen. Unabhängig von der Methode, die Sie verwenden (ich denke immer noch, was ich tun könnte), ist es jetzt viel einfacher, wenn Sie wissen, dass die Bestien umgeben sind.
Dr. Belisarius

1

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.