肺部CT图分割与模型重建

  虚拟现实技术课程中,我们组接到了肺部CT分割与建模的任务。通过多方查找相关的教程,将我们组的课程任务完成情况总结记录如下:

任务说明

  肺癌手术治疗的关键是尽可能少的切除感染部位并保留大部分健康的肺组织。传统的计算机手术辅助系统在PC屏幕上显示病人的CT图像。但这种辅助系统不是真正的三维系统,不能很好地向外科医生展示患者肺血管和气管的位置。
  为了更好的显示患者的肺部三维结构,我们通过对患者的肺部CT数据进行分析和处理,实现对肺部的分割提取并对提取的肺部数据进行模型创建,尽可能准确的还原肺部的结构。

技术方案

  原始数据为某人的肺部CT图,我们需要对CT图数据进行处理,然后根据处理过的数据分割获取肺部组织的结构进行模型重建。

肺部实质分割

  处理CT数据的时候,我们需要获取肺部的mask来实现肺部结构的提取。我们主要采用了阈值分割、图像形态学、图像连通域等方法来进行肺部的分割。

肺部模型重建

  通过对每一张CT切片进行肺部实质分割,我们得到每一张CT切片中的肺部结构图(以数组的方式存储),多张切片组合成一个三维数组。然后,我们可以通过marching_cubes方法计算三维数据中的曲面并使用matpoltlib和matlab分别显示肺部的的三维模型。

环境介绍

  编程语言:Python
  主要使用的第三方库:skimage、matplotlib、mayavi
  (1)Python
  Python 是一种面向对象、解释型、弱类型的脚本语言,它也是一种功能强大而完善的通用型语言。
  相比其他编程语言,Python代码非常简单,上手非常容易。比如我们要完成某个功能,如果用Java需要100行代码,但用Python可能只需要20行代码,这是Python具有巨大吸引力的一大特点。
  同时,Python具有完备的语言生态,有很多可用的第三方库,且第三方库的安装和使用非常方便,极大的简化了Python程序的编写。
  (2)skimage
  skimage的全称是scikit-image SciKit (toolkit for SciPy) ,它对scipy.ndimage进行了扩展,提供了更多的图片处理功能。它是由python语言编写的,由scipy 社区开发和维护。skimage库由许多子模块组成,各个子模块提供不同的功能。主要子模块有:
  ■ filters——图像增强、边缘检测、排序滤波器、自动阈值等
  ■ draw——操作于numpy数组上的基本图形绘制,如线条、矩形、圆等
  ■ transform——几何变换或其它变换,如旋转、拉伸和拉式变换等
  ■ morphology——形态学操作,如开闭运算、骨架提取等
  ■ exposure——图片强度调整,如亮度调整、直方图均衡等
  ■ feature——特征检测与提取等
  ■ measure——图像属性的测量,如相似性或等高线等
  (3)matplotlib
  matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表,可根据数据集自行定义x、y轴,绘制图形(线形图,柱状图,直方图,密度图,散布图等),能够满足大部分的需要。matplotlib中最基础的模块是pyplot。
  (4)mayavi
  Mayavi2完全用Python编写,因此它不但是一个方便实用的可视化软件,而且可以方便地用Python编写扩展,嵌入到用户编写的Python程序中,或者直接使用其面向脚本的API:mlab快速绘制三维图。

技术实现

肺部实质分割

  CT图中包含扫描区域的所有物体,包括床板、衣物、人体组织等等,首先需要做的便是将肺部实质提取出来,去除所有其他我们不关注的数据信息。以一张CT切片为例,整个流程如下所示:

  • (1)二值化
      由于CT值的范围是-1000~+1000,所以可以根据不同组织或者结构的CT值对CT图进行二值化操作。对与肺部CT而言,一般以空气的CT值(-300)为界,将大于-300的位置置为1,小于-300的位置置为0。这样就可以将数据分为外部空气、内部空气、躯干组织。如下图所示:

  • (2)处理边界
      边界处理是为了将轮廓外的1值清除,达到删除其他杂物的目的,获得的图像结果如下所示: