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

DCMTK在DICOM数据集中添加自定义标签

阅读更多

 

Howto: Add private data elements to a DICOM dataset

The following example shows how to add private data elements to a DICOM dataset (if not present yet):

 

#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
 
#define PRV_PrivateCreator  DcmTag(0x0029, 0x0010, EVR_LO)
#define PRV_PrivateElement1 DcmTag(0x0029, 0x1000, EVR_LO)
#define PRV_PrivateElement2 DcmTag(0x0029, 0x1010, EVR_US)
#define PRV_PrivateElement3 DcmTag(0x0029, 0x1020, EVR_OB)
 
void addPrivateElements(DcmItem &item)
{
  if (!item.tagExists(PRV_PrivateCreator))
  {
    item.putAndInsertString(PRV_PrivateCreator, "Your Company Name");
    item.putAndInsertString(PRV_PrivateElement1, "Some Text");
    item.putAndInsertUint16(PRV_PrivateElement2, 12345);
    item.putAndInsertUint8Array(PRV_PrivateElement3, NULL /*data*/, 0 /*length*/);
  }
}
 Please note that for private tags the value representation (VR) has to be specified explicitly to be complete.

It is also possible to register private tags to the data dictionary during runtime:

 

#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
 
#define PRIVATE_CREATOR_NAME "Your Company Name"
 
#define PRIVATE_ELEMENT1_TAG 0x0029, 0x1000
#define PRIVATE_ELEMENT2_TAG 0x0029, 0x1010
#define PRIVATE_ELEMENT3_TAG 0x0029, 0x1020
 
void registerPrivateTags()
{
  DcmDataDictionary &dict = dcmDataDict.wrlock();
  dict.addEntry(new DcmDictEntry(PRIVATE_ELEMENT1_TAG, EVR_LO, "PrivateText",    1, 1, "private", OFTrue, PRIVATE_CREATOR_NAME));
  dict.addEntry(new DcmDictEntry(PRIVATE_ELEMENT2_TAG, EVR_US, "PrivateInteger", 1, 1, "private", OFTrue, PRIVATE_CREATOR_NAME));
  dict.addEntry(new DcmDictEntry(PRIVATE_ELEMENT3_TAG, EVR_OB, "PrivateBlob",    1, 1, "private", OFTrue, PRIVATE_CREATOR_NAME));
  dcmDataDict.unlock();
}
 This can be useful for reading datasets with implicit VR (otherwise the VR would be unknown) and e.g. for the textual output of the print() method.

However, this does not mean that you can omit the VR from the putAndInsertXXX() calls. This will change with the next snapshot/release (see commit), so the following will then be possible:

 

#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
 
#define PRIVATE_CREATOR_NAME "Your Company Name"
 
#define PRIVATE_CREATOR_TAG  0x0029, 0x0010
#define PRIVATE_ELEMENT1_TAG 0x0029, 0x1000
#define PRIVATE_ELEMENT2_TAG 0x0029, 0x1010
#define PRIVATE_ELEMENT3_TAG 0x0029, 0x1020
 
#define PRV_PrivateCreator   DcmTag(PRIVATE_CREATOR_TAG)
#define PRV_PrivateElement1  DcmTag(PRIVATE_ELEMENT1_TAG, PRIVATE_CREATOR_NAME)
#define PRV_PrivateElement2  DcmTag(PRIVATE_ELEMENT2_TAG, PRIVATE_CREATOR_NAME)
#define PRV_PrivateElement3  DcmTag(PRIVATE_ELEMENT3_TAG, PRIVATE_CREATOR_NAME)
 
void registerPrivateTags()
{
  DcmDataDictionary &dict = dcmDataDict.wrlock();
  dict.addEntry(new DcmDictEntry(PRIVATE_ELEMENT1_TAG, EVR_LO, "PrivateText",    1, 1, "private", OFTrue, PRIVATE_CREATOR_NAME));
  dict.addEntry(new DcmDictEntry(PRIVATE_ELEMENT2_TAG, EVR_US, "PrivateInteger", 1, 1, "private", OFTrue, PRIVATE_CREATOR_NAME));
  dict.addEntry(new DcmDictEntry(PRIVATE_ELEMENT3_TAG, EVR_OB, "PrivateBlob",    1, 1, "private", OFTrue, PRIVATE_CREATOR_NAME));
  dcmDataDict.unlock();
}
 
void addPrivateElements(DcmItem &item)
{
  if (!item.tagExists(PRV_PrivateCreator))
  {
    item.putAndInsertString(PRV_PrivateCreator, PRIVATE_CREATOR_NAME);
    item.putAndInsertString(PRV_PrivateElement1, "Some Text");
    item.putAndInsertUint16(PRV_PrivateElement2, 12345);
    item.putAndInsertUint8Array(PRV_PrivateElement3, NULL /*data*/, 0 /*length*/);
  }
}
 
int main()
{
  DcmFileFormat fileformat;
  fileformat.loadFile("test_in.dcm");
  registerPrivateTags();
  addPrivateElements(*fileformat.getDataset());
  fileformat.saveFile("test_out.dcm", EXS_LittleEndianExplicit);
  fileformat.print(COUT);
  return 0;
}

 

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

柳北风儿

个人博客: http://qimo601.iteye.com 

分享到:
评论

