2017-03-07 3 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/True 인 동일한 크기의 이진 이미지를 생성합니다. 이것은 바람직하다. 하지만 불행히도 SimpleITK가 부울 인덱스를 지원한다고 생각하지 않습니다. 가장 효율적인 방법은 무엇입니까?

나는이 펑키 보이는 것을 생각해 냈다. 하지만 의도 된 방법을 찾으려했다/가장 좋은 방법은이 일을하기위한 수단 : 당신이 방법 GetArrayFromImageGetImageFromArray에를 사용할 필요가 당신은 NumPy와 스타일을 사용할 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

을 다음 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

I 승 sitk 내에서 할 수있는 방법이 있었다 바라고/많은 sitk 함수가 더 최적이고 더 빨리 수행하기 때문에 numpy로 변환 –