2017-03-07 78 views
0

我已經在SimpleITK中加載CT掃描。我想在NumPy中做一些非常簡單的事情,但還沒有想出如何在SimpleITK中完成它們。我希望在SimpleITK中提供速度。SimpleITK選擇性地改變像素/切片

# NumPy: Changes all values of 100 to now become 500 
nparr = nparr[nparr == 100] = 500 

# SimpleITK: 
??? 

SimpleITK圖像== 100將產生相同的尺寸,其中所有的強度== 100是1 /真的二進制圖像。這是理想的。但我不相信SimpleITK不幸的支持布爾索引。完成這個最有效的方法是什麼?

我想出了這個時髦的東西;但我希望能找到預期的方法/最佳實踐意味着這樣做:

# Cast because data type returned is uint8 otherwise 
difference = 500 - 100 
offset = SimpleITK.Cast(image == 100), sitk.sitkInt32) * difference 
image += offset 

回答

1

您可以使用BinaryTheshold過濾器。

結果= sitk.BinaryThreshold(圖像,100,101,500,0)

應當只選擇具有強度的像素100

1

您正在使用SimpleITK圖像對象在numpy的風格來使用它的工作,你需要使用的方法GetArrayFromImageGetImageFromArray來再通過將imagedata轉換爲numpy數組來獲得像素訪問。

import SimpleITK as sitk 

difference = 500 - 100 
img_arr = sitk.GetArrayFromImage(image) 
offset = img_arr[img_arr == 100] * difference 
output = sitk.GetImageFromArray(image += offset) 
+0

我希望有一種方法來sitk內做瓦特/ o轉換爲numpy,因爲許多場合的功能更加優化並且運行速度更快 –