2015-11-16 11 views
7

Ich bin relativ neu zu OpenCV und ich habe keine starke Bildverarbeitung Hintergrund. Derzeit arbeite ich an einem Projekt, um ein Programm zu schreiben, das alle biologischen Zellen vom Mikroskop in einem Bild zählt. Ich habe verschiedene Methoden aus Internetquellen ausprobiert, um das Bild zu zählen, aber keiner von ihnen funktioniert gut wie erwartet.C++ Biologische Zellzählung mit OpenCV

Einige der Methoden, die ich verwendet habe, sind:

  1. Konturen des gefilterten Bildes zu finden. (funktioniert nicht gut mit Zellen, die nahe beieinander liegen)
  2. Gaußsche Unschärfe und lokale Maxima auf dem Bild finden. (Gleiches Problem wie)
  3. Canny-Algorithmus (Ausgabeer nicht erfassen Zellen Segment)

Dies ist ein Beispiel des Bildes ich brauche die Gesamtzahl der Zellen zu zählen.

enter image description here

Meine aktuelle Zählung Algorithmus funktioniert besser, wenn die Zellen nicht zusammen schließen. Zum Beispiel wie folgt aus:

enter image description here

jedoch nicht der Algorithmus immer noch die 3-Zellen spalten auseinander, die zusammen in der Mitte des Bildes geklebt werden.

Also, was könnte ich tun, um die Gesamtzahl der Zellen in einem Bild mit mindestens falsch negativ/positiv zu erkennen?

+2

Werfen Sie einen Blick auf diese Seite: http://stackoverflow.com/questions/5298884/finding-number-of-colored-shapes-from-picture-using -python und http://codegolf.stackexchange.com/questions/40831/counting-grains-of-rice Kann ähnlich sein, was Sie suchen! –

+0

ist die Größe jeder Zelle ähnlich? – Micka

+0

@Micka die Zellengröße in jedem Bild ist ähnlich, aber es gibt unterschiedliche Bild für verschiedene Zoomstufe, so kann die Zellgröße von einem Bild nicht auf ein anderes Bild angewendet werden – Woody

Antwort

2

Ihr Ansatz ist fast in Ordnung. Es erfordert jedoch einige zusätzliche Schritte. Sie brauchen etwas namens Morphological Operations.

  1. Filtern Sie Ihr Bild in der Art, wie Sie gut ist.
  2. Wenden Sie einen Schwellenwert an, der von der Farbe abhängt, oder wandeln Sie ihn in Grau um und schwellen Sie ihn dann ein. P.S. Aus den von Ihnen bereitgestellten Beispielen scheint die Zellfarbe zu gesättigt zu sein. Also, Sie können es in HSV Space konvertieren und dann schwellen Sie es mit dem S-Kanal (sagen Sie mir, wenn Sie hier Hilfe benötigen).
  3. Wenden Sie die Opening Morphological Operators auf das Schwellenwertbild an. P.S. Sie können einige Kerngröße versuchen und wählen Sie das Beste.
  4. Nehmen Sie Konturen und tun Sie, was Sie getan haben.

Eröffnung:

cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5), cv::Point(1, 1)); 
cv::morphologyEx(img, img, cv::MORPH_OPEN, element, cv::Point(-1, -1), 1); 
+0

Wie führe ich öffnende Operatoren auf dem Bild aus? – Woody

+0

@Woody bearbeitet mit Code –

+0

Ich habe versucht, Ihre Opening-Operator, und ich ändere die MORPH_RECT zu MORPH_ELLIPSE, die Erkennung ist besser als zuvor! Aber dort, wo die Zelle nicht erkannt wird, gibt es immer noch falsch negative. – Woody