2 DICOM成像协议编码实现-主框架搭建
以下链接是本系列文章,不足之处,可在评论区讨论:
系列文章
以下链接中的代码是完整的且可运行的,链接如下,可按需下载:
dicom成像程序
- 读取DICOM文件至内存中
- 读取文件头到文件头对象中
- 按照元数据组特性读取元数据组中的各个DataElement
- 按照数据组特性读取数据组中的各个DataElement
- 如果PixelData是压缩格式,则用相应的解压算法解压
- CT值转BMP,保存BMP图像
协议剖析文章中阐述了,DICOM图像主要由以下几部分组成:
- 文件头
- 元数据组
- 数据组
除文件头外,元数据组和数据组都是由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;
//读取数据组
virtual
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfbkgi
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01