繁体   English   中英

控制ImageJ的现有实例

[英]Controlling already existing instance of ImageJ

首先,我不太熟悉Java。 实际上,我正在使用JLink / Mathematica做我想做的事情。

在我们的实验室中,我们正在使用Mathematica控制的相机为实验拍照。 我们想将图像显示程序转换为ImageJ。 另一个程序是内存占用器,它很慢。

通过研究,我可以通过编写插件,脚本或宏来实现这一目标。 我的印象是,我写的任何东西都将安装到ImageJ中并由默认GUI控制。

我的问题是,我可以编写一个外部程序来控制已经运行的ImageJ实例吗? 理想情况下,事件的顺序应该是。

  1. 相机通过已经存在的脚本捕获图像。
  2. 图像捕获脚本要求ImageJ显示捕获的图像以及默认的GUI,以便我可以访问默认的工具集。
  3. 我可以通过默认GUI进行一些剖面图和直方图。
  4. 将图像移交给ImageJ的脚本已关闭,但是ImageJ上的图像仍然保留。

我已成功导入ImageJ的ij类并进行了使用。 这是我在ImageJ中创建图片的尝试。 它在Mathematica的JLink中,但可以相当地翻译成Java。

Needs["JLink`"];
InstallJava[];
AddToClassPath["C:\\Program Files\\ImageJ\\ij.jar"];
ijClass = LoadJavaClass["ij.IJ"];
imagePlusClass = LoadJavaClass["ij.ImagePlus"];
JavaNew[imagePlusClass, "My New Image", 
  JavaNew["ij.process.ByteProcessor", 400, 400]]@show[]
ij`IJ`log["test"];
ij`IJ`getLog[]

但是,创建的图像位于某种Java窗口中。 已经运行的imageJ根本不与之交互。 此外,我似乎可以使用getLog []捕获已经运行的ImageJ的日志。

再次,问题是,我可以使用未在ImageJ中安装的外部脚本作为插件,脚本或宏来在已经运行的ImageJ上显示图像吗? 另外,是否可以使用外部脚本在已经运行的ImageJ实例上调用预安装的宏?

您尝试执行的操作称为进程间通信 ImageJ具有将信息传递到正在运行的实例的机制。 转到编辑▶选项▶杂项...,然后选中“运行单实例侦听器”框。 但是,此功能仅限于命令行参数。 因此,您可以通过尝试启动具有所需参数的第二个ImageJ(例如,然后将其传递到运行的实例)来告诉正在运行的实例从磁盘打开映像。 但是您不能直接在电线上馈送像素-您必须将它们写入临时文件。

您最简单的选择是通过ImageJ进行所有操作。 但这并不是将当前的方案与Mathematica混合在一起的最简单的转变。

因此,下一个最简单的事情是从Mathematica启动ImageJ,并始终与该ImageJ的同一实例通信以完成所有操作。 也许你可以做到?

如果必须与外部启动的ImageJ实例进行通信,则需要使用上面提到的CLI参数传递方案,或者实现自己的某种进程间通信方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM