Python中使用ITK对图像进行重采样

Python中使用ITK对图像进行重采样

使用的类

使用ITK对医学图像序列进行重采样,主要用到以下几个类:


(1)itk.LinearInterpolateImageFunction
(2)itk.ScaleTransform
(3)itk.resample_image_filter


(1)itk.LinearInterpolateImageFunction
这个类是用来实现线性插值采样的功能。需要注意的是这个类的用法与一般的类对象的初始化不同,初始化该类的方法如下所示:

interpolator = itk.LinearInterpolateImageFunction.New(dcm_reader)
# dcm_reader 是 itk.imread() 读入的DICOM序列图像

(2)itk.ScaleTransform
这个类应该是用于实现缩放变换的功能。重采样会对原来的序列的体素大小进行改变,因此图像缩放可以降低因重采样而导致的图像失真的问题。这个类的初始化也与其他的类的初始化不同,其初始化的形式如下所示:

Dimension = dcm_reader.GetImageDimension()
scale_transform = itk.ScaleTransform[itk.D, Dimension].New()
scale_transform_center = [float(int(s / 2)) for s in inputsize]
scale_transform.SetCenter(scale_transform_center)

中间这个itk.D不太清楚是干什么用的,但是这个是不能省略的,大哥们知道的帮忙补充一下…

Dimension这个变量是来说明这要重采样的图像的维数,scale_transform_center为设置的缩放中心。以原图像的中心进行缩放能够更好地还原原图像的边缘细节。scale_transform.SetCenter(center)是设置缩放操作的缩放中心。

(3)itk.resample_image_filter
这个类则是用于实现重采样的滤波器。在设定重采样的参数后,通过这个类可以实现对原图像的重采样,具体实现如下:

resample = itk.resample_image_filter(
	dcm_reader,
	transform=scale_transform,
	size=outsize,
	out_spacing=outputspacing,
	output_origin=output_origin
)

参数transform, size, out_spacing, output_origin分别为转换参数、输出尺寸、输出体素大小、输出图像的方向。

具体实现

Python中使用ITK实现重采样的代码如下:

import itk

dcm_reader = itk.imread(dcm_directory)
inputspacing = itk.spacing(dcm_reader)
output_origin = itk.origin(dcm_reader)
inputsize = itk.size(dcm_reader)

outputspacing = (1, 1, 1)

outsize = [ int(inputsize[0] * inputspacing[0] / outputspacing[0]),
			int(inputsize[1] * inputspacing[1] / outputspacing[1]),
			int(inputsize[2] * inputspacing[2] / outputspacing[2])]

interpolator = itk.LinearInterpolateImageFunction.New(dcm_reader)
Dimension = dcm_reader.GetImageDimension()
scale_transform = itk.ScaleTransform[itk.D, Dimension].New()
scale_transform_parameters = scale_transform.GetParameters()
scale_transform_center = [float(int(s / 2)) for s in inputsize]
scale_transform.SetCenter(scale_transform_center)


resample = itk.resample_image_filter(
    dcm_reader,
    transform=scale_transform,
    size=outsize,
    output_spacing=outputspacing,
    output_origin=output_origin
)

你可能感兴趣的:(ITK,python,图像处理)