Matlab到C或C ++

我正在使用Matlab进行图像处理项目。 我们应该在手机上运行我们的程序(打算成为一个应用程序)。然后我们被要求将我们的代码转换为C或C ++语言,这样我们就可以了解执行需要多长时间然后选择一个平台。 到目前为止,我们还没有弄清楚如何进行这种转换..任何关于如何将Matlab转换为C或C ++的想法?

Matlab可以为您创建C代码。

请参阅: http : //www.mathworks.com/products/featured/embeddedmatlab/

但是,生成的代码依赖于matlab库。 所以你可能不能将它用于手机。 但无论如何它可能会节省你一些时间。

您需要意识到的第一件事是将代码从一种语言移植到另一种语言(特别是与Matlab和C ++不同的语言)通常是非常重要且耗时的。 您需要很好地了解这两种语言,并且您需要在两者中都有类似的设施 。 对于Matlab和C ++,Matlab为您提供了许多在没有使用库的情况下在C ++中不可用的东西。 因此,首先要确定您需要在C ++中使用哪些库。 (你可以自己写一些东西,但如果你自己写完所有东西,你会在那里待很长时间。)

如果您正在进行图像处理,我强烈建议您在http://www.itk.org上查找类似ITK的内容 – 我用C ++编写了两次图像处理软件,一次没有ITK(自己编写所有内容)和一次使用,并且使用ITK的版本更快完成,表现更好,工作乐趣十倍。 FWIW。

我还使用MATLAB Coder将由几百行MATLAB组成的函数转换为C.这包括使用MATLAB的特征值求解器和矩阵求逆函数。

尽管Coder能够生成C代码(理论上它是相同的),但它非常复杂,臃肿,无法破译,而且效率极低。 它实际上创建了大约10倍的代码行。 我最终手动转换它,以便我以后能够理解C代码并进行进一步的更改/更新。 然而,这个任务可能非常繁琐/危险,因为Matlab中的数组索引是基于1的,而C中的数组索引是基于0的。 正如我所经历的那样,您可能会在代码中添加错误。 你还必须将任何矢量/矩阵算法转换为处理标量的循环(或使用某种类型的C矩阵代数包)

MathWorks提供了一种名为MATLAB Coder的产品,声称可以生成“MATLAB®代码中可读和可移植的C和C ++代码”。 我自己没有尝试过,所以我无法评论它如何实现这些目标。

关于图像处理工具箱 , 此列表 (可能是针对R2016b)显示了已为代码生成启用了哪些function以及它们可能具有的任何限制。

Matlab有一个名为“Matlab Coder”的工具,它可以将您的matlab文件转换为C代码或mex文件。 我的代码相对简单,所以它工作正常。 加速增益大约快10倍。 这节省了我编写几百行的时间。 希望它对你也有帮助

MATLAB编码器确认快速入门指南

这些链接描述了以3个主要步骤转换代码的过程:

  • 首先,您需要对当前代码进行一些简化,以便Coder能够进行翻译。

  • 其次,您将使用该工具生成一个mex文件,并测试一切是否真的有效。

  • 最后,您将更改一些设置并生成C代码。 在我的例子中,C代码有大约700行,包括所有原始的matlab代码(大约150行)作为注释。 我认为它很可读,可以改进。 但是,无论如何,我已经从mex文件中获得了10倍的加速增益。 所以这绝对是件好事。

我们不能肯定这会在所有情况下都有效,但绝对值得一试。

我记得有一个工具可以将m文件导出为c(++) – 文件。 但我永远无法运行。 你需要在c / c ++代码中添加一些模糊的MATLAB标题,……我认为它也不推荐。

如果您已经运行了MATLAB代码,那么“手动”进行转换不需要花费太多精力。 我一直在研究几个使用MATLAB的项目,从来没有考虑使用任何工具将代码转换为C / C ++。 它总是“手工”完成。

我相信是唯一一个调查使用工具的人。

好吧,没有从matlab到c / c ++的直接转换你需要理解matlab和c / c ++之间的语言和差异,然后用c / c ++开始编码。 编码稍微测试一下,直到它工作。