将Matlab转换为C或C++

22

我正在使用Matlab进行图像处理项目。我们需要在手机上运行我们的程序(打算做成一个应用)。然后我们被要求将我们的代码转换为C或C++语言,以便了解执行所需的时间,并选择平台。到目前为止,我们还没有找到如何进行此转换的方法。你有什么关于将Matlab转换为C或C++的想法吗?


5
此问题无法回答。唯一的解决方法是将您特定的算法重写为C或C ++。 - Chinmay Kanchi
2
@ChinmayKanchi 不,这个问题肯定是可以回答的。你可以使用 Matlab Coder 将一些 Matlab 程序自动转换成 C 或 C++。 - Anderson Green
Matlab Coder 做得不好。每次尝试运行 c 代码时都会出现错误。 - THEODORE
7个回答

15
首先需要认识到的是,将代码从一种语言移植到另一种语言(尤其是像Matlab和C++这样截然不同的语言)通常是非常复杂和耗时的。你需要熟悉两种语言,并且需要在两种语言中都有类似的工具。在Matlab和C++的情况下,Matlab为你提供了很多东西,在C++中没有使用库的情况下是无法获得的。因此,第一件事是确定你将需要在C++中使用哪些库。(你可以自己编写一些东西,但如果你要全部自己编写,那么你会花费很长时间。)
如果你正在进行图像处理,我强烈建议你看看类似ITKhttp://www.itk.org这样的东西 - 我已经用C++编写了两次我的图像处理软件,一次没有使用ITK(自己编写所有代码),一次使用了ITK。使用ITK的版本完成得更快,性能更好,而且更有趣。

顺便提一下,ITK 看起来似乎只是用于分割和配准,但实际上它也非常适合一般的图像处理。 - Stuart Golodetz

12

点击此处链接以获取按字母顺序或类别排序的列表 http://www.mathworks.co.uk/help/toolbox/eml/ug/bsud5f4.html - learnvst

8
我还使用MATLAB Coder将一些由几百行MATLAB组成的函数转换为C。这包括使用MATLAB的特征值求解器和矩阵求逆函数。
尽管编码器能够生成C代码(理论上是相同的),但它非常复杂、臃肿、难以理解,并且似乎效率极低。它实际上创建了大约10倍于所需的代码行数。最终,我不得不手动转换所有内容,以便以后能够理解C代码并进行进一步的更改/更新。然而,这项任务可能非常繁琐/危险,因为Matlab中的数组索引是基于1的,而在C中则是基于0的。你很可能会在代码中添加错误,就像我经历过的那样。你还需要将任何向量/矩阵算术转换为处理标量的循环(或使用某种类型的C矩阵代数包)。

5

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

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


2
Matlab有一个名为“Matlab Coder”的工具,可以将您的matlab文件转换为C代码或mex文件。我的代码相对简单,所以它运行良好。加速增益大约快了10倍。这节省了我编写几百行代码的时间。希望这对您也有帮助。
以下链接描述了将代码转换为3个主要步骤: 1.首先,您需要在现有代码中进行一些简化,以使其足够简单,以便Coder进行翻译。 2.其次,您将使用该工具生成一个mex文件并测试是否实际工作。 3.最后,您需要更改一些设置并生成C代码。在我的情况下,C代码包括所有原始matlab代码(大约150行)作为注释,总共约700行。我认为它很容易阅读,并且可以进一步改进。但是,我已经从mex文件中获得了10倍的加速增益。所以这绝对是一件好事。
我们不能确定这在所有情况下都有效,但肯定值得一试。此外,您可以参考MATLAB Coder确认的快速入门指南来了解转换过程。

1

我记得有一种工具可以将m文件导出为c(++)文件。但我从未能够运行它。您需要在c/c++代码中添加一些晦涩的MATLAB头文件,...而且我认为这也不被推荐。

如果您有运行中的MATLAB代码,手动转换应该不需要太多的努力。我曾经参与过几个使用MATLAB的项目,从来没有考虑过使用任何工具将代码转换为C/C++。它总是“手工完成”的。

我相信我是唯一一个曾经研究过使用工具的人。


0

从Matlab到C/C++并没有直接的转换方式。你需要了解这两种语言之间的差异,然后开始用C/C++编写代码。一边编码一边测试,直到它能够正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接