医学图像配准中Spatial Transformer Networks
医学图像配准中,Spatial Transformer Networks(STN)是一个很好地把移动图像按照变形场如何变换成和固定图像一致的扭曲图像的组件。
用公式描述为:,但是这里的
运算具体如何操作。网上好像并没有详细的介绍。

让我们看看VoxelMorph官方写的STN代码,或许能理解一点。
有些不明所以,但是某些关键字仍然是可以看出来的。
例如src应该对应着图像,flow应该对应着流场(注意不是变形场,变形场和流场概念不一样)
博客
给出了正常的解答,但是对一些细节问题,没有很好的诠释。
我们来一一解答这些基本概念。

首先在forward方法中,首先出现的变量是grid,这个变量字面意思是网格或者格栅。但是具体是指什么,依然一无所知。
我们打开一个命令行,尝试输入如下代码,最后打印grid的内容。
仔细观察grid的输出,发现一个有趣的现象:
看到这里,我相信有人反应过来了
论文中变形场如何定义的?
变形场=恒等映射+流场
好家伙,原来恒等映射是这个意思。
那么,变量new_locs意思是变形场
这里用我毕业论文中的图描述一下二者的关系。


很明显,这是归一化到范围内,根据官方文档的解释
grid_sample的坐标必须是归一化为-1到1之间的。
接下来再看
看起来对维度进行交换,根据这两个链接讨论的结果
最大可能原因是grid_sample中xy轴定义方向是与现实xy轴颠倒的,不知道是内部代码哪部分导致的。
基本流程已经介绍完了。
好,最后来用我毕业论文中一张图描述一下,具体工作原理如下

考虑极端情况,如果流场为0,那么变形场就是恒定映射,重采样后扭曲图像就是移动图像。
用一句话描述STN原理:根据变形场的值(也就是坐标),抓取移动图像对应坐标的像素,再分配到扭曲图像上,而扭曲图像(固定图像)的坐标始终与变形场(流场)保持一致。
另外,如果抓取的坐标超出移动图像的范围,默认分配到扭曲图像的值上为0;如果坐标是浮点数,根据grid_sample的mode选择最近邻或者线性插值。

这也就是很多人不理解的为什么配准是移动图像到固定图像,得到了流场。但计算标记点的目标配准误差(TRE)时,是固定图像的标记点加上流场,再减去移动图像的标记点,才是正确的计算方法。
如有错误,请大家在评论区指出来。