赞
踩
关于DCMTK开源库的知识:
一、dcmtk程序包简介:http://blog.csdn.net/diqiucun666/article/details/2866908(dcmtk开源库很好的中文说明手册)
二、编译DCMTK:http://blog.csdn.net/jackmacro/article/details/5332665
三、DCMTK所支持的一些信息:http://bbs.hc3i.cn/thread-10147-1-1.html
学到的是:
一、dcmtk程序包简介
该文简单列出了dcmtk程序包的简介,包括主要接口类的简单说明,可用工具以及一些例子。下一步工作准备详细分析每个程序包中的接口类功能,并结合源码和dicom文档分析其实现过程。
1、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("test.dcm");
if (status.good())
{OFString patientsName;
If (fileformat.getDataset()->findAndGetOFString(DCM_PatientsName, patientsName).good())
{
} else
} 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_SecondaryCaptureImageSto
dataset->putAndInsertString(DCM_SOPInstanceUID, dcmGenerateUniqueIdentif
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;
2、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("test.dcm");
if (image != NULL)
{if (image->getStatus() == EIS_Normal)
{
} else
}
delete image;
3、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 "diregist.h"
DicomImage *image = new DicomImage("test.dcm");
if (image != NULL)
{
if (image->getStatus() == EIS_Normal)
{
} else
}
delete image;
4、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
举例:
--用无失真JPEG压缩一幅DICOM图像文件。
DJEncoderRegistration::registerCodecs(); // register JPEG codecs
DcmFileFormat 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_JPEGProcess14SV1Transfer
// check if everything went well
if (dataset->canWriteXfer(EXS_JPEGProcess14SV1Transfer
{
}
}
--解压缩一幅JPEG压缩的DICOM图像文件。
DJDecoderRegistration::registerCodecs(); // register JPEG codecs
DcmFileFormat 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))
{
}
}
C语言运行库的引如方式有两种。与MFC的用法一样,有动态链接的方式和静态链接的方式。也就是编译参数/MT /MTd /MD /MDd负责控制啦。
三、DCMKT所支持的信息
由于我主要是用DCMTK进行研究,所以说明一下它现在所支持的一些信息:
在请求中,它支持以下字段(我用数据库来理解DICOM的,所以我习惯叫它们字段)
(0008,0050) AccessionNumber 工作流号
(0008,0090) ReferringPhysiciansName 提交人(医师)名字
(0010,0010) PatientsName 病人姓名
(0010,0020) PatientID 病人ID
(0010,0040) PatientsSex 病人性别
(0032,1032) RequestingPhysician 请求医师
(0038,0010) AdmissionID 允许进入ID
(0040,0100) ScheduledProcedureStepSe
(0008,0060) > Modality 设备样式(设备名:如CT,CR等)
(0040,0001) > ScheduledStationAETitle 预定工作站的应用实体名
(0040,0002) > ScheduledProcedureStepSt
(0040,0003) > ScheduledProcedureStepSt
(0040,0006) > ScheduledPerformingPhysi
(0040,1001) RequestedProcedureID 被请求的程序ID
(0040,1003) RequestedProcedurePriori
支持以下返回信息:
(0008,0005) SpecificCharacterSet
(0008,0050) AccessionNumber
(0008,0080) InstitutionName
(0008,0081) InstitutionAddress
(0008,0090) ReferringPhysiciansName
(0008,1080) AdmittingDiagnosesDescri
(0008,1110) ReferencedStudySequence
(0008,1150) > ReferencedSOPClassUID
(0008,1155) > ReferencedSOPInstanceUID
(0008,1120) ReferencedPatientSequenc
(0008,1150) > ReferencedSOPClassUID
(0008,1155) > ReferencedSOPInstanceUID
(0010,0010) PatientsName
(0010,0020) PatientID
(0010,0030) PatientsBirthDate
(0010,0040) PatientsSex
(0010,1000) OtherPatientIDs
(0010,1001) OtherPatientNames
(0010,1020) PatientsSize
(0010,1030) PatientsWeight
(0010,1040) PatientsAddress
(0010,1080) MilitaryRank
(0010,2000) MedicalAlerts
(0010,2110) ContrastAllergies
(0010,2160) EthnicGroup
(0010,21a0) SmokingStatus
(0010,21b0) AdditionalPatientHistory
(0010,21c0) PregnancyStatus
(0010,21d0) LastMenstrualDate
(0010,4000) PatientComments
(0020,000d) StudyInstanceUID
(0032,1032) RequestingPhysician
(0032,1033) RequestingService
(0032,1060) RequestedProcedureDescri
(0032,1064) RequestedProcedureCodeSe
(0008,0100) > CodeValue
(0008,0102) > CodingSchemeDesignator
(0008,0103) > CodingSchemeVersion
(0008,0104) > CodeMeaning
(0038,0010) AdmissionID
(0038,0011) IssuerOfAdmissionID
(0038,0050) SpecialNeeds
(0038,0300) CurrentPatientLocation
(0038,0500) PatientState
(0040,0100) ScheduledProcedureStepSe
(0008,0060) > Modality
(0032,1070) > RequestedContrastAgent
(0040,0001) > ScheduledStationAETitle
(0040,0002) > ScheduledProcedureStepSt
(0040,0003) > ScheduledProcedureStepSt
(0040,0004) > ScheduledProcedureStepEn
(0040,0005) > ScheduledProcedureStepEn
(0040,0006) > ScheduledPerformingPhysi
(0040,0007) > ScheduledProcedureStepDe
(0040,0008) > ScheduledProtocolCodeSeq
(0008,0100) > > CodeValue
(0008,0102) > > CodingSchemeDesignator
(0008,0103) > > CodingSchemeVersion
(0008,0104) > > CodeMeaning
(0040,0009) > ScheduledProcedureStepID
(0040,0010) > ScheduledStationName
(0040,0011) > ScheduledProcedureStepLo
(0040,0012) > PreMedication
(0040,0020) > ScheduledProcedureStepSt
(0040,0400) > CommentsOnTheScheduledPr
(0040,1001) RequestedProcedureID
(0040,1002) ReasonForTheRequestedPro
(0040,1003) RequestedProcedurePriori
(0040,1004) PatientTransportArrangem
(0040,1005) RequestedProcedureLocati
(0040,1008) ConfidentialityCode
(0040,1009) ReportingPriority
(0040,1010) NamesOfIntendedRecipient
(0040,1400) RequestedProcedureCommen
(0040,2001) ReasonForTheImagingServi
(0040,2004) IssueDateOfImagingServic
(0040,2005) IssueTimeOfImagingServic
(0040,2008) OrderEnteredBy
(0040,2009) OrderEnterersLocation
(0040,2010) OrderCallbackPhoneNumber
(0040,2016) PlacerOrderNumberImaging
(0040,2017) FillerOrderNumberImaging
(0040,2400) ImagingServiceRequestCom
(0040,3001) ConfidentialityConstrain
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。