Contacter DARVA

Un peu d’analyse et de traitement de l’image

02 mars 2023
Analyse image
Tech
Traitement image

Introduction

Dans le cadre du programme Auto, DARVA travaille à la mise en place d’une solution mobile de captation par l’assuré des photos des dommages de son véhicule sinistré. Lorsque l’assuré souhaite déclarer un sinistre, il crée en premier lieu son dossier. Un sms lui est alors envoyé afin de prendre des photos de son véhicule selon un ordre précis tout autour de la voiture. Ces images sont alors transmises au réparateur qui donne un retour sur son expertise. Cependant, pour éviter des photos de mauvaise qualité (floues ou mal contrastées) ou bien, mal cadrées, il est donc intéressant d’analyser automatiquement les images dès leurs captures pour éviter des délais supplémentaires.

On part du principe que les photos de voitures qui seront envoyées seront toutes cadrées à peu près correctement. Celle-ci étant immobile et au centre de l’image.

Configuration

La suite du billet présentant des résultats et leurs temps d’exécution, voici la configuration de la machine sur lesquelles les algorithmes ont été testés ainsi que les versions des technologies utilisées :

Processeur 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
Mémoire 16,0 Go, 3200MHz, SODIMM
Carte graphique NVIDIA T600 Laptop GPU

De plus, toutes les images de voitures utilisées proviennent de la même banque de données présentes sur Kaggle.

Python 3.10

Version 4.6

Pour commencer

Avant toutes choses, ce billet va contenir quelques formules mathématiques mais pas de panique, elles ne sont là qu’à titre informatif.

On commence donc par définir c’est qu’est une image de taille en couleurs et en nuances de gris :

Pour une image RGB (Rouge Vert Bleu)

Pour une image en nuances de gris

On a donc qui correspond à la valeur du pixel aux coordonnées avec

Une image en niveaux de gris étant définie par :

correspond à la transposée de la matrice . Les coefficients, eux, correspondent aux pondérations de chaque canaux. L’œil humain étant plus sensible à la couleur verte, son coefficient est alors plus élevé. Ainsi :
L’histogramme d’une image correspond à la distribution des niveaux de gris dans l’image. Et qui correspond à la probabilité d’occurrence d’un niveau de gris.
correspond à la cardinalité (nombres d’éléments) de l’ensemble E
L’histogramme cumulé correspond lui à la somme partielle des niveaux de gris :

https://perso.esiee.fr/~perretb/I5FM/TAI/_images/conv2.png Convolution d’une image (input) par un noyau (3×3).
Image disponible par Benjamin Perret

La variance d’une image en niveaux de gris est définie comme suit :
est la moyenne des niveaux de gris de l’image définie par :
La convolution d’une image aux points avec un noyau de taille est définie par :

Prétraitement des images

Dans le contexte de Flash, les images envoyées ont toutes la même dimension ( pixels). Elles sont au préalable redimensionnées du côté client en gardant les proportions. Cette technique entraîne par conséquent l’ajout de bandes noires sur les bords de l’image. Il est nécessaire de les enlever pour ne pas influencer les calculs des propriétés de l’image.

Les images étant reçues en format RGB (3 octets par pixel) on commence par la convertir en niveaux de gris (1 octet par pixel). On applique ensuite un seuillage sur l’image afin d’extraire les bordures.

est l’image en niveau de gris seuillée.

On calcule ensuite le rectangle englobant les pixels supérieurs à 0 et on rogne l’image suivant ce rectangle.

Seuillage et rognage (suppression des bandes noires latérales)

Détection de flou

Pour détecter si l’image est floue, il faut d’abord calculer un score que l’on pourra ensuite comparer à un seuil. Ici, les trois méthodes que nous allons étudier se basent toutes sur la détection des contours de l’image (d’où le prétraitement des images). Plus il y a de contours détectés, moins l’image a de chances d’être floue, et inversement, plus l’image est floue, moins les contours sont détectables. Cette technique est assez fiable et les photos de voitures offrant un grand nombre de contours, cela nous permet une plus grande précision des calculs.

Les portables d’aujourd’hui adaptant le focus assez précisément, on sera plus enclin à recevoir une image contenant un flou de mouvement.

(A gauche) Flou de mouvement horizontal. (A droite) Flou lié au focus (flou Gaussien)

Variance du filtre de Laplace

La première méthode étudiée consiste à convoluer (filtrer) l’image source par le filtre de Laplace puis d’en calculer la variance. Un résultat élevé indique de grandes variations dans l’image. Plus une image possède des contours, plus cette variation est grande. Elle aura donc moins de chances d’être considérée comme floue.

Où la matrice correspond au filtre Laplacien et * correspond à l’opérateur de convolution. On obtient donc les résultats suivants :

