首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

DCMTK读取DICOM资料头信息的三种方法

2012-12-26 
DCMTK读取DICOM文件头信息的三种方法Howto: Load File Meta-HeaderHeres an example that shows how to l

DCMTK读取DICOM文件头信息的三种方法

Howto: Load File Meta-Header

Here's an example that shows how to load the File Meta Information Header of a?DICOMfile without reading the dataset. This could be useful if you are e.g. only interested in theSOP?Class?UID?and Transfer Syntax?UID?of the file.

There are three different approaches:

  1. Use the?loadFile()?method of the?DcmMetaInfo?class.
  2. Use the?loadFile()?method of the?DcmFileFormat?class with read mode?ERM_metaOnly.
  3. Use the?read()?method of the?DcmFileFormat?class in order to successively load the meta-header and the dataset.

The third approach allows for reading the dataset only if certain criteria (based on the data elements in the meta-header) are met. Please note that in this case the same input stream is used and that the meta-header is only read once.

Source Code
#include "dcmtk/config/osconfig.h"#include "dcmtk/dcmdata/dctk.h"#include "dcmtk/dcmdata/dcistrmf.h"?int main(int argc, char *argv[]){    OFCondition status;?    /* approach 1 */    DcmMetaInfo metainfo;    status = metainfo.loadFile("test.dcm");    if (status.good())    {        OFString sopClassUID, xferUID;        if (metainfo.findAndGetOFString(DCM_MediaStorageSOPClassUID, sopClassUID).good())            COUT << "SOP Class UID: " << sopClassUID << OFendl;        if (metainfo.findAndGetOFString(DCM_TransferSyntaxUID, xferUID).good())            COUT << "Transfer Syntax UID: " << xferUID << OFendl;        metainfo.print(COUT);    }?    /* approach 2 */    DcmFileFormat fileformat;    status = fileformat.loadFile("test.dcm", EXS_Unknown, EGL_noChange, DCM_MaxReadLength, ERM_metaOnly);    if (status.good())    {        OFString sopClassUID, xferUID;        if (fileformat.getMetaInfo()->findAndGetOFString(DCM_MediaStorageSOPClassUID, sopClassUID).good())            COUT << "SOP Class UID: " << sopClassUID << OFendl;        if (fileformat.getMetaInfo()->findAndGetOFString(DCM_TransferSyntaxUID, xferUID).good())            COUT << "Transfer Syntax UID: " << xferUID << OFendl;        fileformat.print(COUT);    }?    /* approach 3 */    fileformat.clear();    DcmInputFileStream fileStream("test.dcm");    status = fileStream.status();    if (status.good())    {        /* first, read meta-header */        fileformat.setReadMode(ERM_metaOnly);        fileformat.transferInit();        status = fileformat.read(fileStream);        if (status.good())        {            OFString sopClassUID, xferUID;            if (fileformat.getMetaInfo()->findAndGetOFString(DCM_MediaStorageSOPClassUID, sopClassUID).good())                COUT << "SOP Class UID: " << sopClassUID << OFendl;            if (fileformat.getMetaInfo()->findAndGetOFString(DCM_TransferSyntaxUID, xferUID).good())                COUT << "Transfer Syntax UID: " << xferUID << OFendl;            /* then read dataset if certain criteria are met */            if (sopClassUID == UID_SecondaryCaptureImageStorage)            {                fileformat.setReadMode(ERM_autoDetect);                status = fileformat.read(fileStream);                if (status.good())                {                    fileformat.print(COUT);                }            }        }        fileformat.transferEnd();    }?    return 0;}

Note

Please note that the above sample code requires DCMTK 3.5.5 (20100608 or newer).

转载:http://support.dcmtk.org/wiki/dcmtk/howto/loadmetaheader

热点排行