itk和c++读取dicom序列
前言
- 使用
c++
版的itk
读取存储在文件夹中的dicom
序列 - 工具:visual studio 2022 community
代码
CommonF.h
#pragma once
#include<itkImage.h>
#include<string>using PixelType = unsigned short;
using ImageType = itk::Image<PixelType, 3>;
using ImageStyle = ImageType::Pointer;class CommonF
{public:/// <summary>/// 读取dicom文件夹序列/// </summary>/// <param name="dicom_dir">dicom文件夹路径</param>/// <param name="OutImage">读到的图像</param>void read_dicom_series(const std::string& dicom_dir,ImageStyle& OutImage);};
CommonF.cpp
#include "CommonF.h"
#include<itkGDCMImageIO.h>
#include<itkGDCMSeriesFileNames.h>
#include<itkImageSeriesReader.h>
#include<vector>void CommonF::read_dicom_series(const std::string& dicom_dir, ImageStyle& OutImage)
{using ImageIOType = itk::GDCMImageIO;ImageIOType::Pointer DicomIO = ImageIOType::New();using ImageReaderType3D = itk::ImageSeriesReader<ImageType>;ImageReaderType3D::Pointer ImageReader3D = ImageReaderType3D::New();ImageReader3D->SetImageIO(DicomIO);using NamesGeneratorType = itk::GDCMSeriesFileNames;NamesGeneratorType::Pointer NameGenerator = NamesGeneratorType::New();NameGenerator->SetDirectory(dicom_dir);using SeriesIdContainer = std::vector<std::string>;const SeriesIdContainer& SeriesUID = NameGenerator->GetSeriesUIDs();SeriesIdContainer::const_iterator SeriesItr_begin = SeriesUID.begin();SeriesIdContainer::const_iterator SeriesItr_end = SeriesUID.end();while (SeriesItr_begin != SeriesItr_end){std::cout << SeriesItr_begin->c_str() << std::endl;SeriesItr_begin++;}std::string SeriesIdentifier;SeriesIdentifier = SeriesUID.begin()->c_str();using FileNamesContainer = std::vector<std::string>;FileNamesContainer filenames;filenames = NameGenerator->GetFileNames(SeriesIdentifier);ImageReader3D->SetFileNames(filenames);try{ImageReader3D->Update();}catch (itk::ExceptionObject& err){std::cerr << "error, exception object caught!" << std::endl;}OutImage = ImageReader3D->GetOutput();
}
main.cpp
#include"CommonF.h"int main()
{using std::cout;using std::endl;CommonF common_f;ImageStyle input_image;common_f.read_dicom_series("D:/test/004HeRuiPing_CT",input_image);ImageType::SizeType size = input_image->GetLargestPossibleRegion().GetSize();cout << "org_size = " << size << endl;return 0;
}
结果
读取单张dicom
void RigisterClass::read_one_dicom(const std::string& file_path,XrayStyle& out_xray)
{// readerusing ReaderType = itk::ImageFileReader<XrayType>;auto reader = ReaderType::New();// IOusing ImageIOType = itk::GDCMImageIO;auto dcmIO = ImageIOType::New();reader->SetImageIO(dcmIO);reader->SetFileName(file_path);try {reader->Update();}catch (const itk::ExceptionObject& e) {std::cout << "error in reading xray" << std::endl;std::cerr << e.what() << std::endl;throw "error in reading xray";}out_xray = reader->GetOutput();
}
读单张tif
void RigisterClass::read_tif(const std::string& file_path,XrayStyle& out_xray)
{using ImageReaderType2D = itk::ImageFileReader<XrayType>;ImageReaderType2D::Pointer imageReader2D = ImageReaderType2D::New();// IOusing TIFFIOType = itk::TIFFImageIO;TIFFIOType::Pointer tiffIO = TIFFIOType::New();imageReader2D->SetImageIO(tiffIO);imageReader2D->SetFileName(file_path);try {imageReader2D->Update();}catch (const itk::ExceptionObject& e) {std::cerr << e << std::endl;}out_xray = imageReader2D->GetOutput();
}
写入单张tif
void RigisterClass::write_tif_image(const OutputImageStyle& writed_image,const std::string& file_path)
{// writerusing WriterType = itk::ImageFileWriter<OutputImageType>;WriterType::Pointer writer = WriterType::New();// IOusing TIFFIOType = itk::TIFFImageIO;TIFFIOType::Pointer tiffIO = TIFFIOType::New();writer->SetImageIO(tiffIO);writer->SetFileName(file_path);writer->SetInput(writed_image);try{std::cout << "Writing image: " << file_path << std::endl;writer->Update();}catch (itk::ExceptionObject& err){std::cerr << "error in saveing out-xray !" << std::endl;std::cerr << err << std::endl;throw "error in saveing out-xray.";}
}
写单张dicom
void RigisterClass::write_one_dcm(const OutputImageStyle& writed_image,const std::string& file_path)
{using WriterType = itk::ImageFileWriter<OutputImageType>;auto writer = WriterType::New();using ImageIOType = itk::GDCMImageIO;auto dcmIO = ImageIOType::New();writer->SetImageIO(dcmIO);writer->SetFileName(file_path);writer->UseInputMetaDataDictionaryOff();writer->SetInput(writed_image);try {writer->Update();}catch (const itk::ExceptionObject& e) {std::cout << "error in saveing out dcm" << std::endl;std::cerr << e.what() << std::endl;}
}
itk和c++读取dicom序列相关推荐
- ITK安装与读取DICOM序列
一:ITK功能 ITK 与 OpenCV 主打功能相似,都是面向于图像处理,但是两者在领域应用方面有一定的差别:ITK主要用于医学图像的分割与配准(有c++与python版本).OPENCV是计算机视 ...
- DCMTK、ITK、VTK读取dicom信息
DCMTK.ITK.VTK读取dicom影像数据的方法 直接上代码,调用不同的医学影像库读取dicom影像信息 1. DCMTK读取影像中的pixelData //参数 list:为输入的图像文件名列 ...
- python读取dicom序列_python读取dicom图像(SimpleITK和dicom包实现)
1. 用SimpleITK读取dicom序列: import SimpleITK as sitk import numpy as np img_path='F:\\dataset\\pancreas\ ...
- VTK读取dicom序列,并保存成vtk和obj格式的3D格式文件
在vs中配置好vtk之后,新建项目,然后加入如下代码. #include "stdafx.h" #include <vtkAutoInit.h> VTK_MODULE_ ...
- python读取dicom序列_用原生Python解析DICOM文件
如果你想了解DICOM格式,Oleg Pianykh的<医学数字成像与通信(DICOM):实用介绍与生存指南>(DICOM:A Practical Introduction and Sur ...
- vue + vtk.js读取CT序列,显示3d影像(三个面显示)
vtk.js官网示例中,显示CT序列,都是以vti文件格式为例进行读取.但是在实际项目中,一般都是以.dcm为后缀的dicom影像,目前在vtk.js官网中,没有找到直接读取dicom序列的API.故 ...
- pydicom读取头文件_python读取dicom图像(SimpleITK和dicom包实现)_愿十四亿神州尽舜尧-CSDN博客_python读取dicom...
1. 用SimpleITK读取dicom序列:import SimpleITK as sitkimport numpy as npimg_path='F:\\dataset\\pancreas\\Ou ...
- 使用ITK读写DICOM序列
版本:ITK 5.1.1 关键类: itk::ImageSeriesReader 用于读取图像序列: itk::ImageSeriesWriter 用于写入 ...
- ITK:读取DICOM系列并写入3D图像
ITK:读取DICOM系列并写入3D图像 内容提要 C++实现代码 内容提要 本示例读取给定文件夹argv [1]中的所有DICOM系列,并将它们写入具有以下文件模式的同一文件夹中:seriesIde ...
最新文章
- MySQL技术内幕 InnoDB存储引擎 之 InnoDB体系架构
- ACM错误提示/错误原因
- python中的模块原则_python 的模块与包
- vscode 新建cpp文件_利用vscode搭建c
- MyBatis的association示例
- iOS MBProgressHUD 之带底板的加载提示
- 【BZOJ4547】【HDU5171】小奇的集合,暴力+矩阵乘法
- Kotlin 知识梳理(9) 委托属性
- 第12周Python学习周记
- BOOST1.54简化编译
- H5学习从0到1-H5的新特性(1)
- bitnami_redmine3.3.0-1 问题及备份恢复
- 计算机考研复试难,艰难与快乐:2008年重庆邮电大学计算机考研复试经历
- 在ajax中幸运抽奖,JS实现幸运抽奖页面
- 新概念英语第三册单词
- 在线教育APP的功能和优势
- 图形化开发(五)041-Three.js之Camera相机——target焦点和lookAt()方法、OrthographicCamera正交相机、PerspectiveCamera透视相机、相机插件
- spring boot 配置文件properties,yml语法学习及属性获取@ConfigurationProperties和@Value
- 初学Web:计算机气质个人主页
- java 生成临时目录_如何在Java中创建临时目录/文件夹?