
欢迎微信搜索关注公众号“医影杂记”。
虽然起了一个标准的“关键词串烧型“科研论文标题,不过今天要写的不是科研论文,只是想快速简单分享3D Slicer中一个配准功能的使用。
事情的起因是上周后台有位同学问,在3D Slicer中怎么实现脊椎的配准。这个我也没做过,但感觉是一个很有意思的问题。
假定要配准的图像是包含从颈椎到腰椎的躯干部分CT影像,配准的目标是把这个范围内的脊椎尽可能整体对齐。
当然这里有个问题,临床中是否需要这样的脊椎整体配准?说实话,我也不知道。但今天暂且用脊椎配准作为一个例子,来看看怎么使用3D Slicer中提供的基于标志点的交互式配准工具。也就是先把脊椎配准作为一个假想的钉子,重点来介绍标志点交互配准这把锤子。不管将来是否会遇到非这把锤子不可的钉子,在工具箱中多准备一把有特色的锤子,总是好的。
配准问题,其实属于医学图像处理中经常遇到的一类”钉子“,3D Slicer中也相应提供了多把锤子,也就是缺省集成了多种配准工具。大家可以看一眼下图。

没来的及去研究其他的配准工具,这一次基本上是上来就直接选择了Landmark Registration,拿起来就用。折腾一番,上手之后,发现这个工具还比较好用,基本能够完成预期的目标。这里的预期目标就是,可以把前后两次检查中感兴趣的局部区域,比较好的配准。这里的重点在于“局部”,也就是要配准的目标,在图像中只占很小的一部分区域。脊椎在整个人体躯干部中,所占的空间比例是很小的。这就决定了,不适合采用基于整体灰度信息的配准算法,而比较适合采用基于感兴趣区域相关的标志点对齐的配准算法。也就是通过标志点来控制哪里是感兴趣区域。这里的标志点,可以通过分割或特征点提取算法来自动生成,也可以人工直接指定生成。
此外,脊椎整体细长,且存在随人体姿态改变的弯曲度,其实是比较难配准的。如果能够手工标记点方式配准,也可以充分说明手工标记点这个工具的实用性。
咱们这次就采用最简单的方法,直接手工指定来生成。手工指定的方法,科技含量确实有点低,但优点在于可控性强。如果只是要配准1~2例数据,并且对配准的要求比较高,手工指定往往是最可靠的方法。
接下来进入正题,看看“Landmark Registration”这个工具如何使用。
先直接画一下重点吧。Landmark Registration这个工具的核心用法,就是在固定图像和浮动图像之间逐对手工添加对应标志点,添加的过程中可以随时切换选择不同的空间变形方法,同时注意观察固定图像和变形后的浮动图像的叠加实时显示图像,来评估当前的配准效果。
在这个核心用法的基础上,还有一些小的技巧,咱们放在最后来说。先来看如何逐步操作,实现配准。
加载图像
这里省去图像加载的步骤,假定大家都已经加载了需要配准的图像。注意,需要有2个Volume数据,或者是两组能够生成三维Volume的扫描序列。一般来讲,这2个Volume或序列,是同一患者的大致相同身体部位,在不同时期接受的两次扫描,可以是相同类型的扫描设备,比如两个都是CT,也可以是不同类型的扫描设备,比如一个是CT、一个是MR。
因为手边正好有同一患者的两次CT扫描数据,所以咱们这里选择两个CT Volumue的配准,作为例子。
数据加载进来后,为了便于区分,咱们进入Data模块,把两个Volume更改一下名称。选择检查时间较早的Volume,改名为“Base Vol";选择检查时间较晚的Volume,改名为“FollowUp Vol”。操作要点如下图。

启动Landmark Registration
加载好数据,改好名称之后,就可与启动Landmark Registration模块,开始配准了。启动的操作路径如下图。

启动后,会提示指定要配准的固定图像和浮动图像,如下图所示。固定图像(Fixed Volume)指的是在配准过程中,保持不动的图像;而浮动图像(Moving Volume)就是那个在配准过程中,动来动去的图像。整个配准过程,其实就是一个始终不动,另外一个不断移动,直到找到最佳匹配位置。

指定好固定和浮动图像之后,3D Slicer会非常贴心的自动把图像显示布局切换为3x3布局,如下图所示。

注意观察每个图像窗口的左下角,可以看出来,第一行显示的是固定图像3个正交切面;第二行是浮动图像3个正交切面;第三行则是固定和浮动图像以半透明方式叠加显示。从第三行可以看出,在固定和浮动图像的初始配准位置上,脊椎存在比较明显的偏差,也就是没对齐。
接下来就逐个添加标志点,来对齐脊椎。但在添加标志点之前,可以根据需要,调整图像显示的灰窗设置,调整到一个最有利于观察感兴趣器官或区域的灰窗。选对灰窗,可以让后续的“肉眼找点”操作更快更准哦。操作见下图。

添加标志点
添加标志点之前,建议先按照下图进行操作,尤其是先按照下图中的第一步和第二步,选择参数设置。第一步和第二步的基本想法是,先从一个最基础的、也是最好调整、不容易出错的空间变形方式开始,先把两套数据基本对齐了,再切换到更复杂、更精准的空间变形方式上,取得更好的配准效果。关于选项1和2的具体含义,咱们后面再细说。

