背景

前段时间博文 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文件探讨(续篇)相关推荐

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

    背景: DICOM专栏系列中曾介绍过大多数的DICOM标准开源实现库,例如dcmtk.fo-dicom.mDCM,以及dcm4che.之前的介绍大都局限在表层,并未深入对比分析彼此的不同,因此在具体使 ...

  2. 使用dcm4che对压缩的dcm文件进行解压

    上一篇文章说到了DCM文件的无损压缩 DICOM DCM4CHE影像压缩 本想着压缩了就大功告成 在使用的时候可以大大减少网络上传输的时间 提高网站性能 但是新的问题又出现了 问题如下 代码中获取文件 ...

  3. DICOM笔记-解析JPEG压缩格式DCM文件

      项目中使用了DICOM文件保存图像,之前经常遇到DICOM内放置的是short类型或者float类型的二维图像,按照之前的代码处理JEPG压缩的DICOM文件,当然会出现问题:从网上查到资料,是由 ...

  4. DICOM医学图像处理:DICOM存储操作之“多幅BMP图像数据存入DCM文件”

    背景: 本专栏"DICOM医学图像处理"受众较窄,起初只想作为自己学习积累和工作经验的简单整理.前几天无聊浏览了一下,发现阅读量两极化严重,主要集中在"关于BMP(JPG ...

  5. DICOM医学图像处理:DICOM存储操作之 “多幅JPG图像数据存入DCM文件”

    背景: 续上篇,继续介绍如何将多幅JPG图像数据存入DCM文件.即将有损压缩数据直接写入DCM文件,存储为Multi-frame形式. 多幅JPG图像数据存入DCM文件: 为了避免引起歧义,这里着重说 ...

  6. dicom文件的后缀_dcm文件扩展名,dcm文件怎么打开?

    .dcm 文件类型1:DiskCatalogMaker Catalog File 文件说明:Catalog format used by DiskCatalogMaker, a file catalo ...

  7. java解析dcm文件到jpg

    1,下载源码编译 下载dcm3che源码 mvn install 2,gradle/maven 引用 compile ('org.dcm4che.tool:dcm4che-tool-dcm2jpg:5 ...

  8. java如何压缩html代码,java 压缩html文件

    java 压缩html文件 [2021-02-03 16:32:07]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...

  9. python教程:读取.dcm文件,并转化为.jpg格式

    .dcm文件是DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信中记录医学图像和相关信息的文件,在用于医学图像处理的时候我们 ...

最新文章

  1. 1103 Integer Factorization 需再做
  2. 关于Exchange Server 2010中OWA页面无法打开问题处理方法
  3. java-String StringBuffer
  4. 换脸系列——整脸替换
  5. angular-ui-tab-scroll
  6. MFC Attach()函数和Detach()函数
  7. [汇编语言]用[bx+idata]的方式进行数组的处理-字母大小写转换
  8. docker rabbitmq_使用Docker集成Rabbitmq与安装elasticsearch教程
  9. MySQL学习-MySQL条件查询
  10. Linux学习笔记001---Windows下安装CentOS7_并且安装桌面UI
  11. 说话人识别----技术挑战点
  12. java 修改mysql密码_mysql数据库忘记密码时如何修改
  13. 好文汇总(不断更新)
  14. centos ip地址固定
  15. 所有浏览器的 CSS selectors 兼容性
  16. php 计算签名,php – 计算Amazon Marketplace API的签名问题
  17. Syste类 及常用方法
  18. HC-05蓝牙配对AT指令
  19. Spring aop开发步骤
  20. 首席新媒体黎想教程:线上活动推广执行手册——第二篇

热门文章

  1. 张小龙通过微信谈产品完整版:如何把产品做简单
  2. 小白安装linux系统-u盘安装lubuntu
  3. 数据库驱动和JDBC
  4. 凤姐讲述为美国绿卡奋斗的十年
  5. 办公软件 office
  6. java 读取excel模板_java如何读取excel表格的信息,java读取excel模板
  7. 专业订制|软件开发|系统开发|网页设计|做网站|企业建站|网站建设
  8. 苹果cms安装PHP,苹果cms图文安装教程和苹果cms模板安装教程详解
  9. WIN10安装vc60无响应
  10. pyinstaller打包多个python文件