Paramétrage du HOGDescriptor dans OpenCV pour l'extraction de caractéristiques

La classe HOGDescriptor d'OpenCV encapsule l'extraction de caractéristiques HOG (Histograms of Oriented Gradients), couramment utilisée pour la détection de piétons. Ce document détaille les paramètres clés de cette classe, fournit des exemples de code et explique le calcul de la dimension du descripteur.

Constructeurs de HOGDescriptor

La classe offre plusieurs construceturs. Le premier sans paramètres initialise les valeurs par défaut :

CV_WRAP HOGDescriptor() : tailleFenetre(64,128), tailleBloc(16,16), pasBloc(8,8),
    tailleCellule(8,8), nbBins(9), ouvertureDerivation(1), sigmaFenetre(-1),
    typeNorme(HOGDescriptor::L2Hys), seuilL2Hys(0.2), correctionGamma(true),
    nombreNiveaux(HOGDescriptor::DEFAULT_NLEVELS)
{}

Le constructeur paramétré permet une configuration personnalisée :

CV_WRAP HOGDescriptor(Size _tailleFenetre, Size _tailleBloc, Size _pasBloc,
    Size _tailleCellule, int _nbBins, int _ouvertureDerivation=1, double _sigmaFenetre=-1,
    int _typeNorme=HOGDescriptor::L2Hys, double _seuilL2Hys=0.2, bool _correctionGamma=false,
    int _nombreNiveaux=HOGDescriptor::DEFAULT_NLEVELS)
: tailleFenetre(_tailleFenetre), tailleBloc(_tailleBloc), pasBloc(_pasBloc), tailleCellule(_tailleCellule),
nbBins(_nbBins), ouvertureDerivation(_ouvertureDerivation), sigmaFenetre(_sigmaFenetre),
typeNorme(_typeNorme), seuilL2Hys(_seuilL2Hys), correctionGamma(_correctionGamma),
nombreNiveaux(_nombreNiveaux)
{}

Les constructeurs avec le préfixe CV_WRAP sont exportés depuis la DLL et accessibles dans les programmes. Le constructeur de copie n'est pas exporté et est donc moins pertinent pour l'utilisation directe.

Paramètres principaux

Les variables tailleFenetre, tailleBloc, pasBloc, tailleCellule et nbBins définissent la structure du desrcipteur HOG. Les valeurs entre parenthèses sont les defaults. Voici leur signification :

  • Taille de fenêtre (tailleFenetre) : Dimensions de la région d'analyse, typiquement 64x128 pixels pour la détection de piétons.
  • Taille de bloc (tailleBloc) : Dimensions des blocs qui regroupent plusieurs cellules, par exemple 16x16 pixels.
  • Pas de bloc (pasBloc) : Décalage entre blocs successifs, comme 8x8 pixels, créant un chevauchement.
  • Taille de cellule (tailleCellule) : Dimensions des cellules de base, souvent 8x8 pixels, où les histogrammes de gradient sont calculés.
  • Nombre de bins (nbBins) : Nombre de directions dans l'histogramme des gradients par cellule, par défaut 9. Cela divise l'arc de 180 degrés en intervalles égaux (20 degrés chacun pour 9 bins).

Calcul de la dimension du descripteur

La dimension totale du descripteur HOG se calcule à partir des paramètres. La fonction suivante, adaptée d'OpenCV, illustre ce calcul avec des noms de variables modifiés :

size_t obtenirTailleDescripteur() const
{
    CV_Assert(tailleBloc.width % tailleCellule.width == 0 &&
        tailleBloc.height % tailleCellule.height == 0);
    CV_Assert((tailleFenetre.width - tailleBloc.width) % pasBloc.width == 0 &&
        (tailleFenetre.height - tailleBloc.height) % pasBloc.height == 0 );
    return (size_t)nbBins *
        (tailleBloc.width / tailleCellule.width) *
        (tailleBloc.height / tailleCellule.height) *
        ((tailleFenetre.width - tailleBloc.width) / pasBloc.width + 1) *
        ((tailleFenetre.height - tailleBloc.height) / pasBloc.height + 1);
}

Cette formule multiplie le nombre de bins par le nombre de cellules par bloc, puis par le nombre de blocs dans la fenêtre, en tenant compte des pas.

Référence algorithmique

L'implémentation HOG dans OpenCV est basée sur l'article fondateur : Histograms of Oriented Gradients for Human Detection, CVPR 2005.

Étiquettes: OpenCV HOGDescriptor extraction de caractéristiques détection de piétons C++

Publié le 16 juin à 18h00