接下来,就是挨个添加标志点了。折腾一通下来,有下面几条心得,“砖”也好,“玉”也罢,先抛出来再说。
- 最好的方法,就是上手试一下。所以,后面几条,不看也罢。
- 相信我,一定要先做上图中的第一步和第二步。不然,下面的步骤添加标志点时,很容易找不到标志点。
- 添加每个标志点之前,都需要先点击上图箭头3指向的“Add"按钮。也就是点一下按钮,在图像中点击一下鼠标左键,添加一对标志点。
- 是的,每次添加的是一对点,固定图像和浮动图像中各一个点。采用黄色米字线的形式,显示在3x3布局的每一个窗口。可以分别在第一行固定图像和第二行浮动图像中,拖拽调整标志点位置,第三行会实时更新,显示调整后的配准效果。
- 推荐随时勾选和取消勾选左侧的“Flicker"框,通过观察第三行的交替切换显示窗口,来确定固定和浮动图像的当前对齐程度。(操作参见第12条下方的图片)
- 建议通过上述步骤5,先找到固定和浮动图像在初始状态下,最接近对齐的位置,作为添加的第一个标志点。也就是先抛下一个“锚点”,为后续添加标志点,定个大致的基调。别一上来就跑偏。
- 接下来的操作,基本就是循环重复上述步骤3~5,直至达到基本满意的配准(对齐)效果。
- 基本满意后,可以依次尝试在“Linear Registration"子面板中,选择”Similarity“和Affine“,看看能否取得更好的效果。也就是,切换到更复杂、自由度更大的变形方式,看看效果如何。
- 如果切换变形方式后,图像对齐情况反而变差了,别着急,试试找个偏差最大的位置,添加标志点。一般能把跑偏的图像纠正回来。
- 上面都是在“Registration Type"为”Affine Registration"的前提下,来操作的。如果感觉效果已经差不多了,可以切换到“Registration Type"中的”ThinPlate Registration“再试试。
- 切换到“ThinPlate Registration"后,图像的对齐可能反而一下子乱掉。没关系,参考上面第9步。
- 感觉对于很多配准情况,不一定需要使用“ThinPlate Registration"。Affine Registration可能就够了。
下面的图片说明了如何打开Flicker开关,观察图像对齐效果。

可能有些同学看到上面一连串的“Rigid/Similarity/Affine/ThinePlate Registraton",不太不了解,简单解释一下。不过为了便于理解,下面的解释牺牲了严谨性,大家看个意思就行。
- Rigid Registartion,刚体配准,就是浮动图像只做左右(X轴)、前后(Y轴)、上下(Z轴)3个方向(坐标轴)的平移,以及绕3个坐标轴的旋转。用数学的话说,有6个自由度。打个比方,假如接受断层扫描的是个木头人,没有呼吸或扭头等这些局部动作变形,也没有长高或长胖,那么,刚体配准就能够把这个木头人前后两次扫描的三维图像完全对齐。
- Similarity Registration,相似配准,就是在刚体配准的基础上,再增加沿3个坐标轴的比例(缩放)变化。用数学的话说,有9个自由度。打个比方,假如上面接受检查的木头人,在前后两次检查之间,长高或变胖了,那么变形时允许在纵向或横向缩放,就能够更好的把前后两次扫描对齐。
- Affine Registration,仿射配准,就是在相似配准的基础上,再增加允许3个坐标轴之间的夹角变化,也就是X、Y、Z轴之间的夹角可以不是直角,可以变化。这样,就一共有12个自由度。打个非常不严谨的比方,假如木头人长歪了,那么变形时允许X、Y、Z轴之间夹角变化,就能取得更好的配准效果。
- ThinPlate Registration,薄板样条配准。这个嘛,不从数学上解释了,打个非常非常不严谨的比方,把上面的木头人换成橡皮人,然后在前面仿射配准的基础上,再额外对橡皮人这里拉一下、那里扯一下,来取得更好的配准效果。至于自由度嘛,如果你拉扯的地方越多,自由度就越大。这里的拉扯,其实就对应前面咱们添加的“标志点”。
其实,大家基本只需要知道上面4种配准,自由度依次增加,就基本够了。说到这里,扯一句大家估计都知道的“哲学”,自由(度)不是越多越好,而是够用就好。这句话放在太大范围上,会有很多争议;但在解决理工科问题上,基本是“金科玉律”。不服的,必然吃亏。
有一点非常重要,3D Slicer的Landmark Registration提供上面4种配准选项时,采用了与上面咱们的讲解相类似的实现方式,高自由度的配准方式都是在前面低自由度配准方式的基础上进行的。也就是说,当你选择Similarity Registration时,软件会先做Rigid Registration,然后再做Similarity Registration。其余,以此类推。
所以,在前面的操作中,推荐大家先选择自由度最低,但最简单、最稳定的配准方式开始,逐步递进。而且,只要已经达到了自己满意的配准效果,完全没有必要强求更复杂的配准方式。
道理扯了一堆,实际效果到底如何。来看图片。先看下面的未配准之前的对比图片。这里的对比就是采用的前面说的Flicker显示方式。

再看配准之后的对比图片。大家注意,咱们只关心脊椎的配准,其他区域不关心啊。这个是“局部配准”的中心思想。

选择最能体现脊椎整体的矢状面,在两个不同层面截图,单独看一下。


至于标志点的具体添加位置,和具体病例密切相关,所以这里不具体介绍了。总体上,上面的数据添加了10对标志点,而选择Affine Registration还是ThinPlate Registrationd对配准效果影响不大。需要这么多对标志点的主要原因,是因为脊椎在前后两次扫描中,弯曲程度不同。
好了,关于“Landmark Registration"这边锤子,就介绍到这里,希望能帮助大家丰富自己的日常工具箱。感谢提出这个问题的同学。也欢迎大家通过留言方式,多交流,互相启发。