2017-08-28 67 views
0

我想使用ConnectedThresholdImageFilter類來分割二進制圖像('slice87.jpg')的「C」看白色區域。這個想法是選擇一個位於該區域內的種子值,並且只添加也具有255強度的相鄰像素(在閾值254和256之間)。爲什麼ConnectedThresholdImageFilter類不在閾值內標記像素?

"slice87.jpg"

然而,我的代碼的結果的圖像中的與每一個像素設置爲0:

enter image description here

代替此(通過Photoshop的手動編輯):

enter image description here

我的種子值是(x,y)=(115,35)。 img.GetPixel(115,35)收益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

您是否正在使用來自此文章的圖片或其他文章?如果是後者,由於JPEG壓縮的損失,強度可能不太正確。 –

+0

實際圖像是以hdr/img分析格式保存的3D二進制圖像。我將slice87保存爲jpg格式,以便我可以將其上傳到stackoverflow。白色區域的亮度範圍爲251-255,所以壓縮並不能解釋爲什麼所有像素都設置爲0。 – DottedGlass

回答

3

什麼是你的輸入圖像img的類型?我懷疑它的類型是sitkUInt8,在這種情況下,值256不能被表示爲輸入圖像的像素類型,並且會導致整數溢出。較低和較高的參數形成一個包含指定邊界的閉合區間。您應該將upper參數指定爲255或Cast將您的圖像指定爲另一個像素類型。