# Extraction de caractéristique en vision par ordinateur

En vision par ordinateur, l'extraction de caractéristiques visuelles (ou visual features extraction en anglais) consiste en des transformations mathématiques calculées sur les pixels d'une image numérique. Les caractéristiques visuelles permettent généralement de mieux rendre compte de certaines propriétés visuelles de l'image, utilisées pour des traitements ultérieurs entrant dans le cadre d'applications telles que la détection d'objets ou la recherche d'images par le contenu. À partir des années 2010, la grande majorité des travaux en vision par ordinateur repose sur des caractéristiques qui sont apprises par des réseaux convolutifs sur de grandes bases d'images, conformément aux principes de l'apprentissage profond.

## Localisation des caractéristiques

On distingue usuellement les caractéristiques globales qui sont calculées sur toute l'image et les caractéristiques locales qui sont calculées autour de points d'intérêt. On peut aussi parler des caractéristiques semi-locales quand celles-ci sont extraites dans des zones restreintes de l'image, résultant d'une segmentation de l'image en région ou simplement selon une grille arbitraire.
La distinction entre caractéristiques globales et locales a un intérêt taxinomique. Les caractéristiques locales se distinguent par le fait qu'elles sont distinctes, robustes aux occlusions (car il y en a beaucoup dans une image ou une région) et qu'elles ne nécessitent pas de segmentation. Un descripteur local calculé en chaque pixel d'une image ou d'une région obtenue par segmentation, puis accumulé dans un histogramme est donc une description globale de l'image ou de la région.

## Caractéristiques globales bas niveau
### Couleur
#### Histogramme et dérivés

La prise en compte de la couleur des images a été historiquement l'une des premières caractéristiques employées pour la recherche d'images par le contenu et produit encore des résultats parfois spectaculaires sur certaines bases. C'est en 1991 que Swain et Ballard ont proposé d'utiliser un histogramme couleur pour ce genre de tâche. Il représente la distribution globale des couleurs dans l'image. Son calcul consiste en une quantification de l'espace couleur choisi (RVB par exemple) suivie du calcul de l'histogramme des pixels ainsi transformés. Par exemple, si l'on considère une image RVB classique et que l'on quantifie chaque plan couleur sur 4 bins, l'histogramme résultant aura une dimension $4^{3}=64$. Si l'image est originellement codée sur 24 bits (la valeur de chaque plan est dans l'intervalle $[0-255]$), l'histogramme couleur sur 64 bins pourrait être représenté par un « cube » $4\times 4\times 4$:
| | | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge | Rouge |
| | | 0-63 | 0-63 | 0-63 | 0-63 | 64-127 | 64-127 | 64-127 | 64-127 | 128-191 | 128-191 | 128-191 | 128-191 | 192-255 | 192-255 | 192-255 | 192-255 |
| | | Vert | Vert | Vert | Vert | Vert | Vert | Vert | Vert | Vert | Vert | Vert | Vert | Vert | Vert | Vert | Vert |
| | | 0-63 | 64-127 | 128-191 | 192-255 | 0-63 | 64-127 | 128-191 | 192-255 | 0-63 | 64-127 | 128-191 | 192-255 | 0-63 | 64-127 | 128-191 | 192-255 |
| Bleu | 0-63 | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x |
| Bleu | 64-127 | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x |
| Bleu | 128-191 | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x |
| Bleu | 192-255 | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x |
Chaque couleur représentant l'un des 64 bins quantifiés, et x étant alors le nombre de pixels de l'image correspondant à ce bin. En pratique, ce descripteur est généralement représenté par un vecteur mono dimensionnel à 64 dimensions.
De nombreux descripteurs peuvent être dérivés de la représentation par histogramme, dont plusieurs ont été inclus au modèle expérimental de la norme MPEG-7. Il s'agit notamment de :
* dominant color : rend compte de la couleur dominante d'une image, calculée comme celle du bin ayant la plus grande valeur. L'espace de couleur peut être quelconque en théorie, mais l'utilisation de HSV donne des résultats intéressants ;
* scalable colour : il s'agit de la transformée de Haar de l'histogramme couleur dans l'espace HSV, ce qui résulte en un code très compact ;
* coulour structure : il s'agit d'un histogramme couleur «local». Sa construction est identique au principe présenté précédemment (histogramme couleur global), si ce n'est qu'un fenêtre de taille réduite (8x8 pixels) parcourt l'image lors du comptage des couleurs en chaque pixel. Il reflète ainsi une certaine information sur la structure spatiale de la répartition des couleurs ;
* colour layout : la transformée en cosinus discrète de la représentation en histogramme est calculée et seule une partie des coefficients peut être utilisée pour la signature. Cela donne la possibilité d'obtenir un descripteur relativement grossier mais très compact ou bien un descripteur plus fin mais prenant plus de place. Un tel descripteur est intéressant pour des applications nécessitant une certaine scalabilité.

