Image processing [fr]

Même si ça ne vole pas très haut, il est possible de faire des petits algorithmes très simples qui donnent des résultats intéressants sur des images.

Détection de contour

Je me suis demandé comment il serait possible de faire un algorithme capable de détecter les contours d’une image.

Il s’avère qu’il existe une méthode toute simple : Pour chaque pixel, on somme la différence de couleur entre lui et chacun de ses voisins. On obtient un nombre, qui sera d’autant plus grand que la différence de couleur (donc le contour), est marqué. Ce nombre donnera donc la « noirceur » du pixel dans la nouvelle image des contours.

Ainsi, en partant de cette image :

../../_images/duck.jpg

On peut obtenir par un traitement très simple l’image suivante :

../../_images/border-smooth.jpg

Sympathique, non ?

Compression d’image

Après avoir obtenu une image représentant les contours, on peut la transformer en image sans nuance de gris (un pixel est soit complètement noir, soit blanc), en choisissant une valeur seuil (au delà, le pixel est blanc, en dessous il est noir) :

../../_images/border1.jpg

On va ensuite tenter de « simplifier » l’image : Dans beaucoup de photos, on a des surfaces unies, mais en réalité il y a de très légères variations de couleurs, qui ne nous intéressent généralement pas, et n’apportent aucune information utile.

On va donc essayer de remplacer chacune de ces surfaces par une couleur, qui sera la valeur moyenne de la surface.

Pour celà, il suffit juste d’utiliser notre image contenant les bordures, et d’extraire des zones de l’image fermées par des contours. On n’a plus qu’à regarder la couleur moyenne dans chaque zone, et remplir la zone avec cette couleur.

On obtient au final ceci :

../../_images/compressed.jpg

On voit que l’image a conservé son sens, mais la couleur du panneau qui variait légèrement, ou même la route ou le ciel, ont été remplacés par une couleur unie.

En changeant le seuil de détection de bordure, on peut compresser plus ou moins l’image. Voilà la même image, mais bien plus compressée :

../../_images/compress2.jpg

On pourrait même envisager la création d’un algorithme rudimentaire de compression de photos basé sur ce principe : On peut facilement stocker sous forme compressée les pixels consécutifs de même couleur, et sur l’image qu’on a générée, on en a énormément !

Pour télécharger le code source : image.zip

Moyennage

Sur une séries de photos prises avec un trépied (ou par une caméra), on peut réaliser une moyenne des valeurs de chaque pixel dans les différentes images. Ceci peut permettre, sur une photo bruitée, d’éliminer ce bruit.

Mais ce traitement peut aussi permettre des choses bient plus intéressantes : Sur des photos d’un monument très touristique par exemple, il sera possible d’éliminer artificiellement les personnes en mouvement sur les photos, par exemple.