3

行列のグラフを作成し、これらのグラフを JSP に表示する必要があります。プロジェクトは Java で開発されており、これまでのところ、行列に関連するすべての操作は MatLabControl API http://code.google.com/p/matlabcontrol/を使用して実行されています。

MATLAB によって生成された行列 (特に固有値行列とウェーブレット) を返したかったのです。MATLAB は、グラフ イメージを MATLAB 表現から java.awt.Image に変換する関数 "im2java" を提供します。MatlabControl で画像データを取得するために使用したコードは次のとおりです。

public Image produceEigenValueGraph(final double [][] matrix) {
final double [][] maxEigenValueMatrix =
            extractOutMaxEigenValues(matrix);
    Image matlabPlotImage = null;
    try {
        MatlabNumericArray matLabEigenValueMatrix =
                new MatlabNumericArray(maxEigenValueMatrix, null);
        matLabTypeConverter.setNumericArray("eigen", 
                                            matLabEigenValueMatrix);
        matLabProxy.setVariable("amountOfTime", matrix.length - 1);
        matLabProxy.eval("time");
        matLabProxy.eval("plot(time, eigen)");
        matLabProxy.eval("frame=getframe");
        final Object [] returnedMatlabArguements =
                matLabProxy.returningEval("im2java(frame.cdata)", 1);
        matlabPlotImage =
                (Image)returnedMatlabArguements[0];
    } catch (MatlabInvocationException mie) {
        mie.printStackTrace();
    }
    return matlabPlotImage;
}

このコードは、ネストされた例外を返します。

Caused by: java.io.WriteAbortedException: writing aborted; 
java.io.NotSerializableException: sun.awt.image.ToolkitImage

私の使い方が間違っていない限り、これは基本的に上記のコードが機能するという希望に終止符を打ちます。

NBコードは正しいグラフを生成しますが、java.awt.Image でそれを返すことができません。

私の質問は次のとおりです。

    -Is the above code the correct/only way to return images to a java program from Matlab?
    -If it is what would be the best alternatives to using Matlab, Java API or otherwise?
4

1 に答える 1

0

これは例外の原因となる行ですか?

matlabPlotImage = (Image)returnedMatlabArguements[0];

あなたの質問に答えて

「-上記のコードは、MatlabからJavaプログラムに画像を返す正しい/唯一の方法ですか?」

MatlabからJavaクラスを呼び出すことができるので、MatlabファイルでJavaを使用し、それを呼び出して置き換えることもできます

final Object [] returnedMatlabArguements = matLabProxy.returningEval("im2java(frame.cdata)", 1);
matlabPlotImage = (Image)returnedMatlabArguements[0];

Imageはシリアル化できないため、エラーがスローされます。オプションとして、matlabまたはjavaのいずれかを使用して、画像形式(jpg、png、tiff)でファイルとして保存し、Imageの代わりにFileを返すこともできます。

「-それがMatlab、Java API、またはその他を使用するための最良の代替手段であるとしたら?」

Mathworksは、実装可能な多数の線形代数計算を実行するためのJavaAPIを提供します。 http://math.nist.gov/javanumerics/jama/#Package

あるいは、Apache Commons Mathプロジェクトは、さまざまな線形代数関数やその他のツールを提供します。http://commons.apache.org/math/userguide/linear.html

Javaでのグラフ化に関する提案については、他の投稿を確認します

Javaでグラフを作成する

Webアプリケーション用のJavaグラフライブラリ?

于 2012-05-04T23:28:54.157 に答える