【医学图像处理】VS2010+ITK+VTK的搭建经验

医学图像处理的程序库,目前比较广泛使用的是ITK和VTK。书上和网上搭建组装的文章有很多,但是往往搭建失败。笔者参考了各篇文章,终于一次性顺利搭建成功。

以本文为主,也可参考这个文章:

       http://blog.csdn.net/u013089125/article/details/18736617

 

1-   安装准备:

       Windows 8.1

       VS 2010

       CMake: cmake-2.8.10.2-win32-x86.exe 

                     下载网址:  http://www.cmake.org/cmake/resources/software.html

       ITK: InsightToolkit-4.4.2.zip

                     下载网址:  http://www.itk.org/ITK/resources/software.html

        VTK:  vtk-5.10.1.zip 、 vtkdata-5.10.1.zip

                     下载网址:  www.vtk.org

       2-cMake的安装

       按照默认路径和默认设置安装即可,注意其中某一步勾选“创建桌面快捷方式”。安装完成后使用桌面图标启动(据说与cmake安装目录下的启动有区别,然而我并没有发现区别在哪)。

 

       3-ITK的安装

       以本文为主,也可参考这个文章:

            http://blog.sina.com.cn/s/blog_79aae9bd0101da0c.html

 

       流程简介:①将资源包的东西进行cmake,生成可利用的目标资源。②在生成的资源里,找到ITK.sln,用VS打开后进行编译生成。 ③准备样例,同时修改环境变量、修改编译器的include目录、lib目录、链接器的依赖项,为样例生成解决方案。

 

【第一步:将资源包的东西进行cmake,生成可利用的目标资源】

       在准备安装的目录下,先创建一个总目录文件夹,并在此文件夹下创建2个文件夹,分别命名为ITK、VTK。我所创建的目录是这样的:F:\Medical Graphics\ITK和F:\Medical Graphics\VTK。将InsightToolkit-4.4.2.zip在ITK文件夹内解压,得到F:\Medical Graphics\ITK\InsightToolkit-4.4.2,并在ITK目录下创建ITK_bin,即F:\MedicalGraphics\ITK\ITK_bin。

       打开cmake,将where is the source code的路径设置为原始资源的路径,我的是F:\Medical Graphics\ITK\InsightToolkit-4.4.2;将where to build the binaries的路径设置为目标存放路径,我的是:F:\MedicalGraphics\ITK\ITK_bin。

注意cmake的使用方法,advanced选项框与显示相关,勾选之后会显示“进阶的组件”,但不影响配置过程所需的时间。Configure用来配置资源,generate用来生成最终的资源。

接下来,点击configure,选择编译器,我选择VS10(根据你的编译器版本而定,虽然我的系统是64位,但是曾记得编译时只能用win32,可能是我的VS是32位吧,反正选64位总是容易出各种问题,毕竟之前很多组件也是用的32位。选择那个不带64后缀的就是32位)。确认之后,等待10来分钟,会出现7个可勾选行:

Ø  其中BUILD TESTING 和BUILD EXAMPLES是为了测试用的,一般不勾选,勾选的后果就是,下一步配置需要1个多小时。

Ø  需要勾选BUILD_SHARED_LIBS,勾选了之后, ITK 生成的库文件编译成 DLL 动态链接库形式。

Ø  勾选Advanced之后更改CMAKE_INSTALL_PREFIX(表示编译ITK后生成的 lib 及头文件等安装路径)目录,我的设置为 F:\Medical Graphics\ITK。(安装完成后,该文件夹下会出现include、lib、bin等文件夹)

Ø  其他选项可以不修改

再次点击configure,直至所有条目都变成灰色,表示配置成功, 点击 Generate确认。

 

【第二步:在生成的资源里,找到ITK.sln,用VS打开后进行编译生成】

打开F:\MedicalGraphics\ITK\ITK_bin里面的ITK.sln文件,点击:生成->生成解决方案。如果没有错误,在解决方案里面找到Install文件,选中点击右键->仅用于项目->仅生成INSTALL。(如果编译过程中有错误,应该删除F:\Medical Graphics\ITK\ITK_bin里面的文件,重新安装)

完成后会在 F:\MedicalGraphics\ITK 目录生成 lib、include、bin 等文件夹:

Ø  lib目录存放的是F:\Medical Graphics\ITK\ITK-4.4.2-bin\bin/debug中的 ITK lib 文件;

Ø  include 则存放 ITK 所有的头文件;

Ø  bin 目录存放的是 ITK 生成的一些可执行文件。

 

【第三步:准备样例,同时修改环境变量、修改编译器的include目录、lib目录、链接器的依赖项,为样例生成解决方案】

