本专栏为DICOM协议-成像协议相关的代码实现,主要以本人自己写的DICOM解析引擎来讲解,后续也会加入一些开源框架的源码分析。
DICOM协议相关原理部分在专栏从零讲解DICOM协议-成像协议中,本专栏为相应的代码实现。
本节最后部分有完整代码下载链接
有人可能疑惑已经有了不少开源框架,为什么还要造轮子呢?
确实基于开源框架可以解决大部分问题,但可能就是因为不了解DICOM底层实现,导致对小部分问题无从下手。经济基础决定上层建筑,底层原理决定上层应用。
个人认为造轮子有如下好处:
- 了解协议底层原理后,再看上层应用,知其所以然
- 国内厂家对DICOM协议实现程度不同,部分系统和图像没有严格按照DICOM协议标准实现,导致时能遇到不标准DICOM图像,部分不稳定的开源框架无法解析,而开源框架往往实现复杂,难以定位排查问题,更不知如何修复bug
本专栏按照如下思路讲解DICOM解析引擎的实现思路和整体代码框架:
- 读取DICOM文件至内存中
- 读取文件头到文件头对象中
- 按照元数据组特性读取元数据组中的各个DataElement
- 按照数据组特性读取数据组中的各个DataElement
- 如果PixelData是压缩格式,则用相应的解压算法解压
- CT值转BMP,保存BMP图像
此部分代码的开发工具:
操作系统win10
开发语言 C++
开发工具vs2013
代码为本人多年前独自完成,代码精简,结构清晰,适合以代码结构和实现去理解DICOM协议,且经过大量DICOM图像验证,有一定的适应性。
适配过的格式:
1. CT,MR,MG,DX,RF
2. 隐式小端,显式大端,显式小端
3. jpeglossless,jpeg2000
4. 多帧图像
核心代码:
以下链接中的代码是完整的且可运行的,链接如下,可按需下载:
dicom成像程序