我需要生成矩阵图并在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?
答案 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中图表的建议