ITK安装与读取DICOM序列

一:ITK功能

ITK 与 OpenCV 主打功能相似,都是面向于图像处理,但是两者在领域应用方面有一定的差别;ITK主要用于医学图像的分割与配准(有c++与python版本)。OPENCV是计算机视觉的基础(有c++与python版本),可以说做二维图像算法肯定都会用到OPENCV。机器学习,深度学习的前处理工作很多也都是由opencv完成。

二:编译

环境:

Windows10

VS2019

官网下载ITK软件包:

63419f4452bdd1bf48a9cde236161c4e.png

创建安装目录:

a70ba65fd057919a9d3efb437fcd2312.png

并在ITK5.2.0里面创建build和bin文件夹

0dd2b3a0fe9003ddcf2c5aecf4a4eb6b.png

使用Cmake开始编译:

source code:将目录改成之前下载的itk解压缩文件。

binaries:目录为之前建的build文件夹。

点击configure运行。

aff6685d38cecd75f3d8d8f48654104f.png

然后选择自己相应的配置:

94c0a77e8d615f1e858443f41d14163a.png

上面结束后,将会弹出一堆红,然后勾选advanced。

BUILD_SHARED_LIBS 默认关闭,意味着是库是静态编译的,只生成lib,若选中,则动态编译,将生成 dll 文件(这里是选中)

d96c57e7511f622169fae5806db93f86.png

找到 CMAKE_INSTALL_PREFIX 选项,这个是表示 ITK 的安装路径,(此处改成了我们之前建的bin文件夹)。然后再次点击configure运行。

2715e2c35f782e64ca62d382e4cda9df.png

直到运行到没有出现红色,如果还有红色就多点击运行几次configure。

然后生成,点击运行generate。

2895e47a13e0800fe8c94f87b6340440.png

最终会显示generating done(证明生成成功)。

09dcb63de1a4f693241c784303977b76.png

三:安装

以管理员身份打开VS2019,然后打开ITK.sln

1ad3194e9804a9ffccd5c26beb7cedd5.png

在资源管理器找到ALL_BUILD,右键生成

6f70afcb309d8ced5fdadee0d7c0b868.png

8333fda08054995135a80ecb1c352545.png

如果按照流程,一般不会报什么错误。

978066c78011c670e56e1eb75963522e.png

接着找到INSTALL右键生成,开始安装。

4d292970d95b3005003c2513196d9822.png

四:环境配置

首先在系统的环境变量path中加入之前创建的bin文件夹下的bin文件,然后重启电脑。

5f9b60afa3fd1f076604dafddd2d6b85.png

接着用vs2019创建一个新项目,在VC++目录---包含目录中添加bin\include\ITK-5.2

7622a2d8b2e6789ab857346a0c9f250a.png

在VC++目录---库目录中添加bin\lib

5299547872871a038bfad39b1768baa4.png

在连接器---输入---附加依赖项中添加许多的.lib文件(就是bin\lib文件夹下的所有.lib结尾的文件名)。

快速获取.lib文件名,在bin\lib文件夹下新建一个txt文档,然后在里面输入

DIR *.lib*  /B >LIST.TXT      再将后缀名改为.bat运行文件。双击运行,就会产生LIST.TXT文件,里面就是所有的.lib文件名。

6d8143231a9d89e67a2ac6b2848b3d8d.png

5b06001afcc67c55c2450006e65fbd32.png

将LIST.TXT文件中的所有.lib添加到附加依赖项。

f29281dfa6834c84dce9dee19269d7a7.png

上述环境就配置完成。

五:读取DICOM序列,并且快速获得数值。

#include<iostream>
#include "itkGDCMImageIO.h"
#include "itkImageSeriesReader.h"//用于读取图像序列
#include "itkGDCMSeriesFileNames.h"//用于读取序列文件名


using namespace std;
int main()
{


  string file = "./GTI5BZZQ";//dicom文件夹


  //初始化待读取的dicom序列的各种参数
  using PixelType = signed short;//像素数据类型
  constexpr unsigned int dims = 3;//3维
  using ImageType = itk::Image<PixelType, dims>;
  using ReaderType = itk::ImageSeriesReader<ImageType>;
  using ImageIOType = itk::GDCMImageIO;
  using NamesGeneratorType = itk::GDCMSeriesFileNames;


  //设置IO,并获取文件名
  ImageIOType::Pointer gdcmIO = ImageIOType::New();
  NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();
  namesGenerator->SetInputDirectory(file);
  const ReaderType::FileNamesContainer& filenames = namesGenerator->GetInputFileNames();


  //输出文件名
  for (int i = 0; i < filenames.size(); i++)
  {
    cout << filenames[i] << endl;
  }


  //读取dcm序列
  ReaderType::Pointer reader = ReaderType::New();
  reader->SetImageIO(gdcmIO);
  reader->SetFileNames(filenames);
  reader->Update();


  //通过直接读取内存的方式获取像素值(高效率
  short* ptr = reader->GetOutput()->GetBufferPointer();//将获得首地址的指针
  //只需偏移就可以获得任何位置像素
  cout << ptr[0] << endl;


  gdcmIO->Delete();
  namesGenerator->Delete();
  reader->Delete();
  return 0;
}
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯西的笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值