DICOM:dcm4che工具包怎样压缩dcm文件探讨(续篇)
背景
前段时间博文DICOM:dcm4che工具包怎样压缩dcm文件探讨(前篇)提到了一个问题:“利用dcm4che工具包中的dcm2dcm来进行dcm文件的压缩和加压缩。即改变dcm文件里的Transfer Syntax,比如由1.2.840.10008.1.2(Implicit VR Little Endian)变成1.2.840.10008.1.2.4.70(JPEG LossLess,Non-Hierarchical,First_order Prediction Process 14)。
可是因为之前对Java中相关Image IO类不了解,因此并未找到问题的解决方式。
值得高兴的是,在发文后不久就收到了热心博友的邮件,并在附件中给出了解决方式须要的安装包。
依照邮件的提示,经过在本地Eclipse调试,已验证能够顺利攻克了该问题,特再发一文说明,并再次感谢博友nanarongrong无私相助。
博友解决方式:
本地环境已经依照博文前篇DICOM:dcm4che工具包怎样压缩dcm文件探讨(前篇)更换为32位环境。在此如博友nanrongrong在邮件中的说明所看到的。问题的解决办法是本地32位JRE执行环境缺少clib_jiio.dll导致的,双击安装邮件中的附件。
安装完毕后能够看到在在JRE的bin文件夹下多出了clib_jiio.dll文件。lib/ext文件夹下多出了jai_imageio.jar文件。
又一次在本地进行測试。输入dcm2dcm -t 1.2.840.10008.1.2.4.70 c:\test.dcm c:\testjpeg.dcm
例如以下图所看到的,命令行提示已经顺利转换成功。可是不要高兴的太早,用DICOM阅读器打开发现居然无法顺利导入。
使用dcmtk提供的dcmdump工具。得到例如以下输出结果:
如上图所看到的。看过我专栏的博友应该立马能够反应出问题出错的地方。DICOM中在压缩和解压缩问题中最常见的错误就是无法顺利定位PixelData。或是PixelData数据写入不完整(如博文DICOM医学图像处理:DICOM存储操作之 “多幅JPG图像数据存入DCM文件”中的实例)、或是PixelData数据长度写入错误导致解析失败(如本博文、博文DICOM医学图像处理:fo-dicom网络传输之 C-Echo and C-Store等等)。用UltraEdit以二进制方式打开test-jpeg.dcm文件。定位到PixelData(0x7fe0 0010),例如以下图所看到的:
依照DICOM3.0标准对压缩PixelData的描写叙述(为了方便描写叙述。再次将博文中的截图贴出来),每个压缩片段Fragment(即标签0xfffe e000)后须要明白指出兴许片段的长度。而刚才得到的test-jpeg.dcm文件的第二个Fragment中的Value Length居然是00 00 00 00。
为了验证我们的想法,在UltraEdit中手动写入Fragment的长度。首先在UE中拖动到test-jpeg.dcm文件末尾,定位到0xfffe e0dd(即SequenceItem结束符)。位置为0x3A23D。起始位置为0x87C,由此得出长度为0x3A23D-0x87C+0x1=0x39A72,依照小段须排列为 72 9A 03 00。例如以下图改动后能够顺利打开图像
至此能够顺利的利用dcm2dcm工具完毕dcm文件的JPEG无损 压缩,只是另一点点小问题。
继续往下看。
dcm2dcm源代码剖析:
从官网下载dcm4che2的源代码。在Eclipse中导入后。启动dcm4che-tool-dcm2dcmproject。调试參数配置例如以下:
注:jre调试环境应该指定为我们安装jai_imageio-1_0_01-lib-windows-i586-jdk库后的32位执行环境。
单步调试到DicomImageWriter.java中的writeBytesToSequence函数能够看到顺利写入了PixelData的长度236146。即十六进制的0x39A72。因此能够证明dcm2dcmproject源代码没有问题,可能是本地cmd环境下配置的dcm4che2-bin包比較旧导致出现的问题,又一次生成dcm4che2-tool-dcm2dcm.jar包。又一次再本地測试。能够顺利得到正确的图像。
至此该问题顺利解决!
jai_imageio库:
感谢博友nanarongrong的热心帮助,jai_imageio的Windows32位环境库已顺利上传到CSDN,下载链接为:jai_imageio_for_win32
备注:依照dcm4chee官方安装说明文档。dcm4chee以及dcm4che2-tools在Linux32bits以及Linux64bits。以及Windows32bits能够顺利完毕dcm压缩和解压缩,只有Windows64bits环境不可,这也就是我们上文遇到的问题为什么将JRE切换到32位环境的问题。
作者:zssure@163.com
时间:2015/08/02
DICOM:dcm4che工具包怎样压缩dcm文件探讨(续篇)的更多相关文章
- dicom(dcm)文件批量Study Instance UID打包整理工具
一款可以自动识别原始dicom文件Study Instance UID的工具. 如果你有一堆混乱不堪的dcm文件,这个小工具能帮助你将这些无序的dicom文件按照Study Instance UID压 ...
- python .dcm文件读取,并转化为.jpg格式
.dcm文件是DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信中记录医学图像和相关信息的文件,在用于医学图像处理的时候我们 ...
- 使用dcmtk库读取.dcm文件并获取信息+使用OpenCV显示图像
借助VS2013和OpenCV的绘图功能,在工程DICOMReader.sln中实现了对单张.dcm图像的读取与显示,以下是详细步骤. 前期准备工作 编译器:VS2013 库:dcmtk-3.6.0( ...
- gulp压缩css文件跟js文件
越到最后啊 就越发现,真的很理解那句话 就是自己多学一点一点知识,就少一句问别人的东西 这是多么痛苦的领悟 今天需要压缩css跟js文件 然后不懂啊 就问别人啊 就问啊问啊 然后再上网了解啊了解啊 用 ...
- 如何使用grunt压缩js文件
jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前端开发人员,如果你现在还不知道grunt或者听说过 ...
- zlib压缩一个文件为gzip格式
网上有很多针对zlib的总结,但是很零散,自己经过总结,实现了用zlib压缩一个文件为gzip格式,似的可以直接使用winr工具解压. 具体方法是使用zlib的deflate系列函数,将buffer压 ...
- iis7 压缩js文件和启用gzip压缩
压缩js文件 打开IIS 7的配置文件:c:\windows\system32\inetsrv\config\applicationhost.config 在<staticContent loc ...
- [转]C#压缩打包文件
/// <summary> /// 压缩和解压文件 /// </summary> public class ZipClass { /// <summary> /// ...
- albert1017 Linux下压缩某个文件夹(文件夹打包)
albert1017 Linux下压缩某个文件夹(文件夹打包) tar -zcvf /home/xahot.tar.gz /xahottar -zcvf 打包后生成的文件名全路径 要打包的目录例子:把 ...
随机推荐
- A8ERP配送管理系统
- 4星|《DK商业百科》:主要商业思想与事件的概括
全书分为以下6章:1:企业的起步与发展:2:领导和人力资源:3:理财:4:战略和运营:5:营销管理:6:生产与生产后.每章有拆分为成多个比较小的专题,阐述相关专题的主要的商业思想与实践. 基本是作者按 ...
- Java软件开发中迭代的含义
软件开发中,各个开发阶段不是顺序执行的,而各个阶段都进行迭代并行执行的,然后在进入下一个阶段的开发. 这样对于开发中的需求变化,及人员变动都能得到更好的适应. 软件开发过程汇总迭代模型如下图所示:
- 第五届蓝桥杯校内选拔第七题_(树型dp)
G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军).现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加敢死 ...
- codeforces_300C_组合数_快速幂
C. Beautiful Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- java 动态代理 和动态编程
概述 代理分两种技术,一种是jdk代理(机制就是反射,只对接口操作),一种就是字节码操作技术.前者不能算技术,后者算是新的技术.未来将有大的动作或者较为广泛的应用和变革,它可以实现代码自我的编码(人工 ...
- [angular1.6]Error: "transition superseded" ui-router 在angular1.6 报错误问题解决
在angular1.6版本里,使用ui-router如果报这个错误,可以将ui-router升级到最近版本即可.ui-router version v0.4.2
- Ubuntu安装Foxit PDF阅读器
最近使用Ubuntu自带的PDF阅读器,发现使用体验较差,打算安装FoxitReader(可能是我习惯了Foxit和Adobe) Foxit官网 对系统平台要求如下:(支持Linux) 继续摸索了一下 ...
- java一维数组的声明、初始化及排序
public class TestArray { public static void main(String[] args) { /** 数组声明及动态初始化 int a[] = new int[a ...
- 53.doc value机制内核级原理深入探秘
主要知识点: doc value的原理 doc value性能优化 一.doc value原理 1. 生成时间:index-time生成 PUT/POST的时候,就会生成doc ...