【转】DCMTK 开源库的学习笔记2:直接操作dcm文件中像素数据的尝试

转自:https://blog.csdn.net/zssureqh/article/details/8785132

DCMTK官网给出了JPEG格式压缩的DCM文件解压缩的方法(http://support.dcmtk.org/docs/mod_dcmjpeg.html),代码摘录如下:

 

DJDecoderRegistration::registerCodecs(); // register JPEG codecs
DcmFileFormat fileformat;
if (fileformat.loadFile("test_jpeg.dcm").good())
{DcmDataset *dataset = fileformat.getDataset();// decompress data set if compresseddataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);// check if everything went wellif (dataset->canWriteXfer(EXS_LittleEndianExplicit)){fileformat.saveFile("test_decompressed.dcm", EXS_LittleEndianExplicit);}
}
DJDecoderRegistration::cleanup(); // deregister JPEG codecs


通过尝试,生成的test_decompressed.dcm的传输语义TransferSyntex发生了改变,且像素数据区中的数据就代表了dcm图像中的真实像素值。利用UltraEdit等二进制编辑软件打开后一目了然:

 

原本压缩的像素数据区,被解压了出来:30 F8 30 F8 30 F8……,dcm文件中每个像素用16位来表示,采用的小端存储模式,30 F8就是十进制的-2000,即测试图像的填充背景的CT值。

博文(http://support.dcmtk.org/wiki/dcmtk/howto/accessing-compressed-data)给出了获取解压后的真实像素数据内存指针的方法,主要是的语句是:

 

        DcmElement* element = NULL;result = data->findAndGetElement(DCM_PixelData, element);if (result.bad() || element == NULL)return 1; short* pixData;result = element->getUint8Array(pixData);

此时pixData就指向了上图中的30 F8 30 F8 30 F8像素数据区的首地址。至此可以直接对dcm的像素进行操作,如下图是对其进行二值化的结果:

 

此处有一个问题未能解决:如果在对pixData指向的区域进行操作后,调用保存函数saveFile时未选择EXS_LittleEndianExplicit格式,生成的结果依然是原始图像。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言处理非线性回归模型C-D方程,使用R语言进行多项式回归、非线性回归模型曲线拟合...

对于线性关系,我们可以进行简单的线性回归。对于其他关系,我们可以尝试拟合一条曲线。曲线拟合是构建一条曲线或数学函数的过程,它对一系列数据点具有最佳的拟合效果。使用示例数据集#我们将使Y成为因变量,X成为预测变量#因变量通…

认识IL

1.要编译的代码如下: using System; using System.Collections.Generic; using System.Text; namespace HellowWorld { class Program { static void Main() { Console.Write("Hello World!"); } } } 2…

c语言之多线程函数,如何用C语言实现多线程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Windows操作系统,C语言实现多线程:#include #include DWORD APIENTRY ThreadOne ( LPVOID threadArg ){printf ( "线程开始啦,参数是:%s\n" , (char *)threadArg );return …

Iterator模式

Iterator模式的几种用法 在网络上看帖子时发现不少模式的初学者对Iterator模式的理解仅仅停留在从类库的容器类取得Iterator来遍历容器中的内容的程度。 因此在这里写几个例子,来加深大家对Iterator模式的理解。 对容器中元素的访问涉及到3个方面。 1.容…

【转】DCMTK开源库的学习笔记3:dcmtk文件中数据元的修改

转自:https://blog.csdn.net/zssureqh/article/details/8804736 dcm文件是医学领域DICOM3.0标准所对应的主要的文件格式。前两篇学习笔记中,学习了读取dcm文件的相关信息,如信息头MetaInformation元素、像素数据元素,只停留在了读…

设计模式C++实现 —— 外观模式、组合模式

外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来。客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构。DP一书的定义&…

rsync的原理和安装使用及配制详解(三)(转)

5、示例脚本 这里这些脚本都是rsync网站上的例子: 1、每隔七天将数据往中心服务器做增量备份 #!/bin/sh# This script does personal backups to a rsync backup server. You will end up# with a 7 day rotating incremental backup. The incrementals will go# in…

单片机c语言控制显示器,单片机实现LCD液晶显示器控制原理..docx

摘 要LCD液晶显示已经是人机界面的关键技术。 本文对基于单片机的LCD夜晶显示器 控制系统进行了研究。首先在绪论中介绍了本课题的课题背景、 研究意义及完成的功能。本系统是以单 片机的基本语言C语言来进行软件设计,51的编程语言常用的有二种,一种是汇…

【转】DCMTK开源库的学习笔记4:利用ini配置文件对dcm影像进行归档

转自:https://blog.csdn.net/zssureqh/article/details/8846337 背景介绍: 医学影像PACS工作站的服务端需要对大量的dcm文件进行归档,写入数据库处理。由于医学图像的特殊性,每一个患者(即所谓的Patient)…

linux ( )含义,Linux的shell中$()、$[] 、${}分别是什么意思?

在bash中,$( )与 (反引号)都是用来作命令替换的。命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。exp 1[rootlocalhost ~]# echo today is $(date &q…

导师评语(转)

星期一到了……小英在交完作业後,中午马上被老师叫去罚站,附加念500遍「我以後不敢编谎话欺骗老师了」。 why?为何这名老师要残忍的对待这名柔弱的小学生?我们来瞧瞧她的作文是怎麽写的…… ━━━━━━━━━━━━━━━━━━…

VxWorks平台下计算cpu的利用率

1、VxWorks的spyLib库提供的spy工具的实现原理。 Spy利用辅助定时器来产生中断,并且为每个任务维护一个计数器。然后记下被中断的任务,并且将该任务的计数器加一。经过一段时间后,每个任务的计数器反映了该任务占用CPU利用率的情况。很明显&a…

【转】DCMTK开源库类继承结构与DICOM3.0标准元素定义的对应关系图

转自:https://blog.csdn.net/zssureqh/article/details/9275271 最近由于课题需要,拿出来一些时间阅读了下DICOM3.0标准。在处理相关的DCM医学图像时使用了DCMTK开源库,废话不多说,直接贴图: 图一:DCMTK开…

c语言中用简易暗纹来输入密码,确定夫琅和费单缝衍射明、暗纹位置的不同教学方法的讨论...

崔红玲苏向英摘要:夫琅和费单缝衍射的明、暗纹位置及相应光强是波动光学中的重要部分,用不同的方法讲解效果不同。本文比较了惠更斯-菲涅耳原理定量积分法及半波带法得到的结论,表明在近似情况下,这两种方法都可以对其进行描述。关…

tickGet

tickGet()返回的是从系统启动开始tick计数后的总的tick数目。 tick是啥,是“滴答”,它是一个数值量,本身不能代表时间。 如果说要知道tick增加一个代表多少时间的话,那就要看系统的时钟率了。 在Shell下…

C#控制台程序,发送邮件,可带附件

最近几天由于公司发送了大量内容相同的邮件,而被国外的反垃圾邮件组织列入了黑名单,致使很多客户收不到我们的邮件,客服接到投诉,而之前做的一个查询日志的小页面,因为某种原因,访问速度很慢,甚至这几天人一多,页面就总是超时.刚开始以为是程序问题或者是数据量比较大,但是程序…

【转】从零开始学图形学:10分钟看懂贝塞尔曲线

转自:https://zhuanlan.zhihu.com/p/344934774 引入 在画画的时候,你可能会遇到画曲线的情况。比如你想画一个肥宅的大肚子轮廓,此时你随手一画,发现不好看,感觉太鼓了,于是你只能重新画,再画一…

Linux重启网卡的方法

重启网卡的几种方法:一、network利用root帐户# service network restart二、ifdown/ifup# ifdown eth0# ifup eth0三、ifconfig# ifconfig eth0 down# ifconfig eth0 up

android webview url scheme,Android Webview ERR_UNKNOWN_URL_SCHEME错误

当我点击链接到mailto:adminikiyuzoniki.net时,我收到此错误:net: ERR_UNKNOWN_URL_SCHEME我试图添加一个if(url.startsWith(“mailto:”))条件,但它不起作用.这是我的MyWebViewClient方法:public class MyWebViewClient extends …

【转】编译DCMTK

转自:https://blog.51cto.com/u_2845385/1053291 也许是DCMTK的开发人员认为DCMTK是一个专用的库,没有必要做成动态链接库。 也许是DCMTK的开发人员认为DCMTK需要跨平台,做成动态链接库就平台相关了,违背了跨平台的本意。 …