一、初步介绍
上一个博客里面我记录了VTK的安装,以及相关的工程代码的构建,但是实际上上一个博客测试的代码的例子仅仅只是VTK程序的例子。而我实际上希望能够实现的是VTK和ITK混合编程。
在这里还是要简单的说下,ITK只是拥有对于图像处理的算是,但是始终都不能够直接的显示出来,没有直观性。
所以这里我们需要借助VTK去观察,这也是我们需要VTK的关键所在。
但是VTK本身并不是为了这个而存在的,它也可以服务于其他的可视化的程序,只是我们在这里需要的是它服务于ITK而已。
下面的记录按照时间为顺序。先后记录我们的遇到的问题。
版本介绍: VS2019
cmake 3.16
ITK:5.0.1
VTK:8.2.0
二、工程构建
1-代码来源
main.cpp里面的代码来自如下:https://blog.csdn.net/qq_35007834/article/details/88569821
代码功能参考这个博客,它主要是读取一系列的dcm图像然后三维重建,通过VTK显示出来。
具体的函数功能我还不是很了解。
2-建立工程
<1>建立一个空项目
<2>新建main.cpp, 将上面博客里面的代码复制进去。
<3>我们注意到,代码里面已经包含了下面两个函数初始化
但是我们还是需要添加一个头函数:
#include "vtkAutoInit.h"
具体原因参见这个博客:https://blog.csdn.net/kaspar1992/article/details/57080724
<4>添加项目属性表
之前在博客一ITK的安装,与博客八VTK的安装里面,我们构建新的工程的时候,已经新建了两个关于ITK和VTK的项目属性表。
这个时候我们可以把这两个项目属性表复制到本工程所在的文件夹。(注意我在编译所有工程的时候一直使用的是同一个模式,也就是Release X64)
然后打开属性管理器,添加这两个项目属性表:
这个时候我的工程设置也是Release X64的模式:
5-修改配置属性
与之前构建工程的时候一样,这个时候我们需要在项目的配置属性里面添加.dll文件所在的位置。
只不过与之前不一样的是,我们之前需要添加一个文件夹,现在需要添加两个文件夹(ITK和VTK的)
打开配置属性:
这个时候我们在环境变量里面添加如下的句子:
path=%path%;D:\FilesSetup\ITK\itk_out\bin\;D:\FilesSetup\VTK\VTK-prefix\bin\
如果你有看过我之前的博客就知道,这里面的:
D:\FilesSetup\ITK\itk_out\bin\;
指的是我在安装ITK的时候,运行INSTALL工程之后得到的四个文件夹里面的一个,也是包含了所有的.dll文件
同样的
D:\FilesSetup\VTK\VTK-prefix\bin\
表示的是我在安装VTK的过程中,INSTALL工程运行之后得到的四个文件夹之一。
这个时候看起来我们似乎已经把所有的工作都完成了,可以尝试运行一下程序。
三、问题
1-Error:cannot open source file "itkImageToVTKImageFilter.h"
这个头文件打不开,参考了如下链接:
https://blog.csdn.net/webzhuce/article/details/70552816?utm_source=blogxgwz7
解决办法:
按照链接里面的方法,重新编译ITK
这个时候还是按照博客一的过程编译,但是cmake编译中有几个选项需要修改:
1-选择下面的模块Module:
勾选框中选项:
2-然后找到下面的选项:
在VTK_DIR里面添加VTK通过cmake编译之后得到的文件夹,里面需要有VTK-CONFIG.cmake或者是vtk-config.cmake文件
这个时候按照博客一里面的内容重新来一遍。
2-错误
将程序里面的文件夹更改为dcm序列图像所在的文件夹。
然后点击运行。
运行之后得到如下的错误:
这个时候由于在新版本里面的sprintf函数(ITK和VTK使用的,已经逐渐的不符合VS的规定)
这个时候我们在程序开头添加如下的代码,以忽略上述错误(这个代码的作用就是无视上面的那个错误):
#pragma warning(disable:4996)
四、运行程序
我输入的图像是一个人体脊椎的CT图像,所以得到的结果如图:
这个证明了我们构建工程的思路是没有错的,所以ITK和VTK的混合编程已经可以实现了。
注意:这里非常的消耗电脑内存,我第一次输入了160张图片,然后电脑处理了很久,我几乎以为是程序出现了问题。
然后第二次将输入的数据减少为7张,这个时候等待了大概十几秒就出来结果了,所以程序没有问题以后,如果不能够运行出结果,这个时候我们要考虑一下是不是我们输入的图片的数目太多,导致电脑处理的时间太长。
五、参考链接
1-VTK编译中出现 no override found for vtkpolydatamapper 解决方法
解决博客:https://blog.csdn.net/kaspar1992/article/details/57080724
2-代码来源博客:https://blog.csdn.net/qq_35007834/article/details/88569821
3-博客一-ITK的安装和例子构建过程:博客一
4-博客二-VTK的安装和例子构建过程:博客二