DICOM专栏系列中曾介绍过大多数的DICOM标准开源实现库,例如dcmtk、fo-dicom、mDCM,以及dcm4che。之前的介绍大都局限在表层,并未深入对比分析彼此的不同,因此在具体使用过程中很容易踩坑——例如此次对于dcm文件的压缩。
近期由于项目需要,外出给客户部署云平台,鉴于当地网络环境以及数据量的问题,急需对数据进行压缩处理,由于医学数据主要用于临床辅助诊断,因此不能采用有损压缩,原本使用dcmtk对dcm进行无损和有损压缩都很方便(详情请检索之前的专栏博文),怎奈使用dcm4che进行压缩时遇到了问题,详情如下文。
在dcm4chee官网中有关于压缩服务的介绍Compression Service,文中指出可以通过设置Storage SCP中的CompressionRules参数来开启压缩服务。设置方式依然以之前在Ubuntu14上搭建的dcm4chee服务端为例,浏览器输入:http://localhost:8088/jmx-console,弹出如下界面:
定位到其中的CompressionRules,设置各种类型图像的压缩方式,默认的设置如下:
这里为了立即启动压缩,添加新的压缩标准,即CTImageStorage:JLSL:0d,意思就是对CT格式的图像立刻进行Jpeg LossLess无损压缩。单击jmx-console下方的Apply Changes按钮即可应用改变。
随后使用dcmsnd.bat DCM4CHEE@localhost:11112 c:\nonjpeg.dcm进行测试,服务端提示如下错误:
No Image writer com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriter available for format:jpeg.
【注】:针对该问题搜索了许久,并未找到好的解决方案,既然服务端无法实现压缩,但是隐约记得之前dcm4chee服务端时可以接收客户端发送的压缩数据的。因此决定转变思路,想办法直接在客户端进行压缩,然后上传到dcm4chee后台服务器中。
按照博文Thread: How to compress using JPEG 2000的说明,dcm4che工具包自带压缩dcm的功能,于是进行了本地尝试,输入如下指令:
dcm2dcm -t 1.2.840.10008.1.2.4.70 c:\1.dcm c:\1jpeg.dcm,输出结果如下:
该错误与服务端之前的错误类似,提示缺少相应的jar包。通过检索该错误,找到的解决方案是:手动将jai_imageio.jar拷贝到系统jre\lib\ext目录下,重新运行依然弹出错误,如下所示:
后续有参照了官方给出的各种解决方案,诸如解决方案1:更换dcm4che包中的jai_imageio等jar包、解决方案2:安装jai_imageio.jar包、解决方案3:更换本地32为JRE环境,于此同时也在本地尝试了最新的dcm4che-3.X版本,但是终究没有解决该问题。
通过此次服务端和客户端的测试,可以断定问题出现在jai_imageio.jar包上,因此找到如何能够顺利使用jai_imageio.jar的方法就应该可以解决该问题。
鉴于之前Java的开发经验不足,尤其是Java Image I/O的不了解,因此目前尚未找到dcm4che工具包压缩dcm文件的解决方案,如有博友知道该解决方案,或者对jar_imageio.jar比较熟悉,请邮件联系我,Thanks a lot!
作者:zssure@163.com
时间:2015/07/26
版权声明:本文为博主原创文章,未经博主允许不得转载。
DICOM:dcm4che工具包如何压缩dcm文件探讨(前篇)
原文地址:http://blog.csdn.net/zssureqh/article/details/47072955