Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Compter et localiser des objets

Après cette leçon: Je peux compter les objets d’une image et retrouver la position d’un motif.

Leçon de 60 min3 commandesLab de vision par ordinateur : pixels, seuils et comptage d’objets dans JupyterLab

Compter des objets dans une image

Compter des objets dans une image revient à étiqueter les régions connexes d’un masque : chaque groupe de pixels blancs qui se touchent reçoit un numéro.

C’est ainsi qu’un programme compte des pièces sur une table ou des cellules sous un microscope. Une seconde méthode, la correspondance de modèle, retrouve la position d’un petit motif.

À la fin de cette leçon

Remarque

Je peux compter les objets d’une image et retrouver la position d’un motif.

Mots clés

MotCe que ça veut dire
Région connexeun groupe de pixels blancs qui se touchent
Voisinageles pixels qui comptent comme « touchant » un pixel
Étiquetagedonner un numéro à chaque région
Airele nombre de pixels d’une région
Motifun petit morceau d’image que l’on cherche
Correspondance de modèlela recherche d’un motif en le glissant sur l’image

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Des pixels qui se touchent forment une région

Après un seuil, l’image est un masque : des pixels blancs sur fond noir. Deux pixels blancs qui se touchent appartiennent au même objet.

Une région connexe est un groupe de pixels blancs reliés de proche en proche. L’étiquetage donne à chaque région son numéro : 1, 2, 3. Le plus grand numéro est alors le nombre d’objets.

Compter les pièces avec count.py

Commande
docker exec jupyter python3 steps/count.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le voisinage décide quels pixels se touchent

Deux pixels en diagonale se touchent-ils ? Cela dépend du voisinage. Avec le voisinage de 4, seuls le haut, le bas, la gauche et la droite comptent. Avec le voisinage de 8, les diagonales comptent aussi.

Scikit-image étiquette par défaut avec le voisinage de 8. Pour le voisinage de 4, il faut écrire connectivity=1. Le devoir de cette leçon utilise le voisinage de 4.

Exemple travaillé : une diagonale, deux réponses

MasqueVoisinage de 8Voisinage de 4
1 0 / 0 1 (deux pixels en diagonale)1 région2 régions
1 1 0 0 / 0 0 0 1 / 1 0 0 13 régions3 régions

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une diagonale compte une ou deux régions

Commande
docker exec jupyter python3 -c "import numpy as np; from skimage import measure; g=np.array([[1, 0], [0, 1]]); print(measure.label(g).max(), measure.label(g, connectivity=1).max())"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Compter les voisins blancs d’un pixel

Code: python
# Combien de voisins blancs a un pixel ? On regarde haut, bas, gauche, droite.
masque = [
    [0, 1, 0],
    [1, 1, 1],
    [0, 0, 1],
]
ligne = 1
colonne = 1
compte = 0
if masque[ligne - 1][colonne] == 1:
    compte = compte + 1
if masque[ligne + 1][colonne] == 1:
    compte = compte + 1
if masque[ligne][colonne - 1] == 1:
    compte = compte + 1
if masque[ligne][colonne + 1] == 1:
    compte = compte + 1
print("voisins blancs :", compte)
# Remplacez le 0 du milieu de la dernière ligne par 1, puis relancez.
# Combien de voisins blancs a maintenant le pixel du centre ?

Une erreur fréquente

Attention

Beaucoup pensent que le nombre de régions est le nombre d’objets. Deux pièces qui se touchent forment une seule région, et un point de bruit en forme une de plus. Comptez sur un masque propre, et vérifiez l’aire de chaque région.

La correspondance de modèle retrouve un motif

Parfois on connaît l’objet et on cherche où il est. On découpe un petit motif de l’image, puis on le glisse sur toute l’image en notant à chaque position un score de ressemblance.

Le meilleur score donne la position. Un score de 1 veut dire des pixels identiques. Le script find.py découpe un carré de 40 sur 40 dans les pièces et le cherche.

Retrouver un motif avec find.py

Commande
docker exec jupyter python3 steps/find.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin

Dans votre carnet, refaites le comptage des pièces avec connectivity=1, puis écrivez le nombre trouvé. Changez ensuite le seuil de 100 en 30, puis en 160.

Combien de régions trouvez-vous avec chacun ? Dites en une phrase pourquoi un seuil mal choisi change le comptage.

À propos de ce labo et de sa source: Lab de vision par ordinateur : pixels, seuils et comptage d’objets dans JupyterLab

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.