Этот пример показывает, как использовать MATLAB® Coder™, чтобы сгенерировать код С для функции MATLAB, которая использует объект stereoParameters
, произведенный приложением Stereo Camera Calibrator или функцией estimateCameraParameters
. Пример объясняет, как изменить код MATLAB по Оценке Глубины От Видео примера Стерео, чтобы поддержать генерацию кода.
Этот пример требует лицензии MATLAB Coder.
Можно узнать об основах генерации кода, использующей MATLAB® Coder™ от Введения до Генерации кода с примером Соответствия и Регистрации Функции.
MATLAB Coder требует, чтобы код MATLAB был в форме функции в порядке сгенерировать код С. Кроме того, аргументы функции не могут быть объектами MATLAB.
Это представляет проблему для генерации кода из кода MATLAB, который использует cameraParameters
или объекты stereoParameters
, которые обычно создаются заранее во время калибровки фотоаппарата. Чтобы решить эту проблему, используйте метод toStruct()
, чтобы преобразовать cameraParameters
или объект stereoParameters
в struct. Struct может затем быть передан в сгенерированный код.
Реструктурированный код для основного алгоритма Оценки Глубины От Видео примера Стерео находится в функции, вызванной depthEstimationFromStereoVideo_kernel.m. Обратите внимание на то, что depthEstimationFromStereoVideo_kernel
является функцией, которая берет struct, созданный из объекта stereoParameters
. Обратите внимание также, что это не отображает восстановленное 3-D облако точек, потому что showPointCloudFunction
не поддерживает генерацию кода.
Загрузите объект stereoParameters
, который является результатом калибровки камеры с помощью или приложения stereoCameraCalibrator
или функции estimateCameraParameters
.
% Load the stereoParameters object. load('handshakeStereoParams.mat'); % Visualize camera extrinsics. showExtrinsics(stereoParams); % Convert the object into a struct, which can be passed into generated % code. stereoParamsStruct = toStruct(stereoParams);
На Macintosh, видении. VideoFileReader не поддерживает генерацию кода для чтения сжатого видео. Распакуйте видеофайлы и сохраните их во временной директории.
if strcmp(computer(), 'MACI64') % Uncompress the left video. videoFileLeft = 'handshake_left.avi'; reader = vision.VideoFileReader(videoFileLeft); writer = vision.VideoFileWriter(videoFileLeft); while ~isDone(reader) frame = step(reader); step(writer, frame); end release(reader); release(writer); % Uncompress the right video. videoFileRight = 'handshake_right.avi'; reader = vision.VideoFileReader(videoFileRight); writer = vision.VideoFileWriter(videoFileRight); while ~isDone(reader) frame = step(reader); step(writer, frame); end release(reader); release(writer); end
Используйте функцию codegen, чтобы скомпилировать функцию depthEstimationFromStereoVideo_kernel
в файл MEX. Можно задать '-отчет' опция, чтобы сгенерировать отчет компиляции, который показывает оригинальный код MATLAB и связанные файлы, которые были созданы во время генерации кода C. Можно хотеть создать временную директорию, где MATLAB Coder может хранить сгенерированные файлы. Обратите внимание на то, что сгенерированный файл MEX имеет то же имя как исходный файл MATLAB с добавленным _mex, если вы не используете-o опцию, чтобы задать имя исполняемого файла.
MATLAB Coder требует, чтобы вы задали свойства всех входных параметров. Один простой способ сделать это должно задать входные свойства на примере в командной строке с помощью-args опции. Для получения дополнительной информации смотрите Входную Спецификацию.
% Define the properties of input struct. compileTimeInputs = {coder.typeof(stereoParamsStruct)}; % Generate code. codegen depthEstimationFromStereoVideo_kernel -args compileTimeInputs;
player = vision.VideoPlayer('Position', [100 200 750 560]); eofReached = false; while ~eofReached [eofReached, dispFrame] = depthEstimationFromStereoVideo_kernel_mex(stereoParamsStruct); % Hold the last frame. if ~eofReached step(player, dispFrame); end end
clear depthEstimationFromStereoVideo_kernel_mex;
release(player);
Этот пример показал, как сгенерировать код С из кода MATLAB, который берет cameraParameters
или объект stereoParameters
, как введено.