相关推荐

    基于DCMTK的DICOM图像查看器

    通过这个查看器,开发者可以了解如何利用DCMTK解析DICOM头信息,以及如何将这些信息与图像数据结合,以在用户界面上呈现出来。 【标签】"DCMTK"是关键的开发库,它提供了对DICOM协议的全面支持,包括数据结构、网络...

    dicom.rar_dcmtk_dcmtk3.6_dcmtk3.6.0_dicom

    4. **API接口**:DCMTK提供了C++接口,允许开发者直接在代码中操作DICOM数据。这些接口包括数据元素访问、解析和构造,以及网络通信等功能。 5. **网络通信**:DCMTK支持DICOM网络服务类应用实体(AE),可以实现...

    基于DCMTK的DICOM相关程序编写攻略

    基于DCMTK的DICOM相关程序编写攻略

    用VC++和DCMTK显示DICOM医学图像_solidtdl_Vc_dcmtk_源码.rar.rar

    在这个项目中,我们主要关注如何使用Visual C++(VC++)和DICOM ToolKit (DCMTK)库来显示DICOM医学图像。DICOM是一种广泛应用于医疗成像领域的标准格式,用于存储、交换、打印和呈现医学图像。下面将详细介绍这个...

    VC 与DCMTK显示DICOM医学图像pdf教程.rar

    VC 使用DCMTK显示DICOM医学图像的实现教程, 从事VC 编程的程序员大概都知道,DICOM是医学影像存储和传输的国际标准,本教程来自OTI技术论坛专题讨论版,或许这本整理的简短教程对你有所帮助。

    VC和DCMTK显示DICOM图像

    在实际开发过程中,利用VC++(Microsoft Visual C++)和DCMTK(DICOM Toolkit)库可以有效地实现DICOM图像的显示功能。DCMTK是一个开放源码的软件开发包,支持多种操作系统,广泛应用于医学影像领域的软件开发中。 ...

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

    - **提取像素数据**:从DICOM数据集中提取像素数据。 - **显示图像**:利用VC++的图形界面功能显示像素数据,形成可视化的医学图像。 ##### 4. 示例代码片段 ```cpp // 假设已经成功编译并链接了DCMTK #include ...

    dcmtk.rar_dcmtk_dicom

    DCMTK提供了丰富的API和命令行工具,使得开发人员能够轻松地在自己的应用程序中集成DICOM功能。 DCMTK的核心组件包括以下几个部分: 1. **dcmdata**:这是DCMTK的基础模块,负责处理DICOM数据元素和数据集。它包含...

    DICOM文件信息修改程序

    在这个“DICOM文件信息修改程序”中,我们聚焦于如何使用DCMTK这一开源工具来操作DICOM文件的元数据。 DCMTK(DICOM Toolkit)是德国工业大学的一个项目,提供了一系列C++库和命令行工具,用于处理DICOM数据。它...

    第一个 DCMTK 程序:显示 DICOM 图像(DCMTK 3.6.4 + Qt 5.14.2 + VS2015)源码

    这是博文《第一个 DCMTK 程序:显示 DICOM 图像(DCMTK 3.6.4 + Qt 5.14.2 + VS2015)》的源码,详细内容见博客文章 https://blog.csdn.net/blackwoodcliff/article/details/109481195

    DCMTK显示DICOM并进行调窗处理程序

    DCMTK(DICOM for Medical Applications Toolkit)是一个开源软件库,专门用于处理DICOM(Digital Imaging and Communications in Medicine)标准的数据,这种标准广泛应用于医学成像领域。DICOM格式包含了大量的...

    DCMTK工具下载,实现dicom传输文件等功能

    在使用DCMTK时,开发者通常会结合脚本语言(如Python、Perl或bash)编写自定义脚本来自动化这些任务。例如,可以编写一个脚本来定期从远程设备获取新的DICOM图像,然后将它们存储到本地数据库或进行进一步的处理。 ...

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

    DICOM是医学影像存储和传输的国际标准,它的制定为不同的医学影像设备和用户提供了统一的接口标准和交互协议。解读 DICOM的医学图像文件格式以及用利用VC++和DCMTK显示方法显示DICOM医学图像

    dcmtk_3.5.4.orig.tar.gz_DCMTK DICOM_dcmtk

    DCMTK(DICOM Toolkit)是开放源代码的软件库,专为开发和处理遵循DICOM(Digital Imaging and Communications in Medicine)标准的医疗影像数据而设计。DICOM是一种广泛使用的国际标准,它定义了医疗设备之间以及...

    应用DCMTK资源浏览Dicom图片

    在医疗图像处理和分析中,DCMTK是一个不可或缺的工具,因为它提供了一系列的命令行工具和C++类库,方便开发者读取、写入和操作DICOM数据。 **DICOM标准** DICOM标准不仅仅涉及图像格式,还包括元数据,如患者信息...

    dcmtk-3.6.4-win32-dynamic.zip_DCMTKToolkit_dcmseg_dcmtk_dicom_di

    DCMTK是实现DICOM标准的大型部分的库和应用程序的集合。它包括用于检查、构建和转换DICOM图像文件、处理离线媒体、通过网络连接发送和接收图像以及演示图像存储和工作列表服务器的软件。DCMTK是以ANSI C和C++的混合...

Global site tag (gtag.js) - Google Analytics