Comptage des pixels de couleur identique sur une image. Application à la mesure de surfaces complexes
Page d'entréeDivers

Principe
Exemple 1
Exemple 2
Comment mesurer des longueurs sur une image numérique
Pour réduire le nombre de couleurs de l'image
Autres solutions

Création de la page: 08/2013. Dernière mise à jour: 07/2014
J'ai fait ce programme MATLAB afin de calculer les surfaces à partir de plans.
S'il vous intéresse, vous pouvez me contacter.

Le principe:
Le programme lit une image numérique, et compte les pixels de couleurs identiques.
Si l'image comporte une zone colorée de surface connue (par exemple un rectangle dessiné sur l'image dont on donne la surface), le programme fait les règles de trois et indique, en plus du nombre de pixels de chaque couleur, la surface correspondante.
Usage: calcul de surfaces sur des plans papier (il suffit de les numériser) ou numériques. Mesure de surfaces complexes (formes quelconques, pas forcément connexes). Et bien d'autres...

Précisions:
Le comptage et le tri des pixels se fait pixel par pixel, en comparant les valeurs R, G, B. Si on veut s'en servir pour mesurer des surfaces, il faut donc que tous les pixels de la surface soient de couleur identique. Si l'image provient d'une numérisation (scan), ce n'est généralement pas le cas. Pour le vérifier, il faut utiliser la "pipette" d'un logiciel de retouche d'images. Ensuite, il y a plusieurs possibilités: soit réduire le nombre de couleurs de l'image pour converger vers un faible nombre de couleurs (16 couleurs par exemple, mais sur la plupart des images ça ne donnera pas grand chose), soit dessiner des formes et les remplir avec des couleurs uniformes (c'est dans les cordes de n'importe quel logiciel de retouche d'images, et si vous n'en avez aucun, je vous conseille le logiciel gratuit Irfanview).
Voir également plus bas le paragraphe "Pour réduire le nombre de couleurs de l'image"

Exemple 1:
Je suis parti de ce plan, qui est un scan sur lequel j'ai copié la règle de 4m de long servant d'échelle, pour en faire un carré de 4m de côté et définir une surface de référence de 16m², puis j'ai barbouillé quelques surfaces avec des couleurs caractéristiques:
Cliquer sur l'image pour l'agrandir

Le programme compte les pixels, et classe les couleurs de la plus présente à la moins présente dans l'image, puis demande quelle est la surface de référence. Ici, il s'agit de la couleur numéro 3, et on lui indique qu'elle correspond à 16m²:
cliquer pour agrandir

Résultat final :
cliquer pour agrandir

On peut demander au programme d'afficher uniquement les pixels d'une couleur donnée. Si la couleur est sombre, les pixels sont automatiquement affichés sur un fond blanc, et si la couleur est claire, les pixels sont automatiquement affichés sur un fond noir:
cliquer pour agrandir   cliquer pour agrandir

Exemple 2:
Je suis parti d'un plan du cadastre, récupérable en ligne sur www.cadastre.gouv.fr Le site du cadastre fournit quelques outils permettant des mesures, mais je ne me suis servi que de celui qui permet de dessiner une ligne et de connaitre sa vraie longueur, ce qui donne l'échelle de référence de l'image (sur le dessin ci-dessous, ligne rouge de 24.91 mètres de long):
cliquer pour agrandir

Puis j'ai colorié des surfaces, ainsi qu'une surface de référence (rectangle bleu de 658.5 m², voir plus bas comment mesurer des dimensions sur une image):
cliquer pour agrandir

et j'ai demandé le décompte par Matlab: 270m² pour le vert et 26m² pour le magenta:
cliquer pour agrandir


Comment mesurer des longueurs sur une image numérique
Il faut faire une bête règle de 3 entre le nombre de pixels et la longueur de la ligne.
Mais la plupart du temps, les lignes sont inclinées, et pour mesurer la longueur en pixels de la ligne, si vous n'avez pas de logiciel spécifique, vous pouvez utiliser le logiciel gratuit Irfanview et le théorème de Pythagore.
Avec Irfanview, cliquer sur le début de la ligne, puis draguer jusqu'à l'autre extrémité de la ligne. IrfanView dessine un rectangle. Vous pouvez ajuster ensuite les positions des côtés du rectangle en cliquant sur un des côtés pour le déplacer. Irfanview affiche dans la barre supérieure la largeur et la hauteur du rectangle, en pixels. Sur l'image ci-dessous, le rectangle fait 286 x 189 pixels :
cliquer pour agrandir

Puis avec l'aide de votre tableur favori (ou de votre calculette), utiliser le théorème de Pythagore pour calculer la longueur de la diagonale du rectangle:
    diagonale = racine ( largeur x largeur + hauteur x hauteur)
    
Voici le fichier Excel qui m'a servi a faire ces conversions.

La même méthode m'a ensuite permis de côter les dimensions du polygone vert que j'avais dessiné "au pif" sur l'image:
cliquer pour agrandir


Pour réduire le nombre de couleurs de l'image
Il y a plein de méthodes dépendant de l'image de départ, des possibilités de votre logiciel de retouche d'images, et de votre dextérité pour vous en servir.

Il est quand même bon de noter que

Autres solutions
The Gimp ferait le boulot ?  => "Couleurs/Informations/Histogramme. Clique sur la couleur voulue sur l'histogramme et en bas il y a "compte" et le nb de pixel !"
GeoTool de Calgeo : logiciel payant (250€) qui fait un travail un peu similaire.