您的位置:首页 > 编程语言 > MATLAB

Java调用Matlab

2016-07-24 23:30 615 查看
Matlab和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
Matlab给我们提供了许多强大的功能,在新的版本中也加入了对C,C++,Java,Fortran的支持,下面就简单介绍一下如何利用MATLAB的Compiler工具实现Matlab和Java的混合编程。
主要思路如下:利用MATLAB的Compiler工具将MATLAB函数编译成.jar文件,在Eclipse中实现对.jar文件中函数的调用,以此实现MATLAB和JAVA的混合编程。

1.环境配置要求:运行机器上必须装有JRE并且版本要和MatLab(Matlab这里用的是2016a版本)自带的JRE版本保持一致。在Matlabd的Command Windows中输入【version -java】以及打开cmd 分别输入命令【java -version】和【javac -version】分别验证编译和运行版本。
2.在Matlab中新建一个函数文件,编写需打包成.jar到的Matlab函数并保存,这里以一个rgbtogray()函数为例。
代码如下:
function [status] = rgbtogray( file_path )

%函数功能:rgbtogray()这个函数将D:\matlab_java_test\目录下的所有.jpg文件转化为灰度图,
%并且显示出来,之后将得到的灰度图改名存放在原来的目录下

%status:函数返回值,若成功处理图片,放回SUCCESS;
%file_path:输入参数,要处理的图片所在的路径

img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中所有jpg格式的图像
photo_num = length(img_path_list);%获取该文件夹中所有jpg格式的图像的数量
disp('The number of pictures ');
fprintf('%d \n',photo_num);% 显示图像数量

if photo_num > 0 %.jpg的图像存在
for j = 1:photo_num

image_name = img_path_list(j).name;% 图像名
image =  imread(strcat(file_path,image_name));
Image = rgb2gray(image);%调用matlab原有函数将图片转化为灰度图
imshow(Image);
imwrite(Image,strcat('D:\matlab_java_test\new',image_name,'.jpg'));%保存图片
pause(2);%暂停两秒,用来显示图像
end
close all; %由于出来好多个figure,一键关闭
status = 'SUCCESS';
end

end
3.在Matlab下选择应用程序,使用Library Compiler工具得到Matlab函数的.jar文件。打开Library Compiler工具后,选择Java Package,再点击+号,选择要打包的.m文件,填写修改相关的信息,红框4显示的是打包成.jar文件后里面包含的类以及方法的名称,信息可以根据自己需要更改,最后单击Package。生成的文件我存放在D盘下,可以看到有四个主要的部分,for_redistribution文件,for_redistribution_files_only文件,for_testing文件以及PackagingLog.txt。
     -for_redistribution包含用于安装应用程序和MATLAB Runtime的文件,可以将这份文件复制到没有安装Matlab的电脑上,安装该文件,在安装过程中会提示要安装独立的共享库MATLAB Runtime,安装之后不需要Matlab也可以运行编译后的Matlab的程序或者元件(The MATLAB Runtime is a standalone set of shared libraries that enables the execution of compiled MATLAB applications or components on computers that do not have MATLAB installed)。-for_redistribution_files_only文件夹包含应用程序的重新发布所需的文件。这些文件可以分发到那些有MATLAB或者有 MATLAB Runtime 的用户的电脑上。-for_testing文件夹包含创建的所有由MCC创建的文件,像二进制文件和jar,头和源文件,使用这些文件来测试安装。-PackagingLog.txt是由编译器生成的日志文件。如果.jar库中的内容不熟悉也可以找到doc下的html文件夹,打开index.html,里面有Javadoc参考资料。
    4.打开Eclipse,新建一个Java Project,命名为TestMatlab,新建一个类命名为Test,然后把生成的.jar文件(如rgbtogray.jar)复制到该工程下,除此之外,还要将另外一个.jar文件复制到该工程下,该文件是javabuilder.jar,在<mcr_root>*\toolbox\javabuilder\jar\win64\javabuilder.jar目录下可以找到,<mcr_root>*是MATLAB的安装目录或者MATLAB Runtime的安装目录,这两个目录下均可以找到toolbox\javabuilder\jar\win64\javabuilder.jar。将.jar文件复制到TestMatlab工程下之后,选中该工程,单击file,选择Properties,选择Java Build Path,选择Libraries,选择ADD JARs,再将需要的.jar添加进去。
   5.编写Java测试代码,代码如下:
import com.mathworks.toolbox.javabuilder.MWException;import rgbtogray.RgbtoGray;//status :函数返回值存放于status//status = matlab.rgbtogray(1,"D:\\matlab_java_test\\")//1代表原来函数需要的参数个数为1//"D:\\matlab_java_test\\"代表原来函数中的file_path参数public class Test {public static void main(String[] args) {// TODO Auto-generated method stubtry {RgbtoGray matlab = new RgbtoGray();Object[] status ;status = matlab.rgbtogray(1,"D:\\matlab_java_test\\");for(Object i:status)System.out.println(i);} catch (MWException e) {// TODO Auto-generated catch blocke.printStackTrace();}//这里RgbtoGray matlab = new RgbtoGray()时需要抛出异常RgbtoGray.disposeAllInstances();}}
 5.运行结果:可以看到函数成功地调用了Matlab函数,将图像灰度化,并且函数执行完之后成功返回了SUCCESS.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息