【转】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格式,生成的结果依然是原始图像。
【转】DCMTK 开源库的学习笔记2:直接操作dcm文件中像素数据的尝试相关推荐
- 【转】DCMTK开源库的学习笔记1:将DCM文件保存成BMP文件或数据流(即数组)
转自:https://blog.csdn.net/zssureqh/article/details/8784980 DCMTK开源库介绍: DCMTK是目前最全面实现DICOM3.0标准的开源库,通过 ...
- 【转】DCMTK开源库的学习笔记3:dcmtk文件中数据元的修改
转自:https://blog.csdn.net/zssureqh/article/details/8804736 dcm文件是医学领域DICOM3.0标准所对应的主要的文件格式.前两篇学习笔记中,学 ...
- 【转】DCMTK开源库的学习笔记4:利用ini配置文件对dcm影像进行归档
转自:https://blog.csdn.net/zssureqh/article/details/8846337 背景介绍: 医学影像PACS工作站的服务端需要对大量的dcm文件进行归档,写入数据库 ...
- C++跨平台开源库POCO学习笔记
原文链接:http://grow.sinaapp.com/?p=1271 POCO(pocoproject.org)看起来是很不错的C++跨平台开源库,包含网络(HTTP.FTP等).正则.XML.Z ...
- 【PHP+MySQL学习笔记】php操作MySQL数据库中语句
我们常常用conn.php文件来建立与数据库的链接,然后在所需的文件中利用include 进行调用.这样有效防止对数据库属性的改动 而引起其他有关文件对数据调用的错误. 现在来看一个conn.php文 ...
- Hive学习笔记(五)向表中装载数据
1.向管理表中装载数据 再次强调,Hive没有行级别的数据插入.数据更新和删除操作. LOAD DATA LOCAL INPATH '${env:HOME}/california-employees' ...
- Java学习笔记:检测一堆图片文件中是否有包含二维码的
案例一 package part2;import com.google.zxing.Result; import com.yzk18.commons.IOHelpers; import com.yzk ...
- 【Python-pywt】 小波变化库—Pywavelets 学习笔记
(转载) [Python ]小波变化库--Pywavelets 学习笔记_nanbei2463776506的博客-CSDN博客 https://blog.csdn.net/nanbei24637765 ...
- 【转】DCMTK开源库类继承结构与DICOM3.0标准元素定义的对应关系图
转自:https://blog.csdn.net/zssureqh/article/details/9275271 最近由于课题需要,拿出来一些时间阅读了下DICOM3.0标准.在处理相关的DCM医学 ...
最新文章
- springBoot静态资源处理
- RocketMQ消息发送及消费的基本原理
- python中if else语句用法_Python中if-else语句的多种写法
- linux下删除乱码文件名的方法
- mysql etl工具有哪些_常见ETL工具一览,你知多少?
- 从「及格线」到优等生,威马只用一台W6
- Angular.js示例应用程序
- [转]Oracle SQL 日期的應用
- jedis连接池的maxIdle和maxtotal参数
- python应用系列教程——python的GUI界面编程Tkinter全解
- 使用lambdaquery() 报空指针异常_ARMv8 异常处理简介
- 修改解锁【暴力破解】《植物大战僵尸Zombie》所有模式、关卡、金钱教程。
- 广州蓝景分享—「web前端素材」使用CSS动画效果(上)
- CactiEZ V10.1安装及配置
- 十二进制转十进制-练习
- 咸鱼Maya笔记—Maya 场景操作
- 草莓换个做法,迫不及待想要吃
- jupyter不显示直接保存图片
- 使用ambertool安装gmx_mmpbsa
- 改进YOLOv5系列:10.最新HorNet结合YOLO应用首发! | 多种搭配,即插即用 | Backbone主干、递归门控卷积的高效高阶空间交互高效
热门文章
- 【离散数学中的数据结构与算法】十 汉诺塔
- 【移植驱动到Linux3.4.2内核之二】LCD,触摸屏,按键,USB等驱动程序的移植心得总结
- cf1108E2 线段树类似扫描线
- 深入浅出etcd系列 – 心跳和选举
- BZOJ1895Pku3580 supermemo——非旋转treap
- NopCommerce用.net core重写ef
- 集合框架(一) ----------Map集合遍历的方法
- 数据结构一—— 数组
- 376 Wiggle Subsequence 贪心解法以及证明
- 苹果笔记本电脑好用吗_苹果新品发布会消息汇总(8月25日)