码迷,mamicode.com
首页 > 其他好文 > 详细

DICOM:dcm4che工具包如何压缩dcm文件探讨(续篇)

时间:2015-08-02 13:46:45      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:dcm4che   jpeg-ls   dicom   jaiimageio   

背景

前段时间博文 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-dcm2dcm工程。调试参数配置如下:
技术分享
注:jre调试环境应该指定为我们安装jai_imageio-1_0_01-lib-windows-i586-jdk库后的32位运行环境。
技术分享
技术分享
单步调试到DicomImageWriter.java中的writeBytesToSequence函数可以看到顺利写入了PixelData的长度236146,即十六进制的0x39A72。因此可以证明dcm2dcm工程源码没有问题,可能是本地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文件探讨(续篇)

标签:dcm4che   jpeg-ls   dicom   jaiimageio   

原文地址:http://blog.csdn.net/zssureqh/article/details/47205951

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!