2017-08-28 4 views
0

Ich versuche, die ConnectedThresholdImageFilter-Klasse zu verwenden, um die C-weisse Region eines binären Bildes ('slice87.jpg') zu segmentieren. Die Idee war, einen Seed-Wert auszuwählen, der innerhalb der Region liegt und nur benachbarte Pixel hinzufügt, die ebenfalls eine Intensität von 255 aufweisen (zwischen dem Schwellenwert von 254 und 256).Warum markiert die ConnectedThresholdImageFilter-Klasse keine Pixel innerhalb des Schwellenwerts?

"slice87.jpg"

jedoch Ergebnisse meines Code in einem Bild mit jedem Pixel auf 0:

enter image description here

Statt dem (manuell durch Photoshop bearbeitete):

enter image description here

Mein Startwert war (x, y) = (115,35). img.GetPixel(115,35) kehrt 255.

import SimpleITK as sitk 

img = sitk.ReadImage('slice87.jpg') 
seeds = [(115,35)] 

output = sitk.ConnectedThreshold(image1=img, 
           seedList = seeds, 
           lower = 254, 
           upper = 256, 
           replaceValue = 255) 
sitk.WriteImage(output, 'output.jpg') 
+1

Verwenden Sie das Bild von diesem Post oder einen anderen? Wenn Letzteres der Fall ist, sind die Intensitäten möglicherweise aufgrund von Verlusten durch JPEG-Komprimierung nicht ganz korrekt. –

+0

Das eigentliche Bild ist ein 3D-Binärbild, das im hdr/img-Analyseformat gespeichert wird. Ich habe slice87 als jpg gespeichert, damit ich es in stackoverflow hochladen konnte. Die Intensität für weiße Bereiche liegt im Bereich von 251-255, daher erklärt die Komprimierung nicht, warum alle Pixel auf 0 gesetzt sind. – DottedGlass

Antwort

3

Was ist der Typ Ihres Eingangsbild img? Ich vermute, dass es vom Typ sitkUInt8 ist, in welchem ​​Fall der Wert 256 nicht als der Pixeltyp des Eingabebildes dargestellt werden kann und einen ganzzahligen Überlauf verursacht. Die unteren und oberen Parameter bilden ein geschlossenes Intervall, das die angegebenen Grenzen enthält. Sie sollten den upper Parameter als 255 oder Cast Ihr Bild zu einem anderen Pixeltyp angeben.

Verwandte Themen