医学图像处理的程序库,目前比较广泛使用的是ITK和VTK。书上和网上搭建组装的文章有很多,但是往往搭建失败。笔者参考了各篇文章,终于一次性顺利搭建成功。
以本文为主,也可参考这个文章:
http://blog.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/poem_qianmo/article/details/19809337
致谢以上文章的作者。