2017-08-28 8 views
0

J'essaie d'utiliser la classe ConnectedThresholdImageFilter pour segmenter la zone blanche "C" d'une image binaire ('slice87.jpg'). L'idée était de choisir une valeur de graine qui se trouvait dans la région et d'ajouter seulement des pixels voisins qui ont également une intensité de 255 (entre le seuil de 254 et 256).Pourquoi la classe ConnectedThresholdImageFilter n'étiquette pas les pixels dans le seuil?

"slice87.jpg"

Cependant, les résultats de mon code dans une image à chaque pixel mis à 0:

enter image description here

Au lieu de cela (modifié manuellement par photoshop):

enter image description here

Ma valeur de départ était (x, y) = (115,35). img.GetPixel(115,35) retours 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

Utilisez-vous l'image de cet article ou une image différente? Si ce dernier, les intensités peuvent ne pas être tout à fait correct en raison de la perte de la compression JPEG. –

+0

L'image réelle est une image binaire 3D enregistrée dans le format d'analyse hdr/img. J'ai sauvegardé slice87 en jpg pour que je puisse le télécharger sur stackoverflow. L'intensité pour les régions blanches varie de 251 à 255, donc la compression n'explique pas pourquoi tous les pixels sont mis à 0. – DottedGlass

Répondre

3

Quel est le type de votre image d'entrée img? Je soupçonne qu'il est de type sitkUInt8, auquel cas la valeur 256 ne peut pas être représentée comme le type de pixel de l'image d'entrée et provoque un débordement d'entier. Les paramètres inférieur et supérieur forment un intervalle fermé qui inclut les limites spécifiées. Vous devez spécifier le paramètre upper comme 255 ou Cast votre image sur un autre type de pixel.