`
qimo601
  • 浏览: 3446104 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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).

分享到:
评论

相关推荐

    基于DCMTK的DICOM图像查看器

    7. **错误处理**:良好的错误处理机制能确保在遇到不完整或格式错误的DICOM文件时,程序仍能正常运行。 8. **性能优化**:对于大体积的医学图像,优化内存管理和加载速度是必要的,以提供流畅的用户体验。 9. **跨...

    基于DCMTK的DICOM医学图像显示及其调窗方法研究

    文件头中包含保留部分和元信息,其中保留部分通常全为0x00,而元信息则包括传输语法、病人信息、图像尺寸、图像位深度等关键数据。数据集部分包含实际的图像数据,由多个数据元素组成,涵盖了病人的基本信息、图像...

    VC和DCMTK显示DICOM图像

    DICOM图像文件主要由两部分组成:DICOM文件头(DICOM File Meta Information)与DICOM数据集(Data Set)。文件头用于描述文件的元信息,而数据集则包含具体的图像数据和其他相关信息。 ##### 1. DICOM文件头 文件...

    用VC++和DCMTK显示DICOM医学图像

    - **DICOM文件头**:包含128字节的00H作为文件前言,随后是DICOM前缀,即包含字符串“DICM”的4字节,用于识别文件是否符合DICOM格式。 - **DICOM数据集合**:由一系列DICOM数据元素按特定顺序排列组成。每个数据...

    读取DICOM文件(c编写)

    1. **解析DICOM头文件**:首先,你需要读取并解析DICOM文件的头部,头部包含了文件的基本信息和数据元素的位置。你可以使用`fread`函数从文件中读取固定大小的块,然后解码标签和VR。 2. **理解VR**:根据VR的不同...

    新建文件夹.zip_dicom文件_读取DICOM文件

    1. **打开文件**:使用 DICOM 库(如 pydicom、gdcm、DCMTK 等)读取 DICOM 文件,解析文件头信息。 2. **解析元数据**:从文件头中提取所需的信息,如患者姓名、检查日期、设备型号、图像尺寸、像素间距等。 3. **...

    dicom文件的读写源码

    在医疗领域,如CT、MRI、X光等扫描结果通常以DICOM文件的形式存在。 在 DICOM 文件的读写过程中,我们需要了解以下几个关键知识点: 1. **DICOM 文件结构**:DICOM 文件由两部分组成,一部分是DICOM Header(头部...

    医学dicom图像文件

    处理DICOM文件时,我们可能会用到一些专门的工具,如DCMTK(DICOM Toolkit)、pydicom库(Python中的DICOM处理库)或者商业软件如ImageJ,它们可以帮助读取、解析、编辑和显示DICOM文件。此外,对于压缩的DICOM图像...

    DICOM文件格式与编程;VC++实现;

    例如,`DcmFileFormat`类是DCMTK中用于读取和写入DICOM文件的主要类。 5. 图像数据处理:DICOM图像数据通常存储为未压缩的像素数组,或者经过JPEG、RLE等压缩算法压缩。解码这些数据需要理解相应的压缩算法,并使用...

    _批量读取DICOM文件_源码

    在标题和描述中提到的"批量读取DICOM文件_源码",是指一个可能包含用于处理DICOM文件的源代码资源。这个压缩包很可能是用于演示或教学如何在程序中批量处理这些医疗影像文件。源码通常是用编程语言编写的,例如...

    DICOM与BMP相互转换 c++代码 VS2010

    接着,根据DICOM文件的元数据创建BMP的文件头和信息头,最后将图像数据按BMP格式的顺序写入文件。 反之,从BMP到DICOM的转换,需要读取BMP文件,提取其文件头、信息头和像素数据。然后构建一个基本的DICOM文件结构...

    dicom图片例子 dcm.zip

    例如,使用pydicom库,我们可以读取 DICOM 文件,访问患者信息,以及获取图像像素数据。 四、DICOM 网络传输: DICOM 标准还包括网络协议部分,允许设备之间安全地传输和共享图像。最常见的是DICOM网络服务类...

    DICOM图像读取以及窗宽,窗位调整

    1. 打开DICOM文件:使用库提供的API打开文件,获取文件头信息,了解图像的元数据。 2. 解析元数据:包括患者信息、检查类型、设备参数等,这些信息有助于正确解读图像。 3. 获取像素数据:从文件中提取像素数组,这...

    BMP转换为DICOM程序

    3. **DICOM头信息**:每个DICOM文件都有一个头文件,包含了一系列的关键信息,如Patient DICOM Tag(0010,0010),用于存储患者姓名;Study Date(0008,0020)记录检查日期;Series Description(0008,103E)描述了...

    论解读DICOM医学图像文件及其显示的VC_实施方法.pdf

    1. **读取DICOM文件**:首先使用C++库(如DCMTK)读取DICOM文件,并解析出图像的像素数据和其他元数据。 2. **像素数据转换**:根据图像的像素格式(如RGB或灰度),将原始数据转换为适合显示的格式。 3. **显示图像...

    DICOM格式,医学数据文件

    在实际应用中,开发者可能需要使用 DICOM 库或工具,如DCMTK、pydicom或fo-dicom,来读取、写入和处理 DICOM 文件。此外,理解DICOM标准的最新版本(如DICOM Part 5 - Information Object Definitions和DICOM Part 7...

    dcmtk-3.6.5-win64已编译工具包

    2. DICOM文件操作:DCMTK提供了强大的文件操作功能,包括读取、写入和解析DICOM文件的头信息,如患者信息、影像序列、设备参数等。 3. DICOM格式转换:工具包中的dcmj2pnm程序允许将DICOM JPEG图像转换为PNM...

    修改dicom的检查号

    关于"读取DICOM文件",这涉及到理解DICOM文件结构,包括文件头(Header)、像素数据(Pixel Data)以及一系列的DICOM元素(Elements),每个元素都有一个特定的Tag,如(0008,0020) - Study Date, (0008,0030) - ...

    基于c#winfrom Dicom图像解析,包括dic,dcm.pk文件

    解析过程包括读取文件头,获取元数据,然后解码像素数据,形成可显示的图像。 在实现过程中,开发者可能会使用开源的DICOM库,如DCMTK、fo-dicom或者ClearCanvas。这些库提供了丰富的API,简化了 DICOM 文件的读取...

Global site tag (gtag.js) - Google Analytics