问题背景:在医疗手术机器人穿刺手术中,识别显影点在空间中的坐标是一个基础问题。本篇博客简单记录在处理显影点识别时的一些思路。
目前看过两种显影球的位置:
1、显影球距离身体有一定距离
2、显影球只会出现在地板上
这里详细介绍如何处理第二种所示的情形。
显影球出现在底板时,和身体相距很近,甚至有“嵌入”的情况,如下图:
在处理第一种情况时,可以用一个滑窗(比如,滑窗大小50x50,小球尺寸固定,大概占11x11,不同扫描效果有差别)去直接扫描整幅图,因为小球距离身体足够远,我们完全可以根据一些条件判断小球是否存在与滑窗。例如,在这个滑窗内,归一化后如果像素值大于45的像素个数多余45个且小于100个,就初步认为这个滑窗内有小球存在。注:这些参数是根据数据集调整的。
但是,在第二种情况下,就不能用原来的大滑窗(比如还是50x50)去扫描。
原本,我们要定位小球在空间中的位置,想法是找出小球在轴冠矢三面哪些影像出现。将这些小球出现的轴冠矢三面的影像合起来便会形成对应的“小的”立体空间,在这些立体空间中再定位小球的空间位置。
所以,我们要求出小球在轴冠矢三面哪些影像出现。
一般而言是分别对轴冠矢三面的影像进行扫描,依次判断。
但是根据医学影像建模的特点,在LPS坐标系中,如果我们能判断小球在图片中的坐标范围,就能直接推出此小球在冠面、矢面的影像顺序。例如,某一小球在轴面,纵坐标范围[h1,h2],横坐标范围[w1,w2]。轴面影像原本尺寸为(Z,H,W).
此小球在冠面出现的影像初始位置为:
同理,在冠面出现的最后一个影像位置为:
故,此小球在冠面出现的影像范围为[h1,h2].
同理,此小球在矢面出现的影像范围为[w1,w2]。
所以,我们只需要”准确“求出小球在轴面的坐标范围。
尝试了几种预处理方法:
ex1:对原始的轴面影像进行”隔层相减“,这种方法在第一种情况预处理时效果比较好,因为一个小球在影像中是连续出现的,比如出现在第i张~第i+6张,同时根据扫描的特性,中间位置的影像上小球是最亮的,两边缘位置的影像上小球是最暗的,那么如果我们用第i+3张减去第i-1张。在结果影像上,小球会很亮。那身体部分会怎么样呢?因为身体部分在所有影像中都是连续的,不会像小球这样在它的位置上出现“突变”。所以“隔层相减”之后,身体部分的大量像素点急剧衰减,这样的“小球部分增强,身体部分减弱”是我们想要的结果。
但这个中方法不适合第二种情况,测试时发现如果此方法应用于第二种情况,结果对“间隔数”十分敏感。还是以上面的例子说明,第i+3张小球最亮,我们减去第i-1张,在第一种情况中,第i-1张小球位置是纯黑的;但在第一种情况下,对于“部分嵌入身体”的小球,第i-1张,原本的小球区域很可能是身体部分。
ex2:对原始图像进行增强,让身体部分和小球之间的界限更加明显,然后使用霍夫圆进行检测。经过处理,将界限变得明显是可以做到的,但是霍夫圆检测不适合在这种情形中检测圆形,我一开始调参很多次,但总不能找到一组合适的参数适配手头的几个数据集。最后放弃这种思路,领导说霍夫圆检测时要求小球直径不能太小,一般需要先将原图放大,且对像素很敏感。
final:还是采取滑窗
因为要在轴面比较准确的定位小球位置。又了解到小球至多只会嵌入身体一半,不会完全嵌入。所以采用“倒T形”滑窗:
滑动时只用主窗口在图像中滑动。
具体细节如下:
1、重采样是必须的,因为不同的数据集,虽然小球的尺寸是固定的,但轴面的图像大小不同,比如,小球在720x720大小的图像中像素数量为11x11;但在300*300大小的图像中像素数量大概为5*5。这样,采用滑窗时,就没有一个统一的标准