VTK入门及应用案例.docx
《VTK入门及应用案例.docx》由会员分享,可在线阅读,更多相关《VTK入门及应用案例.docx(17页珍藏版)》请在冰豆网上搜索。
![VTK入门及应用案例.docx](https://file1.bdocx.com/fileroot1/2022-12/10/e79c83a0-06e1-4fc0-b4b6-f047d94cb55b/e79c83a0-06e1-4fc0-b4b6-f047d94cb55b1.gif)
VTK入门及应用案例
VTK入门及应用案例
前言
第一章安装VTK
1.1获取安装资源
1.2安装步骤
1.3测试安装结果
第二章VTK快速上手——直接学例子
2.1运行几个简单VTK例子
2.2与窗口交互
2.3视图
2.3.1总览
2.3.2简单操作
2.3.3模型变换
2.3.4投影变换
2.3.5视口变换
2.4光照
2.5角色
2.6组装
2.7获取数据源
2.8纹理
2.9标注
2.10挑选
2.11过滤数据
第三章VTK的算法和可视化技术
3.1VTK使用的算法介绍
3.1.1梯度算法
3.1.2矢量算法
3.1.3张量算法
3.1.4建模算法
3.2VTK的编程模式
3.2.1泛型编程
3.2.1模板化
3.3VTK的编程语言
3.3.1使用Tcl/Tk编程
3.3.2使用C++编程
3.3.3使用Java编程
3.3.4使用Python编程
3.4VTK的可视化技术
3.4.1可视化VTK数据序列
3.4.2可视化多边形数据
3.4.3可视化结构型网格
3.4.4可视化直线型网格
3.4.5可视化非结构型网格
第四章VTK在图像处理方面的应用
4.1图像和体数据
4.1.12D画布源图像
4.1.23D椭圆源图像
4.1.3高斯图像源
4.1.4网格图像源
4.1.5噪声图像源
4.1.6正弦曲线源
4.2图像处理算法
4.2.1图像恢复
4.2.2图像平滑
4.2.3图像增强
4.2.4图像分割
4.2.5图像配准
4.3VTK在医学图像处理的应用
4.3.1DICOM图像数据及其格式转换
4.3.2ROI的勾画
4.3.3多模态图像配准与融合
4.3.4三维重建技术
1)面绘制
2)体绘制
第五章VTK和ITK联合使用
5.1ITK简介
5.2ITK的安装
5.2.1获取安装资源
5.2.2安装步骤
5.2.3测试安装结果
5.3VTK和ITK的混合使用
5.3.1创建一个新目录
5.3.2编写一个CmakeLists.txt和myProject.cxx文件
5.3.3配置CMake
5.3.4编译和运行
5.4基于VTK和ITK的软件介绍
5.4.13DSlicer
5.4.2IGSTK
5.4.3VolView
第一章安装VTK和ITK
关于VTK的安装,我看过书上的介绍,也查阅过网上的资料,按照这些说明,确实成功安装了VTK,但在安装过程中,也产生了一些疑问。
带着这些疑问,我通过尝试不同的设置,进行了多次的安装,并对安装结果进行测试,得到了一些心得和体会。
安装是一个耗时的过程,多次安装更是如此。
希望我的经验能让大家少走一些弯路。
1.1VTK的安装
1.1.1获取安装资源
安装VTK的相关文件可从上进行下载,当前最新版本是5.4.2。
从该网页上可以看到,供下载的文件分成四类:
Windows(Installer)、Source、Data和Documentation。
·Windows(Installer)指的是一个二进制安装程序,只支持Tcl语言,可以不用下载。
·Source指的是VTK的源代码文件,有两种压缩格式,根据PC系统的支持情况,选择一种格式进行下载。
·Data指的是一些图像数据文件,在VTK程序中需要用到。
和Source一样,也有两压缩格式,根据PC系统的支持情况,选择一种格式进行下载。
·Documentation指的是一些帮助文件,包含了所有类及其方法的说明,以及类继承关系、相关类的关系说明等。
这些文件按网页的形式组织,利用网页的超链接功能,可从一个类的网页方便的跳转到相关类的网页中,对学习VTK很有帮助,推荐下载。
不过对于安装VTK,这些文件不是必须的。
为生成一个安装VTK的工程,还必须先安装CMake程序,可以从进行下载。
该网页提供了对应不同PC系统的多个文件。
对于Windows用户,可选择Windows(Win32Installer)(安装文件)或WindowsZIP(压缩文件)进行下载。
最后,还必须要安装一个C++编译器。
编译器的版本可以是VisualStudio6.0(VS6.0),或者是.NET。
本书的安装采用的是VS6.0编译器。
1.1.2安装步骤
首先解压下载的VTK文件于适当目录下。
假设下载的源代码文件名为vtk-5.4.2.zip,数据文件名为vtkdata-5.4.2.zip,将vtk-5.4.2.zip解压在E:
\vtksrc\下,将vtkdata-5.4.2.zip解压在E:
\vtkdata\下,将分别产生E:
\vtksrc\Common和E:
\vtksrc\Common等路径。
然后安装并运行CMake。
图1是一个cmake-gui.exe程序的简单界面,用户可以根据自己的PC系统和需要来配制VTK的组建选项。
首先,我们必须告诉cmake-guiVTK源代码树的位置(即vtk-5.4.2.zip的解压路径),以及存放编译后的VTK二进制文件的路径。
如果是用“BrowseSource…”或“BrowseBuild…”按钮来指定这些目录的话,“BrowseSource…”的按钮必须选择E:
\vtksrc\路径,而“BrowseBuild…”按钮选择用户指定的路径。
这两个路径也可以在编辑框手动输入,本书是分别设为E:
\vtksrc\和E:
\vtkbin\。
其中E:
\vtksrc\就是vtk-5.4.2.zip的解压路径。
之后,单击Configure按钮(首次单击会提示选择编译器,接受默认选项即可),这将会用CMake缓存中一系列变量和值来填充cmake-gui界面。
首次运行时,所有的变量显示为红色,如图2。
红色表示在先前定制步骤中,缓存项有新增或被改变。
如果没有看到期望修改的缓存项,可将下拉列表框中的值SimpleView改为AdvancedView,这将出项更多缓存项。
这时,用户可以自定义VTK组建方式。
要设置CMake界面中的值,需点击变量的右边项,依据变量的类型,将会出现文件选择器、编程框或下拉框,用户可以修改其值。
VTK有一些重要的缓存值:
·BUILD_EXAMPLES——指明是否编译VTK中的例子。
未激活可以减少编译时间,之后也
图1.cmake_gui界面
图2.第一次Configure后的结果
可以再进行单独编译。
·BUILD_TESTING——指明是否编译VTK中的测试代码。
未激活可以减少编译时间,之后也可以再进行单独编译。
·BUILD_SHARED_LIBS——指明是否创建共享库。
如果激活,那么DLL或共享库将
图3.配置VTK安装
会被创建,这样之后生成的VTK应用程序将会比较小,可以节省不少空间;如果未激活,那么静态库将被创建。
缺省设置是静态库。
静态库易于执行,当可执行程序运行时,它们不必包含在路径中。
可执行程序在生成时会将其包含进去。
这对基于应用的VTK分布比较好。
·CMAKE_INSTALL_PREFIX——VTK的安装路径。
安装可以使源码中的头文件及编译生成的库文件和可执行程序分别复制到安装路径的不同子目录下。
这将使VTK应用程序的工程设置可以方便一些。
如果不安装到这个路径,源码中的头文件及编译生成的库文件和可执行程序仍然会在e:
/vtkbin(本书的设置)的目录下,用户仍然可以编译VTK程序。
·VTK_DATA_ROOT——vtkdata-5.4.2.zip的解压路径。
可能CMake不会自动找到这个解压路径,需要手动设置,本书设为E:
\vtkdata\。
·VTK_USE_GUISUPPORT——指明是否支持GUI。
激活后Configure,会产生两个新缓存项,激活其中一个缓存项VTK_USE_MFC,这样就可以进行VTK与MFC的混合编程,可以编写类似于VTK自带的例子Examples\GUI\Win32\vtkMFC中的程序。
为了得到CMake变量的在线帮助,将鼠标停靠在变量名上,提示信息就会自动出现。
继续点击Configure按钮直到不再出现红色的值,并且都是用户期望的值,如图3。
此时,再点击“Generate”按钮,CMake会按所选的组建类型写出组建文件。
对于Microsoft,在所选的二进制目录中将创建一个工程文件,用VisualStudio装载这个工程文件VTK.dsw,在左侧的工作空间窗口的ClassView视图中,可以看到该工作空间里的所有工程,包括生成库文件的工程,如vtkCommon、vtkMFC等,还有编译测试代码的工程,如CommonCxxTests、FilteringCxxTests等。
其中最重要的两个工程是ALL_BUILD和INSTALL——唯一两个名字字母全是大写的工程。
先对ALL_BUILD进行组建,单击BUILD菜单下的SetActiveConfiguration菜单项,在弹出的对话框中可以看到,对于ALL_BUILD工程有四种组建方式:
Debug、Release、MinsizeRel和RelWithDebInfo。
如果使用VC编过程序,用户一定对前两种方式不陌生,Debug生成的程序带有调试信息,因而比较大,Release正好相反。
对于后两种方式,也可以从名字中看出它的意思,一个是将程序最小化的Release,一个是带调试信息的Release。
这里用户要注意的是,如果用带调试信息的方式组建,之后调试自己的程序时,可以“Stepinto”进入VTK库函数中,这适合于类开发者;而对于VTK用户来说,就不需要用带调试信息的方式编译。
一般使用前两者,如果磁盘空间比较紧张,可以考虑后两者。
选好后,按快捷键F7进行组建。
经过较长的等待,组建好的所有库和可执行文件,都会存放在一个bin子目录下,该bin子目录是在CMake中设置的二进制文件目录下的一个子目录,例如本书的E:
\vtkbin\bin。
之后可以再选择INSTALL工程,并对其组建一次以进行安装(该步可不执行)。
(注意:
不要使用MSVC++的“RebuildAll”菜单项来重建源代码,这会删除CMakeLists.txt文件,这些文件是先前自动产生的并作为组建过程的一部分。
MSVC会重新装载它们,将导致错误提示。
如果想重新创建,必须先删除VTK二进制目录,重新运行CMake,然后再重建。
)
下面给出在几种不同设置下进行安装后,所产生的文件大小(基于版本5.4.2):
设置静态库,用Release方式组建——123MB
设置静态库,用Debug方式组建——206MB
设置动态库,用Release方式组建——62.3MB
设置动态库,用Debug方式组建——206MB
如果激活了BUILD_SHAREDLIBS,创建VTK后,必须让Windows知道DLL文件的路径,这样做有两种方法:
可以将产生的DLL拷贝到windows会自动查找的路径,例如Windows/system32或Winnt/System(不推荐这种方法,因为复制的路径可能会忘记,之后复制新版本的DLL文件时不一定就会将原来的覆盖掉)。
另一种方法是修改path环境变量,将库文件存放路径包含进去。
如果要拷贝DLL和可执行程序,需要拷贝bin/selectedconfiguration/路径中的所有文件(selectedconfiguration是你之前选择的组建方式,如Debug、Release等)。
如果修改环境变量的话,在Windows95/98中,可以使用sysedit在autoexec.bat文件中加一行,下面给出与此前列出的四个不同组建方式相应的四个例子,假设4个例子都组建在VTK的E:
\vtkbin目录下:
1.PATH=E:
\vtkbin\bin\Debug
2.PATH=E:
\vtkbin\bin\Release
3.PATH=E:
\vtkbin\bin\MisizeRel
4.PATH=E:
\vtkbin\bin\RelWithDebInfo
如果组建了INSTALL工程,并且假设安装路径CMAKE_INSTALL_PREFIX为E:
\ProgramFiles\VTK,那么:
PATH=E:
\ProgramFiles\VTK\bin
在WindowsNT/ME/2000/XP中,右击“我的电脑”,选择“属性”选项,会弹出一个对话框,选择环境变量标签,像上面一样添加或修改环境变量。
如果PATH环境变量已经存在,就将VTK路径加在它的前面,以分号分隔。
例如假设原始路径为:
C:
\winnt\system;C:
\some\other=dir;%Path%
则类似下面修改:
E:
\vtkbin\bin\Debug;C:
\winnt\system;C:
\some\other=dir;%PATH%
或:
E:
\ProgramFiles\VTK\bin;C:
\winnt\system;C:
\some\other=dir;%PATH%
这样就在PC机上成功地安装了VTK。
图4.配置VTK自带范例Examples/Tutorial/Step1
图5.Cone.exe运行结果的两帧画面
1.1.3测试安装结果
VTK自带的每个C++例子都有一个相应的CMakeLists.txt文件,被CMake用来创建该例子的VC++工作空间,正好可用来测试VTK的安装。
这里以Examples\Tutorial\Step1\Cxx为例子进行测试。
运行CMake,设置其源代码位置为CMakeLists.txt所在路径,如E:
\vtksrc\Examples\Tutorial\Step1\Cxx。
然后设置产生的工作空间的存放路径,并单击Configure按钮,操作类似VTK的安装,之后将出现一些缓存变量。
其中要注意的变量有VTK_DIR,该变量指示VTKConfig.cmake文件所在路径,默认值可能是编译后的VTK二进制文件路径,如E:
/vtkbin。
如果对编译后的VTK文件进行了安装,则路径为PREFIX/lib/vtk,如E:
/Program/lib/vtk-5.4。
建议使用后者,如图4。
设置完变量后继续点击Configure按钮直到不再出现红色的值,再点击Generate按钮,CMake就会在指定路径下产生一个工作区,之后用VC++打开该路径下的Cone.dsw文件,就可以编译运行,检测是否安装成功。
运行结果是一个旋转的圆锥,如图5。
以后如果要创建自己的应用程序,而又不想使用CMake的话,可以拷贝该工程的一些设置,例如:
单击Project菜单下的Settings,在弹出的窗口中选择“C/C++”选项卡,“Category”选择为“Preprocessor”,记录下“Additionalincludedirectories”里的内容。
如果VTK_DIR设置的是“E:
\vtkbin”,则其内容为:
E:
\vtkbin,E:
\vtkbin\Common,E:
\vtkbin\Utilities,E:
\vtkbin\VolumeRendering,E:
\vtkbin\Rendering,E:
\vtkbin\GUISupport\MFC,E:
\vtkbin\Utilities\vtkalglib,E:
\vtksrc\Infovis,E:
\vtksrc\Geovis,E:
\vtksrc\Views,E:
\vtksrc\VolumeRendering,E:
\vtksrc\Hybrid,E:
\vtksrc\Widgets,E:
\vtksrc\Rendering,E:
\vtksrc\Rendering\Testing\Cxx,E:
\vtksrc\IO,E:
\vtksrc\Imaging,E:
\vtksrc\Graphics,E:
\vtksrc\GenericFiltering,E:
\vtksrc\Filtering,E:
\vtksrc\Common,E:
\vtksrc\Utilities,E:
\vtksrc\Common\Testing\Cxx,E:
\vtkbin\Utilities\vtklibproj4,E:
\vtksrc\Utilities\vtklibproj4,E:
\vtkbin\Utilities\DICOMParser,E:
\vtksrc\Utilities\DICOMParser,E:
\vtkbin\Utilities\vtkfreetype\include,E:
\vtksrc\Utilities\vtkfreetype\include,E:
\vtkbin\Utilities\vtknetcdf,E:
\vtksrc\Utilities\vtknetcdf,E:
\vtkbin\Utilities\vtkexodus2\include,E:
\vtksrc\Utilities\vtkexodus2\include,E:
\vtkbin\Utilities\MaterialLibrary,E:
\vtksrc\Utilities\MaterialLibrary,E:
\vtkbin\Utilities\verdict,E:
\vtksrc\Utilities\verdict,E:
\vtksrc\GUISupport\MFC,E:
\vtksrc\Utilities\vtkalglib
如果VTK_DIR设置的是“E:
\ProgramFiles\VTK\lib\vtk-5.4”,则其内容为:
E:
\ProgramFiles\VTK\include\vtk-5.4
单击“Link”选项卡,“Category”选择为“Input”,记录下“Object/librarymodule”里的内容:
vtkRendering.libvtkGraphics.libvtkverdict.libvtkImaging.libvtkIO.libvtkFiltering.libvtkCommon.libvtkDICOMParser.libvtkNetCDF.libvtkmetaio.libcomctl32.libwsock32.libvtksqlite.libvtkpng.libvtktiff.libvtkzlib.libvtkjpeg.libvtkexpat.libvtksys.libws2_32.libvfw32.libvtkftgl.libvtkfreetype.libopengl32.libkernel32.libuser32.libgdi32.libwinspool.libcomdlg32.libadvapi32.libshell32.libole32.liboleaut32.libuuid.libodbc32.libodbccp32.lib
与自己新建的空win32ConsoleApplication工程相比,就是增加了kernel32.lib之前的库。
在对自己的应用程序进行设置时,只需要加入前面的库。
再记录下“Additionallibrarypath”里的内容。
如果VTK_DIR设置的是“E:
\vtkbin”,则其内容为:
E:
\vtkbin\bin\$(IntDir),E:
\vtkbin\bin\
如果VTK_DIR设置的是“E:
\ProgramFiles\VTK\lib\vtk-5.4”,则其内容为:
E:
\ProgramFiles\VTK\lib\vtk-5.4\$(IntDir),E:
\ProgramFiles\VTK\lib\vtk-5.4
总体来说,还是安装后的设置要简单些。
对于VTK自带的大部分例子,这些设置还是一样的。
编写自己的应用程序时,主要是对这三个地方进行设置。
另外要注意,如果自己的程序编译不成功,可先对VTK中类似的例子运行CMake,然后参考其设置。
1.2ITK的安装
ITK的安装方式大体上和安装VTK类似,下面简要介绍其安装过程。
1.2.1获取安装资源
可以免费从网站g/ITK/resources/software.html上下载ITK源码文件(当前最新版本为3.14.0),如InsightToolkit-3.14.0.zip。
1.2.2安装步骤
首先解压下载的ITK文件InsightToolkit-3.14.0.zip于适当目录下。
例如若解压在E:
\下,将产生E:
\InsightToolkit-3.14.0\Code等路径。
然后安装并运行cmake-gui.exe程序。
首先,我们必须告诉cmake-guiITK源代码树的位置,以及存放编译后的ITK二进制文件的路径。
这里分别设为E:
\InsightToolkit-3.14.0和E:
\itkbin\。
之后,单击Configure按钮并根据提示选择编译器。
同VTK一样,ITK也有一些重要的缓存值:
•BUILD_EXAMPLES——指明是否编译ITK中的例子。
未激活可以减少编译时间。
•BUILD_TESTING——指明是否编译ITK中的测试代码。
未激活可以减少编译时间。
•BUILD_SHARED_LIBS——指明是否创建共享库。
这里可以不激活,因为即使激活也只生成一个DLL文件ITKCommon.dll。
•CMAKE_INSTALL_PREFIX——ITK的安装路径。
安装可以使源码中的头文件及编译生成的库文件分别复制到安装路径下的不同子目录下。
这将使ITK应用程序的工程设置可以方便一些,当然即使不安装,仍然可以编译ITK程序(情况和安装VTK时一样)。
图6.配置ITK安装
继续点击Configure按钮直到不再出现红色的值,并且都是用户期望的值,如图6。
此时,再点击“Generate”按钮,CMake会按所选的组建类型写出组建文件。
对于Microsoft,在所选的二进制目录中将创建一个工程文件,用VisualStudio装载这个工程文件ITK.dsw,单击BUILD菜单下的SetActiveConfiguration菜单项,在弹出的对话框中,对ALL_BUILD工程选择一种合适的编译方式,然后组建它(快捷键F7)。
编译建立的所有库和可执行文件,都会存放在一个bin子目录下,该bin子目录是在CMake中设置的二进制文件目录下的一个子目录,例如E:
\InsightToolkit-3.14.0\bin。
之后可以再选择INSTALL工程,并对其组建一次以进行安装。
至此,ITK的安装过程就结束了。
1.2.3测试安装结果
和VTK的测试类似,可以对ITK源代码路径下的Examples/Installation/HelloWorld.cxx运行CMake来进行测试,如图7。
图7.配ITK范例HelloWorld
操作过程与VTK完全一样,就不详述了。
最后运行的结果是在命令提示符窗口中输出字符串“ITKHelloWorld!
”。
如图8。
图8.ITK的HelloWorld程序
1.3ITK与VTK混合测试
如果对ITK进行了安装,那么在对ITK与VTK混合测试前,需要复制一些文件到ITK的安装目录下。
首先找到ITK源码解压路径下的Wrapping\WrapITK\ExternalProjects\ItkVtkGlue\src目录,该目录下有四个文件:
两个.h文件和两个.txx文件。
将这四个文件复制到ITK安装目录下的include\InsightToolkit目录中就可以了。
1.3.1创建一个新目录
在磁盘适当位置创建一个新目录,该目录用于存放Cmak