【DICOM】
医学图像数据。
DICOM的官方定义定义:
- 医学图像或者相关数据的数据结构
- 网络服务(图像传输、PACS、打印、RIS-PACS)
- 存储媒体的交换
- 满足设备、程序需求
数据结构
- 病人信息(姓名、性别、UID···)
- 图像成像信息(设备参数、校准参数、dose(剂量)···)
- 图像信息(分辨率、窗宽窗位···)
【DCMTK】
它包含实现了标准DICOM大部分的库和应用。
检查、构造、转换DICOM图像文件,离线处理图像。也可以通过网络发送和接收图像。
【数据类型说明】
dcmdata程序包
dcmdata:一个数据编码/解码库和可用的工具.
这个模块包含了一些类来管理Dicom数据结构和文件。同时它也提供了对DICOMDIR文件的支持以满足Dicom storage media(存储介质)的需要。
主要的接口类有:
- DcmFileFormat:a class handling the DICOM file format (with meta header) 。头文件在dcfilefo.h。
- DcmDataset:a class handling the DICOM dataset format (files without meta header) 。头文件在dcdatset.h.
- DcmItem:a class representing a collection of DICOM elements。头文件在dcitem.h。
- DcmElement:abstract base class for all DICOM elements。头文件在dcelem.h。
- DcmAttributeTag/DcmByteString/DcmFloatingPointDouble/DcmFloatingPointSingle/DcmOtherByteOtherWord/DcmSequenceOfItems/DcmSignedLong/DcmSignedShort/DcmUnsignedLong/DcmUnsignedShor
工具:这个模块包含了下面的命令行工具:
dcm2xml: Convert DICOM file and data set to XML
dcmconv: Convert DICOM file encoding
dcmcrle: Encode DICOM file to RLE transfer syntax
dcmdrle: Decode RLE-compressed DICOM file
dcmdump: Dump DICOM file and data set
dcmftest: Test if file uses DICOM part 10 format
dcmgpdir: Create a general purpose DICOMDIR
dcmodify: Modify DICOM files
dump2dcm: Convert ASCII dump to DICOM file
xml2dcm: Convert XML document to DICOM file or data set
【使用示例】
可以通过官网下载包然后编译成适用于你当前环境的库就可以了。
调入一个DICOM文件,输出病人姓名:
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile("test.dcm");
if (status.good())
{
// 文件读取成功
OFString patientsName;
if (fileformat.getDataset()->findAndGetOFString(DCM_PatientsName, patientsName).good())
{
cout << "Patient's Name: " << patientsName << endl;
}
else
{
cerr << "Error: cannot access Patient's Name!" << endl;
}
}
else
{
// 文件读取失败
cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;
}
创建一个DICOM dataset数据集,并保存为文件:
char uid[100];
DcmFileFormat fileformat;
DcmDataset *dataset = fileformat.getDataset();
// 写入
dataset->putAndInsertString(DCM_SOPClassUID, UID_SecondaryCaptureImageStorage);
dataset->putAndInsertString(DCM_SOPInstanceUID, dcmGenerateUniqueIdentifier(uid, SITE_INSTANCE_UID_ROOT));
dataset->putAndInsertString(DCM_PatientsName, "Doe^John");
dataset->putAndInsertUint8Array(DCM_PixelData, pixelData, pixelLength);
OFCondition status = fileformat.saveFile("test.dcm", EXS_LittleEndianExplicit);
if (status.bad())
cerr << "Error: cannot write DICOM file (" << status.text() << ")" << endl;
通过 关键字的方式获取或者写入特定的字段