9

Mathematica から ImageJ プラグインに画像を渡し、ImageJ から Mathematica に送信された結果を取得したいと考えています。

JLink は役立つツールですが、私は JLink にも ImageJ にも精通していません (SO に関する既存の関連する質問を活用するのが難しくなっています)。その方法を教えてください。

(Mac にはすでに ImageJ をインストールしています。)

4

1 に答える 1

5

これは、見た目ほど難しくないことを示すティーザーとしてのみ機能するはずです。Java、ImageJ-API、そしてもちろん JLink に精通している必要があります。

開始方法は次のとおりです。 ImageJ Web サイトij.jarからダウンロードできるImageJ Java アーカイブが必要です。この jar には、ImageJ が単独で使用しているすべてのクラスと関数が含まれています。

あなたがしたいことは、ImageJ-GUI を介して開くのではなく、Java メソッドを使用してイメージを作成することです。このためには、たとえば数値の配列から画像を作成する方法を知るために、ImageJ-API に慣れる必要があります。それは、Mathematica 画像を Java に転送する方法だからです。このドキュメントにざっと目を通してみると、ImageProcessor クラスにたどり着きました。ご覧のとおり、これらは 2 つのメソッドを提供します: setPixelsandgetPixelsと どちらも単純な配列を受け入れます。これを使って非常に基本的なフィルタを書きましょう:

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 画像から画像データと寸法を抽出するために数行必要です。

img = ColorConvert[ExampleData[{"TestImage", "Lena"}], "Grayscale"];
{nx, ny} = ImageDimensions[img];
data = ImageData[img] // Flatten;

ここで行うことは、フラットな整数配列dataを Java 関数に送信し、結果を取得して出力イメージを構築することです。Mathematica にjarアーカイブを見つけさせる方法の1つは、次のように呼び出すことAppendToClassPathです:

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-GUIij.jarは補助プラグインを使用するために からメソッドを呼び出すだけなので、コードで同じことを行うことができます。
  • 一部のプラグインはネイティブ (JNI) コードを使用しており、これを Mathematica 内から使用すると、予期しないエラーが発生する可能性があります
于 2012-02-03T06:59:11.350 に答える