ITK SimpleITK Window环境下编译

本文分享了作者在Windows环境下使用ITK进行3D数据分割时,从Python版转到C++及CUDA版本的编译过程,包括遇到的问题如CMake设置和错误修复,以及对SimpleITK的使用体验和建议。
摘要由CSDN通过智能技术生成

前言        

最近在工作中涉及到3D 数据的分割,深度学习方法慢,且构建数据集费时费力,经过一番查找,最终选择使用ITK这个库。最开始的时候是使用python 环境下的SimpleITK ,也实现了我想要的功能。但最终要和QT C++ 的项目合并,所以只能使用C++ 下的代码了。后来因为速度上的问题,又编译了基于Cuda 11.2 的GPU 版本的ITK.

这里记录一下我在使用ITK 过程中遇到的坑和问题,希望能给后来人有些帮助。

环境

  • windows10
  • ITK-5.3.0 
  • VS 2019
  • Cuda 11.2
  • CMake 3.17.0-rc2

编译

安装VS2019 cmake,这个不多说了,然后下载ITK ,最开始的时候还编译过5.1这个版本,后来发下5.3 应该是有有些优化,速度上会更快,因此用了5.3。下载地址:https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.3.0/InsightToolkit-5.3.0.zip

然后用CMake 打开源码路径,并创建build路径,在cmake中选择。这里遇到我编译时的第一个坑。因为编译输出后是要调用的,所以需要输出dll,也就是需要buidl shared lib,我对cmake 也不是很熟悉,上了一看,是没有shared lib,以为是版本不行,又换了好几次版本。

经过摸索发现,需要点击这里就会出现shared lib 了,还是不熟悉导致的。差点因为这个花钱买别人的专栏看。

然后Configure 下

应该是没有啥问题,如果是有缺少文件,或者下载文件失败的问题就去下载相应的文件到对应的目录中。

如果要是编译GPU 版的话还需要选择GPU

编译完成后,打开项目,点击ALL_BUILD -> 生成,之后INSTALL ->生成,如果没改生成路径的话,最终会安装到 C:\Program Files (x86)\ITK 下

如果是调试阶段,可以在Debug 模式下编译,如果投入使用,建议还是Release,速度真的 不是快的一点半点啊(血的教训 =;=)。
 

测试

编译完成后就可以使用ITK了,因为不清楚哪些lib库和dll 库不需要,所有就把所有的库都加上了。

在VS2019 中引入头文件,和 所有的lib库(这里库太多,一个个添加太麻烦,使用了这个命令

dir /b *.lib > out.txt, 将所有lib 库的名输出到txt 中,然后复制过去)。

测试代码(来自官方文档):

#include "itkImage.h"

int main(int, char *[])
{
  // 生成一个三维的数据,数据类型是 无符号16位整型
  using ImageType = itk::Image<unsigned short, 3>;
  auto image = ImageType::New();
  ImageType::IndexType start;
 
  start[0] = 0; // first index on X
  start[1] = 0; // first index on Y
  start[2] = 0; // first index on Z
  ImageType::SizeType size;
  size[0] = 200; // size along X
  size[1] = 200; // size along Y
  size[2] = 200; // size along Z
  ImageType::RegionType region;
  region.SetSize(size);
  region.SetIndex(start);
  image->SetRegions(region);
  image->Allocate();

  return EXIT_SUCCESS;
}

然后可能会遇到这样的问题:

“itk::ShapedNeighborhoodIterator<TImage,TBoundaryCondition>::ConstIterator”: 是非法基类“

itk::LabelMap<TLabelObject>::GetNthLabelObject”: 无法将函数定义与现有的声明匹配 

我的做法是

将这几个头文件替换成为下面的 5.1版本头文件

然后在运行就不会报错了(当然我这个办法可能不对,如果有清楚的,欢迎指正)。

其他

最后我也编译了SimpleITK  这个库,最开始时,老是编译失败,后来在SimpITK 的GitHub  上找打了原因。是需要有版本对应的,simpleITK 2.2.0和ITK 5.3.0 是对应的,其他的版本不清楚,没有尝试过。编译方法和ITK 相差不大。

SimpleITK python 版挺好用的,C++就一般了,官方的列子少的可怜。最后到也是实现了需求,但文档确实不如ITK全面,官方页面也不提供全局搜索功能,吐槽下。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值