在Matlab中创建图形并在Java程序中显示它们

时间:2012-04-30 13:14:27

标签: java matlab graph

我需要生成矩阵图并在JSP上显示这些图。该项目是用Java开发的,到目前为止,我所有与矩阵相关的操作都是使用MatLabControl API执行的 http://code.google.com/p/matlabcontrol/

我想返回MATLAB生成的矩阵(尤其是特征值矩阵和小波)。 MATLAB提供了一个函数“im2java”,它将图形图像从MATLAB表示转换为java.awt.Image。用于获取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

这基本上结束了上述代码工作的任何希望,除非我的使用不正确。

N.B 代码确实产生了一个正确的图形,它无法在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?

1 个答案:

答案 0 :(得分: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)的文件,并返回File而不是Image。

“ - 如果它是使用Matlab,Java API或其他方式的最佳替代方案?”

Mathworks提供了一个Java api来执行您可以实现的大量线性代数计算。 http://math.nist.gov/javanumerics/jama/#Package

另外,Apache Commons Math项目提供了广泛的线性代数函数以及其他工具。 http://commons.apache.org/math/userguide/linear.html

我会查看其他帖子,了解有关java中图表的建议

constructing graphs in Java

Java Graphing Libraries for Web Applicattions?