dcm4che解析DICOM文件生成JPEG图像
来源:互联网 发布:拼接的js class样式 编辑:程序博客网 时间:2024/05/19 16:47
dcm4che概述
dcm4che是为专注于医疗健康企业开发的基于DICOM标准的开源应用和工具的集合。目前最新的版本是dcm4che3.3.8。本片文章主要讲的是使用dcm4che3.3.8解析DICOM文件生成JPEG图像文件。
运行环境
java:jre1.8.0_131,jdk1.8.0_131;
注:使用的是32位java运行环境,因为之前使用的是64位,然后生成JPEG时出现不能生成等错误(具体错误记不清楚了),需要使用32位环境然后安装一些java的其他的环境。
jar包
dcm4che3.3.8:
- dcm4che-image-3.3.8.jar
- dcm4che-imageio-3.3.8.jar
- dcm4che-tool-dcm2jpg-3.3.8.jar
- dcm4che-core-3.3.8.jar
log4j:
- log4j-1.2.17.jar
- slf4j-api-1.7.5.jar
- slf4j-log4j12-1.7.5.jar
具体实现
主要由两个.java构成,Dcm2jpgIOStreamOutput.java和Dcm2JpgMain.java。
Dcm2jpgIOStreamOutput.java:
import java.awt.image.BufferedImage;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.Iterator;import javax.imageio.ImageIO;import javax.imageio.ImageReadParam;import javax.imageio.ImageReader;import javax.imageio.stream.ImageInputStream;import org.dcm4che3.data.Attributes;import org.dcm4che3.imageio.plugins.dcm.DicomImageReadParam;import org.dcm4che3.util.SafeClose;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class Dcm2jpgIOStreamOutput { private final ImageReader imageReader = ImageIO.getImageReadersByFormatName("DICOM").next(); private float windowCenter; private float windowWidth; private boolean autoWindowing = true; private int windowIndex; private int voiLUTIndex; private boolean preferWindow = true; private Attributes prState; private int overlayActivationMask = 0xffff; private int overlayGrayscaleValue = 0xffff; private int frame = 1; public int getFrame() { return frame; } public void setFrame(int frame) { this.frame = frame; } public void setWindowCenter(float windowCenter) { this.windowCenter = windowCenter; } public void setWindowWidth(float windowWidth) { this.windowWidth = windowWidth; } public void setAutoWindowing(boolean autoWindowing) { this.autoWindowing = autoWindowing; } public void setWindowIndex(int windowIndex) { this.windowIndex = windowIndex; } public void setVoiLUTIndex(int voiLUTIndex) { this.voiLUTIndex = voiLUTIndex; } public void setPreferWindow(boolean preferWindow) { this.preferWindow = preferWindow; } public void setPrState(Attributes prState) { this.prState = prState; } public void setOverlayActivationMask(int overlayActivationMask) { this.overlayActivationMask = overlayActivationMask; } public void setOverlayGrayscaleValue(int overlayGrayscaleValue) { this.overlayGrayscaleValue = overlayGrayscaleValue; } public void convert(File src, File dest) throws IOException{ Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("DICOM"); ImageReader reader = iter.next(); ImageInputStream iis = ImageIO.createImageInputStream(src); BufferedImage bi; OutputStream out = null; try{ reader.setInput(iis, false); bi = readImage(iis); if (bi == null) { System.out.println("\nError: " + src + " - couldn't read!"); return; } out = new BufferedOutputStream(new FileOutputStream(dest)); JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(out); //这里也可以使用流将图像导出到web应用,用来搭建web版的PACS等。 enc.encode(bi); }finally{ SafeClose.close(iis); SafeClose.close(out); } } private ImageReadParam readParam(){ DicomImageReadParam param = (DicomImageReadParam) imageReader.getDefaultReadParam(); param.setWindowCenter(windowCenter); param.setWindowWidth(windowWidth); param.setAutoWindowing(autoWindowing); param.setWindowIndex(windowIndex); param.setVOILUTIndex(voiLUTIndex); param.setPreferWindow(preferWindow); param.setPresentationState(prState); param.setOverlayActivationMask(overlayActivationMask); param.setOverlayGrayscaleValue(overlayGrayscaleValue); return param; } private BufferedImage readImage(ImageInputStream iis) throws IOException{ imageReader.setInput(iis); return imageReader.read(frame -1, readParam()); }}
Dcm2JpgMain.java:
import java.io.File;import java.io.IOException;public class Dcm2JpgMain { public static void main(String[] args) throws IOException { try{ for(int i = 1;i < 2;i++){ System.out.print("No: " + String.format("%06d", i) + " Started "); String tempStr = String.format("%06d", i); File src = new File("F:\\dicomfiles\\LIDC-IDRI-0827\\1.3.6.1.4.1.14519.5.2.1.6279.6001.728284743932342406301468721019\\1.3.6.1.4.1.14519.5.2.1.6279.6001.253322967203074795232627653819\\" + tempStr + ".dcm"); //这里我原本测试的是大概400个dcm文件,最后一次测试只实验了一张,这里填上dcm文件的具体位置就行。 File dest = new File("F:\\dicomfiles\\dcm2jpg\\" + tempStr + ".jpg"); //生成的JPEG图像位置 Dcm2jpgIOStreamOutput dcm2jpg = new Dcm2jpgIOStreamOutput(); dcm2jpg.convert(src, dest); System.out.println("------> Result:Completed"); } }catch(IOException e){ e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } }}
Q: 690567521
阅读全文
0 0
- dcm4che解析DICOM文件生成JPEG图像
- JPEG转为DICOM文件
- JPEG转为DICOM文件
- DICOM:dcm4che工具包如何压缩dcm文件探讨(续篇)
- DICOM:开源DICOM服务框架DCM4CHE 安装
- DICOM:开源DICOM服务框架DCM4CHE 构建
- android 解析并显示dicom文件的数据和图像
- DICOM:dcm4che工具包如何压缩dcm文件探讨(前篇)
- Dicom文件解析
- Dicom文件解析
- DICOM靶区头文件解析
- dicom文件详细解析
- DICOM:开源DICOM服务框架DCM4CHE构建的准备
- 从DICOM开始入门医学图像处理-3-DICOMDIR文件解析
- JPEG in DICOM
- dcm4che
- 生成JPEG文件的步骤
- 用Servlet动态生成JPEG图像
- poj 2142
- centos7.3.1611 虚拟机Linux系统下编译mysql到一半(我的是47%)卡死解决办法
- 总结学习nodejs遇见的一些错误
- 将整型ip转为点分十进制
- 工作日记2017.08.20 使用redis进行并发控制
- dcm4che解析DICOM文件生成JPEG图像
- bootstrap3学习:响应式布局layout
- Android Binder机制(超级详尽)
- Java学习笔记—File类的用法
- Tomcat入门
- 欢迎使用CSDN-markdown编辑器
- altera在opensuse下的安装
- CentOS获取软件安装包源码
- ListView之BaseAdapter的基本使用