一、 系统概况
我们实现了一个系统,可以从CT图像中将肺部从胸腔中分离出来,并且通过三维重建实现可视化。该系统是基于Visual Studio 2013平台,借助VTK-7.0和Qt5.6开源库通过C++语言实现。
二、 系统设计
肺部CT图像分割及重建系统的实现需要几个方面的工作,一是CT图像的肺部分割;二是CT图像的三维重建;三是可视化界面的设计。
根据工作内容的不同,需要用到不同的开源库。我们通过VTK实现了CT图像的三维重建,包含体绘制和面绘制两种重建算法;通过Qt实现了UI的设计。因此在windows10环境下用VS2013编译支持Qt的VTK库,是前期的准备工作。
在肺部分割这一部分工作上,我们采用以阈值分割为主,其余简单图像处理操作如滤波操作等为辅,进行肺部的分割。
三、系统实现(含源代码)
3.1 前期准备工作——Windows10环境下用VS2013编译支持Qt的VTK库
网上有大量的相关文章,但由于VTK,VS,Qt的版本不同,可能导致Qt与VTK的联动失败。在此,我们参考了两位博主的搭建方式:
(1) http://www.cnblogs.com/tianhu9102/p/7641397.html
(2) https://blog.csdn.net/u011017966/article/details/40984473
这两篇文章对应两种不同的搭建方式,一种是在两种库编译成功后通过直接添加库目录,包含目录的方法实现VTK与Qt联动;另一种则跳过了添加库目录,包含目录等繁琐操作,程序全部用cmake来管理,直接通过cmake进行编译实现一个工程文件。
经过验证,两种方法均可实现VTK + QT的联动。
3.2三维重建的实现
我们采用了两种三维重建方法:体绘制和面绘制。
面绘制是将感兴趣的部分以等值面的形式抽取出来便于利用真实感技术,通过任意旋转和变换光照效果来生成高质量的三维图像,并可以方便的对其进行观察和分析。
面绘制的代码如下:
void MainWindow::open(){
//抽取等值面为骨头的信息
vtkSmartPointer< vtkMarchingCubes > boneExtractor =
vtkSmartPointer< vtkMarchingCubes >::New();
boneExtractor->SetInputConnection(threshould->GetOutputPort());
//boneExtractor->SetValue(0, 500); //设置提取的等值信息
boneExtractor->SetValue(0, 1000);
boneExtractor->SetNumberOfContours(1);
boneExtractor->Update();
//剔除旧的或废除的数据单元,提高绘制速度(可略去这一步)
vtkSmartPointer< vtkStripper > boneStripper =
vtkSmartPointer< vtkStripper >::New(); //三角带连接
boneStripper->SetInputConnection(boneExtractor->GetOutputPort())