如何将 MATLAB 中的 detectMSERFeatures 函数转换为 C?

Posted

技术标签:

【中文标题】如何将 MATLAB 中的 detectMSERFeatures 函数转换为 C?【英文标题】:How to convert detectMSERFeatures function in MATLAB to C? 【发布时间】:2016-02-04 05:16:12 【问题描述】:

我编写了一个计算机视觉代码,它使用 MSER 来检测 MATLAB 中的特征。我使用内置的“detectMSERFeatures”功能来处理本地保存的视频。现在,我想使用 MATLAB Coder 将它移植到 C 语言中。但是,MATLAB Coder 不支持此功能。我附上了输出的截图。任何帮助将不胜感激。

我的代码如下:

function count = master
% Clear workspace and Initialize Frame count
clear all;
F=0;
count=0;
% 1.Input Video Object Handler Definition
inputVideo = vision.VideoFileReader('video.mp4');
videoPlayer = vision.VideoPlayer;

% 2.Cropping Height and Width of frame. Subject to convenient
%   adjustments according to the position of camera. Mainly using to
%   crop out street lights from the top of the frame.
height = floor(inputVideo.info().VideoSize(2)*0.7);
width = inputVideo.info().VideoSize(1);
crop = vision.ImagePadder(...
                        'SizeMethod','Output size', ...
                        'NumOutputRowsSource','Property', ...
                        'RowPaddingLocation','Top', ...
                        'NumOutputRows', height, ...
                        'NumOutputColumns', width);

% 3.Frame Conversion from True Colour to Grayscale
gray = vision.ColorSpaceConverter;
gray.Conversion = 'RGB to intensity';

% 4.Implementation on individual frames till the end of video.
while(~isDone(inputVideo))
% Current Frame number
F = F + 1;
%flag=0
% Current Frame
currentFrame = step(inputVideo);
% Crop
currentFrame = step(crop, currentFrame);
% Convert to Grayscale
currentFrame = step(gray, currentFrame);
% Threshold
currentFrame(currentFrame<0.7843) = 0;
% Detect MSER Regions
regions = detectMSERFeatures(currentFrame, ...
                            'RegionAreaRange', [800 3000], ...
                            'ThresholdDelta', 4);
% Check for 'big bright blob(s)', or high incoming beam
% and output detected blob count and corresponding frame
if(regions.Count >= 2 && regions.Count <=6)
    disp([regions.Count, F]);
    %flag=1;
    count= count+1;

end
% Port frame to player
step(videoPlayer,currentFrame);
end

%5.Release both player and video file instances
release(inputVideo);
release(videoPlayer);

我正在使用 MATLAB R2013a。

【问题讨论】:

Docs 说它支持使用“平台特定的预编译库”生成代码。你有什么问题?一些错误?哪个? "对于代码生成,函数将regions.PixelList输出为一个数组。区域大小在regions.Lengths中定义。" 你能贴出代码吗?正如@Ander 指出的那样,Coder 支持它,但有一些限制。另外,您使用的是什么版本的 Matlab? 【参考方案1】:

解决此问题的唯一方法是升级到更新版本的 MATLAB。 R2013b 版本中添加了对detectMSERFeatures 的代码生成支持。

【讨论】:

以上是关于如何将 MATLAB 中的 detectMSERFeatures 函数转换为 C?的主要内容,如果未能解决你的问题,请参考以下文章

如何将lingo中的程序在matlab中运行

怎样将matlab中的数据导出

如何将 Maple 中的符号变量导出到文本文件(Matlab 格式)?

如何将 libreoffice 中的数据导入 Matlab

如何将 MATLAB 中的 detectMSERFeatures 函数转换为 C?

如何将matlab中的坐标系进行旋转