Java调用Matlab

来源:互联网 发布:windows系统log 编辑:程序博客网 时间:2024/05/18 23:26
   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'; endend
    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。 


选择Library Compiler工具


填写相关信息


生成相关文件

     -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 stub        try {            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 block            e.printStackTrace();        }//这里RgbtoGray matlab = new RgbtoGray()时需要抛出异常        RgbtoGray.disposeAllInstances();    }}
 5.运行结果:可以看到函数成功地调用了Matlab函数,将图像灰度化,并且函数执行完之后成功返回了SUCCESS. 

这里写图片描述


这里写图片描述


这里写图片描述

0 0
原创粉丝点击