基于GraphCuts的医学影像分割
工具
VS2015,ITK4.10,VTK7.1, Qt5.9.5
VS2015大家应该很熟悉,就是一个编译器,不用多说;
ITK是医学影像处理工具,目前版本已经更新到5.1了,作者这里还是用的比较老旧的4.10版本;
VTK是医学影像显示工具,目前已经更新到9.0了,作者使用的是7.1版本;
Qt是UI工具,目前已经更新到5.14版本了,作者里使用的是5.9版本。
如果读者们想详细了解ITK,VTK,Qt等工具,请大家自行到各个工具的官网查看。
.
效果图
关于GraphCuts算法的原理,这里不做过多的描述,因为该算法已经是相当的成熟了,如果读者们想了解该算法,直接在度娘上搜索。下面直接看效果图:
如上图所示,左上角是病人的肝脏图像,又上角是肝体的分割结果,目测分割效果貌似 还不错。当然,如果 读者想知道分割精度,那只能用工具去计算。左下角是肝脏影像的体绘制,体绘制效果很差,因为有很多参数需要调节,作者在这里偷懒,就没有管体绘制的效果。右下角是分割肝体的体绘制,其体绘制效果也是很不理想的,作者准备花费一些时间,把体绘制做好,到时候再给各位读者看。
程序主界面
程序主界面如下图所示:
使用方法
(1)读取待分割图像和标记图像
从主界面上看,菜单栏有File,Edit,Segmentation,Help。File菜单就是加载需要分割的图像和标记图像,看下图:
通过点击File->OpenSourceImage就是加载想要分割的图像,上图显示了我们加载分割图像是一幅有63层切片的三维影像。通过点击File->OpenPreSegImage就可以读取标记图像,也叫预分割图像。在这里为什么要读取预分割图像?我们在做自然图像GraphCuts算法分割时,也是要标记图像的,只不过自然图像可以直接打开,可以直接使用鼠标标记。而医学影像就麻烦一点,需要我们使用专业的工具才能标记图像。
(2)参数设置
当读取完带分割图像后,就要进行GraphCuts算法的参数设置,通过点击菜单栏的Edit->ParameterSet即可弹出参数设置页面,如下图所示。
在上图中,BackgroundLabelValue是标记图像中背景的标记灰度值,ObjectLabelValue是标记图像中前景的灰度值,其他四个参数分别是GraphCuts算法中的Lambda,Sigma,Radius,Background值。
通过上面的操作,我们就已经设置好了GraphCuts算法的相关参数。当然读者可能想问,GraphCuts算法的参数到底该怎么设置,以及标记图像的前景和背景如果设置?关于GraphCuts算法参数值,需要读者多次实验,才能找到一个最合理的值,这里,作者使用的参数值:lambda为10,sigma为1,radius为1,background为0。至于为什么设置这几个值
也是读者经过多次实验获得。然后是标记图像的前背景灰度值需要怎么设置,这里并没有特殊的要求,可以随便设置。比如,作者设置前景标记值为2,背景标记值为1。下面通过专业工具查看标记图像。
白色部分就是作者标记的前景,灰色部分就是作者标记的背景。值得注意的是,这里分割的是一幅三维影像,所以我们的标记图像应当也是一副三维图像,而作者只是将其中的某一层切片提取出来给读者们查看。
(3)分割图像
点击菜单栏中的Segmentation->Segment就可以进行分割了,由于图像太大了,分割需要很多时间,这里就省略分割过程,直接看分割效果。
目测分割效果还是很不错的,至于具体精度是多少,需要读者们自行去计算。不过,作者曾经也计算过,大约是80%-95%之间,相对来说,可以满足医院的要求。
作者也添加了体绘制功能,由于体绘制效果实在太差了,本应该去掉体绘制功能的,但是作者也花费了一些时间,所以还是尊重自己的劳动成功,目前保留体绘制功能。体绘制图如下图。
后续
有兴趣的同学可以加我的QQ1373425865或者微信(微信二维码在下面)。