⚠️ Ceci est un site de traduction non officiel, sans lien avec ImageMagick Studio LLC. Pour des informations officielles, consultez la page originale (https://imagemagick.org/connected-components/).

Étiquetage des composantes connexes

L'étiquetage des composantes connexes (aussi appelé analyse des composantes connexes, extraction de blobs, étiquetage de régions, découverte de blobs ou extraction de régions) attribue des étiquettes uniques aux composantes connexes d'une image. Le processus d'étiquetage balaie l'image, pixel par pixel, du coin supérieur gauche au coin inférieur droit, afin d'identifier les régions de pixels connexes, c'est-à-dire les régions de pixels adjacents qui partagent le même ensemble de valeurs d'intensité. Par exemple, trouvons les objets dans cette image :

purse

Pour identifier les objets dans cette image, utilisez cette commande :

magick objects.gif -connected-components 4 -auto-level -depth 8 objects.png

Les objets détectés reçoivent des étiquettes uniques. Utilisez l'auto-nivellement pour visualiser les objets détectés :

Objects

Les statistiques des objets sont utiles à examiner. Pour les afficher, utilisez cette commande :

magick objects.gif -define connected-components:verbose=true -connected-components 4 objects.png

Cinq objets ont été détectés dans l'image source avec ces statistiques :

Objects (id: bounding-box centroid area mean-color):
  0: 256x171+0+0 119.2,80.8 33117 srgb(0,0,0)
  2: 120x135+104+18 159.5,106.5 8690 srgb(255,255,255)
  3: 50x36+129+44 154.2,63.4 1529 srgb(0,0,0)
  4: 21x23+0+45 8.8,55.9 409 srgb(255,255,255)
  1: 4x10+252+0 253.9,4.1 31 srgb(255,255,255)

Ajoutez -define connected-components:exclude-header=true pour afficher les objets sans la ligne d'en-tête. Ajoutez -define connected-components:exclude-ids=true. Utilisez -define connected-components:sort=area | width | height | x | y pour trier les objets de composantes connexes en mode verbeux. Par défaut, les objets sont listés par aire décroissante. Ajoutez -define connected-components:sort-order=increasing | decreasing pour spécifier l'ordre de tri.

Utilisez -connected-components 8 pour visiter 8 voisins au lieu de 4. Par défaut, les couleurs des voisins doivent être exactes pour faire partie d'un objet unique. Utilisez l'option -fuzz pour inclure dans un objet les pixels dont la couleur est proche.

Vous pouvez vouloir éliminer les petits objets en les fusionnant avec leurs voisins plus grands. Si c'est le cas, utilisez cette commande :

magick objects.gif -define connected-components:area-threshold=410 -connected-components 4 \
  -auto-level objects.jpg

Voici les résultats attendus. Remarquez comme les petits objets sont désormais fusionnés avec l'arrière-plan.

Objects

Remarquez comme deux des objets ont été fusionnés, laissant trois objets restants :

Objects (id: bounding-box centroid area mean-color):
  0: 256x171+0+0 118.0,80.4 33557 srgb(0,0,0)
  2: 120x135+104+18 159.5,106.5 8690 srgb(255,255,255)
  3: 50x36+129+44 154.2,63.4 1529 srgb(0,0,0)

Par défaut, l'image étiquetée est en niveaux de gris. Vous pouvez à la place remplacer la couleur de l'objet dans l'image étiquetée par la mean-color de l'image source. Il suffit d'ajouter ce réglage, -define connected-components:mean-color=true, à votre ligne de commande.

Les seuils peuvent éventuellement inclure des plages, par exemple -define connected-components:area-threshold=410-1600. Pour conserver l'objet d'arrière-plan, identifiez-le avec -define connected-components:background-id=object-id. L'objet d'arrière-plan par défaut est l'objet ayant la plus grande aire.

En plus de l'aire, ces métriques de seuillage sont prises en charge :

  • connected-components:angle-threshold (à partir de l'ellipse équivalente)
  • connected-components:circularity-threshold (4piarea/perimeter^2)
  • connected-components:diameter-threshold (sqrt(4*area/pi))
  • connected-components:eccentricity-threshold (à partir de l'ellipse équivalente)
  • connected-components:major-axis-threshold (diamètre de l'ellipse équivalente)
  • connected-components:minor-axis-threshold (diamètre de l'ellipse équivalente)
  • connected-components:perimeter-threshold

Vous pouvez vouloir supprimer certains objets. Utilisez -define connected-components:remove-ids=list-of-ids (par exemple -define connected-components:remove-ids=2,4-5). Ou utilisez -define connected-components:keep-ids=list-of-ids pour conserver ces objets et fusionner tous les autres. Pour plus de commodité, vous pouvez conserver les objets de tête, en plus de l'objet d'arrière-plan, avec cette option : -define connected-components:keep-top=number-of-objects. Plutôt que par identifiants d'objet, vous pouvez aussi supprimer ou conserver des objets identifiés par leur couleur, par exemple -define connected-components:keep-colors=red;green;blue.

Les objets de votre image peuvent paraître homogènes tout en ayant des valeurs de couleur légèrement différentes. Par défaut, seuls les pixels qui correspondent exactement sont considérés comme faisant partie d'un objet donné. Pour de légères variations de couleur dans un objet, utilisez -fuzz. Par exemple,

magick star-map.png -fuzz 5% -define connected-components:verbose=true \
  -define connected-components:mean-color=true -connected-components 4 stars.gif

Composantes connexes

L'algorithme parcourt les pixels d'une composante, dans l'ordre habituel ligne-colonne, à la recherche d'une composante située au-dessus ou à gauche. Pour la composante située en haut à gauche, il n'y a aucune composante au-dessus ou à gauche dans laquelle fusionner. Il existe donc des cas particuliers où vous devez pivoter, répéter les composantes connexes, puis pivoter en sens inverse. Par exemple,

 magick  \
  objects.gif  \
  -define connected-components:verbose=true \
  -define connected-components:area-threshold=6000 \
  -virtual-pixel None \
  -connected-components 4 -rotate 180 \
  -connected-components 4 -rotate -180 \
  objects.png