simpleitk 做仿射變換

忘記參考的地方是哪了

def resample(image, transform):
# Output image Origin, Spacing, Size, Direction are taken from the reference
# image in this call to Resample
    reference_image = image
    interpolator = sitk.sitkCosineWindowedSinc
    default_value = -1024
    return sitk.Resample(image, reference_image, transform,
                         interpolator, default_value)
out_path='C:\\Users\\datu\\Desktop\\validation2'
src_path      = "E:/DataSet/raw/train/04539/ct_1.2.276.0.7230010.3.1.4.1629419821.6504.1559787202.954.mhd"
src_body_path = "E:/DataSet/raw/train/04539/roi_1.2.276.0.7230010.3.1.4.1629419821.6504.1559787202.955_Body.mhd"
trg_path      = "E:/DataSet/raw/train/04591/ct_1.2.276.0.7230010.3.1.4.1629419821.6504.1559787257.966.mhd"
trg_body_path = "E:/DataSet/raw/train/04591/roi_1.2.276.0.7230010.3.1.4.1629419821.6504.1559787257.967_Body.mhd"
source        = sitk.ReadImage(src_path)
source_body   = sitk.ReadImage(src_body_path)
source_array  = sitk.GetArrayFromImage(source)
source_body   = sitk.GetArrayFromImage(source_body)
source_array[source_body==0] =-1024
source_sitk = sitk.GetImageFromArray(source_array)
source_sitk.CopyInformation(source) 
sitk.WriteImage(source_sitk,os.path.join(out_path, 'source.nii'))  # 保存到本地文件

target        = sitk.ReadImage(trg_path)
target_body   = sitk.ReadImage(trg_body_path)
target_array  = sitk.GetArrayFromImage(target)
target_body   = sitk.GetArrayFromImage(target_body)
target_array[target_body==0] =-1024
target_sitk = sitk.GetImageFromArray(target_array)
target_sitk.CopyInformation(target) 
sitk.WriteImage(target_sitk,os.path.join(out_path, 'target.nii'))  # 保存到本地文件

resample1 = sitk.ResampleImageFilter()
resample1.SetReferenceImage(target_sitk)
resample1.SetDefaultPixelValue(-1024)
resample1.SetInterpolator(sitk.sitkLinear)
source_sitk=resample1.Execute(source_sitk)
sitk.WriteImage(source_sitk,os.path.join(out_path, 'source_sitk.nii'))  # 保存到本地文件


dimension = source.GetDimension()
affine = sitk.AffineTransform(dimension)#仿射變換
translation = (0.00625686*(256-1),0.0937834*(256-1),-0.0165937*(256-1))

# translation = ((0.00625686*(256-1)*2.0 )/source_sitk.GetSpacing()[0],0.0937834*(256-1)*2.0/source_sitk.GetSpacing()[1],-0.0165937*(256-1)*2.0/source_sitk.GetSpacing()[2])
affine.SetTranslation(translation)
matrix=[1.0878, 0.0235044, -0.00496004,-0.0185817,1.06321,0.0206273,-0.00665095,-0.00725904,1.02659]
affine.SetMatrix(matrix)
center=source_sitk.GetOrigin()+np.array(source_sitk.GetSize())*np.array(source_sitk.GetSpacing())*0.5

affine.SetCenter(center)

warp=resample(source_sitk, affine)
warp.CopyInformation(source_sitk) 
# warp.SetOrigin(source_sitk.GetOrigin()+(2*np.array((256,256,256))-source_sitk.GetSpacing()*source_sitk.GetSize())*0.5)
sitk.WriteImage(warp,os.path.join(out_path, 'warp2.nii'))  # 保存到本地文件

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章