环境变量设置:我的电脑->属性->高级->环境变量->添加:F:\Medical Graphics\ITK\ITK_bin

将F:\MedicalGraphics \ITK\bin中的.dll文件拷贝到C:\WINDOWS\system32中(注意:64位系统的为了保险起见,可能还需同时拷贝到C:\WINDOWS\sysWOW64中)。

从ITK\InsightToolkit-4.4.2\Examples\Installation目录下直接复制HelloWorld文件和所需的CMakeLists.txt文件。如在ITK文件下创建test文件夹,然后再test文件夹下创建Hello和Hello_bin文件夹,然后把前面复制的两个文件放入Hello文件夹中,启动cmake,按第二步的生成方法,把Hello完整目录放入第一栏,把Hello_bin完整目录放入第二栏,点击“Configure”,直至红色消失,没错误直接点击“Generate”,然后用到Hello_bin中用VS2010打开HelloWorld,sln文件,右击HelloWorld,选择”设为启动项目“,然后点击运行即可。

我的出现了错误。于是乎,按照老套路,设置了头文件目录、库目录、链接器输入值。(虽然不知道这步是不是必需,按照以前安装OpenCV的经验来做的)。

打开属性面板,找到HelloWorld的Debug | Win32,展开后双击Microsoft.Cpp.Win32.user,然后更改相应设置。

修改“VC++目录”中的“包含目录”,即把刚刚得到的include目录添加进去。(可能需要直接关联到最底层的目录,所以多添加几个目录。)我添加的是F:\Medical Graphics\ITK\include和F:\MedicalGraphics\ITK\include\ITK-4.4。

修改“VC++目录”中的“库目录”,即把刚刚得到的lib目录添加进去。我添加的是F:\Medical Graphics\ITK\lib。

修改“链接器”中的“输入”,修改附加依赖项,即添加lib目录下的所有带有lib后缀的文件,如下

ITKBiasCorrection-4.4.lib

ITKBioCell-4.4.lib

ITKCommon-4.4.lib

ITKDICOMParser-4.4.lib

itkdouble-conversion-4.4.lib

ITKEXPAT-4.4.lib

ITKFEM-4.4.lib

itkgdcmCommon-4.4.lib

itkgdcmDICT-4.4.lib

itkgdcmDSED-4.4.lib

itkgdcmIOD-4.4.lib

itkgdcmjpeg8-4.4.lib

itkgdcmjpeg12-4.4.lib

itkgdcmjpeg16-4.4.lib

itkgdcmMSFF-4.4.lib

ITKgiftiio-4.4.lib

itkhdf5_cpp-4.4.lib

itkhdf5-4.4.lib

ITKIOBioRad-4.4.lib

ITKIOBMP-4.4.lib

ITKIOCSV-4.4.lib

ITKIOGDCM-4.4.lib

ITKIOGE-4.4.lib

ITKIOGIPL-4.4.lib

ITKIOHDF5-4.4.lib

ITKIOImageBase-4.4.lib

ITKIOIPL-4.4.lib

ITKIOJPEG-4.4.lib

ITKIOLSM-4.4.lib

ITKIOMesh-4.4.lib

ITKIOMeta-4.4.lib

ITKIONIFTI-4.4.lib

ITKIONRRD-4.4.lib

ITKIOPNG-4.4.lib

ITKIOSiemens-4.4.lib

ITKIOSpatialObjects-4.4.lib

ITKIOStimulate-4.4.lib

ITKIOTIFF-4.4.lib

ITKIOTransformBase-4.4.lib

ITKIOTransformHDF5-4.4.lib

ITKIOTransformInsightLegacy-4.4.lib

ITKIOTransformMatlab-4.4.lib

ITKIOVTK-4.4.lib

ITKIOXML-4.4.lib

itkjpeg-4.4.lib

ITKKLMRegionGrowing-4.4.lib

ITKLabelMap-4.4.lib

ITKMesh-4.4.lib

ITKMetaIO-4.4.lib

itkNetlibSlatec-4.4.lib

ITKniftiio-4.4.lib

ITKNrrdIO-4.4.lib

itkopenjpeg-4.4.lib

ITKOptimizers-4.4.lib

ITKOptimizersv4-4.4.lib

ITKPath-4.4.lib

itkpng-4.4.lib

ITKPolynomials-4.4.lib

ITKQuadEdgeMesh-4.4.lib

ITKReview-4.4.lib

ITKSpatialObjects-4.4.lib

ITKStatistics-4.4.lib

itksys-4.4.lib

itktiff-4.4.lib

