十ITK读取一张dcm图像然后通过vtk显示
一、功能
通过ITK读取一张图片(dcm格式),然后通过vtk显示出来。
版本:VS2019
itk5.0.1
vtk 8.2.0
二、程序主要思路
1-读取dcm格式图片
2-转换为vtk可以读取的数据类型
3-设置显示参数,然后显示出来
三、代码
工程构建参见前面的博客,代码部分如下:
//保证VTK正常运行
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle); #include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkGDCMImageIO.h"
#include "itkImageToVTKImageFilter.h" #include <vtkSmartPointer.h>
#include <vtkImageActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h> int main(int argc, char * argv[])
{ //设置读取图像类型
using PixelType=signed short;
const unsigned int Dimension= ;
typedef itk::Image<PixelType, Dimension> ImageType;
typedef itk::ImageFileReader<ImageType> ReaderType;
//读取指针
ReaderType::Pointer reader = ReaderType::New();
//设置读取文件
reader->SetFileName("D:\\Files\\Data\\3219032438350584179-8\\DICOM\\S258070\\S20\\I10");
//创建读取DCM的GDCMIOImage类
using ImageIOType =itk::GDCMImageIO;
ImageIOType::Pointer gdcmImageIO = ImageIOType::New();
reader->SetImageIO(gdcmImageIO);
try
{
reader->Update();
}
catch (itk::ExceptionObject& e)
{
std::cerr << "exception in file reader" << std::endl;
std::cerr << e << std::endl;
return EXIT_FAILURE;
} //链接滤波器,转换为VTK类型
typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
ConnectorType::Pointer connector = ConnectorType::New();
connector->SetInput(reader->GetOutput());
try
{
connector->Update();
}
catch (itk::ExceptionObject& e)
{
std::cerr << "exception in file reader" << std::endl;
std::cerr << e << std::endl;
return EXIT_FAILURE;
} /* vtkImageActor在3D场景下渲染图像 */
vtkSmartPointer<vtkImageActor> actor = vtkImageActor::New();
actor->SetInputData(connector->GetOutput());
actor->InterpolateOff();
actor->Update(); vtkSmartPointer<vtkRenderer> render = vtkRenderer::New();
render->AddActor(actor);
render->SetBackground(, , );//设置窗口背景颜色 vtkSmartPointer<vtkRenderWindow> window = vtkRenderWindow::New();
window->SetSize(, ); //设置窗口大小
window->AddRenderer(render);
window->SetWindowName("the CT picture ");//设置窗口名称 vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkRenderWindowInteractor::New();
interactor->SetRenderWindow(window); interactor->Initialize();
interactor->Start();
return ;
}
四、结果显示
在这里注意,我发现如果设置的读取的读片类型不同,显示的效果会有差异:
比如如果图片格式是:
//设置读取图像类型
using PixelType=unsigned char;
const unsigned int Dimension= ;
typedef itk::Image<PixelType, Dimension> ImageType;
图片效果如下:

如果图片格式设置如下:
//设置读取图像类型
using PixelType=signed short;
const unsigned int Dimension= ;
typedef itk::Image<PixelType, Dimension> ImageType;
图片显示如下:

