ITK学习笔记——体数据读,序列dicom写

2024-05-14 00:08

本文主要是介绍ITK学习笔记——体数据读,序列dicom写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

三维医学图像分别可从Axial、Coronal、Sagittal三个方向进行观察,常用的格式也有很多,最常见的就是dcm格式,代表一张切片。为了方便处理,通常在三维上直接对图像进行处理,常用的三维体数据格式有比如nii.gz、mhd、nrrd。但有时我们对三维体数据处理完后不可避免的要对每一张切片进行观察或者后处理,这样就要将一个三维体数据转换成二维的序列。

下面我们用ITK将nii.gz体数据转换为.dcm序列。

#include "itkGDCMImageIO.h"
#include "itkNumericSeriesFileNames.h"
#include "itkImageFileReader.h"
#include "itkImageSeriesWriter.h"
#include "itkMetaDataObject.h"
#include <vector>
#include "itksys/SystemTools.hxx"int main(int argc, char* argv[])
{typedef signed short    PixelType;const unsigned int      Dimension = 3;typedef itk::Image< PixelType, Dimension >      ImageType;typedef itk::ImageFileReader< ImageType >       ReaderType;ReaderType::Pointer reader = ReaderType::New();reader->SetFileName("D:/init.nii.gz");try{reader->Update();}catch (itk::ExceptionObject &excp){std::cerr << "Exception thrown while writing the image" << std::endl;std::cerr << excp << std::endl;return EXIT_FAILURE;}typedef itk::GDCMImageIO                        ImageIOType;typedef itk::NumericSeriesFileNames             NamesGeneratorType;ImageIOType::Pointer gdcmIO = ImageIOType::New();const char * outputDirectory = "D:/out/";itksys::SystemTools::MakeDirectory(outputDirectory);typedef signed short    OutputPixelType;const unsigned int      OutputDimension = 2;typedef itk::Image< OutputPixelType, OutputDimension >    Image2DType;typedef itk::ImageSeriesWriter<ImageType, Image2DType >  SeriesWriterType;NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();itk::MetaDataDictionary & dict = gdcmIO->GetMetaDataDictionary();std::string tagkey, value;tagkey = "0008|0060"; // Modalityvalue = "MR";itk::EncapsulateMetaData<std::string>(dict, tagkey, value);tagkey = "0008|0008"; // Image Typevalue = "DERIVED\\SECONDARY";itk::EncapsulateMetaData<std::string>(dict, tagkey, value);tagkey = "0008|0064"; // Conversion Typevalue = "DV";itk::EncapsulateMetaData<std::string>(dict, tagkey, value);SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();seriesWriter->SetInput(reader->GetOutput());seriesWriter->SetImageIO(gdcmIO);ImageType::RegionType region =reader->GetOutput()->GetLargestPossibleRegion();ImageType::IndexType start = region.GetIndex();ImageType::SizeType  size = region.GetSize();std::string format = outputDirectory;format += "/image%03d.dcm";namesGenerator->SetSeriesFormat(format.c_str());namesGenerator->SetStartIndex(start[2]);namesGenerator->SetEndIndex(start[2] + size[2] - 1);namesGenerator->SetIncrementIndex(1);seriesWriter->SetFileNames(namesGenerator->GetFileNames());try{seriesWriter->Update();}catch (itk::ExceptionObject & excp){std::cerr << "Exception thrown while writing the series " << std::endl;std::cerr << excp << std::endl;return EXIT_FAILURE;}return EXIT_SUCCESS;
}

这篇关于ITK学习笔记——体数据读,序列dicom写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987194

相关文章

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,