我试图使用MLApp
类,feval
函数专门从C#调用MATLAB函数。
由于我是初学者,我通过互联网查看并找到了调用MATLAB函数的帮助。我只是简单地调用一个MATLAB函数,该函数将两个整数作为输入,MATLAB正确地返回求和和差值。但我真正需要这样做的原因是将图像发送到MATLAB函数并执行一些分析。
到目前为止,我还没能通过互联网找到任何有用的东西。如果是这样的话,可以用这个类将图像传递给MATLAB函数吗?如果没有其他方式吗?
function [x,y] = myfunc(a,b)
x = a + b;
y = a-b;
MLApp.MLApp matlab = new MLApp.MLApp();
matlab.Execute(@"cd 'D:\Program Files\MATLAB\MATLAB Production Server\R2015a\bin'");
object result = null;
matlab.Feval("myfunc", 2, out result, 3, 2);
object[] res = result as object[];
Console.WriteLine(res[0]);
Console.WriteLine(res[1]);
Console.ReadLine();
答案 0 :(得分:1)
一种简单的方法是将图像从C#应用程序保存到磁盘,然后调用MATLAB(使用COM Automation作为shown)来通过传递它来评估图像处理功能文件名为字符串。 MATLAB函数只需按名称加载图像,处理它,并将结果保存为另一个图像。然后将输出图像的路径从MATLAB函数返回到C#,最终将其自行读取..
所以在C#中你会做类似的事情:
static void Main(string[] args)
{
var img = ...; // image data
string input_image = @"C:\path\to\image.png";
save_image(img, input_image); // save your image to disk
MLApp.MLApp matlab = new MLApp.MLApp();
object result = null;
matlab.Feval("my_processing_func", 1, out result, image);
object[] res = result as object[];
string output_image = (string) res[0];
var img_processed = load_image(output_image); // load image from disk
}
在MATLAB方面,该函数执行如下操作:
function out_fname = my_processing_func(in_fname)
% read input image
img = imread(in_fname);
% ... apply some image processing functions
img = process(img);
% write resulting image to disk
out_fname = [tempname() '.png'];
imwrite(img, out_fname);
end
您还可以使用PutFullMatrix
和GetFullMatrix
函数在C#和MATLAB COM服务器之间传递数据。图像只是一个数值矩阵。请记住,MATLAB按列主要顺序存储数组。
下面是一个示例代码,演示如何从C#中的MATLAB工作区检索变量:https://stackoverflow.com/a/21123727/97160
第三种选择是使用MATLAB Compiler SDK工具箱。这使您可以将MATLAB函数编译/打包到.NET程序集中,该程序集可以在没有MATLAB的机器上使用(需要MCR运行时)。