转自: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格式,生成的结果依然是原始图像。

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

  1. 【转】DCMTK开源库的学习笔记1:将DCM文件保存成BMP文件或数据流(即数组)

    转自:https://blog.csdn.net/zssureqh/article/details/8784980 DCMTK开源库介绍: DCMTK是目前最全面实现DICOM3.0标准的开源库,通过 ...

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

    转自:https://blog.csdn.net/zssureqh/article/details/8804736 dcm文件是医学领域DICOM3.0标准所对应的主要的文件格式.前两篇学习笔记中,学 ...

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

    转自:https://blog.csdn.net/zssureqh/article/details/8846337 背景介绍: 医学影像PACS工作站的服务端需要对大量的dcm文件进行归档,写入数据库 ...

  4. C++跨平台开源库POCO学习笔记

    原文链接:http://grow.sinaapp.com/?p=1271 POCO(pocoproject.org)看起来是很不错的C++跨平台开源库,包含网络(HTTP.FTP等).正则.XML.Z ...

  5. 【PHP+MySQL学习笔记】php操作MySQL数据库中语句

    我们常常用conn.php文件来建立与数据库的链接,然后在所需的文件中利用include 进行调用.这样有效防止对数据库属性的改动 而引起其他有关文件对数据调用的错误. 现在来看一个conn.php文 ...

  6. Hive学习笔记(五)向表中装载数据

    1.向管理表中装载数据 再次强调,Hive没有行级别的数据插入.数据更新和删除操作. LOAD DATA LOCAL INPATH '${env:HOME}/california-employees' ...

  7. Java学习笔记:检测一堆图片文件中是否有包含二维码的

    案例一 package part2;import com.google.zxing.Result; import com.yzk18.commons.IOHelpers; import com.yzk ...

  8. 【Python-pywt】 小波变化库—Pywavelets 学习笔记

    (转载) [Python ]小波变化库--Pywavelets 学习笔记_nanbei2463776506的博客-CSDN博客 https://blog.csdn.net/nanbei24637765 ...

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

    转自:https://blog.csdn.net/zssureqh/article/details/9275271 最近由于课题需要,拿出来一些时间阅读了下DICOM3.0标准.在处理相关的DCM医学 ...

最新文章

  1. springBoot静态资源处理
  2. RocketMQ消息发送及消费的基本原理
  3. python中if else语句用法_Python中if-else语句的多种写法
  4. linux下删除乱码文件名的方法
  5. mysql etl工具有哪些_常见ETL工具一览,你知多少?
  6. 从「及格线」到优等生,威马只用一台W6
  7. Angular.js示例应用程序
  8. [转]Oracle SQL 日期的應用
  9. jedis连接池的maxIdle和maxtotal参数
  10. python应用系列教程——python的GUI界面编程Tkinter全解
  11. 使用lambdaquery() 报空指针异常_ARMv8 异常处理简介
  12. 修改解锁【暴力破解】《植物大战僵尸Zombie》所有模式、关卡、金钱教程。
  13. 广州蓝景分享—「web前端素材」使用CSS动画效果(上)
  14. CactiEZ V10.1安装及配置
  15. 十二进制转十进制-练习
  16. 咸鱼Maya笔记—Maya 场景操作
  17. 草莓换个做法,迫不及待想要吃
  18. jupyter不显示直接保存图片
  19. 使用ambertool安装gmx_mmpbsa
  20. 改进YOLOv5系列:10.最新HorNet结合YOLO应用首发! | 多种搭配,即插即用 | Backbone主干、递归门控卷积的高效高阶空间交互高效

热门文章

  1. 【离散数学中的数据结构与算法】十 汉诺塔
  2. 【移植驱动到Linux3.4.2内核之二】LCD,触摸屏,按键,USB等驱动程序的移植心得总结
  3. cf1108E2 线段树类似扫描线
  4. 深入浅出etcd系列 – 心跳和选举
  5. BZOJ1895Pku3580 supermemo——非旋转treap
  6. NopCommerce用.net core重写ef
  7. 集合框架(一) ----------Map集合遍历的方法
  8. 数据结构一—— 数组
  9. 376 Wiggle Subsequence 贪心解法以及证明
  10. 苹果笔记本电脑好用吗_苹果新品发布会消息汇总(8月25日)