2012-09-25 15 views
10

Tengo una pregunta sobre CascadeObjectDetector en MATLAB. En el código fuente de CascadeObjectDetector en MATLAB que veo:¿MATLAB usa OpenCv CascadeClassifier?

pCascadeClassifier; % OpenCV pCascadeClassifier 

entonces veo:

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

Y en stepImpl:

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

¿Sabe usted, ¿cuál es vision.internal.CascadeClassifier? ¿Es simplemente OpenCV CascadeClassifier? ¿Y dónde está el código fuente de la función detectMultiScale?

+0

La última DeteMultiscale de OpenCV es [aquí] (http://code.opencv.org/projects/opencv/repository/revisions/master/entry/modules/objdetect/src/cascadedetect.cpp # L1089) –

Respuesta

0

La cosa es que MATLAB proporciona los siguientes detectores de objetos

  1. plantilla a juego
  2. análisis de partículas
  3. Viola-Jones algoritmo Más información aquí: http://www.mathworks.ch/products/computer-vision/description4.html

Ahora hablar de opencv. La función opencv cv.HaarDetectObjects() que se utiliza para la detección de rostros (y en general para la detección de objetos) utiliza el algoritmo de viola jones que, a su vez, utiliza las mismas características.

Mi opinión personal es que las implementaciones pueden ser ligeramente diferentes, pero básicamente tienen el mismo algoritmo.

Si aún no está convencido y le gustaría usar la función opencv de matlab, puede usar MEX. De esta forma, puede usar cv.HaarDetectObjects() desde matlab. Más detalles están disponibles en: http://www.mathworks.ch/discovery/matlab-opencv.html

+0

El principal problema es que la versión de MATLAB funciona mucho mejor que OpenCV. Por ejemplo, MATLAB encuentra rostros en gafas de sol por FaceCascadeDetector muy a menudo, pero OpenCV encuentra caras en gafas de sol muy raras. ¿Crees que esto se debe a que MATLAB utiliza tres algoritmos y OpenCV utiliza solo un algoritmo, ¿verdad? – EgorD

+0

no, no es el motivo de mi creencia. Creo que es sobre qué tipo de plantillas (datos de entrenamiento) se usan. – mkuse

+0

MATLAB y OpenCV usan la misma cascada. Entonces, el problema no está en los datos de entrenamiento, sino en el código. – EgorD

Cuestiones relacionadas