感觉都不是很清晰。
五、参考文献
关于vtk如何现实图片:https://blog.csdn.net/shenziheng1/article/details/54565337
代码主要来源:https://blog.csdn.net/cuihaolong/article/details/53943981
十ITK读取一张dcm图像然后通过vtk显示的更多相关文章
- 九、ITK-VTK混合编程--将序列dcm图像通过ITK读去并通过VTK显示出来
一.初步介绍 上一个博客里面我记录了VTK的安装,以及相关的工程代码的构建,但是实际上上一个博客测试的代码的例子仅仅只是VTK程序的例子.而我实际上希望能够实现的是VTK和ITK混合编程. 在这里还是 ...
- 三、ITK的dcm图像读写
一.主要功能 1.读取单张dcm图像 2.写入单张dcm图像 3.图像调整之后以.jpg格式写入 4.调整之后重新以.dcm格式写入 二.代码 #include "itkImageFileR ...
- DICOM医学图像处理:开源库mDCM与DCMTK的比較分析(一),JPEG无损压缩DCM图像
背景介绍: 近期项目需求,须要使用C#进行最新的UI和相关DICOM3.0医学图像模块的开发.在C++语言下,我使用的是应用最广泛的DCMTK开源库,在本专栏的起初阶段的大多数博文都是对DCMTK开源 ...
- 如何使用 pyqt 读取串口传输的图像
前言 这学期选修了嵌入式系统的课程,大作业选择的题目是人脸口罩检测.由于课程提供的开发板搭载的芯片是 STM32F103ZET6,跑不动神经网络,所以打算将 OV7725 拍摄到的图像通过串口传输给上 ...
- OpenCV3与深度学习实例:Dlib+VGG Face实现两张脸部图像相似度比较
原文:https://my.oschina.net/wujux/blog/2221444 实现思路: 1.使用Dlib识别并提取脸部图像 2.使用VGG Face模型提取脸部特征 3.使用余弦相似度算 ...
- 读取多张MNIST图片与利用BaseEstimator基类创建分类器
读取多张MNIST图片 在读取多张MNIST图片之前,我们先来看下读取单张图片如何实现 每张数字图片大小都为28 * 28的,需要将数据reshape成28 * 28的,采用最近邻插值,如下 def ...
- 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析(转)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨) ...
- JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package Test03; ...
- 学习 opencv---(2) 图像的载入,显示和输出
了解过之前老版本OpenCV的童鞋们都应该清楚,对于OpenCV1.0时代的基于 C 语言接口而建的图像存储格式IplImage*,如果在退出前忘记release掉的话,就会照成内存泄露.而且用起来超 ...
随机推荐
- 微信小程序使用pako.js的踩坑笔记
问题 今天组长跟我们讨论了个问题,说是文章存储占用有点大,消耗宽带流量费,让我看看能不能找个方法解决一下(文章存储的是html字符串).第一反应是没什么头绪,能想到的就是将相同的字符串替换成一个标识之 ...
- yuv和yCbCr的差异
一.和rgb之间换算公式的差异 yuv<-->rgb Y'= 0.299*R' + 0.587*G' + 0.114*B' U'= -0.147*R' - 0.289*G' + 0.436 ...
- 【Nodejs】392- 基于阿里云的 Node.js 稳定性实践
前言 如果你看过 2018 Node.js 的用户报告,你会发现 Node.js 的使用有了进一步的增长,同时也出现了一些新的趋势. Node.js 的开发者更多的开始使用容器并积极的拥抱 Serve ...
- 【系列专题】JavaScript 重温系列(22篇全)
JavaScript 初级篇 [JS]120-重温基础:语法和数据类型 [JS]121-重温基础:流程控制和错误处理 [JS]122-重温基础:循环和迭代 [JS]123-重温基础:函数 [JS]12 ...
- 二、Vue 页面渲染过程
前言 上篇博文我们依葫芦画瓢已经将hello world 展现在界面上啦,但是是不是感觉新虚虚的,总觉得这么多文件,项目怎么就启动起来了呢?怎么访问到8080 端口就能进入到我们的首页呢.整个的流程是 ...
- 【hibernate】常用注解
[hibernate]常用注解 转载:https://www.cnblogs.com/yangchongxing/p/10357118.html 目录 ======================== ...
- drf源码分析系列---权限
权限的使用 全局使用 from rest_framework.permissions import BasePermission from rest_framework import exceptio ...
- C++构造函数的几种使用方法
在C++中,有一种特殊的成员函数,他的名字和类相同,没有返回值,不需要用户显示调用,用户也无法调用,而是在创建对象的时候自动执行. 这种特殊的函数就是构造函数 Constructor 构造函数的名字与 ...
- webpack前期了解
webpack的核心概念(四个) 入口(entry) 输出(output) loader 插件(plugins) Entry(入口)——指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的 ...
- poj 1741 Tree (树的分治)
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 30928 Accepted: 10351 Descriptio ...