#### Moments de couleur

Dès 1995, il a été proposé d'utiliser les moments calculés dans un espace de couleur donné pour caractériser les images. On se restreint généralement aux deux ou trois premiers moments (moyenne, variance, asymétrie voire le moment d'ordre 4 appelé kurtosis) mais ils sont calculés dans chacun des trois plans de l'espace couleur choisi. Un raffinement possible consiste à diviser l'image selon une grille et à calculer ces moments dans chaque cellule.

#### Autocorrélogramme de couleur

La couleur d'un pixel $p=(x,y)\in I$ étant notée $I(p)$, définissons l'ensemble $I_{c}\triangleq \{p|I(p)=c\}$. Ainsi $p\in I_{c}$ signifie que le pixel p de l'image I a une couleur c. Considérons une valeur de distance entre pixels $d\in [\![1\dots n]\!]$ fixée a priori. La distance utilisée est par exemple $L_{\infty }$ définie pour deux pixels $p_{1}=(x_{1},y_{1})$ et $p_{2}=(x_{2},y_{2})$ par $L_{\infty }(p_{1},p_{2})\triangleq \max\{|x_{1}-x_{2}|,|y_{1}-y_{2}|\}$. Le corrélogramme pour $i,j\in [\![1\dots m]\!]$ et $k\in [\![1\dots d]\!]$est alors défini par:
    $\gamma _{c_{i},c_{j}}^{k}(I)\triangleq {\overset {Pr}{p_{1}\in I_{c_{i}},p_{2}\in I_{c_{j}}}}[p_{2}\in I_{c_{j}}|L_{\infty }(p_{1}-p_{2})=k]$
Cela reflète la probabilité qu'un pixel à une distance k du pixel considéré soit de couleur $c_{j}$. La taille du corrélogramme est $O(m^{2}d)$.
L'autocorrélogramme est défini par:
    $\alpha _{c}^{(k)}(I)\triangleq \gamma _{c,c}^{k}(I)$
Il nécessite un espace d'ordre $O(md)$.

### Forme

Décrire les formes nécessite une identification préalable de régions. Cela peut résulter d'une segmentation de l'image ou de la détection de leurs contours. On peut alors caractériser les régions au moyen de divers indices telle leur orientation principale (par exemple leur premier axe propre), leur symétrie ou encore leurs moments de Zernike.
Une méthode de description particulièrement utilisée est celle proposée par Mokhtarian, appelée Curvature Scale Space. Elle consiste à décrire une région en fonction des variations de courbure de son contour. Pour une courbe plane en coordonnées paramétriques dans un repère orthonormé $\scriptstyle {r(t)=(x(t),y(t))}$, la courbure s'exprime par:
    $\gamma (t)={\frac {x'y''-y'x''}{(x'^{2}+y'^{2})^{3/2}}}$.
Cette description est invariante en rotation et translation. Concernant le zoom, il faut a minima normaliser par la longueur du contour. Plus important, le descripteur est généralement calculé à différentes échelles, chacune correspondant à la convolution par un noyau gaussien.

### Texture

