Matlab для C или C ++ - PullRequest
       3

Matlab для C или C ++

21 голосов
/ 12 ноября 2010

Я работаю над проектом обработки изображений с использованием Matlab. Мы должны запустить нашу программу (которая должна быть приложением) на мобильном телефоне. Затем нас попросили преобразовать наш код в язык C или C ++, чтобы мы почувствовали, сколько времени потребуется для выполнения, а затем выбрали платформу. До сих пор мы не выяснили, как сделать это преобразование. Есть идеи, что делать, чтобы преобразовать Matlab в C или C ++ ??

Ответы [ 7 ]

12 голосов
/ 12 ноября 2010

Первое, что вам нужно понять, это то, что перенос кода с одного языка на другой (особенно на такие разные языки, как Matlab и C ++), как правило, нетривиален и отнимает много времени.Вам нужно хорошо знать оба языка, и вам нужно иметь одинаковые возможности в обоих .В случае Matlab и C ++, Matlab дает вам много вещей, которые вы просто не сможете использовать в C ++ без использования библиотек.Поэтому первое, что нужно сделать, - это определить, какие библиотеки вам нужно использовать в C ++.(Вы можете написать некоторые вещи самостоятельно, но вы будете там долго, если сами напишите все .)

Если вы занимаетесь обработкой изображений, я оченьрекомендую посмотреть что-то вроде ITK на http://www.itk.org - я написал свое программное обеспечение для обработки изображений дважды на C ++, один раз без ITK (сам все кодирую) и один раз, и версия, которая использовала ITK, была закончена быстреелучше и было в десять раз веселее работать.FWIW.

12 голосов
/ 12 ноября 2010

Matlab может получить код C для вас.

См: http://www.mathworks.com/products/featured/embeddedmatlab/

Однако сгенерированный код зависит от библиотек matlab. Таким образом, вы, вероятно, не можете использовать его для мобильного телефона. Но в любом случае это может сэкономить вам время.

6 голосов
/ 13 марта 2013

Я также использовал MATLAB Coder для преобразования некоторых функций, состоящих из нескольких сотен строк MATLAB, в C. Это включало использование решателя собственных значений MATLAB и функций инверсии матрицы.

Несмотря на то, что Coder смог создать C-код (который теоретически был идентичен), он был очень запутанным, раздутым, невозможно расшифровать и оказался крайне неэффективным. Он буквально создал примерно в 10 раз больше строк кода, чем это необходимо. Я закончил преобразование всего этого вручную, чтобы впоследствии я мог понять код C и внести дальнейшие изменения / обновления. Эта задача, однако, может быть очень утомительной / опасной, поскольку индексирование массива в Matlab основано на 1, а в C - на 0. Вы, вероятно, добавите ошибки в код, как я понял. вам также нужно будет преобразовать любую векторную / матричную арифметику в циклы, которые обрабатывают скаляры (или использовать какой-либо тип алгебраической матрицы C)

5 голосов
/ 06 мая 2011

MathWorks предоставляет продукт под названием MATLAB Coder , который утверждает, что генерирует «читаемый и переносимый код C и C ++ из кода MATLAB®».Я сам не пробовал, поэтому не могу комментировать, насколько хорошо он достигает этих целей.

Что касается Инструментов обработки изображений , этот список (предположительно для R2016b) показывает, какие функции были включены для генерации кода и какие могут быть ограничения.

2 голосов
/ 13 марта 2014

Matlab имеет инструмент под названием «Matlab Coder», который может конвертировать ваш файл Matlab в C-код или мекс-файл.Мой код относительно прост, поэтому он отлично работает.Усиление ускорения примерно в 10 раз быстрее.Это экономит мне время на кодирование нескольких сотен строк.Надеюсь, что это также полезно для вас

Краткое руководство по подтверждению кодера MATLAB

Ссылки описывают процесс преобразования вашего кода в 3 основных этапа:

  • Сначала вам нужно сделать несколько упрощений в вашем нынешнем коде, чтобы кодировщик мог достаточно просто перевести.

  • Во-вторых, вы будете использоватьинструмент для генерации mex-файла и проверки работоспособности всего.

  • Наконец, вы должны изменить некоторые настройки и сгенерировать C-код.В моем случае код C имеет около 700 строк, включая весь исходный код matlab (около 150 строк) в качестве комментариев.Я думаю, что это вполне читабельно и может быть улучшено.Тем не менее, я все равно получаю ускорение в 10 раз из файла mex.Так что это определенно хорошая вещь.

Мы не можем быть уверены, что это сработает во всех случаях, но это определенно стоит попробовать.

1 голос
/ 12 ноября 2010

Я помню, есть инструмент для экспорта m-файлов в виде c (++) - файлов. Но я никогда не мог заставить это работать. Вам нужно добавить некоторые неясные заголовки MATLAB в код c / c ++, ... И я думаю, что это тоже не рекомендуется.

Если у вас запущен MATLAB-код, не нужно слишком много усилий, чтобы выполнить преобразование «вручную». Я работал над несколькими проектами, где использовался MATLAB, и никогда не предполагалось использовать какие-либо инструменты для преобразования кода в C / C ++. Это всегда делалось «вручную».

Я считаю, что был единственным, кто когда-либо занимался расследованием использования инструмента.

0 голосов
/ 12 ноября 2010

Ну, нет прямого преобразования из matlab в c / c ++. Вам нужно будет понять язык и различия между matlab и c / c ++, а затем начать кодировать его в c / c ++. Код немного проверить, пока он не заработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...