3

我需要生成矩阵图并在 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

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

注意代码确实生成了正确的图形,但无法在 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)的文件,并返回 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 中绘图的建议

用 Java 构建图

用于 Web 应用程序的 Java 图形库?

于 2012-05-04T23:28:54.157 回答