La définition de la texture n'est pas évidente et dépend de l'échelle$^,$. On distingue trois approches pour définir la notion de texture. Dans la veine des travaux pionniers de Haralick, une première approche considère une texture comme résultant d'un processus stochastique et cherche à les décrire en ce qui a trait aux propriétés statistiques des valeurs et positions relatives des pixels$^,$.
La seconde approche suppose l'existence de primitives fondamentales permettant de décrire les textures, tels les Textons définis par Julesz. Par suite, une texture donnée est décrite comme une combinaison complexe de ces primitives, exprimée par exemple avec des graphes.
Une approche plus récente s'inspire plutôt de la perception visuelle et tend à rendre compte du processus de formation des textures du point de vue humain.

#### Approche stochastique

Une texture peut être décrite statistiquement, en rendant compte de la manière dont les niveaux de gris de l'image s'organisent les uns par rapport aux autres. On considère un opérateur de position p permettant de définir une matrice $P_{ij}$ qui compte le nombre de fois qu'un pixel de niveau de gris i est présent à la position p d'un pixel de niveau j. Si la matrice est normalisée entre 0 et 1, on parle de matrice de cooccurrence de niveau de gris. La position relative de deux pixels peut aussi être définie par un angle $\theta$ et une distance d. Par exemple, si on considère trois niveaux de gris possibles et l'image I définie par:
    $I={\begin{pmatrix}0&1&2&2\\0&0&1&2\\0&0&1&2\\0&0&0&1\\0&0&1&1\\\end{pmatrix}}$
Et l'opérateur est à droite de (également défini par un angle $\theta =0$ et une distance $d=1$ pixel), alors la matrice de cooccurrence (non normalisée) est:
    $C={\begin{pmatrix}5&5&0\\0&1&3\\0&0&1\\\end{pmatrix}}$
Le 3 de la matrice $C$ signifiant que l'on trouve trois fois un pixel de valeur 2 (donc en troisième colonne) à la droite d'un pixel de valeur 1 (donc en seconde ligne).
À partir de cette matrice de cooccurrence, il est possible de définir maints descripteurs, tels que ceux répertoriés dans cette table:
| Opérateur | Formulation |
| Maximum | $\max _{ij}(C_{ij})$ |
| Différence d'ordre k | $\sum _{i}\sum _{j}{c_{ij}\,(i-j)^{k}}$ |
| Entropie | $\sum _{i}\sum _{j}{c_{ij}\,log(c_{ij})}$ |
| Uniformité | $\sum _{i}{\sum _{j}{c_{ij}^{2}}}$ |
Une autre approche statistique largement utilisée est le modèle MSAR (Multiresolution Simultaneous Autoregressive Models) utilisé, au-delà de la reconnaissance de texture, pour reconnaître des scènes naturelles.

#### Approche structurelle

Cette approche suppose l'existence de primitives fondamentales permettant de décrire les textures. L'un des premiers exemples de telles primitives a été les Textons proposés par Julesz. Une texture donnée est décrite comme une combinaison complexe de ces primitives, exprimée par exemple avec des graphes. Ces graphes peuvent alors servir de descripteurs de la texture.

#### Approche spectrale

L'expression des périodicités et autres régularités dans une image ou dans un signal se fait naturellement dans le cadre de l'analyse spectrale. Ainsi une transformée de Fourier discrète de l'image peut être une base pour fabriquer des descripteurs. Néanmoins, il est plus courant d'utiliser un ensemble de filtres de Gabor disposés à plusieurs échelles et orientations. Cela permet notamment d'identifier des « traits perceptifs majeurs ». Des travaux ont montré qu'un descripteur basé sur une telle description spectrale pouvait rendre compte de la structure spatiale dominante d'une scène naturelle.
Une alternative à la transformée de Fourier est de calculer la transformée en cosinus discrète (DCT). En pratique des descripteurs basés sur les coefficients DCT ont permis de discriminer des images d'intérieur et d'extérieur, des images de paysages urbains contre des paysages naturels et, combinés à d'autres descripteurs, plusieurs catégories de scènes naturelles simultanément.

## Caractéristiques locales

