使用dcm4che对压缩的dcm文件进行解压
上一篇文章说到了DCM文件的无损压缩 DICOM DCM4CHE影像压缩
本想着压缩了就大功告成 在使用的时候可以大大减少网络上传输的时间 提高网站性能
但是新的问题又出现了
问题如下 代码中获取文件像素的时候取到的是 null
public static Attributes loadDicomObject(File f) throws IOException {if (f == null){return null;}else{DicomInputStream dis = new DicomInputStream(f);//attr.setSpecificCharacterSet("GBK");return dis.readDataset(-1, -1);}}
Attributes attrs = loadDicomObject(file);
byte[] pixelData=attrs.getBytes(Tag.PixelData);//pixelData 为null
但是在取没有压缩的DCM源文件通过这段代码是可以取到的
到底压缩和没压缩有什么区别呢?
先用阅片工具看一下PixelData 的tag吧
这是源文件的PixelData tag值
这是压缩后的PixelData tag值
很明显的 VR 从OW 变成了OB Value 变空了 难怪取不上值
经过不断找资料研究 发现DCM压缩后 像素值会通过 Fragments 方式存
然后对代码进行修改
Object pixelData = attr.getValue(Tag.PixelData);
if (pixelData instanceof byte[]) {dicomPixels=(byte[])pixelData;
} else if (pixelData instanceof BulkData) {System.out.println("343434343");
} else if (pixelData instanceof Fragments) {Object [] aa= ((Fragments) pixelData).toArray();dicomPixels=(byte[])aa[1];
}
果然取上了压缩后的像素值
又想着终于解决了 可以愉快的玩耍了 结果新的问题又出来了
再用压缩后的像素值进行调节灰度时
居然这样了!!
居然马赛克了!
明显压缩后的源文件 像素也应该是压缩处理了
然后继续研究。。但是确实资料太少了 工期又有限
只好在用的时候先把压缩后的DCM文件 先进行解压 然后再获取 像素值使用了
1.添加对应的dcm4che的jar包
在pom.xml里:
<dependency><groupId>org.dcm4che</groupId><artifactId>dcm4che-imageio</artifactId><version>5.21.0</version></dependency><dependency><groupId>org.dcm4che</groupId><artifactId>dcm4che-imageio-opencv</artifactId><version>5.21.0</version><scope>runtime</scope></dependency>
- 开始解压
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.data.UID;
import org.dcm4che3.imageio.codec.Transcoder;public class Dcm4cheTranscode {public static void main(String[] args) {File src = new File("F:\\Desktop\\2238\\DX\\src.DCM"); //带有压缩协议的dicom原始文件File dest = new File("F:\\Desktop\\2238\\DX\\des.DCM"); //解压成未压缩的dicom目标文件try {transcodeWithTranscoder(src, dest);} catch (IOException e) {e.printStackTrace();}}public static void transcodeWithTranscoder(File src, final File dest) throws IOException {try (Transcoder transcoder = new Transcoder(src)) {transcoder.setDestinationTransferSyntax(UID.ExplicitVRLittleEndian);transcoder.setIncludeFileMetaInformation(true);transcoder.transcode(new Transcoder.Handler(){@Overridepublic OutputStream newOutputStream(Transcoder transcoder, Attributes dataset) throws IOException {return new FileOutputStream(dest);}});} catch (Exception e) {Files.deleteIfExists(dest.toPath());throw e;}}
}
目前是研究到这个份上 ,有更好的解决办法希望大神指点,我也会继续研究,不断学习的。。。有收获继续更新
使用dcm4che对压缩的dcm文件进行解压相关推荐
- 采用批处理命令对文件进行解压及采用SQLCMD进行数据库挂载
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 现在公司 ...
- java zip压缩 加密码_java 压缩成zip文件、解压zip文件(可设置密码)
1.情景展示 java实现将文件夹进行压缩打包的功能及在线解压功能 2.解决方案 方式一:压缩.解压zip 准备工作:slf4j-api.jar org.slf4j slf4j-api 1.7.25 ...
- shell脚本根据不同的压缩包类型(rar和zip)分别进行解压
shell脚本根据不同的压缩包类型(rar和zip)分别进行解压,注意传参: case $1 in*.zip)unzip -qq $1 -d $Temp_Dir;;*.rar)unrar x $1 $ ...
- DICOM笔记-解析JPEG压缩格式DCM文件
项目中使用了DICOM文件保存图像,之前经常遇到DICOM内放置的是short类型或者float类型的二维图像,按照之前的代码处理JEPG压缩的DICOM文件,当然会出现问题:从网上查到资料,是由 ...
- java 使用7z进行解压_java调用7zip解压压缩包的实例
前言 最近的项目中需要用到解压缩包的功能,客户给出的压缩包的格式主要是rar和zip,因此就打算使用java调用7zip的命令行进行解压文件,本文主要记录一下实现的过程以及其中遇到的问题. 7zip命 ...
- zip压缩多个文件,解压时不包含目录层级
假设我们有个目录叫 dev,dev中有很多文件,我们想要将dev中的文件打包,名字可能叫dev.zip,但当我们解压的时候,不想要解压生成一个dev目录,想要直接解压在当前目录,这样如何压缩呢? # ...
- linux一次压缩多个文件,同时解压多个zip文件
1. 查看所有文件: [root@localhost ebsupdate]# ls 3262919_ZHS 4607647_ZHS 7429271_ZHS p420679 ...
- 以管理员权限来进行解压操作
报错问题 解决方案 以管理员权限打开cmd 然后进入所需解压的压缩包路径下 执行cmd命令 start winrar x -y cfe-6.0.0.src.tar.xz(即所需解压压缩包名) x 用绝 ...
- C语言霍夫曼编码压缩,数据结构大作业——哈夫曼编码压缩BMP格式文件
数据结构大作业--哈夫曼编码压缩BMP格式文件 首先需要了解BMP图像格式 BMP图像格式详解 其次需要了解哈夫曼编码如何对BMP文件进行压缩 哈夫曼压缩与解压缩 编程部分 使用的头文件 虽然这里用了 ...
最新文章
- java中Array和ArrayList区别
- Server2003PDC迁移到Server2008R2BDC
- 如何批量修改公式的字体
- 远程连接hive报错
- linux内核之数据机构
- php版本与vc运行库
- 博士德霸道软件_霸道+远程版7.0
- UG 6.0软件安装教程
- 显示器屏幕尺寸及分辨率
- pic单片机c语言計數,单片机教程:PIC单片机C语言程序设计(三)
- React初识--必知必会的jsx核心语法
- 2022年劳务员-通用基础(劳务员)考试题库及答案
- android 充电电压过压保护值修改
- 淘宝店铺如何好评置顶,如何通过好评留住客户?
- 入门SpringBoot-关于启动原理(五)(转)
- kafka踩坑、实践篇
- 移动布局阶段总结【博学谷学习记录】超强总结,用心分享
- win10ltsc安装后重启提示bitlocker有问题怎么办_TIA Portal博途常见的15大问题汇总
- 树莓派4B+Ubuntu 18.04 LTS + 桌面desktop + ros安装@树莓派4B、Ubuntu、desktop、ros
- 计算机毕业设计ssm物流信息管理系统35wzn系统+程序+源码+lw+远程部署