吴楠,李岩芳,蒋振刚
(长春理工大学 计算机科学技术学院,长春 130022)
基于CT图像的肾脏建模技术用于对病患的肾脏CT图像进行几何建模。该技术在虚拟手术、三维可视化、生物系统仿真等领域有着重要的作用[1]。在手术前,通过使用患者的CT图像构建肾脏模型,可以让医生提前通过模型对结石或者病变的地方进行分析,从而规划手术路径,提高肿瘤定位精度,从而提高手术的成功几率[2]。
肾脏建模技术中主要的算法为图像分割算法,通过图像分割算法将目标分割出来,从而生成模型。常用的图像分割方法有阈值分割、边缘分割、区域生长、水平集、图割等。阈值分割中主要常用的有Otsu,也称大津法。阈值分割方法简单,计算速度快,但是其分割依据只有像素的灰度值,没有图像的空间信息,所以容易受到噪声的干扰[3]。区域生长算法只需要一些种子点便可以分割出目标,但是因为生长准则通常也只考虑单个像素的灰度值是否符合要求,并不含有空间信息,所以一般容易受到噪声干扰[4]。水平集(Level Set)算法在图像分割的适应性较好,只要设置初始曲线,该算法即可自动寻找目标的边缘位置[5,6]。但是由于其过于依赖图像的梯度信息,如果目标的边缘部分梯度信息变化不大,则很容易导致分割错误。图割算法(Graph Cuts)是一种基于能量最小化进行目标分割的方法[7,8],该算法充分利用了图像中的灰度和空间信息,是目前分割效果较好的一种算法。
几何建模是物理建模的基础,好的几何建模会提升外表渲染的临场感,同时也会给物理建模带来便利,提高物理性质的真实度。随着计算机图形图像学的发展,越来越多的几何建模方法被提出,每种方法都是针对一定的需求提出来的,都有其自身适用的领域。如今计算机的硬件技术飞速发展,计算速度也越来越快,对人体软组织建模算法的速度需求已不再那么高,而如何提高建模的精度和减少人工成本则逐渐成为主要研究方向。为此,本文主要从以下两个方面考虑,改进建模方法。
(1)对建模精度的改进
人体组织的几何建模作为虚拟手术的基础,有着非常重要的地位,建模的精度会直接影响后面形变仿真的计算精度和力反馈的真实感。同时,随着计算机技术的发展,人们对画面质量的要求也越来越高,而提高画质首先需要提高建模的精度。
(2)对人工交互的改进
随着计算机图形学的发展,全自动的建模方法已经成了未来发展的方向。自动建模可以极大的提高工作效率,但是建模效果却明显没有人工建模的质量高。所以本文的目标是在不降低建模质量的前提下,尽量减少建模中的人工成本。
图像分割是三维建模的基础,进行图像分割的目的就是将病变组织或医生所感兴趣的组织区域提取出来,从而能够帮助医生更加准确地对病变组织进行分析,经过图像分割后对于敏感区域的显示更加清晰,有利于进一步的诊断和治疗。
为了实现高建模精度和低人工成本的目标,本文尝试了一种新的建模方法,既保留了图割算法的高精度优点,又有水平集算法的低人工成本优点,整个流程如图1所示。
首先,先读取所有CT图片,并用中值滤波去除噪声。然后从CT图片中取出肾脏较为清晰的一张图,手动选取待分割目标的中心部位,生成种子点。将图片和种子点进行下采样降低分辨率,再通过水平集进行粗分割。然后,将图片和水平集分割得到的结果分别还原成原始图片的大小,再将分割结果中的前景和背景分别进行腐蚀,减小区域面积,作为前景和背景种子点。之后会在两个区域之间产生一个环形区域,如图2所示。其中白色部分为前景种子点,黑色部分为背景种子点,中间的灰色区域为待分割区域。使用图割算法,放入上一步得到的种子点,进一步细分割此图片,得到最终的分割结果。
图1 建模流程图
图2 对分割结果的前景和背景分别做腐蚀操作
将当前分割结果的前景和背景分别腐蚀,读取与此图片相邻且未分割的图片,将刚才腐蚀得到的区域作为种子点,使用图割算法对此图片进行分割。一直重复进行本操作,即使用上一张图片分割区域的腐蚀结果作为下一张图片的种子点,直到所有图片分割结束。最终将所有图片的分割结果堆叠起来,即可得到一个肾脏模型的三维模型。
在得到三维模型之后,因为模型的分割是基于二维图像的,所以在相邻两个图片之间,会出现过度不平滑的情况,模型中部分区域会出现锯齿,所以需再使用三维中值滤波进行平滑处理[9]。
普通的中值滤波是应用在二维图像上的,在处理三维图像上,二维中值滤波就不再适用。针对三维模型的特殊性,本文提出了一种快速三维中值滤波算法,将二维图像上的中值滤波推广到三维图像上,并优化其速度。
首先,先将中值滤波算法从二维推广到三维上。取一像素,把该像素周围r×r×r的三维矩阵范围里的所有灰度值都保存到一个数组中,并将数组中的值从小到大排序,然后选取中间位置的灰度值输出,作为当前像素点的灰度。遍历三维图像上的每个像素点,均使用此方法进行处理,即完成一次三维图像上的中值滤波操作。
分割后的图像不是灰度图,而是二值图像,即只有黑白两种颜色。针对这种图像的特殊性质,可以将中值滤波简化。原始的中值滤波在遍历每个像素点时,在每个像素周围寻找中间灰度值,当做这个像素点的灰度值,而在二值图像中,只有两种灰度值,0和255。所以在计算灰度中值时,只需分别计算这个像素周围白色和黑色像素的数量即可,如果白色像素的数量超过了黑色,那么中间像素值即为白色,反之则为黑色。整个过程的伪代码如下:
在排序算法中,平均速度最快的算法时间复杂度也要O(nlog2n)。而该方法省略了对像素排序的过程,从而提高了中值滤波的速度。
在硬件方面,本文使用电脑配置为Windows7 64位系统,3.20GHz的CPU和10GB的内存。软件方面,使用pycharm和Python为开发环境,并使用了vtk和opencv等开源库,实现了人体组织建模算法及三维渲染。三维医CT图像数据大小是512*512*640。
通过人工手动选取初始种子点后,再使用水平集和图割算法分割,可得肾脏的分割结果。从原始图片和分割结果中,分别取出3张不同位置的图片进行对比,如图3、图4所示。从图中可以看出每张图都能准确的分割出肾脏的轮廓形状,但是分割边缘会有少许的锯齿。
图3 肾脏不同位置的原始图片
图4 肾脏不同位置的分割结果
为了使模型更加平滑,在分割后使用三维中值滤波算法,对模型进行平滑处理。模型的主视图如图5所示。可以看出,处理后的模型没有了原来的锯齿,变得更加平滑,也使模型更加美观。
图5 平滑处理效果图
最后使用vtk对模型进行三维渲染,显示结果如图6所示,此时可以看出模型反映出了肾脏的真实形状。
图6 模型的三维渲染效果图
按照是否有人工参与,评价的方式主要分为两类,主观评价和客观评价。主观评价的方法容易含有偏见,而且耗费人工成本大,所以通常使用客观评价的方法来计算分割精度。人工分割的结果可以作为评价的金标准,因此这里把人工分割的结果作为标准的分割结果,用来分析分割算法的精度。
随机抽取3张肾脏的分割结果,计算并标记使用该算法分割和人工分割的区别,得到结果如图7所示。其中,灰色为完全匹配的部分;浅色为过分割的部分,它在分割结果中,但不在标准结果中。可以看出分割错误的部分主要分布在目标的边缘区域,过分割和未分割部分的分布情况没有明显特征。
再任取一张肾脏的图片,依次使用水平集、图割和中值滤波三种算法对图像进行处理,对比分析图片的分割精度,如图8所示。可以看出图割算法比水平集算法的分割精度较高,而之后的平滑处理则对分割精度影响不大。
为了客观评价分割精度,通过对比参考文献[10],本文选用公式(1)的算法来评估分割结果的精度。取出5张图片的分割结果与标准数据进行对比。
其中,R是分割的精度,T是标准分割结果,FT是过分割部分,TF是未分割部分。
图7 肾脏不同位置的分割准确性对比
图8 肾脏同一位置使用不同算法处理的准确性对比
在模型中从上到下随机抽取5张图片,对使用不同分割方法所得的分割精度进行对比,得到结果如图9所示。从图中可以看出,水平集算法在分割精度上比图割算法稍差,一部分原因是由于水平集本身对形状复杂的目标分割效果不如图割算法好;另一部分原因是因为在水平集分割阶段,不要求分割精度太高,对停止迭代的时机没有充分优化。
图9 肾脏不同位置的图片使用不同分割算法的精度对比
公式(1)中T为正确分割的结果,它分布在模型的各个位置,所以T和肾脏的面积正相关。而分割错误的地方主要集中在肾脏的边缘部分,这部分像素的数量和模型的周长正相关。在模型的头尾两端平均分割精度都低于中间的精度,是因为在两端肾脏区域的面积小,导致公式(1)中T减小,而FT和TF减小程度没有那么大,最后导致精度R在两端的位置较低。
图10 不同病例的肾脏图
计算整个肾脏的平均分割精度,得到水平集算法为93.16%,图割算法为94.63%。然后取4个不同病例的CT图,如图10所示,可以看出不同病例CT图像的画质、对比度和亮度等都是不同的。
然后分别使用水平集和图割算法对这4个病例进行分割并计算分割精度。再加上之前的病例,将分割精度绘制成折线图,如图11所示。从图中可以看出图割算法的分割精度都较水平集算法高,而同一种算法的分割精度也会因为病例的不同而变化,这是由于CT图像的质量和对比度等因素的不同而导致同一算法的分割精度也会产生变化。
图11 不同病例使用两种算法的分割精度对比图
现有图割算法如果想要得到较好的分割效果,必须要将种子点放在分割边缘附近才行。图12为肾脏分割时错误的种子点选取,图13为正确分割的种子点选取。图12中肾脏部分的右上角有一块黑色区域没有设置背景种子点,被当成前景分割出来,最终导致分割错误。所以即使用种子点将目标包围也不能完美的分割,还需把种子点贴近目标的边缘,才能完美的分割。这就要求对种子点的选取有很高的要求,如果想得到好的分割结果,则需要花费较多的人工成本去标记种子点。
图12 错误分割的种子点
图13 正确分割的种子点
而本文中的算法,只需在待分割目标中间手动选取一个种子点,即可自动完成全部分割过程。且对种子点的位置没有限制,只需选在目标内部即可。由此可见,该方法可在不降低图割算法精度的前提下,大大减少人工成本。
本文中提出的人体组织建模方法,主要针对提高建模质量和降低人工成本的需求,采用水平集和图割算法各自的优点,组合成一个新的算法。整个分割过程,只需在待分割目标内部手动选取一个种子点,对种子点的位置大小均无要求,之后便可自动分割出目标并生成模型。该算法涵盖了两个算法的优点,能以极低的人工成本生成高精度的模型,且模型表面平滑,与实物非常相似。得到的模型可以给虚拟手术,医学教学和3D打印等领域使用。
虽然本文在建模方面取得了一定进展,但是全自动建模方法依然是研究的主要方向。如何能不需人工操作,变成完全自动化,还需在未来进一步的研究,只有克服困难并改进这些不足,才能使虚拟手术技术踏上一个新的高度。