MATLAB是否使用OpenCV CascadeClassifier?

11

我有一个关于MATLAB中的的问题。在MATLAB的源代码中,我看到:

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 的 CascadeClassifierdetectMultiScale 函数的源代码在哪里?


最新的OpenCV的detectMultiscale在这里:http://code.opencv.org/projects/opencv/repository/revisions/master/entry/modules/objdetect/src/cascadedetect.cpp#L1089 - Andrey Kamaev
1个回答

0

问题是Matlab提供以下目标检测器:

  1. 模板匹配
  2. 斑点分析
  3. 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只使用了一种算法,对吗? - EgorD
不,我不认为那是原因。我认为,原因在于使用了什么样的模板(训练数据)。 - mkuse
MATLAB和OpenCV使用相同的级联。因此问题不在训练数据中,而是在代码中。 - EgorD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接