Mathematica から ImageJ プラグインに画像を渡し、ImageJ から Mathematica に送信された結果を取得したいと考えています。
JLink は役立つツールですが、私は JLink にも ImageJ にも精通していません (SO に関する既存の関連する質問を活用するのが難しくなっています)。その方法を教えてください。
(Mac にはすでに ImageJ をインストールしています。)
Mathematica から ImageJ プラグインに画像を渡し、ImageJ から Mathematica に送信された結果を取得したいと考えています。
JLink は役立つツールですが、私は JLink にも ImageJ にも精通していません (SO に関する既存の関連する質問を活用するのが難しくなっています)。その方法を教えてください。
(Mac にはすでに ImageJ をインストールしています。)
これは、見た目ほど難しくないことを示すティーザーとしてのみ機能するはずです。Java、ImageJ-API、そしてもちろん JLink に精通している必要があります。
開始方法は次のとおりです。 ImageJ Web サイトij.jar
からダウンロードできるImageJ Java アーカイブが必要です。この jar には、ImageJ が単独で使用しているすべてのクラスと関数が含まれています。
あなたがしたいことは、ImageJ-GUI を介して開くのではなく、Java メソッドを使用してイメージを作成することです。このためには、たとえば数値の配列から画像を作成する方法を知るために、ImageJ-API に慣れる必要があります。それは、Mathematica 画像を Java に転送する方法だからです。このドキュメントにざっと目を通してみると、ImageProcessor クラスにたどり着きました。ご覧のとおり、これらは 2 つのメソッドを提供します: setPixels
andgetPixels
と どちらも単純な配列を受け入れます。これを使って非常に基本的なフィルタを書きましょう:
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]]
この最後のステップでサイクルを完了し、最終結果を取得します。
最終的な注意事項:
ij.jar
。これには、利用可能なすべてのものが含まれるわけではありません。ただし、覚えておいてください: ImageJ-GUIij.jar
は補助プラグインを使用するために からメソッドを呼び出すだけなので、コードで同じことを行うことができます。