- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了以下问题。我必须编写连接到 pacs 并获取图像的小型应用程序。我决定使用 dcm4che 工具包。我写了以下代码: 公共(public)课 Dcm4 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
DcmQR dcmqr = new MyDcmQR("server");
dcmqr.setCalledAET("server", true);
dcmqr.setRemoteHost("213.165.94.158");
dcmqr.setRemotePort(104);
dcmqr.getKeys();
dcmqr.setDateTimeMatching(true);
dcmqr.setCFind(true);
dcmqr.setCGet(true);
dcmqr.setQueryLevel(MyDcmQR.QueryRetrieveLevel.IMAGE);
dcmqr.addMatchingKey(Tag.toTagPath("PatientID"),"2011");
dcmqr.addMatchingKey(Tag.toTagPath("StudyInstanceUID"),"1.2.276.0.7230010.3.1.2.669896852.2528.1325171276.917");
dcmqr.addMatchingKey(Tag.toTagPath("SeriesInstanceUID"),"1.2.276.0.7230010.3.1.3.669896852.2528.1325171276.916");
dcmqr.configureTransferCapability(true);
List<DicomObject> result=null;
byte[] imgTab=null;
BufferedImage bImage=null;
try {
dcmqr.start();
System.out.println("started");
dcmqr.open();
System.out.println("opened");
result = dcmqr.query();
System.out.println("queried");
dcmqr.get(result);
System.out.println("List Size = " + result.size());
for(DicomObject dco:result){
System.out.println(dco);
dcmTools.toByteArray(dco);
System.out.println("end parsing");
}
} catch (Exception e) {
System.out.println("error "+e);
}
try{
dcmqr.stop();
dcmqr.close();
}catch (Exception e) {
}
System.out.println("done");
}
}
一切似乎都很好,直到我调用 dcmTools.toByteArray(dco)。调用 toByteArray() 之前的输出如下所示:
List Size = 1
(0008,0052) CS #6 [IMAGE] Query/Retrieve Level
(0008,0054) AE #6 [server] Retrieve AE Title
(0020,000E) UI #54 [1.2.276.0.7230010.3.1.3.669896852.2528.1325171276.916] Series Instance UID
ToByteArray 的来源:
public static byte[] toByteArray(DicomObject obj) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(baos);
DicomOutputStream dos = new DicomOutputStream(bos);
dos.writeDicomFile(obj);
dos.close();
byte[] data = baos.toByteArray();
return data;
}
调用 toByteArray 后我得到了输出:
error java.lang.IllegalArgumentException: Missing (0002,0010) Transfer Syntax UID
我在其他论坛上找到了一些信息,似乎 DcmQR.get() 方法不发送图像数据。是否可以强制 DcmQR 执行此操作。我已经写过问题出在 DcmQR.createStorageService() 方法中或与方法有关,但我还没有找到解决方案。请帮助我!!!
您好!
我已经按照您的建议进行了一些更改:我添加了 setMoveDest 和 setStoreDestination,并且 DicomObject 存储在我添加的目标中 - 看起来很棒。然后我尝试基于 Association.cget 方法中使用的 FutureDimseRSP 编写响应处理程序:
public class MyDimseRSP extends DimseRSPHandler implements DimseRSP{
private MyEntry entry = new MyEntry(null, null);
private boolean finished;
private int autoCancel;
private IOException ex;
@Override
public synchronized void onDimseRSP(Association as, DicomObject cmd,
DicomObject data) {
super.onDimseRSP(as, cmd, data);
MyEntry last = entry;
while (last.next != null)
last = last.next;
last.next = new MyEntry(cmd, data);
if (CommandUtils.isPending(cmd)) {
if (autoCancel > 0 && --autoCancel == 0)
try {
super.cancel(as);
} catch (IOException e) {
ex = e;
}
} else {
finished = true;
}
notifyAll();
}
@Override
public synchronized void onClosed(Association as) {
if (!finished) {
// ex = as.getException();
ex = null;
if (ex == null) {
ex = new IOException("Association to " + as.getRemoteAET()
+ " closed before receive of outstanding DIMSE RSP");
}
notifyAll();
}
}
public final void setAutoCancel(int autoCancel) {
this.autoCancel = autoCancel;
}
@Override
public void cancel(Association a) throws IOException {
if (ex != null)
throw ex;
if (!finished)
super.cancel(a);
}
public DicomObject getDataset() {
return entry.command;
}
public DicomObject getCommand() {
return entry.dataset;
}
public MyEntry getEntry() {
return entry;
}
public synchronized boolean next() throws IOException, InterruptedException {
if (entry.next == null) {
if (finished)
return false;
while (entry.next == null && ex == null)
wait();
if (ex != null)
throw ex;
}
entry = entry.next;
return true;
}
}
这是 MyEntry 代码:
public class MyEntry {
final DicomObject command;
final DicomObject dataset;
MyEntry next;
public MyEntry(DicomObject command, DicomObject dataset) {
this.command = command;
this.dataset = dataset;
}
public DicomObject getCommand() {
return command;
}
public DicomObject getDataset() {
return dataset;
}
public MyEntry getNext() {
return next;
}
public void setNext(MyEntry next) {
this.next = next;
}
}
然后我重新输入了 Dmcqr 的 get 方法,如下所示:
public void getObject(DicomObject obj, DimseRSPHandler rspHandler)throws IOException, InterruptedException{
TransferCapability tc = selectTransferCapability(qrlevel.getGetClassUids());
MyDimseRSP myRsp=new MyDimseRSP();
if (tc == null)
throw new NoPresentationContextException(UIDDictionary
.getDictionary().prompt(qrlevel.getGetClassUids()[0])
+ " not supported by " + remoteAE.getAETitle());
String cuid = tc.getSopClass();
String tsuid = selectTransferSyntax(tc);
DicomObject key = obj.subSet(MOVE_KEYS);
assoc.cget(cuid, priority, key, tsuid, rspHandler);
assoc.waitForDimseRSP();
}
在此方法的第二个参数中,我使用了响应处理程序 (MyDimseRSP) 的实例。然后我运行我的代码,我得到了我的响应处理程序的命令和数据集的空值。在“下一个”变量中,只有“命令”不为空,当然它不是我需要的 DicomObject。我做错了什么!!!!
最佳答案
您将不得不逐步执行代码(包括 DCM4CHE 工具包代码)。我怀疑您使用的是默认响应处理程序,它只计算已完成操作的数量,实际上并不存储来自 get 命令的图像数据。
很明显,下面的 for 循环正在循环查找操作的结果,而不是 get(需要在响应处理程序中处理)。
for(DicomObject dco:result)
我希望您必须覆盖响应处理程序才能正确编写您的 DICOM 文件。另请参阅 DcmRcv 类,用于从您将收到的 DicomObject 写入 DICOM 文件。
:
根据您上面的编辑,我假设您只是想获取原始 DICOM 实例数据(而不是存储它的命令)。响应处理程序大致如下:
List<DicomObject> dataList = new ArrayList<DicomObject>();
@Override
public void onDimseRSP(Association as, DicomObject cmd, DicomObject data) {
if( shouldAdd(as, cmd) ) {
dataList.add( data )
}
}
当心大列表,但它应该让您获得内存中的数据。
关于java - Dcm4Che - 从 pacs 获取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22126774/
我想在远程 ubuntu 14.04 服务器上安装 Eclipse Che IDE。这是我所做的: 打开从我的笔记本电脑到 ubuntu 服务器的 SSH session ,以“useradm” 身份
我最近尝试在 Windows 10 64 位上安装 Eclipse Che。我安装了所有先决条件,但是当我运行 che.bat 时,它给了我以下消息: 我该怎么做才能解决这个问题? 最佳答案 此错误是
我在服务器上安装了 Eclipse Che,当我在本地使用它时,它在我的机器上运行完美 localhost:8080 我想让它在 NGINX 前端反向代理之后从 Internet 上可用。这是想法:
Eclipse Che被Eclipse官方称为下一代IDE,作为老牌的IDE,被其寄予厚望的Eclipse Che到底有什么特点,在这篇文章中我们来一探究竟。 开发团队的Kuberentes原生I
我已经在我的 Ubuntu 16.04 上安装了 Eclipse Che,并且我正在使用外部 IP 从远程计算机连接到我的 eclipse che。 我在我的 ubuntu 防火墙上打开了 8000,
我正在尝试从 multi-machine workspace 中的另一个 NodeJS 运行时连接到 MySQL 运行时中的数据库. 在测试中,我使用目标用户列表调用 API http://local
我对eclipse che很感兴趣,因此在codenvy上开了一个测试账号。我尝试了几个模板,到目前为止一切正常。 下https://eclipse.org/che/features/它说您可以“通过
我目前正在评估使用 Eclipse Che Cloud IDE 作为在 Jboss 上运行的现有项目本地运行 Eclipse Neon 的替代方案。 在 Eclipse Neon 中,在“首选项”下,
对于我的 Eclipse Che 项目,每次加载工作区时我都必须重新安装我的 python 模块 (blegh)。有没有办法将我的团队需要的模块安装到全局文件夹中,这样他们就不必在每次加载项目时都安装
本文整理了Java中org.eclipse.che.api.fs.server.WsPathUtils类的一些代码示例,展示了WsPathUtils类的具体用法。这些代码示例主要来源于Github/S
本文整理了Java中org.eclipse.che.plugin.yaml.shared.YamlDTO类的一些代码示例,展示了YamlDTO类的具体用法。这些代码示例主要来源于Github/Stac
本文整理了Java中org.eclipse.che.plugin.yaml.shared.YamlPreference类的一些代码示例,展示了YamlPreference类的具体用法。这些代码示例主要
有字体巴塘和一个字体 八塘车 ,其他韩文字体 Dotum、Gulim 和 Gungsuh 也是如此。但有什么区别呢? “车”是什么意思? 最佳答案 哦,终于,我们来了: http://blog.kor
可以 eclipse 车 用于传统的单体应用程序开发?不使用 Docker 的应用程序。如果可能的话,从桌面 Eclipse 迁移到 Eclipse Che 是一个不错的决定吗? Che 是否提供各种
使用 Eclipse Che,我最近能够按照说明中的说明毫无问题地部署 docker 容器。 我正试图了解更多关于 Che 扩展开发的知识,我正在阅读位于下一页上的“开发你的第一个插件”的简短介绍:
如何在 mac osx 上完全卸载 eclipse che? 使用 mac osx 安装程序来安装二进制文件。看来 che 总是在 8080 上运行,甚至杀死了进程并停止了 docker。 https
我正在尝试让 Eclipse-Che 在 EC2 上运行,但遇到了一些问题。如果我只映射端口 8080,我可以启动 Eclipse-Che 服务器,但随后我无法连接到任何工作区,大概是因为我缺少端口
我们有基于 xtext 的领域特定语言。对于语言表示,我们在 Eclipse 中有自己的编辑器。这个编辑器基本上是 Eclipse 插件。 有什么方法可以将这个 eclipse 编辑器插件移植到 Ch
我正在使用 openshift.io 上托管的 Eclipse Che 7 来开发一个简单的 java 项目。可以调试测试吗?我找不到启动它们的方法。如果我打开测试 View 有 最佳答案 总是可以使
我刚刚开始使用 Eclipse che 并启动了一个项目。我没有 Main 类,我想从 Console 包中名为 TBB_SQLBuilder.java 的类开始运行该项目。 我根本不知道如何运行它。
我是一名优秀的程序员,十分优秀!