La caractérisation d'une image peut être calculée en un nombre restreint de pixel. Il faut pour cela d'abord détecter les zones d'intérêt de l'image puis calculer en chacune de ces zones un vecteur caractéristiques. Ces zones d'intérêt sont par exemple les arêtes ou les points saillants de l'image (zones de fort contraste). Il peut aussi s'agir de points pris aléatoirement ou régulièrement dans l'image (échantillonnage dit dense).
Le vecteur caractéristique contient parfois des données provenant de la détection, telles que l'orientation de l'arête ou la magnitude du gradient dans la zone d'intérêt. Généralement, le vecteur caractéristique en un pixel est calculé sur un voisinage de ce pixel, c'est-à-dire à partir d'une imagette centrée sur ce pixel. Il peut être calculé à différentes échelles de manière à s'affranchir du facteur de zoom. Parmi les caractéristiques locales couramment calculées, on retrouve des motifs préalablement utilisés globalement, tels que des histogrammes de couleur ou des vecteurs rendant compte de l'orientation des gradients des niveaux de gris.
Certaines méthodes telles SIFT ou SURF incluent à la fois la détection de zone d'intérêt et le calcul d'un vecteur caractéristique en chacune de ces zones. Concernant le vecteur caractéristique, les SIFT sont grossièrement un histogramme des orientations du gradient et les SURF consistent en le calcul d'approximation d'ondelettes de Haar. Dans une veine similaire, les motifs binaires locaux sont un calcul de cooccurrence des niveaux de gris locaux d'une image et les HOG des histogrammes de gradients orientés, assez similaires aux SIFT, calculés selon un échantillonnage dense.

### Agrégation

La description d'une image au moyen de caractéristiques locales a généralement une dimension variable, dépendant du nombre de points d'intérêt extraits (en fait, ce nombre fois la dimension du descripteur local). Une telle représentation n'est donc pas adaptée à nourrir des algorithmes d'apprentissage classiquement utilisés (SVM, boosting...). Pour se ramener à une représentation dans un espace vectoriel de dimension fixe, il est fait appel à des techniques d'agrégation de descripteurs telles que celles des sacs de mots (bag of visterms). Le résultat d'une telle accumulation est donc une caractéristique globale d'une image ou d'une partie d'image (région).

## Apprentissage de caractéristiques

En 2012, la campagne d'évaluation internationale ImageNet Large Scale Visual Recognition Challenge est remporté au moyen d'une approche reposant sur un réseau convolutif (CNN) qui a pu être appris grâce aux progrès récents de l'apprentissage profond. L'amélioration des performances est particulièrement marquée en comparaison des années précédentes. Peu de temps après, il est montré qu'une couche d'un réseau convolutif pré-appris sur ImageNet peut être utilisé comme vecteur de représentation d'une image, selon un schéma de transfert d'apprentissage, et ainsi atteindre des performances encore jamais vues sur les bases d'images classique du domaine de la vision par ordinateur. À partir de cette période, la grande majorité des travaux dans le domaine utilise donc des vecteurs de caractéristiques appris sur des images naturelles au moyen d'un réseau convolutif et les caractéristiques « désignée à la main » deviennent très minoritaires, hormis pour des domaines d'application très spécifiques.

## Applications

Les caractéristiques d'images extraites selon les modalités expliquées ci-dessus sont utilisées dans de nombreux domaines de la vision par ordinateur.
Associés à des images annotées, ils peuvent servir d'entrée à un algorithme d'apprentissage supervisé en vue de leur classification. Cela peut notamment servir à détecter leur contenu et en particulier les objets présents dans l'image. Dans la même veine mais dans des domaines plus spécifiques, ils peuvent servir à détecter des visages ou des personnes.
Pouvant servir de signature d'image, ces descripteurs sont aussi utilisés dans la recherche d'images par le contenu.
D'une manière générale, ce sont des technologies de base servant dans de nombreux domaines où la vision par ordinateur intervient: robotique, vidéo-surveillance, vision industrielle, reconnaissance optique de caractères, etc.