itkv3p_lsqr-4.4.lib

itkv3p_netlib-4.4.lib

itkvcl-4.4.lib

ITKVideoCore-4.4.lib

ITKVideoIO-4.4.lib

itkvnl_algo-4.4.lib

itkvnl-4.4.lib

ITKVNLInstantiation-4.4.lib

ITKVTK-4.4.lib

ITKWatersheds-4.4.lib

itkzlib-4.4.lib

ITKznz-4.4.lib

至此,编译器修改完成。点击运行,查看结果。我的还是出现了问题,报错是Cannot find or open the PDB file,按照网上的说法,用不编译的方法运行可以通过(Ctrl+F5)。

 

4-VTK的安装

有了ITK的安装经验,VTK的安装就容易多了,其实步骤都差不多。

以本文为主,也可适当参考这个文章:

              http://blog.csdn.net/u013089125/article/details/18736617

       流程简介(同ITK):①将资源包的东西进行cmake,生成可利用的目标资源。 ②在生成的资源里,找到VTK.sln,用VS打开后进行编译生成。 ③准备样例,同时修改环境变量、修改编译器的include目录、lib目录、链接器的依赖项,为样例生成解决方案。

【第一步:将资源包的东西进行cmake,生成可利用的目标资源】

将vtk-5.10.1.zip 和vtkdata-5.10.1.zip在VTK文件夹内解压,得到F:\Medical Graphics\VTK\VTK5.10.1和F:\MedicalGraphics\VTK\VTKData5.10.1,并在VTK目录下创建VTK_bin,即F:\Medical Graphics\VTK\VTK_bin。

       打开cmake,将where is the source code的路径设置为原始资源的路径,我的是F:\Medical Graphics\VTK\VTK5.10.1;将where tobuild the binaries的路径设置为目标存放路径,我的是:F:\Medical Graphics\VTK\VTK_bin。

接下来,点击configure,等待10来分钟,会出现一片红色的结果,这时候在“Advanced”前打个勾。

Ø  其中BUILD TESTING 和BUILD EXAMPLES是为了测试用的,一般不勾选,勾选的后果就是,下一步配置需要1个多小时。

Ø  需要勾选BUILD_SHARED_LIBS,勾选了之后, ITK 生成的库文件编译成 DLL 动态链接库形式。

Ø  勾选Advanced之后更改CMAKE_INSTALL_PREFIX(表示编译ITK后生成的 lib 及头文件等安装路径)目录,我的设置为 F:\Medical Graphics\VTK。(安装完成后,该文件夹下会出现include、lib、bin等文件夹)

Ø  vtk_data_root: 一般地,cmake可以自己找到vtkdata的路径,但如果没有,把F:\MedicalGraphics\VTK\VTKData5.10.1填上即可,告诉cmake,vtk需要的数据都在哪里

Ø  vtk_use_parallel: 对于想用vtk做并行计算的朋友,要把这个选上,对于只想学学vtk的,保持默认off

Ø  vtk_use_guisupport:必须把它设置为 on,再次configure之后,会出现一个新的选项vtk_use_mfc,把它也设置为on就行了。提示:在cmake中,有些选项是依赖于另一些选项的,比如vtk_use_guisupport和vtk_use_mfc,当我们禁用vtk_use_guisupport,vtk_use_mfc是看不到的。

Ø  其他的可以保持默认值

再次点击configure,选择vtk_use_mfc,再按一次configure,直至都变成灰色,表示配置成功, 点击 Generate确认。

 

【第二步:在生成的资源里,找到VTK.sln,用VS打开后进行编译生成】

打开F:\MedicalGraphics\VTK\VTK_bin里面的VTK.sln文件,点击:生成->生成解决方案。可能会出现错误:atlcore.h(35): fatalerror C1189: #error :  This file requires_WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended。这个时候,需要修改如下:

找到vtkMFCwindow.cpp,将前面的宏定义修改为:

  #ifndef WINVER

  #define WINVER0x0501//你可改为更高版本

  #endif

 

#ifndef _WIN32_WINNT

#define _WIN32_WINNT 0x0501 // 这是我改的

#endif

 

再次生成,如果没有错误(有可能跳过一个Install,没关系,只要不失败就行),在解决方案里面找到Install文件,选中点击右键->仅用于项目->仅生成INSTALL。(如果编译过程中有错误,应该删除F:\Medical Graphics\VTK\VTK_bin里面的文件,重新安装)。

完成后会在 F:\MedicalGraphics\ITK 目录生成 lib、include、bin 等文件夹

