Etiquetado de componentes conexos
El etiquetado de componentes conexos (también llamado análisis de componentes conexos, extracción de blobs, etiquetado de regiones, descubrimiento de blobs o extracción de regiones) etiqueta de forma única los componentes conexos de una imagen. El proceso de etiquetado recorre la imagen, píxel a píxel, de arriba a la izquierda hacia abajo a la derecha, con el fin de identificar regiones de píxeles conexas, es decir, regiones de píxeles adyacentes que comparten el mismo conjunto de valores de intensidad. Por ejemplo, vamos a encontrar los objetos de esta imagen:
Para identificar los objetos de esta imagen, use este comando:
magick objects.gif -connected-components 4 -auto-level -depth 8 objects.png
Los objetos detectados se etiquetan de forma única. Use el ajuste automático de niveles (auto level) para visualizar los objetos detectados:
Las estadísticas de los objetos son útiles para revisar. Para mostrarlas, use este comando:
magick objects.gif -define connected-components:verbose=true -connected-components 4 objects.png
Se detectaron cinco objetos en la imagen de origen con estas estadísticas:
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)
Añada -define connected-components:exclude-header=true para mostrar los objetos sin la línea de cabecera. Añada -define connected-components:exclude-ids=true. Use -define connected-components:sort=area | width | height | x | y para ordenar los objetos de componentes conexos en modo verbose. De forma predeterminada, los objetos se enumeran en orden decreciente de área. Añada -define connected-components:sort-order=increasing | decreasing para especificar el orden de clasificación.
Use -connected-components 8 para visitar 8 vecinos en lugar de 4. De forma predeterminada, los colores de los vecinos deben coincidir exactamente para formar parte de un objeto único. Use la opción -fuzz para incluir como parte de un objeto los píxeles que tengan un color cercano.
Es posible que desee eliminar objetos pequeños fusionándolos con sus vecinos más grandes. En ese caso, use este comando:
magick objects.gif -define connected-components:area-threshold=410 -connected-components 4 \
-auto-level objects.jpg
Aquí están los resultados esperados. Observe cómo los objetos pequeños ahora se han fusionado con el fondo.
Observe cómo dos de los objetos se fusionaron, dejando tres objetos restantes:
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)
De forma predeterminada, la imagen etiquetada está en escala de grises. En su lugar, puede reemplazar el color del objeto en la imagen etiquetada por el mean-color de la imagen de origen. Simplemente añada este ajuste, -define connected-components:mean-color=true, a su línea de comandos.
Los umbrales pueden incluir opcionalmente rangos, p. ej. -define connected-components:area-threshold=410-1600. Para conservar el objeto de fondo, identifíquelo con -define connected-components:background-id=object-id. El objeto de fondo predeterminado es el objeto con mayor área.
Además del área, hay soporte para estas métricas de umbral:
- connected-components:angle-threshold (a partir de la elipse equivalente)
- connected-components:circularity-threshold (4piarea/perimeter^2)
- connected-components:diameter-threshold (sqrt(4*area/pi))
- connected-components:eccentricity-threshold (a partir de la elipse equivalente)
- connected-components:major-axis-threshold (diámetro a partir de la elipse equivalente)
- connected-components:minor-axis-threshold (diámetro a partir de la elipse equivalente)
- connected-components:perimeter-threshold
Es posible que desee eliminar ciertos objetos. Use -define connected-components:remove-ids=list-of-ids (p. ej. -define connected-components:remove-ids=2,4-5). O use -define connected-components:keep-ids=list-of-ids para conservar estos objetos y fusionar todos los demás. Por comodidad, puede conservar los objetos principales, además del objeto de fondo, con esta opción: -define connected-components:keep-top=number-of-objects. En lugar de los ids de objeto, también puede eliminar o conservar objetos identificados por su color, p. ej. -define connected-components:keep-colors=red;green;blue.
Los objetos de su imagen pueden parecer homogéneos pero tener valores de color ligeramente diferentes. De forma predeterminada, solo los píxeles que coinciden exactamente se consideran parte de un objeto concreto. Para ligeras variaciones de color en un objeto, use -fuzz. Por ejemplo,
magick star-map.png -fuzz 5% -define connected-components:verbose=true \
-define connected-components:mean-color=true -connected-components 4 stars.gif
Componentes conexos
El algoritmo recorre los píxeles de un componente, en el orden habitual de fila y columna, buscando un componente situado encima o a la izquierda. Para el componente en la esquina superior izquierda, no hay componentes encima ni a la izquierda con los que fusionarse. Como resultado, hay casos especiales en los que es necesario rotar, repetir los componentes conexos y luego volver a rotar. Por ejemplo,
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


