基于VTK&ITK的Qt应用程序开发

关于VTK与Qt整合的程序示例,我们在博文(点击这里查看)里面已经讲得相当详细了。总而言之,言而总之,不外乎先写CMakeLists.txt脚本,然后用CMake Configure,再Generate对应的工程,注意要打开生成的StartVS_Debug.bat或者StartVS_Release.bat,因为两个批处理文件已经设置好所有的环境变量,可以保证你在进入Visual Studio环境,编译、链接、运行程序的时候不会出错。这些内容在上一篇博文里已经讲得够清楚了。

        我们已经知道:VTK就是Visualization Toolkit,做可视化的工具包;Qt是做界面的,而且是跨平台的;ITK是Insight Segmentation andRegistration Toolkit的缩写,对于做医学图像的人都是非常熟悉的一个开发包,主要封闭了很多与医学图像相关的分割与配准的算法。这三个一结合,各司其职:VTK负责可视化;ITK没有可视化的东西,但算法较多,而且对文件读写支持非常好(比如医学图像的标准格式DICOM图像,里面用到了GDCM,可以很好地支持DICOM图像的读写操作),所以ITK负责做底层算法处理;Qt就做界面,负责与用户交互。大概就像图1所画的。



图1 医学图像应用程序常用的开发工具

        其实这一类的应用程序,你在百度里Google一下,或者在CSDN里PUDN一把,类似的程序源码一大堆,好像没什么好写的。其实写这篇博文的出发点是介绍几个功能比较强大的类,这些类只是我们整理的而已,版权归原开发者所有,我们只是把它整理一下,让它更容易使用。先看一下我们所用到的类主要有:

itkImageToVTKImageFilter

vtkBorderSelectionWidget

vtkDataSet3DCroppingPlaneCallback

vtkImage3DCroppingBoxCallback

vtkImageBlendWithMask

vtkInteractorStyleImage2D

vtkOrientationAnnotation

vtkOrientedBoxWidget

vtkRulerWidget

vtkSynchronizedView

vtkViewImage

vtkViewImage2D

vtkViewImage2DCommand

vtkViewImage2DFullCommand

vtkViewImage3D

        这15个类中,其中itkImageToVTKImageFilter这个类应该比较眼熟,特别是对于以前有弄过所谓的VTK与ITK结合的程序的时候。这些类具体干什么的,就不再一一解释了,如果全部都做解释的话,估计得写一本书。我们只重点看一下它们的应用,特别是vtkViewImage2D和vtkViewImage3D这两个类的使用。

步骤还是一样的,先写CMakeLists.txt文件,我们只在这篇博文的基础上来改就行了,照葫芦画瓢,类似:

[plain]  view plain copy
  1. find_package( ITK REQUIRED )  
  2. include( ${ITK_USE_FILE} )  
  3. ……  
  4. TARGET_LINK_LIBRARIES (MedicalImage4Views  
  5.  ${VTK_LIBRARIES}  
  6.  ${ITK_LIBRARIES}  
  7.  QVTK  
  8.  )  

        接着设计一下程序界面,我们在Qt的Designer里面画就行了,类似图2:

图2 医学图像四象限视图程序界面设计

        然后从设计的Qt UI文件里派生出一个类,在这个类里面实现要实现的功能。部分代码:

[cpp]  view plain copy
  1. //头文件:  
  2. private slots:  
  3.     //打开图像  
  4.     voidonOpenSlot();  
  5.    
  6. private:  
  7.     //初始化  
  8.     void initViews();  
  9.     void setupConnection();  
  10.   
  11.     //渲染器  
  12.     vtkSmartPointer                m_AxialRenderder;  
  13.     vtkSmartPointer                m_SagittalRenderder;  
  14.     vtkSmartPointer                m_CoronalRenderder;  
  15.     vtkSmartPointer                m_3DRenderder;  
  16.   
  17.        //渲染窗口  
  18.     vtkSmartPointer< vtkRenderWindow>            m_AxialRenWin;  
  19.     vtkSmartPointer< vtkRenderWindow>            m_SagittalRenWin;  
  20.     vtkSmartPointer            m_CoronalRenWin;  
  21.     vtkSmartPointer            m_3DRenWin;  
  22.   
  23.        //交互器  
  24.     vtkSmartPointer< vtkRenderWindowInteractor>  m_AxialInteractor;  
  25.     vtkSmartPointer  m_SagittalInteractor;  
  26.     vtkSmartPointer  m_CoronalInteractor;  
  27.     vtkSmartPointer  m_3DInteractor;  
  28.    
  29.     vtkSmartPointer< vtkViewImage2D>           m_AxialImage;  
  30.     vtkSmartPointer< vtkViewImage2D>           m_SagittalImage;  
  31.     vtkSmartPointer< vtkViewImage2D>           m_CoronalImage;  
  32.     vtkSmartPointer< vtkViewImage3D>           m_3DData;  
  33.    
  34. //源文件:  
  35.    m_AxialRenWin->AddRenderer(m_AxialRenderder);  
  36.    m_AxialInteractor->SetRenderWindow(m_AxialRenWin);  
  37.    m_AxialWidget->SetRenderWindow(m_AxialRenWin);  
  38.        m_AxialInteractor->Initialize();  
  39. ……  
  40.     //Axial视图  
  41.     m_AxialImage = vtkSmartPointer::New();  
  42.     m_AxialImage->SetRenderWindow(m_AxialRenWin ) ;  
  43.     m_AxialImage->SetRenderer(m_AxialRenderder ) ;  
  44.     ……  
  45.     m_AxialImage->SetLinkZoom( true );  
  46.     m_AxialImage->SetBackgroundColor(0.0,0.0,0.0);  
  47.     m_AxialImage->SyncResetCurrentPoint();  
  48.     m_AxialImage->SyncResetWindowLevel();  
  49.     m_AxialImage->SetOrientation(2);  
  50.     m_AxialImage->SetAboutData("AxialView");  
  51. ……  

程序要实现的功能非常简单,就是打开一个三维的医学图像,然后在四个视图:横断面、矢状面、冠状面和三维视图上显示。

程序在以下环境中测试通过:Qt-4.8.4;VTK-5.10.0;ITK-3.20.1;Visual Studio 2008;CMake-2.8.10.2;Windows 7 64位旗舰版。运行结果如图3和4所示。

图3 医学图像四象限视图示例截图1

图4 医学图像四象限视图示例截图2


==========欢迎转载,转载时请保留该声明信息==========

版权归@东灵工作室所有,更多信息请访问东灵工作室


教程系列导航:http://blog.csdn.net/www_doling_net/article/details/876368

你可能感兴趣的:(图像特征)