2

我正在尝试从 C# 调用一个 MATLAB 函数,具体使用MLApp类,feval函数。

由于我是初学者,我浏览了互联网并找到了调用 MATLAB 函数的帮助。我只是简单地调用了一个 MATLAB 函数,它以两个整数作为输入,MATLAB 正确地返回和和差。但我真正需要这样做的原因是将图像发送到 MATLAB 函数并执行一些分析。

到目前为止,我还没有在互联网上找到任何有用的东西。如果可以,可以使用此类将图像传递给 MATLAB 函数吗?如果不是还有什么其他方法?

MATLAB

function [x,y] = myfunc(a,b) 
  x = a + b; 
  y = a-b;

C#

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();
4

1 回答 1

2

一种简单的方法是将图像从 C# 应用程序保存到磁盘,然后调用 MATLAB(如您所示使用COM 自动化)通过将文件名作为字符串传递给图像处理函数来评估您的图像处理函数。MATLAB 函数会简单地按名称加载图像,对其进行处理,然后将结果另存为另一个图像。然后将输出图像的路径从您的 MATLAB 函数返回到 C#,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您还可以使用和函数在 C# 和 MATLAB COM 服务器之间传递数据GetFullMatrix。图像将只是一个数值矩阵。请记住,MATLAB 以列优先顺序存储数组。

这是一个示例代码,展示了如何在 C# 中从 MATLAB 工作区检索变量:https ://stackoverflow.com/a/21123727/97160


第三种选择是使用MATLAB Compiler SDK工具箱。这使您可以将 MATLAB 函数编译/打包成 .NET 程序集,该程序集可以在没有 MATLAB 的机器上使用(需要 MCR 运行时)。

于 2016-04-09T20:14:20.270 回答