2 DICOM成像协议编码实现-主框架搭建

以下链接是本系列文章,不足之处,可在评论区讨论:
系列文章

以下链接中的代码是完整的且可运行的,链接如下,可按需下载:
dicom成像程序

  本篇文章对应 专栏 从零讲解DICOM协议-成像协议中的文章DICOM成像协议剖析DICOM成像协议实现思路,建议先看以上两篇文章以了解DICOM底层协议,有助于理解代码实现。
  本篇文章讲解了DICOM解析引擎的实现思路和整体代码框架,并完成

  1. 读取DICOM文件至内存中
  2. 读取文件头到文件头对象中
  3. 按照元数据组特性读取元数据组中的各个DataElement
  4. 按照数据组特性读取数据组中的各个DataElement
  5. 如果PixelData是压缩格式,则用相应的解压算法解压
  6. CT值转BMP,保存BMP图像

在这里插入图片描述
在这里插入图片描述

  协议剖析文章中阐述了,DICOM图像主要由以下几部分组成:

  1. 文件头
  2. 元数据组
  3. 数据组

  除文件头外,元数据组和数据组都是由DICOM协议中的DataElement结构组成
  DataElement由Tag,VR,Length,Value组成
  Tag由group和elment组成,VR有显式和隐式之分,Length所在字节由显隐式和VR类型决定,Value长度是偶数等
  复杂点的图像还包含SQ序列嵌套数据,多帧数据
  更复杂的图像为不规范图像,即没有严格按照DICOM协议来组织结构,要兼容这些图像,需要对应的处理逻辑。可以通过收集各厂家设备和PACS输出的DICOM图像来测试系统兼容性,不断丰富处理逻辑,提高系统兼容性。
  元数据组是小端显式格式
  数据组受元数据组中的传输语法影响,PixelData受传输语法影响,有大小端和是否压缩之分,数据组除PixelData以外的只受传输语法的大小端格式影响。

基于以上,代码实现的思路如下:
5. 读取DICOM文件至内存中
6. 读取文件头到文件头对象中
7. 按照元数据组特性读取元数据组中的各个DataElement
8. 按照数据组特性读取数据组中的各个DataElement
9. 如果PixelData是压缩格式,则用相应的解压算法解压

一. 读取DICOM文件至内存中
  使用父类FileRead,以设计模式中的模板模式结构组织,完成文件读取,并用抽象函数完成DICOM解析骨架搭建,具体实现由子类完成。头文件代码如下:

class FileRead
{
   
public:
	FileRead();
	//传入图像路径
	FileRead(string path);
	//传入图像内存指针和图像数据长度
	FileRead(char *buffer, int len);
	virtual ~FileRead() = 0;
public:
	//读取DICOM数据至内存
	virtual bool ReadFile(string path);
	//释放内存指针
	virtual void Clear() = 0;
protected:
	//读取文件头
	virtual void GetHead() = 0;
	//读取元数据组
	virtual void GetMetadata() = 0;
	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DICOM医学影像

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

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

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

打赏作者

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

抵扣说明:

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

余额充值