本文讲述医学图像配准中形变场的可视化,包括一种直接通过工具查看的方法和两种手工绘制的方法。
首先来介绍一下形变场,一个大小为[W,H]的二维图像对应的形变场的大小是[W,H,2],其中第三个维度的大小为2,分别表示在x轴和y轴方向的位移。同理,一个大小为[D,W,H]的三维图像对应的形变场的大小是[D,W,H,3],其中第三个维度的大小为3,分别表示在x轴、y轴和z轴方向的位移。下图是一个二维脑部图像配准后得到的形变场。
如一开始所说,下面介绍3中方式来将形变场可视化。
1. 使用ITK-Snap可视化形变场
这种方式是最便捷也是我认为效果最好的,但是只适用于三维的形变场。首先将形变场保存为".nii"图像,用ITK-Snap工具打开,首先在下图红框的位置悬停一段时间,出现下图中的图标后点击,选择“Multi-Component Display”下面的“Grid”,就可以看到下图所示的效果。
2. 毛毛大神的方法
具体思路请看毛毛大神的文章plt.contour 绘制图像形变场(Deformation Field)。其实具体思路我没有完全看懂,大约是先产生一个规则的网格,然后加上形变场后展示出来。但是如果网格是[W,H]大小的,但是形变场是[W,H,2]大小的,所以只能选择一个维度相加,感觉有点奇怪。代码如下:
import matplotlib.pyplot as plt
import SimpleITK as sitk
import numpy as np
def grid2contour(grid, title):
'''
grid--image_grid used to show deform field
type: numpy ndarray, shape: (h, w, 2), value range:(-1, 1)
'''
assert grid.ndim == 3
x = np.arange(-1, 1, 2.0 / grid.shape[1])
y = np.arange(-1, 1, 2.0 / grid.shape[0])
X, Y = np.meshgrid(x, y)
Z1 = grid[:,