我正在编写一个需要调用 MATLAB 处理例程的 C# 程序。我一直在看 MATLAB 的 COM 接口。不幸的是,COM 接口在可以交换的数据类型方面似乎相当有限。支持矩阵和字符数组,但似乎不支持使用 COM 接口在 C# 和 MATLAB 之间交换结构数据或单元数组。例如,在以下代码中(假设名为 IM000000 的 DICOM 图像存在于相应的文件夹中),MATLAB 变量“img”和“header”分别是 256x256 int16 矩阵和结构。GetWorkspaceData 调用适用于“img”,但为“header”返回 null,因为“header”是一个结构。
public class MatlabDataBridge
{
MLApp.MLAppClass matlab;
public MatlabDataBridge()
{
matlab = new MLApp.MLAppClass();
}
public void ExchangeData()
{
matlab.Execute(@"cd 'F:\Research Data\'");
matlab.Execute(@"img = dicomread('IM000000');");
matlab.Execute(@"header = dicominfo('IM000000');");
matlab.GetWorkspaceData(@"img", "base", out theImg); // correctly returns a 2D array
matlab.GetWorkspaceData(@"header", "base", out theHeader); // fails, theHeader is still null
}
}
是否有合适的解决方法可以使用 COM 接口将结构数据编组到/从 MATLAB?如果不是,MATLAB Builder NE 插件是否很好地支持此功能?