Calcul de la variance du filtre de Laplace sur une image nette et une image floue

Une fois la variance récupérée, on la compare à une valeur que l’on fixe comme étant le minimum acceptable pour que l’image ne soit pas considérée comme floue. Après tests, les résultats sont les suivants :

Seuil appliqué Taux d’erreur Temps d’exécution moyen
215 3.42% 0.04s

Moyenne des fréquences de l’image

La deuxième méthode consiste à récupérer les fréquences de l’image par une transformée de Fourier puis d’en faire la moyenne. Plus une image contient de hautes fréquences, plus elle possède des contours, et à l’inverse, plus il y a de basses fréquences, moins l’image en possède.

Le domaine fréquentiel d’une image correspond à la variation de l’intensité sur une certaine distance par rapport à un point. Il est possible de le calculer en utilisant la Transformée de Fourier discrète définie par :

est une image en niveaux de gris, sa transformée de Fourier et est le nombre imaginaire.
Le résultat étant complexe, on calcule son module (la valeur absolue) pour avoir un nombre réel et calculer la moyenne plus facilement.

Calcul de la moyenne des spectres par transformée de Fourier discrète

On constate alors une moyenne bien plus faible dans le spectre de l’image floue que dans celle de l’image nette. On compare ensuite cette valeur à un seuil. On obtient alors les résultats suivants :
Seuil appliqué Taux d’erreur Temps d’exécution moyen
5250 1.08% 0.11s

Variance du filtre de Sobel

Cette méthode fonctionne de la même façon que la variance du filtre de Laplace, la seule différence se trouvant au niveau du filtre ainsi que du nombre d’opérations. Au lieu d’appliquer un seul filtre, on va en appliquer trois différents pour calculer les contours sur l’horizontale, la verticale et la diagonale. Ainsi les différents résultats sont respectivement définis par :

On calcule ensuite la variance de chaque gradient

Calcul de la variance de chaque gradient produit par les filtres de Sobel

L’avantage de cette technique par rapport aux autres est qu’elle nous permet de comparer l’image sur trois valeurs différentes et donc d’affiner les résultats.

Le fait de détecter les variations sur l’horizontale, la verticale et la diagonale nous permet de mieux détecter le flou de mouvement. Par exemple, si une image a un flou de mouvement horizontal, la valeur de sera élevée et celle de   sera faible.

Seuil appliqué Taux d’erreur Temps d’exécution moyen
x : 1200, y : 2650, xy : 80 0.94% 0.15s

Conclusion sur la détection de flou

Méthode Taux d’erreur Temps d’exécution moyen
Variance Laplace 3.42% 0.04s
Moyenne des fréquences 1.08% 0.11s
Variance Sobel 0.94% 0.15s

On constate que la solution proposant les meilleurs résultats est la variance du filtre de Sobel. Cependant, celle-ci est la plus gourmande en temps de calcul (ce qui est dû aux trois convolutions, on remarque d’ailleurs que ). Toutefois, la variance du filtre de Sobel peut être parallélisée assez simplement ce qui permettrait d’abaisser le temps de calcul.

Analyse du contraste

En plus du flou, une image peut être mal contrastée. La première question qu’on est en droit de se poser est : « Mais c’est quoi une image mal contrastée ? ». Eh bien dans notre cas, c’est une image qui a peu de variations de niveaux de gris (ou de couleurs) comparées à la taille de l’image. On compte aussi en tant que mauvais contraste, les images prises en contre jour qui, elles, sont très contrastées (une partie très claire et une partie très foncée). Les prochaines techniques se basent en grande partie sur l’histogramme et l’histogramme cumulé (définis dans le préambule) qui est un bon indicateur du contraste d’une image.

Écart-type de l’image en niveau de gris

La première technique consiste à calculer l’écart-type des niveaux de gris de l’image. On va comparer les résultats à une valeur de seuil inférieur et supérieur. Cette technique se nomme « le contraste RMS » pour « Root Mean Square ». Comme l’écart-type est égal à la racine carrée de la variance, on le calcule comme suit :

 


Calcul du contraste RMS sur l’image préalablement convertit en niveaux de gris

Seuils appliqués Taux d’erreur Temps d’exécution moyen
inférieur : 45, supérieur : 75 25.02% 0.06s

Étalement d’histogramme

L’étalement d’histogramme ou l’Histogram Spread (HS), consiste à calculer le ratio de la distance du niveau de gris entre 25% et 75% de la valeur maximale.

Avec et étant les valeurs maximales et minimales de la plage de calcul (ici 255 et 0).  et étant respectivement les antécédents de 25% et 75% de l’histogramme cumulé.

Calcul de l’étalement d’histogramme sur l’histogramme cumulé. Les lignes vertes correspondant à Q1 et Q3

