MATLAB 是不是使用 OpenCv CascadeClassifier?

Posted

技术标签:

【中文标题】MATLAB 是不是使用 OpenCv CascadeClassifier?【英文标题】:Does MATLAB use OpenCv CascadeClassifier?MATLAB 是否使用 OpenCv CascadeClassifier? 【发布时间】:2012-09-17 02:14:11 【问题描述】:

我对 MATLAB 中的 CascadeObjectDetector 有疑问。在 MATLAB 中CascadeObjectDetector 的源代码中,我看到:

pCascadeClassifier; % OpenCV pCascadeClassifier 

然后我看到了:

%------------------------------------------------------------------
% Constructor
%------------------------------------------------------------------
function obj = CascadeObjectDetector(varargin)              
    obj.pCascadeClassifier = vision.internal.CascadeClassifier;
    ...
end

stepImpl:

bbox = double(obj.pCascadeClassifier.detectMultiScale(I, ...
            double(obj.ScaleFactor), ...
            uint32(obj.MergeThreshold), ...            
            uint32(obj.MinSize), ...
            uint32(obj.MaxSize)));

你知道vision.internal.CascadeClassifier是什么吗?仅仅是 OpenCV CascadeClassifier 吗? detectMultiScale函数的源代码在哪里?

【问题讨论】:

最新OpenCV的detectMultiscale是here 【参考方案1】:

问题是matlab提供了以下对象检测器

    模板匹配 斑点分析 viola-jones 算法 更多信息在这里:http://www.mathworks.ch/products/computer-vision/description4.html

现在谈谈opencv。用于人脸检测(通常用于对象检测)的 opencv 函数 cv.HaarDetectObjects() 使用 viola jones 算法,该算法又使用类似 harr 的特征。

我个人的看法是,实现可能略有不同,但它们本质上具有相同的算法。

如果您仍然不相信并想使用 matlab 中的 opencv 函数,您可以使用 MEX。因此,您可以使用 matlab 中的 cv.HaarDetectObjects()。更多详情请访问:http://www.mathworks.ch/discovery/matlab-opencv.html

【讨论】:

主要问题是MATLAB版本比OpenCV好很多。例如,MATLAB 经常通过 FaceCascadeDetector 在太阳镜中找到人脸,但 OpenCV 在太阳镜中发现人脸非常罕见。你认为这是因为 MATLAB 使用了三种算法,而 OpenCV 只使用了一种算法,对吧? 不,这不是我相信的原因。我相信,它是关于使用什么样的模板(训练数据)。 MATLAB 和 OpenCV 使用相同的级联。所以问题不在于训练数据,而在于代码。

以上是关于MATLAB 是不是使用 OpenCv CascadeClassifier?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 中提高 OpenCV 人脸检测性能?

Matlab 到 Opencv 的转换问题

尝试使用opencv harcascade文件查找人脸检测,但x,y,w,h值为空[关闭]

在 Matlab 中使用 OpenCV:mex 找不到头文件

来自opencv和Matlab的Sobel滤波器输出不同

基于OpenCV立体视觉标定和校正