我有 2 组 1 位受试者的 DICOM 图像数据,包括同时拍摄的 PET 扫描和 CT 扫描。Frame of Reference UID 不同,我认为这意味着它们的参考来源不同。这样就无法比较“图像位置患者”标签。
我想要做的是重新采样两个图像,使它们的空间尺寸相等并且它们的像素尺寸相等。这项任务似乎相对简单,但事实上它们的起源不同。
我有 2 组 1 位受试者的 DICOM 图像数据,包括同时拍摄的 PET 扫描和 CT 扫描。Frame of Reference UID 不同,我认为这意味着它们的参考来源不同。这样就无法比较“图像位置患者”标签。
我想要做的是重新采样两个图像,使它们的空间尺寸相等并且它们的像素尺寸相等。这项任务似乎相对简单,但事实上它们的起源不同。
对于被认为代表同一对象的任何两个图像A和B,配准是为 A 中的每个像素/地标识别 B 中的等效像素/地标的行为。
假设A和B中的每个像素都可以嵌入到一个坐标系中,配准通常需要对 A进行变换 ,使得变换后A中每个像素的坐标与B中等效像素的坐标重合(即目标是两个对象在该坐标空间中重叠)
等距变换是指 A 中任意两个像素之间的距离,而B中等效的两个像素之间的距离在应用变换后不会改变。例如,空间中的旋转、反射(即镜像)和平移(即沿特定方向移动对象)都是等距变换。只应用等距变换的配准算法被称为是刚性的。
仿射变换类似于等距变换,不同之处在于还可能涉及缩放(即对象的大小也可以增长或缩小)。
在医学成像中,如果A和B是在不同时间获得的,那么变换是简单的仿射或等距变换的可能性很小。例如,假设在扫描A期间,患者将手臂放在身边,而在扫描B中,患者将手臂放在头上。不存在会导致与B完美重叠的A 的严格配准,因为等效点之间的距离已经改变(例如,在每种情况下,头到手和手到脚之间的距离)。因此,需要使用更精细的非刚性配准算法。
在您的情况下,A和B是在同一台机器上的同一扫描会话期间获得的这一事实意味着转换将是一个简单的仿射转换是一个合理的假设。即您可能只需要稍微旋转和平移对象;如果 A 的坐标系比 B 更“密集”,您可能还需要稍微增大/缩小它。但就是这样,不需要奇怪的“扭曲”来补偿在获得的扫描A和B之间发生的“移动” ,因为它们同时发生。
可以使用 3x3 变换矩阵T将表示 3D 空间中的“幅度和方向”的 3D 向量转换为另一个 3D 向量。例如,如果将变换应用于向量(使用矩阵乘法),则结果向量 u 为。换句话说,“新”x 坐标以变换矩阵指定的方式依赖于旧 x、y 和 z 坐标,新的 y 和新 z 坐标也类似。
如果同时对三个向量应用 3x3 变换 T,您将得到三个变换后的向量。例如对于v = [v1, v2, v3]
where v1 = [1; 2; 3], v2 = [2; 3; 4], v3 = [3; 4; 5]
,然后T*v
会给你一个 3x3 矩阵 u,其中每一列对应于 x,y,z 坐标的变换向量。
现在,考虑变换矩阵 T 是未知的,我们想要发现它。假设我们有一个已知点,并且我们知道在转换之后它变成了一个已知点。我们有:
考虑第一行;即使您知道p和p',也应该清楚您无法从单个点确定 a、b 和 c。你有三个未知数,只有一个方程。因此,要求解 a、b 和 c,您至少需要一个由三个方程组成的系统。这同样适用于其他两行。因此,要找到变换矩阵 T,您需要三个已知点(变换前后)。
T*v = u
在 matlab 中,您可以通过键入来求解这样的方程组T = u/v
。对于 3x3 变换矩阵 T,u 和 v 至少需要包含 3 个向量,但它们可以包含更多(即方程组被过度表示)。您传入的向量越多,从数值的角度来看,变换矩阵就越准确。但理论上你只需要三个。
如果您的转换还涉及翻译元素,那么您需要执行您发布的图像中描述的技巧。即,您将 3D 向量 [x,y,z] 表示为齐次坐标向量 [x,y,z,1]。这使您可以在变换矩阵中添加第 4 列,从而为每个点生成一个“平移”,即在新的 x'、y' 和 z' 系数中添加一个额外的值,这与输入向量无关。由于平移系数也是未知数,因此您现在有 12 个而不是 9 个未知数,因此您需要 4 个点来求解这个系统。IE
总结一下:
要将图像A转换为与B占用相同的空间,请将 A 的坐标解释为好像它们与 B 在同一坐标系中,在两者中找到四个等效的界标,并通过求解此系统获得上述合适的变换矩阵使用/
右矩阵除法运算符的方程。然后,您可以使用您找到的转换矩阵 T 将所有坐标A
(表示为齐次坐标)转换为新坐标。