DICOM文件编程

dcmtk程序包简介

该文简单列出了dcmtk程序包的简介,包括主要接口类的简单说明,可用工具以及一些例子。下一步工作准备详细分析每个程序包中的接口类功能,并结合源码和dicom文档分析其实现过程。

一、Config程序包 -config目录下的文档: --config.txt:

指出你编辑的任何.h .c .cc文件首先必须包含该目录下的头文件#include \--dirstruc.txt:

给出了dcmtk项目的项目目录结构,这个用cmake会自动生成 --envvars.txt:

这个文件比较重要,它指出了一些运行时环境变量,这些变量可能会影响dcmtk的工具和库的使用,这些变量包括:

---DCMDICTPATH:影响dcmdata

On Win32 platforms, a built-in dictionary is used by default. If the DCMDICTPATH environment variable is set, the applications will attempt to load _additional_ DICOM data dictionaries specified in the DCMDICTPATH environment variable instead. The DCMDICTPATH environment variable has the same format as the shell PATH variable in that a semicolon (\separates entries. The data dictionary code will attempt to load each file specified in the DCMDICTPATH environment variable.

See also: documentation in dcmdata/docs/datadict.txt ---TCP_BUFFER_LENGTH:影响dcmnet

By default, DCMTK uses a TCP send and receive buffer length of 32K. If the environment variable TCP_BUFFER_LENGTH is set, it specified an override for the TCP buffer length. The value is specified in bytes, not in Kbytes.

---TCP_NODELAY:影响dcmnet

If this environment variable contains a non-zero number, the Nagle algorithm will not be disabled for TCP transport connections. Also see documentation for macro DONT_DISABLE_NAGLE_ALGORITHM in config/docs/macros.txt

---TMPDIR:影响dcmnet

Affects the implementation of the tempnam() emulation on platforms where tempnam() is not defined. See tempnam(3S) main page for a description.

--macros.txt:

这个文件也特别重要,它给出了很多编译时的宏,这些宏可能会影响dcmtk的工具和库的使用。大部分的宏可以用来激活一些实验性的或很少需要的特性,另外有一些是用来取消某些功能。要尽量谨慎使用。详细见文档。

--modules.txt:

这个文件讲述如何自己配置各个模块,不需要掌握。 -config的include目录下的文件

--osconfig.h:这个文件是必须包含在所有.h .c文件中的,其中指出在win32环境下包含\文件

--cfwin32.h:包含了大量的宏定义。***如果需要查找某个宏的定义,可到这个文件中查找***

二、ofstd程序包

-ofstd:作为一般目的的类库。

这个模块包含了一般目的的类库,这些类所描述的对象概念并非在Dicom标准中特有。它们广泛的在toolkit中使用。主要包含下面的类

--OFCommandLine:处理命令行参数,头文件在ofcmdln.h。***详情需要结合具体的代码来理解***

--OFCondition:描述条件码的一般类。头文件在ofcond.h。***详情需要结合具体的代码来理解***

--OFConsole:是一个singleton(孤立)类***不明白***。提供线程安全的对标准输出流和错误流的访问。允许以多线程的方式同时创建输出。***多线程的东西不太明白,它的作用应该是在多线程中实现指定线程的输出流进行输出操作***

--OFList:是一个双向链表模板类,接口是STL list类中的一个子集。头文件在oflist.h。***不明白为什么不直接用标准库中的list,兼容性应该更好啊***

--OFStack:是一个堆栈模板类,接口是STL stack类中的一个子集。头文件在ofstack.h。***不明白为什么不直接用标准库中的stack,兼容性应该更好啊***

--OFStandard:包含大量帮助函数组成的类,用来包含大量“全局”帮助函数。注意全部都是静态函数。其中的一些函数实现调用了windows API函数,如fileexists()。头文件在ofstd.h。***如果需要一些全局函数,可以到这里了找一找。***

--OFString:一个简单的string类,实现了std::string的一个子集,没有iterator或trait,在速度上也没有优化。头文件在ofstring.h。***不明白为什么不直接用标准库中的string,兼容性应该更好啊***

--除了上述的主要类以外,还包含了大量辅助类,用来支撑上述类的功能。***详情需要结合具体的代码来理解***

三、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\\DcmUnsignedShort

工具:这个模块包含了下面的命令行工具:

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(\if (status.good())

{OFString patientsName; If (fileformat.getDataset()->findAndGetOFString(DCM_PatientsName, patientsName).good())

{ cout << \} else

cerr << \} else

cerr << \--创建一个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, \/* ... */

dataset->putAndInsertUint8Array(DCM_PixelData, pixelData, pixelLength); OFCondition status = fileformat.saveFile(\if (status.bad())

cerr << \--如何为多个文件创建一般目的的DICOMDIR DicomDirInterface dicomdir;

OFCondition status = dicomdir.createNewDicomDir(); if (status.good())

{while ( /* there are files */ )

dicomdir.addDicomFile( /* current filename */ ); status = dicomdir.writeDicomDir(); if (status.bad())

cerr << \} else

cerr << \四、dcmimgle程序包

dcmimgle是一个图像处理库和可用的工具模块,它包括了对DICOM单色图像的访问和显示。对颜色图像的支持由dcmimage模块提供,对JPEG压缩图像的支持由dcmjpeg模块支持。

主要接口类:

--DicomImage: 为dcmimgle/dcmimage模块提供接口类。主要目的是图像显示。在dcmimage.h中定义。

--DiDisplayFunction: Class to handle hardcopy and softcopy device characteristics file and manage display LUTs (for calibration). 在didispfn.h中定义。

可用工具:

--dcmdspfn: Export standard display curves to a text file

--dcod2lum: Convert hardcopy characteristic curve file to softcopy format --dconvlum: Convert VeriLUM files to DCMTK display files 举例:

--载入一幅DICOM单帧单色图像,并显示其像素数据。 DicomImage *image = new DicomImage(\if (image != NULL)

{if (image->getStatus() == EIS_Normal) {

if (image->isMonochrome()) {

image->setMinMaxWindow();

Uint8 *pixelData = (Uint8 *)(image->getOutputData(8 /* bits */)); if (pixelData != NULL) {

/* do something useful with the pixel data */ } } } else cerr << \cannot load DICOM image (\<< DicomImage::getString(image->getStatus()) << \

}

delete image;

五、dcmimage程序包

dcmimage模块为dcmimgle模块提供对彩色图像的支持。对单色图像的支持由dcmimgle提供,对JPEG压缩图像的支持由dcmjpeg模块支持。

主要接口类:

--DicomImage: 在dcmimgle中已介绍。 工具:

--dcm2pnm: Convert DICOM images to PPM/PGM, PNG, TIFF or BMP --dcmquant: Convert DICOM color images to palette color --dcmscale: Scale DICOM images 举例:

--载入一幅DICOM单帧图像(单色或彩色),并显示其像素数据。 #include \ /* required to support color images */

联系客服:779662525#qq.com(#替换为@)