Использует ли MATLAB OpenCv CascadeClassifier?

У меня есть вопрос о CascadeObjectDetector в MATLAB. В исходном коде CascadeObjectDetector в 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 CascadeClassifier? А где исходный код функции detectMultiScale?


person EgorD    schedule 25.09.2012    source источник
comment
Последний метод обнаружения OpenCV в OpenCV: >здесь   -  person Andrey Kamaev    schedule 26.09.2012


Ответы (1)


Дело в том, что в матлабе есть следующие детекторы объектов

  1. соответствие шаблону
  2. анализ больших двоичных объектов
  3. Алгоритм Виолы-Джонса Подробнее здесь: http://www.mathworks.ch/products/computer-vision/description4.html

Теперь поговорим об opencv. Функция opencv cv.HaarDetectObjects(), которая используется для обнаружения лиц (и вообще для обнаружения объектов), использует алгоритм альта-джонса, который, в свою очередь, использует харр-подобные функции.

Мое личное мнение, что реализации могут немного отличаться, но по сути у них один и тот же алгоритм.

Если вы все еще не уверены и хотели бы использовать функцию opencv из Matlab, вы можете использовать MEX. Таким образом, вы можете использовать cv.HaarDetectObjects() из Matlab. Дополнительные сведения доступны по адресу: http://www.mathworks.ch/discovery/matlab-opencv.html

person mkuse    schedule 01.10.2012
comment
Основная проблема в том, что версия MATLAB работает намного лучше, чем OpenCV. Например, MATLAB очень часто находит лица в солнцезащитных очках с помощью FaceCascadeDetector, но OpenCV очень редко находит лица в солнцезащитных очках. Вы думаете, это из-за того, что MATLAB использует три алгоритма, а OpenCV использует только один алгоритм, верно? - person EgorD; 08.10.2012
comment
нет, это не причина моей веры. Я считаю, что речь идет о том, какие шаблоны (данные для обучения) используются. - person mkuse; 09.10.2012
comment
MATLAB и OpenCV используют один и тот же каскад. Так что проблема не в обучающих данных, а в коде. - person EgorD; 12.03.2013