img2dcm.java,基于dicom协议的原图下载及转换

大家好,我是帅气小伙,最近工作的遇到了关于dicom协议传输的问题,我想在此为大家分享一下经验。

1.搭建dicom服务器

http://blog.csdn.net/zssureqh/article/details/44535405

先下载相关的文件

然后初始化数据库

启动程序

2.创建AET

598dc21e90b9?from=groupmessage

AET设置内容

AET(Application Entity Title )的作用等同于Token,是区别其他系统的唯一标识,PACS服务器相当于一个有权限的文件共享的系统,而控制访问权限就是通过设置AET的方式控制的。

AET 的详细配置说明

title:这个AET的别名(必填)

type:可以维护一个字典,用于区分这个title的用途,例如学习,工作,主要用于管理

hostname:远程主机访问本服务器的实际IP地址(必填)

port:远程主机访问本服务器的实际端口(必填)

Ciphersuite #1:加密选项,如果设置了加密选项,那么在下载原图的时候,需要

用对应的解密方式解码

Ciphersuite #2:同上

Ciphersuite #3:同上

Description:用于描述这个AET的作用

issue of Patient ID:患者id用于标识这个AET是具体某个患者的病例讨论的

...

后续的都没必要说明了,都是一些说明字段

3.上传一份dicom文件

需要用dicom的客户端上传,一般医院的PACS系统都会以客户端(scu)的身份向服务端(scp)上传dicom文件,后续会用java代码实现dicom文件的上传。

4.dicom文件上传后应该如何访问

598dc21e90b9?from=groupmessage

dicom文件在服务器的信息

Study Instance UID :这个份dicom文件的唯一标识,外部应用只需传这个参数即可获取dicom文件

5.代码实现上传和下载功能

引入 weasis-dicom-tools

git clone https://github.com/nroduit/weasis-dicom-tools.git

主要用到的类

598dc21e90b9?from=groupmessage

六个操作

CFind类:用于检测dicom文件是否存在

CGET类:用于下载dicom文件到本地

CGetForward类:用于修改和覆盖指定的dicom文件内容及描述信息

CMove类:用于将A服务器的dicom文件迁移到B服务器

CStore类:用于上传dicom文件

CEcho类:用于检测服务器的连通性,与ping功能类型

上传代码

/*scp上传服务*/

public class CStoreTest {

public static void main(String [] args){

AdvancedParams params = new AdvancedParams();

ConnectOptions connectOptions = new ConnectOptions();

connectOptions.setConnectTimeout(3000);

connectOptions.setAcceptTimeout(5000);

params.setConnectOptions(connectOptions);

DicomProgress progress = new DicomProgress();

progress.addProgressListener(new ProgressListener() {

@Override

public void handleProgression(DicomProgress progress) {

System.out.println("DICOM Status:" + progress.getStatus());

if (progress.isLastFailed()) {

System.out.println("Last file has failed:" + progress.getProcessedFile());

}

}

});

DicomNode server = new DicomNode("MyAET", "127.0.0.1", 11112);

DicomNode client = new DicomNode("StorageSCU","127.0.0.1",9090);

File dir = new File("C:\\Users\\kong\\Desktop\\dicom\\dicom");

List list = new ArrayList<>();

File [] files = dir.listFiles();

for(int i=0;i

System.out.println(files[i].getAbsolutePath());

list.add(files[i].getAbsolutePath());

}

Attributes attrs = new Attributes();

attrs.setString(Tag.PatientName, VR.PN, "xiaohong");

attrs.setString(Tag.PatientID, VR.LO, "09070081");

DefaultAttributeEditor editor = new DefaultAttributeEditor(true, attrs);

CstoreParams cstoreParams = new CstoreParams(editor, false, null);

DicomState state = CStore.process(params, client, server, list, progress, cstoreParams);

System.out.println(state.toString());

}

}

下载代码

/*获取文件*/

public class CGETTest {

public static void main(String [] args){

final DicomNode server = new DicomNode("MyAET", "127.0.0.1", 11112);

final DicomNode client = new DicomNode("StorageSCU","127.0.0.1",9090);

final DicomParam[] params = { new DicomParam(Tag.StudyInstanceUID, "2.25.35.150764751676139605671118642721415413767")};

DicomProgress progress = new DicomProgress();

progress.addProgressListener(new ProgressListener() {

@Override

public void handleProgression(DicomProgress progress) {

System.out.println("Remaining operations:" + progress.getNumberOfRemainingSuboperations());

if (progress.isLastFailed()) {

System.out.println("Last file has failed:" + progress.getProcessedFile());

}

}

});

File dir = new File("C:\\Users\\kong\\Desktop\\dicom1");

for (int i=0;i<10;i++){

DicomState state = CGet.process(client,server,progress,dir,params);

System.out.println("DICOM Status:" + state.toString());

}

}

}

6.dicom文件转图片

dicom文件的查看,只能通过专业的图像软件才能查看,作为一般的应用显然是不能普遍通用的,因此需要转换png,jpg等普遍使用的格式。

maven引入dcm2jpg

org.dcm4che.tool

dcm4che-tool-dcm2jpg

dcm4chee-arc-light-5.10.1

www.dcm4che.org

dcm4che Repository

http://www.dcm4che.org/maven2

转换代码

/**

* dicom转jpg

* @param imagesPath 存储目录

* @param files dicom文件集合

*/

public static void dicom2Jpg(String imagesPath,File [] files){

for(File dicom : files){

String savePath = imagesPath+"/"+dicom.getName()+".jpg";

File jpeg = new File(savePath);

if(jpeg.exists()||!dicom.isFile()){

continue;

}

try {

Dcm2Jpg dcm2jpg = new Dcm2Jpg();

dcm2jpg.initImageWriter("JPEG", null, null, null, 1l);

dcm2jpg.convert(dicom, jpeg);

} catch (IOException e) {

e.printStackTrace();

}

}

}

7. 专业的dicom图像浏览器

https://github.com/nroduit/Weasis

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用DCMTK 3.6.3的dcm2pnm.exe将多帧DICOM图像转换为单个PNG图像,您可以按照以下步骤操作: 1. 首先,确保已经正确安装DCMTK 3.6.3库。您可以从DCMTK的官方网站(https://dicom.offis.de/dcmtk.php.en)下载并按照说明进行安装。 2. 打开命令行提示符或终端窗口,并导航到包含DICOM图像文件的目录。 3. 运行以下命令以将多帧DICOM图像转换为单个PNG图像: ``` dcm2pnm +Fpng input.dcm output.png ``` 其中,`input.dcm`是您要转换的多帧DICOM图像文件的路径,`output.png`是生成的单个PNG图像文件的路径。 请确保在命令行中正确指定了dcm2pnm.exe的路径,或者将其添加到系统环境变量中,以便可以直接在任何目录下运行该命令。 4. 执行命令后,dcm2pnm将会解析输入的多帧DICOM图像,并将其转换为单个PNG图像。生成的PNG图像文件将保存在指定的输出路径中。 请注意,dcm2pnm是DCMTK提供的一个实用工具,可用于将DICOM图像转换为其他常见的图像格式。根据您的需求,您可以使用其他选项和参数来进一步控制转换过程。您可以通过运行 `dcm2pnm --help` 命令获取更多用法和选项的详细信息。 此外,如果您希望在自己的程序中实现DICOM图像转换,您可以使用DCMTK库提供的API来读取和处理DICOM图像,并将其保存为PNG格式。具体的实现方式将涉及更多的编程细节,可以参考DCMTK的文档和示例代码以获取更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值