dcmtk程序包综述(1)
来源:互联网 发布:剑三脸型数据怎么复制 编辑:程序博客网 时间:2024/05/15 23:43
1.前言
简单列出dcmtk程序包的简介,包括主要接口类的简单说明,可用工具以及一些例子。下一步工作准备详细分析每个程序包中的接口类功能,并结合源码和dicom文档分析其实现过程。
2.Config程序包
config目录下的文档:
- config.txt:指出你编辑的任何.h .c .cc文件首先必须包含该目录下的头文件#include "osconfig.h"
- 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 willattempt 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.
- 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环境下包含 "dcmtk/config/cfwin32.h"文件
- cfwin32.h:包含了大量的宏定义。***如果需要查找某个宏的定义,可到这个文件中查找***
3.ofstd程序包
ofstd:作为一般目的的类库。
这个模块包含了一般目的的类库,这些类所描述的对象概念并非在Dicom标准中特有。它们广泛的在toolkit中使用。主要包含下面的类
- OFCommandLine:处理命令行参数,头文件在ofcmdln.h。***详情需要结合具体的代码来理解***
- OFCondition:描述条件码的一般类。头文件在ofcond.h。***详情需要结合具体的代码来理解***
- OFConsole:是一个singleton(孤立)类。提供线程安全的对标准输出流和错误流的访问。允许以多线程的方式同时创建输出。
- OFList:是一个双向链表模板类,接口是STL list类中的一个子集。头文件在oflist.h。
- OFStack:是一个堆栈模板类,接口是STL stack类中的一个子集。头文件在ofstack.h.
- OFStandard:包含大量帮助函数组成的类,用来包含大量“全局”帮助函数。注意全部都是静态函数。其中的一些函数实现调用了windows API函数,如fileexists()。头文件在ofstd.h。
- OFString:一个简单的string类,实现了std::string的一个子集,没有iterator或trait,在速度上也没有优化。头文件在ofstring.h
4.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;例三:如何为多个文件创建一般目的的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 << "Error: cannot write DICOMDIR (" << status.text() << ")" << endl;} else cerr << "Error: cannot create DICOMDIR (" << status.text() << ")" << endl;
5.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中定义。
例一:载入一幅DICOM单帧单色图像,并显示其像素数据。
- 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
DicomImage *image = new DicomImage("test.dcm");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 << "Error: cannot load DICOM img(" << DicomImage::getString(image->getStatus()) << ")" << endl;}delete image;
6.dcmimage程序包
dcmimage模块为dcmimgle模块提供对彩色图像的支持。对单色图像的支持由dcmimgle提供,对JPEG压缩图像的支持由dcmjpeg模块支持。
主要接口类:工具:
- DicomImage: 在dcmimgle中已介绍。
举例:载入一幅DICOM单帧图像(单色或彩色),并显示其像素数据。
- dcm2pnm: Convert DICOM images to PPM/PGM, PNG, TIFF or BMP
- dcmquant: Convert DICOM color images to palette color
- dcmscale: Scale DICOM image
#include "diregist.h" /* required to support color images */DicomImage *image = new DicomImage("test.dcm");if (image != NULL){ if (image->getStatus() == EIS_Normal) { Uint8 *pixelData = (Uint8 *)(image->getOutputData(8 /* bits per sample */)); if (pixelData != NULL) { /* do something useful with the pixel data */ } } else cerr << "Error: cannot load DICOM img (" << DicomImage::getString(image->getStatus()) << ")" << endl;}delete image;
7.dcmjpeg程序包
dcmjpeg提供了一个压缩/解压缩库以及可用工具。该模块包含一些类,可将DICOM图像对象在非压缩和JPEG压缩表示(传输协议)之间转换。无失真和有失真JPEG处理都被支持。这个模块实现了一族codec(编码解码器,由DcmCodec类派生而来),可以将这些codec在codec list中注册,codec list是由dcmdata模块保存的。
主要接口类:工具:
- DJEncoderRegistration: 一个singleton(孤立)类,为所有支持的JPEG处理注册编码器。在djencode.h中定义。
- DJDecoderRegistration: 一个singleton(孤立)类,为所有支持的JPEG处理注册解码器。在djdecode.h中定义。
- DJCodecEncoder: JPEG编码器的一个抽象codec类。This abstract class contains most of the application logic needed for a dcmdata codec object that implements a JPEG encoder using the DJEncoder interface to the underlying JPEG implementation. This class only supports compression, it neither implements decoding nor transcoding. 在djcodece.h中定义
- DJCodecDecoder: JPEG解码器的一个抽象codec类。This abstract class contains most of the application logic needed for a dcmdata codec object that implements a JPEG decoder using the DJDecoder interface to the underlying JPEG implementation. This class only supports decompression, it neither implements encoding nor transcoding.
- dcmcjpeg: Encode DICOM file to JPEG transfer syntax
- dcmdjpeg: Decode JPEG-compressed DICOM file
- dcmj2pnm: Convert DICOM images to PGM, PPM, BMP, TIFF or JPEG
- dcmmkdir: Create a DICOMDIR file
例1:用无失真JPEG压缩一幅DICOM图像文件。
DJEncoderRegistration::registerCodecs(); // register JPEG codecsDcmFileFormat fileformat;if (fileformat.loadFile("test.dcm").good()){ DcmDataset *dataset = fileformat.getDataset(); DcmItem *metaInfo = fileformat.getMetaInfo(); DJ_RPLossless params; // codec parameters, we use the defaults // this causes the lossless JPEG version of the dataset to be created dataset->chooseRepresentation(EXS_JPEGProcess14SV1TransferSyntax, ¶ms); // check if everything went well if (dataset->canWriteXfer(EXS_JPEGProcess14SV1TransferSyntax)) { // force the meta-header UIDs to be re-generated when storing the file // since the UIDs in the data set may have changed delete metaInfo->remove(DCM_MediaStorageSOPClassUID); delete metaInfo->remove(DCM_MediaStorageSOPInstanceUID); // store in lossless JPEG format fileformat.saveFile("test_jpeg.dcm", EXS_JPEGProcess14SV1TransferSyntax); }} DJEncoderRegistration::cleanup(); // deregister JPEG codecs例2:解压缩一幅JPEG压缩的DICOM图像文件。DJDecoderRegistration::registerCodecs(); // register JPEG codecsDcmFileFormat fileformat;if (fileformat.loadFile("test_jpeg.dcm").good()){ DcmDataset *dataset = fileformat.getDataset(); // decompress data set if compressed dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL); // check if everything went well if (dataset->canWriteXfer(EXS_LittleEndianExplicit)) { fileformat.saveFile("test_decompressed.dcm", EXS_LittleEndianExplicit); }} DJDecoderRegistration::cleanup(); // deregister JPEG codecs
0 0
- dcmtk程序包综述(1)
- dcmtk程序包综述(2)
- dcmtk程序包简介
- dcmtk程序包简介
- dcmtk程序包简介
- dcmtk程序包简介
- dcmtk程序包简介
- dcmtk程序包简介
- dcmtk程序包简介
- DCMTK开源库:程序包简介+支持的一些信息
- DCMTK
- 子程序和程序包-1
- 程序包
- 1 用dcmtk库解释dicom数据
- linux下dcmtk-3.6.1_20161102+openjpeg的编译
- 编译DCMTK
- 编译dcmtk
- 编译DCMTK
- Unity官方实例教程 Space Shooter(太空射击游戏)
- 删除一个字符串中的空格
- hibernate检索策略
- [SMOJ1773]原子弹
- Android DES数据加密
- dcmtk程序包综述(1)
- Git使用(一)
- Eclipse使用:Eclipse安装中文语言包
- 那些年收藏的Android开源库集合(UI效果)
- 正则表达式基本语法
- python基本数据类型
- Oracle学习笔记1
- git命令
- 如何下载高清卫星地图/历史影像(任意大小、自动拼接、高清晰)