背景

前段时间博文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文件探讨(续篇)的更多相关文章

  1. dicom(dcm)文件批量Study Instance UID打包整理工具

    一款可以自动识别原始dicom文件Study Instance UID的工具. 如果你有一堆混乱不堪的dcm文件,这个小工具能帮助你将这些无序的dicom文件按照Study Instance UID压 ...

  2. python .dcm文件读取,并转化为.jpg格式

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

  3. 使用dcmtk库读取.dcm文件并获取信息+使用OpenCV显示图像

    借助VS2013和OpenCV的绘图功能,在工程DICOMReader.sln中实现了对单张.dcm图像的读取与显示,以下是详细步骤. 前期准备工作 编译器:VS2013 库:dcmtk-3.6.0( ...

  4. gulp压缩css文件跟js文件

    越到最后啊 就越发现,真的很理解那句话 就是自己多学一点一点知识,就少一句问别人的东西 这是多么痛苦的领悟 今天需要压缩css跟js文件 然后不懂啊 就问别人啊 就问啊问啊 然后再上网了解啊了解啊 用 ...

  5. 如何使用grunt压缩js文件

    jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前端开发人员,如果你现在还不知道grunt或者听说过 ...

  6. zlib压缩一个文件为gzip格式

    网上有很多针对zlib的总结,但是很零散,自己经过总结,实现了用zlib压缩一个文件为gzip格式,似的可以直接使用winr工具解压. 具体方法是使用zlib的deflate系列函数,将buffer压 ...

  7. iis7 压缩js文件和启用gzip压缩

    压缩js文件 打开IIS 7的配置文件:c:\windows\system32\inetsrv\config\applicationhost.config 在<staticContent loc ...

  8. [转]C#压缩打包文件

    /// <summary> /// 压缩和解压文件 /// </summary> public class ZipClass { /// <summary> /// ...

  9. albert1017 Linux下压缩某个文件夹(文件夹打包)

    albert1017 Linux下压缩某个文件夹(文件夹打包) tar -zcvf /home/xahot.tar.gz /xahottar -zcvf 打包后生成的文件名全路径 要打包的目录例子:把 ...

随机推荐

  1. 对数组名取地址&a和 数组首地址a

    #include <iostream> using namespace std; ] = {,,,,}; int main() { cout<<a<<" ...

  2. 横向移动-广告图(web)

    项目 (移动的广告牌) 要求: 1,实现图片一次以移动的方式出现,到最后一张完全出现时,回弹到第一张 2,鼠标放在图片上面图片移动,鼠标离开,图片停止移动 HTML结构 <!DOCTYPE ht ...

  3. Spring.Net学习笔记(7)-事务

    一.开发环境 操作系统:Win7 编译器:VS2010 二.涉及程序集 Spring.Core.dll Spring.Data.dll Common.Logging.dll 三.开发过程 1.项目结构 ...

  4. Selenium Grid操作使用指南

    一.实现串行多浏览器执行脚本1.启动selenium-server-standalonejava -jar selenium-server-standalone-2.44.0.jar2.脚本代码 fr ...

  5. 联想 K5 Pro(L38041)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 5.0.188

    >>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...

  6. MERGE INTO USING用法

    MERGE INTO [your table-name] [rename your table here] USING ( [write your query here] )[rename your ...

  7. 编写Java脚本统计工程代码总行数

    在新公司工作将近一年了,一直独自一人负责服务端集群的运维和代码的编写.不知不觉从一个Project发展到了七八个Project. 看着越来越多的代码,今天突然想统计一下一共写了多少代码.[这里只统计完 ...

  8. 解决header,footer等HTML5标签在IE(IE6/IE7/IE8)无效的方法

    HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单. HTML5的新标签元素有: <header&g ...

  9. 关于MD5解密网站。www.cmd5.com

    第一次听说这个网站,本人的名字居然也能够被解密,而且还是需要付费取得明文! 大家知道,md5加密是我们常用的加密方式,这个加密方式的好处在于不可逆.而且任何环境下算出的密文应该都是相同的,所以在大家登 ...

  10. 如何在MONO 3D寻找最短路路径

    前段时间有个客户说他们想在我们的3D的机房中找从A点到B点的最短路径,然而在2D中确实有很多成熟的寻路算法,其中A*是最为常见的,而这个Demo也是用的A*算法,以下计算的是从左上角到右下角的最短路径 ...