2016-06-27 5 views
1

Ich versuche mit Python einige Zellen in einem Bild zu zählen. Ich folge mehr oder weniger dem Tutorial here. Nach einem Schwellenwert-Schritt finde ich die regionalen Maxima und zähle sie. Dies funktioniert sehr gut zum Zählen von Kernen, jedoch gibt es einige falsche Positive, einschließlich toter Zellen und Zellfragmente, die ich nicht zählen möchte. Der Code, den ich verwendete:Computer-Vision: Wie entfernt man Trümmer beim Zählen der Zellen?

import mahotas as mh 
import numpy as np 
from matplotlib import pyplot as plt 

dna = mh.imread('img.jpg') 
dna = dna[:,:,0] 

dnaf = mh.gaussian_filter(dna.astype(float), 4) 
maxima = mh.regmax(mh.stretch(dnaf)) 
maxima = mh.dilate(maxima, np.ones((5,5))) 
plt.imshow(mh.as_rgb(np.maximum(255*maxima, dnaf), dnaf, dna > T_mean)) 
plt.show() 

Und das Bild ist unten. Die toten Zellen sind rechts unten und links vom Zentrum. Die Fehlalarme sind die große rote Kleckse

enter image description here

Gibt es trotzdem ich diese Fehlalarme herausfiltern? Ich habe versucht, die Größen aller Regionen und Filterung basierend auf Größe zu bekommen, aber die Ergebnisse sehen seltsam aus, sobald ich die regionalen Maxima nehme.

dnaf = mh.gaussian_filter(dna.astype(float), 4) 
sizes = mh.labeled.labeled_size(dnaf) 
too_small = np.where(sizes < 800) 
dnaf = mh.labeled.remove_regions(dnaf, too_small) 
maxima = mh.regmax(mh.stretch(dnaf)) 
maxima = mh.dilate(maxima, np.ones((5,5))) 
plt.imshow(mh.as_rgb(np.maximum(255*maxima, dnaf), dnaf, dna > T_mean)) 
plt.show()  

Dies wurde nur eines des Fehlalarme zu befreien und verzerrt das Bild an mehreren anderen Stellen (siehe unten) mache ich denke, ich habe etwas falsch gemacht.

enter image description here Wieder ist dieses Bild an einem anderen Ort als das erste, aber es sieht verzerrt im Vergleich zum Original aus, und die toten Zellfragmente bleiben noch, also bin ich mir sicher, dass ich das nicht richtig mache.

Also meine Frage ist, was ist der beste Weg, mit Python, kleine Trümmer/tote Zellen aus dem Bild zu entfernen, um eine bessere Zellzahl Schätzung zu bekommen?

+0

Ich möchte sicherstellen, dass ich das Problem verstehe. Es sieht für mich so aus, als wäre es ziemlich einfach: Eine lebende Zelle hat einen Kern * und mindestens den doppelten Bereich im aktiven Protoplasma. Vielleicht, wenn Sie zuerst die Blobs ohne Nukleus entfernen, würde die Operation ** too_small ** den Job beenden? – Prune

Antwort

0

Ich denke, Sie müssen mit dem ursprünglichen Bild beginnen, um falsche Positive zu identifizieren. Markieren Sie die Positionen von toten Zellen und anderen falsch positiven Werten und notieren Sie die geometrischen Eigenschaften der erzeugten Blobs. Wenn die Eigenschaften wie Größe einen deutlichen Unterschied zeigen, können Sie sie leicht unterscheiden.

Eine weitere Option ist das Ändern von Parametern wie der Gauß'schen Filtergröße und der Größe des Dilatationsoperators.

Wenn nichts davon hilft, empfiehlt es sich, eine große Anzahl mikroskopischer Bilder zu verwenden und ein darauf basierendes maschinelles Lernsystem zu trainieren.

Verwandte Themen