首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Mathematica调用ImageJ

从Mathematica调用ImageJ
EN

Stack Overflow用户
提问于 2012-02-02 14:09:18
回答 1查看 833关注 0票数 9

在Mathematica中,我希望将图像传递给ImageJ插件,并将结果从ImageJ发送到Mathematica。

JLink是有帮助的工具,但我既不熟悉它,也不熟悉ImageJ (这使得我很难在SO上利用现有的相关问题)。你知道怎么做吗?

(我已经在我的苹果电脑上安装了ImageJ。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-03 14:59:11

这应该只是为了向你展示,这并不像它看起来那么难。没有办法,你必须熟悉Java,ImageJ,是的,还有JLink。

下面是如何开始的:您需要可以从the ImageJ Website下载的ImageJ java归档ij.jar。这个jar包含ImageJ自己使用的所有类和函数。

您要做的是创建一个映像,而不是通过ImageJ-GUI打开它,而是使用Java方法。为此,您必须熟悉ImageJ-API,以了解如何从数字数组创建图像,因为这就是我们想要将Mathematica- image转换为Java的方式。浏览本文档将我带到了ImageProcessor classes。如您所见,它们提供了两个方法:setPixelsgetPixels,并且都接受简单的数组。让我们使用它并编写一个非常基本的过滤器:

代码语言:javascript
复制
import ij.process.FloatProcessor;

public class SimpleTest {

    public static float[] func(float []bm, int nx, int ny) {
        FloatProcessor p = new FloatProcessor(nx,ny);
        p.setPixels(bm);
        float[] kernel = new float[{0.111f,0.111f,0.111f,0.111f,
                                    0.111f,0.111f,0.111f,0.111f,0.111f};
        p.convolve(kernel, 3, 3);
        return (float[]) p.getPixels();
    }
}

此函数获取图像数据和图像尺寸,进行卷积并返回过滤后的图像数据。要编译这段代码,请记住ij.process.FloatProcessor位于ij.jar内部。您必须在类路径中包含此归档文件。稍后,您必须确保JLink同时找到ij.jar和您的SimpleTest.class。我通常也会把我的类打包在一个罐子里。为此,我将其称为simple.jar

虽然java端现在已经准备就绪,但我们需要几行代码来从Mathematica图像中提取图像数据和尺寸。

代码语言:javascript
复制
img = ColorConvert[ExampleData[{"TestImage", "Lena"}], "Grayscale"];
{nx, ny} = ImageDimensions[img];
data = ImageData[img] // Flatten;

我们现在要做的是将平面整数数组data发送给我们的Java函数,获取结果并构建输出图像。要让Mathematica找到您的jar归档文件,一种方法是调用AppendToClassPath

代码语言:javascript
复制
Needs["JLink`"]
AddToClassPath["/pathTo/ij.jar","pathTo/simple.jar"];

simpleTest = LoadJavaClass["SimpleTest", StaticsVisible -> True];
output = SimpleTest`func[data, nx, ny];
Image[Partition[output, nx]]

有了这最后一步,我们完成了这个循环,并得到了最终的结果。

结束语:

  • 你也许应该(这意味着“去做”)使用JLink用来编译你的代码的java版本。
  • ij.jar中已经有了插件。这不会包括所有可用的内容。但是请记住:ImageJ只是调用ij.jar中的方法来使用辅助插件,所以您可以对您的代码执行相同的操作。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9107889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档