对于我的应用程序,我想在两个图像(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图像类似。问题是我的新图像数据缩放不正确。所以它被压缩了。我认为其原因是两个图像之间的像素大小不同而且不涉及插值。例如:
那么我怎样才能关注插值的体素大小?
答案 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体积的窗口和水平的方法。
我通常在注册后使用resampleinplace工具。您可以在包装中找到它:注册,然后重新采样图像。
如果您想进一步了解PETCTFUSION,请在下面找到一个链接: https://www.slicer.org/wiki/Modules:PETCTFusion-Documentation-3.6
由于slicer与python兼容,因此您也可以使用python交互器来运行自己的代码。
如果您遇到任何问题,请告诉我