DICOM文件格式与编程
来源:互联网 发布:婚礼策划 知乎 编辑:程序博客网 时间:2024/06/04 20:48
任何图像文件格式无非是由两个部分组成:存参数的 header 和图点数据(pixel data)。
BMP、 JPEG、TIFF 之类的格式的 header 只描述图像的基本参数:如几行、几列、每点用了几位、有没有压缩、调色板等等。Header 往往是固定长度的。
一、DICOM 的 4 个内容层次
1、 Patient
2、 Study
3、 Series
4、 Image
1. Patient IE:
2. Study IE:
3. Series IE:
4. Image IE:
要注意的是这些 module 有些是一定要的 (modatory) 有些是用户选用的 (user)。到了每个 module 里 attribute/element 表又有分五类 Type 1, 1C, 2, 2C 和 3。 Type 1 是一定要的,2 也是一定要的但是内容可以是空的。Type 3 则可要可不要。所以浓缩一下,一个 CR 图像里的元素 (elements) 也不是太多。把这些表格展开后,这些 elements 组成一个 dataset。
1. group tag: 16-bit
2. element tag: 16-bit
3. length (or VR/length): 32-bit
4. data (bytes of length)
对应每一个用到的 element DICOM 标准 Part 6 都定义了一个 group tag 和 element tag。比如说:
patient name:
patient ID:
...
往外写时要做几个事情:
1. 要把所有元素按 group tage 和 element tag 理一遍 (sort)。从小排到大。
2. 如果是写 DICOM 介质的 DICOM file 还先写 128 bytes preamble (一般是空白),加 "DICM", 加 group 2 Meta header。(讲到 Part 10 时再细说)
3. 如果 dataset 里面含有 Sequence elements, sequence 里面每一个 Item 又是一个 dataset。
Modality (0008, 0060): SC
Photometric Interpretation (0028, 0004): RGB
SOP Class UID:
最简单的办法是写一个 structure 然后一个 array。
typedef struct DicomElem
{
} DicomElem;
DicomElem CRDataSet [] =
{
{ 0x0008, 0x0005, "CS", 10, "ISO_IR 100"},
{ 0x0008, 0x0008, "CS", 16, "ORIGINAL\\PRIMARY"},
{0x0010, 0x0010, "PN", 16, "My^Test^Image^^ "},
{0x0010, 0x0020, "SH", 6, "123456"},
...
{0,0,"",0,""}
};
void WriteCDImage(FILE *fp)
{
}
unsigned char *LoadBMPImgeData(char *fileName, int &nCols, int &nRows, unsigned long &lPixelLength)
{
....
}
细节自己去写。
二、DICOM文件读写最难的是两件事情
三、DICOM file 细节问题
0x7fe0, 0x0010, "OB", ' '' ', 0xffffffff
0xFFFE, 0x0000, 0xffffffff
0x00000000
0x00001000
...
0xFFFE, 0xE00D
0xFFFE, 0x0000, 0x00001000
... // (4096 bytes)
0xFFFE, 0xE00D
...
0xFFFE, 0xE0DD // End o
- DICOM文件格式与编程
- DICOM文件格式与编程
- DICOM文件格式与编程
- DICOM文件格式与编程
- DICOM文件格式与编程
- DICOM文件格式与编程(转)
- (转载)DICOM文件格式与编程
- DICOM文件格式
- 第四讲 DICOM介质存储功能与文件格式
- DICOM标准及应用——第四讲 DICOM介质存储功能与文件格式
- dicom支持的文件格式及缩写
- DICOM file 编程建议
- Canvas与DICOM图像处理
- DICOM
- DICOM
- DICOM
- DICOM
- C与汇编混合编程&&ELF文件格式解析
- TCP/IP第二层--数据链路层
- 婚外情中的背叛和报复
- 跨平台(Windows+Linux)的Socket通讯程序(二)—结构
- Gimp资料
- android layout 入门总结
- DICOM文件格式与编程
- 论手持设备应用的WebApp化!
- Android开发学习笔记:浅谈ToggleButton
- cocos2d 中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)
- DICOM简介
- Android简介
- vim配置
- Using Android monkeyrunner from Eclipse, both in Windows and Linux!
- 读取properties配置文件的工具类