编译后会出现错误:Unableto start program 'D:\VTK5.8.0\bin\Debug\INSTALL'(系统找不到指定文件),不必管它,只要不报错就行。

顺便提一句没用的,这个VS2010 vtk 项目可以生成 ”Debug, Release, MinSizeRel,RelWithDebInfo” 四种模式所需要的“.h, .lib, .dll, .exe“文件,可以通过修改项目的配置并重复前面的相关步骤来生成,为了避免文件覆盖,需要将前一次生成的文件放到其他目录下(我就编译了Debug模式,其他的没试过,一般来说也用不到的吧=.=)

       至此,vtk编译已经完成了。

 

【第三步:准备样例,同时修改环境变量、修改编译器的include目录、lib目录、链接器的依赖项,为样例生成解决方案】

环境变量设置:我的电脑->属性->高级->环境变量->添加:F:\Medical Graphics\VTK\VTK_bin

将F:\MedicalGraphics \VTK\bin中的.dll文件拷贝到C:\WINDOWS\system32中(注意:64位系统的为了保险起见,可能还需同时拷贝到C:\WINDOWS\sysWOW64中)。

我们可以进行测试了,新建一个控制台空项目,新建一个cpp源代码文件,将以下代码拷入:

 

#include "vtkConeSource.h"  

#include"vtkPolyDataMapper.h"  

#include "vtkRenderWindow.h"  

#include "vtkCamera.h"  

#include "vtkActor.h"  

#include "vtkRenderer.h"  

#include "vtkProperty.h" 

 

#include "windows.h" 

 

int main()  

{  

      vtkConeSource *cone = vtkConeSource::New();  

      cone->SetHeight( 3.0 );  

      cone->SetRadius( 1.0 );  

      cone->SetResolution( 10 );  

        

      vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();  

      coneMapper->SetInputConnection(cone->GetOutputPort() );  

        

      vtkActor *coneActor = vtkActor::New();  

      coneActor->SetMapper( coneMapper );  

        

 

      vtkRenderer *ren1= vtkRenderer::New();  

      ren1->AddActor( coneActor );  

      ren1->SetBackground( 0.1, 0.2, 0.4 );  

 

      vtkRenderWindow *renWin = vtkRenderWindow::New();  

      renWin->AddRenderer( ren1 );  

      renWin->SetSize( 300, 300 );  

 

       int i;  

      for (i = 0; i < 360; ++i)  

      {  

              renWin->Render();  

             ren1->GetActiveCamera()->Azimuth( i );  

              Sleep(200); 

      }  

 

 

      cone->Delete();  

      coneMapper->Delete();  

      coneActor->Delete();  

      ren1->Delete();  

      renWin->Delete();  

        

      return 0;  

 

 

 

然后,打开属性面板,修改include、lib目录,以及链接器的输入值。方法同ITK。然后运行,不出意外的话可以得到样例的测试结果。

个人经验:在没有设置属性面板时,会出现一堆错误,总之就是相关的库打不开。设置属性面板,一定注意要设置到底层目录,比如lib要添加F:\Medical Graphics\VTK\lib\vtk-5.10,而F:\Medical Graphics\VTK\lib是不够的。

附VTK的链接器输入值:

Cosmo.lib

LSDyna.lib

MapReduceMPI.lib

mpistubs.lib

VPIC.lib

vtkalglib.lib

vtkCharts.lib

vtkCommon.lib

vtkDICOMParser.lib

vtkexoIIc.lib

vtkexpat.lib

vtkFiltering.lib

vtkfreetype.lib

vtkftgl.lib

vtkGenericFiltering.lib

vtkGeovis.lib

vtkGraphics.lib

vtkhdf5.lib

vtkhdf5_hl.lib

vtkHybrid.lib

vtkImaging.lib

vtkInfovis.lib

vtkIO.lib

vtkjpeg.lib

vtklibxml2.lib

vtkmetaio.lib

vtkMFC.lib

vtkNetCDF.lib

vtkNetCDF_cxx.lib

vtkParallel.lib

vtkpng.lib

vtkproj4.lib

vtkRendering.lib

vtksqlite.lib

vtksys.lib

vtktiff.lib

vtkverdict.lib

vtkViews.lib

vtkVolumeRendering.lib

vtkWidgets.lib

vtkzlib.lib

 

至此,大功告成!

由于一次安装成功,期间没想到要截图,所以,相关截图可以参照提供的文章链接。

另外,关于include、lib等的配置方法,启蒙自浅墨大神的OpenCV安装方法:

       http://blog.csdn.net/poem_qianmo/article/details/19809337

致谢以上文章的作者。

 

你可能感兴趣的:(图像处理)