博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DCMTK开源库的学习笔记3:dcmtk文件中数据元的修改
阅读量:6308 次
发布时间:2019-06-22

本文共 1904 字,大约阅读时间需要 6 分钟。

hot3.png

dcm文件是医学领域DICOM3.0标准所对应的主要的文件格式。前两篇学习笔记中,学习了读取dcm文件的相关信息,如信息头MetaInformation元素、像素数据元素,只停留在了读取和显示dcm文件的阶段,随着学习的深入,自己开发的平台的功能逐渐增加,“修改dcm文件的相关数据元”在所难免。下面将简单的介绍一下对dcm文件的修改,主要的参考资料是:dcmtk开源库的官方文件,另外也很感谢在CSDN的博文,里面详细介绍了dcmtk的主要构成,是dcmtk开源库很好的中文是说明手册。

参照博文中的:

dcmtk开源库中对dcm文件定义的最顶层的类是:DcmFileFormat,每次需要利用DcmFileFormat的对象来进行dcm文件的导入(loadFile)和导出(saveFile)。dcm文件其本质与常见的DIB文件格式相似,可总体分为“文件头”和“文件体”两部分。dcmtk开源库分别为“文件头”和“文件体“封装了相应的类:DcmMetaInfo和DcmDataset。两个类都继承自DcmItem类,其含有主要的成员变量为:elementList,一个存储相应dcm文件数据元的双向列表。(注意:DcmFileFormat类继承自DcmSequenceOfItems类,其含有的数据成员变量时itemList,即含有DcmMetaInfo类和DcmDataset类的基类的双向列表——这说明了dcm文件的数据元可以进行嵌套存储),DcmFileFormat变量的成员参见下图:

此处是一个空的DcmFileFormat类的对象mDcmFileFormat,其itemList双向链表中只有两个item成员,firstNode就是DcmMetaInfo类的实例,lastNode就是DcmDataset类的实例。

那么找到修改itemList数据成员的方法,就能够修改相应的dcm数据元,达到自由修改dcm文件的目的,但是在修改的时候需要注意,各个数据元的元素类型的匹配。

查看dcitem.h文件,可以发现dcmtk给我们定义了几种操作itemList双向链表的方法,如下图:

下面给出修改dcm文件中的患者姓名和dcm像素数据的代码:

DcmFileFormat mDcmImage;	mDcmImage.loadFile("c:\\test.dcm");	short* pPixelData=static_cast
(mDcmImage.getPixelData()); int size=mDcmImage.getWidth()*mDcmImage.getHeight(); for(int i=0;i
remove(DCM_TransferSyntaxUID); delete dataset->remove(DCM_PatientName); dataset->putAndInsertString(DCM_PatientName,"TEST-THU"); delete dataset->remove(DCM_PixelData); dataset->putAndInsertUint16Array(DCM_PixelData,pData,size); mDcmImage.saveFile("c:\\self.dcm",EXS_LittleEndianExplicit);
其中getPixelData()函数是对:

DcmDataset *dataset = this->getDataset();		// decompress data set if compressed		dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);		DcmElement* element=NULL;		dataset->findAndGetElement(DCM_PixelData,element);		unsigned char* pImage=NULL;		element->getUint8Array(pImage);		return pImage;
代码的封装。利用像素指针dcm文件的像素数据进行二值化。

然后我们利用DcmItem类中定义的putAndInsertString()修改DCM_PatinetName标签,即患者的姓名。

对别结果如下:

转载于:https://my.oschina.net/zssure/blog/354851

你可能感兴趣的文章
wordpress admin https + nginx反向代理配置
查看>>
管理/var/spool/clientmqueue/下的大文件
查看>>
HTML学习笔记1—HTML基础
查看>>
mysql dba系统学习(20)mysql存储引擎MyISAM
查看>>
centos 5.5 64 php imagick 模块错误处理记录
查看>>
apache中文url日志分析--php十六进制字符串转换
查看>>
Ansible--playbook介绍
查看>>
浅谈代理
查看>>
php创建桌面快捷方式实现方法
查看>>
基于jquery实现的超酷动画源码
查看>>
fl包下的TransitionManager的使用
查看>>
Factorialize a Number
查看>>
[USB-Blaster] Error (209040): Can't access JTAG chain
查看>>
TreeSet的用法
查看>>
防HTTP慢速攻击的nginx安全配置
查看>>
深入理解PHP内核(十四)类的成员变量及方法
查看>>
Spring Boot2.0+中,自定义配置类扩展springMVC的功能
查看>>
参与博客编辑器改版,我的礼物 感谢51cto
查看>>
JavaWeb笔记——JSTL标签
查看>>
Eclipse插件大全 挑选最牛的TOP30
查看>>