2

我正在尝试注册两个 3d 卷。可以在这里找到一个尝试。代码首先生成两个不同的体积,都包含一个半径为 4 的球体。然后我尝试使用默认的平移参数映射来对齐它们。但是,从最后一行中可以看出(如果在本地运行,则从图中可以看出),结果体积与固定体积根本不对齐。当尝试相同的过程时,这次在 2d 中,生成的图像确实似乎与固定图像正确对齐,如此处所示。我是否错误地使用了 SimpleElastix API?我查看了 SimpleElastix 的 Github 存储库,但找不到任何 3d 图像配准的示例(至少不使用 Python 中生成的卷,然后将它们转换为 ITK 图像)。

来自 3d 示例的代码:

vol1 = np.zeros((50, 50, 50))
for x in range(vol.shape[0]):
    for y in range(vol.shape[1]):
        for z in range(vol.shape[2]):
            vol1[x, y, z] = np.linalg.norm(np.subtract([x, y, z], [5, 3, 2])) < 4

vol2 = np.zeros((50, 50, 50))
for x in range(vol.shape[0]):
    for y in range(vol.shape[1]):
        for z in range(vol.shape[2]):
            vol1[x, y, z] = np.linalg.norm(np.subtract([x, y, z], [20, 30, 10])) < 4

img_a = sitk.GetImageFromArray(vol1)
img_b = sitk.GetImageFromArray(vol2)

parameterMap = sitk.GetDefaultParameterMap('translation')

itk_filter = sitk.ElastixImageFilter()
itk_filter.LogToConsoleOn()
itk_filter.SetFixedImage(img_a)
itk_filter.SetMovingImage(img_b)
itk_filter.SetParameterMap(parameterMap)
itk_filter.Execute()

result_vol = sitk.GetArrayFromImage(itk_filter.GetResultImage())

np.max(np.abs(vol1 - result_vol))

二维示例中的代码:

vol1 = np.zeros((50, 50))
for x in range(vol1.shape[0]):
    for y in range(vol1.shape[1]):
        vol1[x, y] = np.linalg.norm(np.subtract([x, y], [20, 20])) < 4

vol2 = np.zeros((50, 50))
for x in range(vol2.shape[0]):
    for y in range(vol2.shape[1]):
        vol2[x, y] = np.linalg.norm(np.subtract([x, y], [4, 5])) < 4

img_a = sitk.GetImageFromArray(vol1)
img_b = sitk.GetImageFromArray(vol2)

parameterMap = sitk.GetDefaultParameterMap('translation')

itk_filter = sitk.ElastixImageFilter()
itk_filter.LogToConsoleOn()
itk_filter.SetFixedImage(img_a)
itk_filter.SetMovingImage(img_b)
itk_filter.SetParameterMap(parameterMap)
itk_filter.Execute()

result_vol = sitk.GetArrayFromImage(itk_filter.GetResultImage())

np.max(np.abs(vol1 - result_vol))
4

1 回答 1

0

注册可能会失败,因为球体不重叠。您可以尝试使用例如更平滑图像sitk.DiscreteGaussian()。然而,在这个人为的例子中,很可能简单地将球体彼此靠近就可以得到良好的配准。

请注意,很难注册二值图像,因为在这些类型的图像中几乎没有梯度信息:梯度仅在边界处非零,而其他地方的梯度为零,因为这些区域在强度方面是平坦的。

于 2019-01-29T12:05:18.037 回答