当前位置:   article > 正文

DCMTK开源库:程序包简介+支持的一些信息_0040,0002

0040,0002

关于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(存储介质)的需要。

        主要的接口类有:

        --DcmFileFormata class handling the DICOM file format (with meta header) 。头文件在dcfilefo.h***详情在单独的文档中分析***

        --DcmDataseta class handling the DICOM dataset format (files without meta header) 。头文件在dcdatset.h***详情在单独的文档中分析***

        --DcmItema class representing a collection of DICOM elements。头文件在dcitem.h**详情在单独的文档中分析**

        --DcmElementabstract 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())

   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;


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)

 

 if (image->isMonochrome())

    {

      image->setMinMaxWindow();

      Uint8 *pixelData = (Uint8 *)(image->getOutputData(8 ));

      if (pixelData != NULL)

      {

        /* do something useful with the pixel data */

      }

    }

} else

    cerr << "Error: cannot load DICOM image (" << DicomImage::getString(image->getStatus()) << ")" << endl;

}

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)

{

    Uint8 *pixelData = (Uint8 *)(image->getOutputData(8 ));

    if (pixelData != NULL)

    {

      /* do something useful with the pixel data */

    }

} else

    cerr << "Error: cannot load DICOM image (" << DicomImage::getString(image->getStatus()) << ")" << endl;

}

delete image;

4、dcmjpeg程序包

        dcmjpeg提供了一个压缩/解压缩库以及可用工具。该模块包含一些类,可将DICOM图像对象在非压缩和JPEG压缩表示(传输协议)之间转换。无失真和有失真JPEG处理都被支持。这个模块实现了一族codec(编码解码器,由DcmCodec类派生而来),可以将这些codeccodec 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_JPEGProcess14SV1TransferSyntax, &params);

// 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

        --解压缩一幅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))

{

    fileformat.saveFile("test_decompressed.dcm", EXS_LittleEndianExplicit);

}

  DJDecoderRegistration::cleanup(); // deregister JPEG codecs

二、/MTd

        C语言运行库的引如方式有两种。与MFC的用法一样,有动态链接的方式和静态链接的方式。也就是编译参数/MT /MTd /MD /MDd负责控制啦。
         /MT
负责链接发行版的C语言运行库(静态链接)
         /MTd
负责链接调试版的C语言运行库(静态链接)
         /MD
负责链接发行版的C语言运行库(动态链接)
         /MDd
负责链接调试版的C语言运行库(动态链接)


三、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) ScheduledProcedureStepSequence
 安排程序序列
(0008,0060) > Modality
 设备样式(设备名:如CTCR等)
(0040,0001) > ScheduledStationAETitle
 预定工作站的应用实体名
(0040,0002) > ScheduledProcedureStepStartDate
 预定的操作日期
(0040,0003) > ScheduledProcedureStepStartTime
 预定的操作时间
(0040,0006) > ScheduledPerformingPhysiciansName
 检查医生姓名
(0040,1001) RequestedProcedureID
 被请求的程序ID
(0040,1003) RequestedProcedurePriority
 被请求过程的优先权


支持以下返回信息:
(0008,0005) SpecificCharacterSet

(0008,0050) AccessionNumber
(0008,0080) InstitutionName
(0008,0081) InstitutionAddress
(0008,0090) ReferringPhysiciansName
(0008,1080) AdmittingDiagnosesDescription

(0008,1110) ReferencedStudySequence
(0008,1150) > ReferencedSOPClassUID
(0008,1155) > ReferencedSOPInstanceUID
(0008,1120) ReferencedPatientSequence
(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) RequestedProcedureDescription
(0032,1064) RequestedProcedureCodeSequence
(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) ScheduledProcedureStepSequence
(0008,0060) > Modality
(0032,1070) > RequestedContrastAgent
(0040,0001) > ScheduledStationAETitle

(0040,0002) > ScheduledProcedureStepStartDate
(0040,0003) > ScheduledProcedureStepStartTime
(0040,0004) > ScheduledProcedureStepEndDate
(0040,0005) > ScheduledProcedureStepEndTime

(0040,0006) > ScheduledPerformingPhysiciansName
(0040,0007) > ScheduledProcedureStepDescription
(0040,0008) > ScheduledProtocolCodeSequence
(0008,0100) > > CodeValue
(0008,0102) > > CodingSchemeDesignator
(0008,0103) > > CodingSchemeVersion
(0008,0104) > > CodeMeaning
(0040,0009) > ScheduledProcedureStepID
(0040,0010) > ScheduledStationName
(0040,0011) > ScheduledProcedureStepLocation
(0040,0012) > PreMedication
(0040,0020) > ScheduledProcedureStepStatus
(0040,0400) > CommentsOnTheScheduledProcedureStep
(0040,1001) RequestedProcedureID
(0040,1002) ReasonForTheRequestedProcedure
(0040,1003) RequestedProcedurePriority
(0040,1004) PatientTransportArrangements
(0040,1005) RequestedProcedureLocation
(0040,1008) ConfidentialityCode
(0040,1009) ReportingPriority
(0040,1010) NamesOfIntendedRecipientsOfResults
(0040,1400) RequestedProcedureComments
(0040,2001) ReasonForTheImagingServiceRequest
(0040,2004) IssueDateOfImagingServiceRequest
(0040,2005) IssueTimeOfImagingServiceRequest
(0040,2008) OrderEnteredBy
(0040,2009) OrderEnterersLocation
(0040,2010) OrderCallbackPhoneNumber
(0040,2016) PlacerOrderNumberImagingServiceRequest
(0040,2017) FillerOrderNumberImagingServiceRequest
(0040,2400) ImagingServiceRequestComments
(0040,3001) ConfidentialityConstraintOnPatientDataDescription



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/289890
推荐阅读
  

闽ICP备14008679号