В этом примере показано, как сгенерировать код С с помощью Coder™ MATLAB ® из приложений MATLAB, которые используют функции Image Processing Toolbox™. В примере описано, как настроить окружение MATLAB и подготовить код MATLAB для генерации кода .
Этот пример также демонстрирует, как решить проблемы, с которыми вы можете столкнуться в коде MATLAB, которые препятствуют генерации кода. Чтобы проиллюстрировать процесс, код, используемый в этом примере, включает некоторые проблемы готовности и создания проблем, которые вы должны преодолеть, прежде чем вы сможете сгенерировать код.
Для получения дополнительной информации о генерации кода см. документацию MATLAB Coder.
Укажите, какой компилятор C/C + + вы хотите использовать с MATLAB Coder, чтобы сгенерировать код при помощи mex
функция со -setup
опция.
mex -setup
MEX configured to use 'MinGW64 Compiler (C)' for C language compilation. To choose a different language, select one from the following: mex -setup C++ mex -setup FORTRAN
Функция точки входа является функцией MATLAB, используемой в качестве исходного кода для генерации кода. Во-первых, прототип рабочего процесса обработки изображений без поддержки генерации кода. Этот пример задает функцию, вызываемую detectCells.m
который выполняет детекцию камер с помощью сегментации и морфологических методов. Эта функция присоединена к примеру как вспомогательный файл.
Протестируйте пример кода с образцом изображения, cell.tif
.
I = imread('cell.tif');
Iseg = detectCells(I);
Подтвердите точность сегментации путем наложения сегментированного изображения на оригинальное изображение.
imshow(labeloverlay(I,Iseg))
Поскольку вы изменяете этот код для генерации кода, хорошо работать с копией кода. Этот пример включает копию вспомогательной функции detectCells.m
именованные detectCellsCodeGen.m
. Версия функции, используемой для генерации кода, включает директиву компиляции MATLAB Coder %#codegen
в конце сигнатуры функции. Эта директива предписывает анализатору кода MATLAB диагностировать проблемы, которые запретили бы успешную генерацию кода.
Откройте приложение MATLAB Coder при помощи coder
функция. (Также в MATLAB выберите вкладку Apps, перейдите к Code Generation и щелкните приложение MATLAB Coder.)
coder
Укажите имя функции точки входа, detectCellsCodeGen
, и нажмите Enter.
Нажмите кнопку Далее. MATLAB Coder определяет любые проблемы, которые могут помешать генерации кода. Пример кода содержит пять неподдерживаемых вызовов функций.
Рассмотрите вопросы готовности. Щелкните Просмотр проблем. В отчете MATLAB Coder отображает ваш код в окне редактирования с проблемами готовности, перечисленными ниже, отмечая использование imshow
функция, которая не поддерживает генерацию кода.
Решите вопросы готовности. Удалите вызовы в imshow
и связанный код отображения из вашего примера. Операторы отображения не требуются для операции сегментации. Код примера можно отредактировать непосредственно в MATLAB Coder. После удаления кода нажмите кнопку Сохранить, чтобы сохранить изменения и повторить проверку готовности. После повторного запуска проверки готовности MATLAB Coder отображает сообщение No issues found.
Каждый вход в ваш код должен быть задан таким образом, чтобы он был фиксированного размера, переменного размера или константы. Существует несколько способов задать размер вашего входного параметра, но самый легкий способ - дать MATLAB Coder пример вызова вашей функции. Введите скрипт, который вызывает функцию в поле ввода текста. В данном примере введите следующий код в подсказку MATLAB и нажмите клавишу Autodefine Input Types.
I = imread('cell.tif');
Iseg = detectCellsCodeGen(I);
Для получения дополнительной информации об определении входов см. документацию MATLAB Coder. После возвратов MATLAB Coder с определением типа входа нажмите кнопку Далее.
Несмотря на то, что вы выполнили проверку готовности MATLAB Coder, в процессе сборки могут возникнуть дополнительные проблемы, которые могут предотвратить генерацию кода. В то время как проверки готовности рассматривают зависимости функции, чтобы определить готовность, процесс сборки исследует шаблоны кодирования. Можно использовать тот же код, который был введен для определения типов входа (который предварительно загружается в диалоговое окно). Нажмите Проверить на проблемы.
Этот пример содержит проблему сборки: он передает массив strel
объекты к imdilate
и массивы объектов не поддерживаются для генерации кода.
Устраните выявленные проблемы сборки. В данном примере измените вызов на imdilate
чтобы избежать передачи массива объектов strel. Замените один вызов на imdilate
с двумя отдельными вызовами для imdilate
где вы передаете один объект strel при каждом вызове.
Перезапустите тестовую сборку, чтобы убедиться, что изменения исправили проблему. Нажмите Проверить на проблемы. MATLAB Coder отображает сообщение об отсутствии обнаруженных проблем.
Теперь вы готовы сгенерировать код. Нажмите кнопку Далее.
Выберите тип кода, который вы хотите сгенерировать, и выберите целевую платформу. MATLAB Coder может генерировать исходный код C или C++, файл MEX, статическую библиотеку, общую библиотеку или независимый исполняемый файл. Для производственного оборудования можно выбрать несколько вариантов, включая процессоры ARM и Intel.
Этот пример использует опции по умолчанию. Тип сборки - Source Кода а язык - C. Для опций устройства укажите типовое устройство от поставщика устройства и Хоста-компьютера MATLAB для типа устройства. Когда вы выбираете MATLAB Host Computer, MATLAB Coder генерирует код, который зависит от предварительно скомпилированной общей библиотеки. Функции Image Processing Toolbox используют общую библиотеку для сохранения оптимизации эффективности.
Щелкните Сгенерировать (Generate)
MATLAB Coder отображает сгенерированный код.
Нажмите кнопку Далее, чтобы завершить процесс. MATLAB Coder отображает информацию о том, что он сгенерировал. По умолчанию MATLAB Coder создает codegen
подпапка в рабочей папке, содержащая сгенерированные выходы.
codegen
(MATLAB Coder) | MATLAB Coder (MATLAB Coder)