背景:在DICOM文件解析图片的过程中发现,被压缩过的DICOM文件不能解析出图片。因此需要先解压,后解析图片。
解压:
1.导入jar包:
<dependency>
<groupId>org.dcm4che</groupId>
<artifactId>dcm4che-image</artifactId>
<version>5.23.1</version>
</dependency>
<dependency>
<groupId>org.dcm4che</groupId>
<artifactId>dcm4che-core</artifactId>
<version>5.23.1</version>
</dependency>
<dependency>
<groupId>org.dcm4che</groupId>
<artifactId>dcm4che-imageio</artifactId>
<version>5.23.1</version>
</dependency>
<dependency>
<groupId>org.dcm4che</groupId>
<artifactId>dcm4che-imageio-opencv</artifactId>
<version>5.23.1</version>
</dependency>
<dependency>
<groupId>com.github.nroduit</groupId>
<artifactId>weasis-core-img</artifactId>
<version>4.5.0</version>
</dependency>
<dependency>
<groupId>com.github.nroduit</groupId>
<artifactId>weasis-dicom-tools</artifactId>
<version>5.22.4</version>
</dependency>
2.将操作系统对应的opencv_java文件放在某路径下,例如/Users/allin918/Desktop
3.设置VM options:-Djava.library.path=/Users/allin918/Desktop
4.解压代码:
package org.example;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.data.UID;
import org.dcm4che3.imageio.codec.Transcoder;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
public class DCMTest {
public static void main(String[] args) throws IOException {
File src = new File("/Users/allin918/Desktop/dcm/00020010-58.dcm"); //带有压缩协议的dicom原始文件
File dest = new File("/Users/allin918/Desktop/dcm/copy00020010-58.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(){
@Override
public OutputStream newOutputStream(Transcoder transcoder, Attributes dataset) throws IOException {
return new FileOutputStream(dest);
}
});
} catch (Exception e) {
Files.deleteIfExists(dest.toPath());
throw e;
}
}
}
解析图片:
1.导入jar包
<dependency>
<groupId>net.imagej</groupId>
<artifactId>ij</artifactId>
<version>1.49v</version>
</dependency>
2.解析图片代码:
package org.example;
import ij.plugin.DICOM;
import lombok.extern.slf4j.Slf4j;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
@Slf4j
public class DCMTest {
public static void dcm2jpg(String filePath) {
try {
DICOM dicom = new DICOM();
dicom.run(filePath);
BufferedImage bi = (BufferedImage) dicom.getImage();
String imagePath = filePath;
ImageIO.write(bi, "jpg", new File(imagePath));
} catch (Exception e) {
log.info("DCMUtils.create2错误:{}",e);
}
}
}