Essais sur processing, à partir de l’envie d’automatiser la recherche de zones « presque monochromes » dans n’importe quelle image, notamment pour une reprise de La couleur de ma vie.
Part I : histogramme tridimensionnel
Tout d’abord, un essai d’histogramme dans le cube RVB. Plus une couleur est présente dans la zone choisie de l’image, plus la valeur alpha de la petite sphère représentant cette couleur est forte.
En bas à droite est reproduite la zone de l’image analysée.
a_3D_colorHistogram [ZIP – 778 Ko] (sketch processing écrit sous la version 2.2.1)
commandes utilisateur :
- cliquer-glisser (mouse drag) : sélectionner la zone à analyser
- mouvement de la souris : rotation du cube/histogramme
- touche ‘d’ : afficher les points extremum du cube (valeurs min et max dans les 3 dimensions)
- touche ‘r’ : capture d’écran
Part II : évaluation de l’uniformité d’une image : écart-type
La technique de cartographier les valeurs donne une idée/image de la répartition des couleurs, mais ça n’est pas très pratique de représenter leur « poids » qui constitue la 4e dimension de l’histogramme, notamment puisque les couleurs sombres se fondent dans le fond noir. Utiliser des points blancs + alpha n’aide pas trop, on comprend pas intuitivement à quelle couleur ça correspond. Et puis avec un espace 3D on cache toujours une partie de valeurs…
Enfin, surtout, ce n’est pas la visualisation qui sera utile pour automatiser le procédé. L’ordinateur ne regarde pas, il compte.
Il semblerait que le calcul à effectuer pour évaluer la dispersion de valeurs, la notion d’écart-type (en anglais : standard deviation) soit appropriée. Elle se définit ainsi = la racine carré de (la somme (des (écarts à la moyenne)^2) divisée par le nombre de valeurs).
Ou encore, pour l’ensemble fini x, de N valeurs, et de moyenne m, la variance V est :
V(x) = sum( (xi–m)² ) / N
(à noter que la somme sum est réalisée pour toutes les valeurs de l’ensemble x, soit l’itération de i de 0 à N-1)
Or l’écart-type et est la racine carré de la variance :
et(x)² = V
soit :
et(x) = sqrt(V)
donc au final, l’écart-type et est donné par la formule :
et(x) = sqrt(sum( (xi–m)² ) / N)
Reste que notre écart à la moyenne est ici lié plutôt à cette idée de « distance/écart entre deux couleurs » ce qui est quelque chose de largement discuté. Des éléments de réponse pourraient être apporté par les modes CIE L*a*b et CIE XYZ… cette question est discutée ici : http://www.developpez.net/forums/d82959-2/general-developpement/algorithme-mathematiques/algorithmes/distribution-couleurs
Mais si on ne se préoccupe pas de la perception subjective des écarts de couleurs, je me permets dans un premier temps de me borner à une distance géométrique de 2 points dans l’espace tridimensionnel RVB. Et là, un bon vieux théorème de Pythagore suffit :
distance(A,B) = sqrt( (xA-xB)² + (yA-yB)² + (zA-zB)² )
Ce qui est effectué directement sous processing par la fonction dist() qui marche aussi bien avec 2 que 3 dimensions.
A noter que l’écart type est du coup évalué sur une distribution non plus de couleurs mais de distances à la couleur moyenne. Là je confonds peut-être des choses…
En tout cas si on fait l’histogramme des distances à la couleur moyenne on a qd même quelque chose qui est moyennement parlant…Ceci dit, me reste un souci, c’est qu’avec les distances, plutôt que les écarts à la moyenne, on ne se retrouve plus qu’avec des valeurs (différences) positives ça chamboule peut-être les choses.


