具有不同像素大小的两个图像之间的插值

时间:2016-05-19 12:11:59

标签: matlab interpolation dicom medical

对于我的应用程序,我想在两个图像(CT到PET)之间进行插值。 因此,我在它们之间进行映射:

[X,Y,Z] = ndgrid(linspace(1,size(imagedata_ct,1),size_pet(1)),...
                linspace(1,size(imagedata_ct,2),size_pet(2)),...
                linspace(1,size(imagedata_ct,3),size_pet(3)));
new_imageData_CT=interp3(imagedata_ct,X,Y,Z,'nearest',-1024);

我的新图片new_imageData_CT的尺寸与PET图像类似。问题是我的新图像数据缩放不正确。所以它被压缩了。我认为其原因是两个图像之间的像素大小不同而且不涉及插值。例如:

  • CT图像尺寸:512x512x1027
  • CT体素大小[mm]:1.5x1.5x0.6
  • PET图像尺寸:192x126x128
  • PET体素尺寸[mm]:2.6x2.6x3.12

那么我怎样才能关注插值的体素大小?

3 个答案:

答案 0 :(得分:2)

您需要在患者坐标系中执行匹配,但需要考虑的不仅仅是分辨率和体素大小。您需要同步两个卷的位置(也可能是方向,但这不太可能)。

您可能会发现this thread 有助于找出哪些DICOM标签描述了体积以及如何计算用于在患者(x,y,z以毫米为单位)和体积(x,y之间)之间进行转换的转换矩阵列,行,切片编号中的z。

您必须确保体积位置具有可比性,因为CT和PET中切片的位置不一定是指相同的原点。这样做的简单方法是比较CT和PET切片的DICOM属性Frame Of Reference UID(0020,0052)。对于共享相同的参考帧UID的所有切片,DICOM头中切片的位置指的是相同的原点。 如果数据集不包含此标记,则会更加困难,除非您只是将其作为假设。存在从像素数据的内容推导出两个不同体积的匹配切片的方法,称为"注册"但这是一门科学。请参阅Hugues Fontenelle的链接。

BTW:在您的示例中,由于卷的大小不同,您不会在每个位置的两个卷中找到匹配的体素。例如。对于x方向:

CT:512 * 1.5 = 768毫米

PET:192 * 2.6 = 499毫米

答案 1 :(得分:0)

我会让别人回答这个问题,但我认为你问错了。我当然缺乏背景,但乍一看Matlab并不适合这项工作。

完成注册步骤后,您可以导出生成的图像(现在具有相同的大小和间距),并在Matlab中继续插值(如果您愿意)(或使用相同的工具) )。

答案 2 :(得分:0)

切片机中有一个称为PETCTFUSION的工具箱,可将PET扫描与CT图像对齐。 您可以将其安装在新版本的slicer中。 在下面显示的模块的“显示”面板中,提供了用于选择PET数据集的着色方案的选项: 灰色将提供白色到黑色的着色,黑色表示最高计数值。 热量将提供温暖的色标,深红色最低,白色最高计数值。 光谱将提供温暖的色标,在低计数端逐渐变冷(深蓝色),最高变为白色。 该面板还提供了一种调整PET和CT体积的窗口和水平的方法。

PETCT SLICER

我通常在注册后使用resampleinplace工具。您可以在包装中找到它:注册,然后重新采样图像。

在这里查看屏幕: resampleinplace

如果您想进一步了解PETCTFUSION,请在下面找到一个链接: https://www.slicer.org/wiki/Modules:PETCTFusion-Documentation-3.6

由于slicer与python兼容,因此您也可以使用python交互器来运行自己的代码。

如果您遇到任何问题,请告诉我