Seuils appliqués Taux d’erreur Temps d’exécution moyen
inférieur : 0.27, supérieur : 0.6 26.45% 0.30s

Corrélation d’histogrammes cumulés

Une image peut être considérée comme parfaitement contrastée si la valeur des ses pixels est répartie uniformément sur tout son histogramme . Son histogramme cumulé sera alors de la forme.

La corrélation de nos deux histogrammes va nous donner un bon paramètre sur leurs ressemblances. Ainsi, si l’histogramme cumulé de l’image se rapproche de celui de l’histogramme cumulé considéré parfait, elle aura plus de chances d’être idéalement contrastée.

est le conjugué de

Calcul de la corrélation entre les histogrammes cumulés des images et l’histogramme cumulé parfait

Seuils appliqués Taux d’erreur Temps d’exécution moyen
inférieur : 72, supérieur : 119.5 7.40% 1.24s

Écart-type sur des portions d’histogramme

Cette technique consiste à séparer l’histogramme cumulé en dix parties sur lesquelles nous allons calculer le ratio de la distance entre la borne inférieure et supérieure et la distance totale de l’histogramme cumulé. Plus l’écart-type sera élevé, plus il y aura une chance d’avoir un pic dans l’histogramme.

Avec  étant le i-ème décile, l’histogramme cumulé et

On récupère ensuite l’écart-type de :

correspond à la moyenne de

Calcul de l’écart-type entre les dix distances calculées dans chaque portion

Seuil appliqué Taux d’erreur Temps d’exécution moyen
0.1115 6.76% 1.15s

Conclusion sur l’analyse du contraste

Méthode Taux d’erreur Temps d’exécution moyen
RMS 25.02% 0.06s
HS 26.45% 0.30s
Corrélation 7.40% 1.24s
Écart-type sur portions 6.76% 1.15s

On constate deux parties dans les résultats, la première avec les méthodes RMS et HS ayant un taux d’erreur plutôt élevé mais rapide à l’exécution et les deux autres méthodes ayant un faible taux d’erreur mais un temps d’exécution supérieur à 1s. Pour l’instant, la technique la plus prometteuse se trouve être le calcul de l’écart-type sur les portions d’histogramme. De plus, cette méthode permet de détecter les images prises en contre-jour car la présence de deux pics dans l’histogramme augmentera l’écart-type.

Il faut aussi savoir que corriger une image mal contrastée est assez simple. Il nous suffit d’appliquer une égalisation d’histogramme. Si l’image est mal contrastée, l’opération va alors répartir les valeurs des pixels de la manière la plus équitable dans l’histogramme. Si l’image était de base bien contrastée, alors l’égalisation ne détériore pas trop l’image.

Il peut donc être intéressant de comparer l’application d’une des méthode d’analyse de la première partie (RMS ou HS) en la faisant suivre d’une égalisation aux méthodes de la deuxième partie. Alors, même si l’image sera considérée comme mal contrastée (une image sur quatre dans ce cas), l’amélioration ne changera pas l’image et le temps de calcul restera inférieur au temps de calcul des méthodes de la deuxième partie.

Pour finir

 

Il existe aujourd’hui encore d’autres façons de détecter du flou ou d’analyser le contraste d’une image. Les techniques dépendent surtout du contexte dans lequel on se trouve. Il en va de même pour les seuils que nous avons utilisés pour classer les images.

Une des approches qui aurait tendance à être plus efficace serait l’apprentissage d’un réseau de neurones qui calibre lui-même les seuils de manière plus précise. Bref, l’analyse et le traitement de l’image a encore beaucoup à donner dans le monde de l’assurance (on aura l’occasion de le voir dans un autre billet, ne vous inquiétez pas). En plus de la détection de détériorations de l’image, il peut être intéressant de reconnaître ce qui est pris en photo, de détecter la plaque d’immatriculation (petit spoiler) et bien d’autres choses encore. Toute cette présentation a d’ailleurs été réalisée sur la partie assurance auto mais elle peut tout aussi bien s’appliquer pour de l’assurance habitation.

Comme vous avez pu le comprendre, cette preuve de concept n’est qu’une petite brique de l’analyse et du traitement de l’image au service de la gestion des sinistres et des assurances.

Ce sujet à propos de l’analyse et au traitement d’image vous a intéressé ? Sur le même thème, découvrez le nouveau billet de Vincent consacré à la lecture automatisée d’une carte-grise.

À propos de l'auteur.
Vincent Commin est Alternant au sein du DARVALab et 
en Master 2 Conception Logicielle à l'université de Poitiers.
Passionné par la recherche, le développement et l'intégration 
de nouvelles solutions et technologies au service des
développeurs et des utilisateurs.