# DetectBlobs

La función DetectBlobs (DetectarBlobs) realiza un tipo de análisis de manchas conocido como «análisis de la conectividad» en una región de interés (RDI). En el «análisis de la conectividad», los píxeles de la RDI se dividen en dos categorías, Mancha (Blob, en inglés) o Fondo, considerando para ello un valor umbral en escala de grises de modo que todos los píxeles con valores por debajo del umbral se asignan a la categoría "negra" y todos los píxeles con valores por encima del umbral a la categoría "blanca".

De esta forma, los píxeles con valores similares se agrupan en función de su "color" y en función de si "están en contacto" o no con los píxeles vecinos. Los píxeles del fondo están conectados a sus vecinos si están en contacto con ellos en cualquiera de sus lados laterales o en el superior o inferior, mientras que los píxeles de una mancha están conectados con sus vecinos si están en contacto con ellos en cualquiera de sus lados, ya sea en un lado lateral, en el superior o inferior, o en un punto diagonal del mismo.

Una vez procesada la imagen, estará segmentada por manchas y píxeles de fondo. Las manchas que se encuentren en la RDI se identificarán en función de sus características físicas y valores asignados, tales como ubicación de la mancha en la imagen (sus coordenadas de fila y columna), su área, perímetro, extensión y elongación. Los datos de las manchas extraídas se almacenan y notifican en una estructura de datos de Blobs.

Esta función constituye el primer paso del análisis de manchas y tanto FindBlobs como SortBlobs utilizan finalmente Referencias de celda a una estructura de datos de Blobs propia de la función DetectBlobs, ya sea directamente o a través de Auditing.

## DetectBlobs Entradas

Parámetro | Descripción
Imagen | Este parámetro debe hacer referencia a una celda de la hoja de cálculo que contiene una estructura de datos de Imagen; por defecto, este parámetro hace referencia a A0, la celda que contiene la estructura de datos. Este parámetro puede hacer también referencia a otras estructuras de datos de Imagen, como las devueltas por las funciones de Imagen Funciones de Vision Data Access o Funciones de transformación de coordenadas.
Elemento posicionador | Define la región de interés (RDI) en relación con una entrada de Fixture [Elemento posicionador] o la salida del sistema de coordenadas de imagen de una función de Vision Tools. La configuración de la RDI con relación a un elemento posicionador hace que si se gira o desplaza el elemento posicionador, se girará o desplazará en consonancia la RDI, manteniéndose fija la relación entre ambos. El valor de configuración predeterminado es (0,0,0), la esquina superior izquierda de la imagen.
X | El desplazamiento en X, en coordenadas de la imagen.
Y | El desplazamiento en Y, en coordenadas de la imagen.
Theta | La rotación desde el eje X de la imagen, en el sistema de coordenadas de imagen. (+/-360 grados en el sentido de las agujas del reloj)
Región | También conocida como región de interés (RDI), especifica la región de la imagen que se somete a análisis. Haga doble clic sobre el parámetro Región para crear un Modo gráfico interactivo que permite transformar y girar. Seleccione este parámetro y pulse el botón «Maximizar región» en la barra de herramientas de edición de tareas de la hoja de propiedades a fin de expandir automáticamente la región hasta cubrir toda la imagen.
X | El desplazamiento en X del origen, en coordenadas del elemento posicionador.
Y | El desplazamiento en Y del origen, en coordenadas del elemento posicionador.
Ancho | La dimensión de la región en la dirección del eje X de la misma.
Altura | La dimensión de la región en la dirección del eje Y de la misma.
Ángulo | La orientación en coordenadas del elemento posicionador.
Curva | La desviación angular entre el eje X de la región y la línea limítrofe del lado opuesto.
Nota: Los parámetros Elemento posicionador y Región deben estar definidos dentro de los límites de la imagen; de lo contrario, la función devolverá #ERR.
Región externa | Este parámetro utiliza Referencias de celda a una herramienta o función de control Annulus, Circle [Círculo], Region, EditAnnulus, EditCircle, EditCompositeRegion, EditPolygon, EditRegion. Cuando se utiliza este parámetro, la función ignora los ajustes de Región y Elemento posicionador e inspecciona el área de imagen especificada por la región a la que se hace referencia. Si se hace referencia a un control de EditCompositeRegion, el área de inspección puede consistir en una combinación de formas. Cada forma de la región combinada puede definirse como una forma añadida al área de inspección o una sustraída (enmascaramiento) de la misma. Nota: Si este parámetro ha sido configurado como referencia a una región externa, entonces, para utilizar la Región interna de la función, habrá que poner manualmente este parámetro a cero introduciendo para ello el valor 0 en lugar de la referencia de celda. En caso contrario, la función seguirá haciendo referencia a la región externa.
Número a clasificar | Especifica el número de manchas (blobs) a clasificar.
0 | Devuelve todas las manchas que cumplen con los parámetros de color y tamaño especificados en Color Blob/Color Fondo y Límite de área: Mín./Límite de área: Máx. de parámetro.
1 a 4096 (valor predeterminado = 1) | Devuelve como máximo el número especificado de manchas (blobs) que cumplen con los ajustes de color y tamaño especificados en Color Blob/Color Fondo y Límite de área: Mín./Límite de área: Máx. de parámetro. Si se encuentran más manchas, se seleccionarán las de mayor extensión (área).
Nota: Si el valor del parámetro Número a clasificar es mayor que cero, la función DetectBlobs insertará automáticamente una tabla de resultados que presentará como máximo las 10 entradas que corresponden a las 10 primeras manchas contenidas en la estructura de datos de Blobs. Si desea que se visualicen más entradas, puede ampliar la tabla copiando la última fila y pegando adicionalmente la fila tantas veces como desee al final de la table; asegúrese de incrementar el número de índice de la(s) fila(s) recién pegada(s) para que se indexen adecuadamente las manchas.
Umbral | Especifica el valor en escala de grises que ha de utilizarse para separar las manchas del fondo. Este valor puede determinarse utilizando el ajuste automático de la función DetectBlobs (ajuste por defecto) o configurarlo manualmente mediante ensayo y error o establecerlo como Referencias de celda a los resultados calculados por una función Histograma.
-1 (valor predeterminado) | La función calcula automáticamente un valor umbral a partir de evaluaciones estadísticas de escala de grises en la imagen.
De 0 a 255 | Especifica un valor umbral en escala de grises, comprendido entre 0 y 255.
Rellenar orificios | Especifica uno de los dos métodos para procesar las estadísticas acumuladas en orificios.
0 = DESACTIVADO (por defecto) | Habilita la contribución de orificios en las estadísticas globales de manchas. Por ejemplo, añadir orificios a una mancha hace que disminuya el área de la mancha. Nota: Cuando se pone a DESACTIVADO, se notifican manchas que son orificios dentro de otra mancha. En el siguiente ejemplo, se notifica la presencia de una mancha, Blob 1, que es de hecho un orificio dentro de otra mancha, el Blob 0. En las estadísticas de manchas, el valor del área de la mancha denominada Blob 0 (fila superior) no contiene el área de la mancha denominada Blob 1 (fila inferior).
1 = ACTIVADO | Deshabilita la contribución de orificios en las estadísticas globales de manchas. Por ejemplo, añadir orificios a una mancha no tiene ningún efecto sobre el área de la mancha. Nota: Cuando se pone a ACTIVADO, se ignoran las manchas que son orificios dentro de otra mancha. En el siguiente ejemplo, se ignora el orificio dentro de la mancha denominada Blob 0 y solo se notifica una mancha (Blob 0). En las estadísticas de manchas, el valor del área de la mancha 0 se refiere a todo el área de la mancha, incluido el orificio.
Blobs fronterizos | Especifica una de las dos formas de gestionar las manchas que cruzan la frontera de la RDI.
0 = DESACTIVADO | Excluye las manchas que cruzan el límite de la RDI; cualquier mancha que cruce la frontera de la RDI no se incluirá en la estructura de datos final de Blobs.
1 = ACTIVADO (por defecto) | Incluye las manchas que cruzan el límite de la RDI; cualquier mancha que cruce el límite de la RDI se incluirá en la estructura de datos final de Blobs (siempre que cumpla también los ajustes especificados en Color Blob/Color Fondo y Límite de área: Mín./Límite de área: Máx.de parámetro.
Color: Blob | Especifica el color de la mancha.
0 = negro | Sólo devuelve las manchas que están por debajo del valor umbral especificado.
1 = blanco | Sólo devuelve las manchas que están por encima del valor umbral especificado.
2 = cualquiera (por defecto) | No hay ningún requisito en cuanto al color de la mancha.
Nota: Cuando Color: Blob y Color: Fondo tiene el mismo valor de ajuste que Color, no se notificará ninguna mancha. Por ejemplo, cuando Color: Blob configurado como negro y Color: Fondo configurado también como negro, no se notificará ninguna mancha.
Color: Blob = Negro Color: Fondo = Negro | Color: Blob = Cualquiera o Blanco Color: Fondo = Negro
Sin embargo, incluso si Color: Blob y Color: Fondo están configurados con el mismo color, se notificarán manchas detectadas cuando estas están contenidas en un área de color opuesto (véanse los ejemplos siguientes). Si alguna parte de la mancha no está contenida en un área de color opuesto, no se notificará la existencia de dicha mancha.
Color: Blob = Negro Color: Fondo = Negro | Color: Blob = Blanco Color: Fondo = Blanco
Color: Fondo | Especifica el color del fondo en la imagen capturada. El análisis de conectividad octodireccional se realiza en el primer plano y el cuadridireccional en el fondo.
0 = negro
1 = blanco (por defecto)
Límite de área: Mín. | Especifica una limitación al área mínima, en número de píxeles, de todas las manchas (blobs) devueltas por la función (por defecto = 100); se devolverán únicamente las manchas que presentan un área mayor que el valor de límite de área: Mín. especificado. El intervalo de valores admisibles para el parámetro es: Límite inferior: 0 Límite superior: Resolución (ancho * alto) del sistema de visión conectado. Por ejemplo, si está conectado al sistema de visión In-Sight D902, el intervalo de valores admisibles para el parámetro es de 0 a 2.304.000 (1920x1200).
Límite de área: Máx. | Especifica una limitación al área máxima, en número de píxeles, de todas las manchas devueltas por la función (por defecto = 100000); se devolverán únicamente las manchas que presentan un área menor que el valor límite de área: Máx. especificado. El intervalo de valores admisibles para el parámetro es: Límite inferior: 0 Límite superior: Resolución (ancho * alto) del sistema de visión conectado. Por ejemplo, si está conectado al sistema de visión In-Sight D902, el intervalo de valores admisibles para el parámetro es de 0 a 2.304.000 (1920x1200).
Mostrar | Especifica el modo de visualización de los gráficos de DetectBlobs sobre la imagen.
0 = ocultar todo (por defecto) | Todos los gráficos estarán ocultos, excepto cuando la celda que contiene la función DetectBlobs está resaltada en la hoja de cálculo.
1 = solo gráficos de resultados | Los contornos de las manchas se visualizarán en todo momento.
2 = gráficos de entrada y resultado | Tanto la región de la imagen entrada como los contornos de las manchas extraídas se visualizarán en todo momento.

## DetectBlobs Salidas

Devuelve | Una estructura de datos de Blobs que contiene las manchas extraídas de la imagen o #ERR si alguno de los parámetros de entrada no es válido.
Resultados | Cuando se inserta inicialmente DetectBlobs en una celda, se crea una tabla de resultados en la hoja de cálculo por medio de las siguientes Blobs Funciones de Vision Data Access Nota: Si el Número a clasificar es igual a 0, la tabla comprenderá únicamente la función GetNFound (ObtenerNEncontrados). Si el valor del parámetro Número a clasificar es mayor que cero, la función DetectBlobs insertará automáticamente una tabla de resultados que presentará como máximo las 10 entradas que corresponden a las 10 primeras manchas contenidas en la estructura de datos de Blobs. Si desea que se visualicen más entradas, puede ampliar la tabla copiando la última fila y pegando adicionalmente la fila tantas veces como desee al final de la table; asegúrese de incrementar el número de índice de la(s) fila(s) recién pegada(s) para que se indexen adecuadamente las manchas.
Etiqueta | Nombre de la función | Descripción
X | GetX(Blobs, Índice de Blob) | Devuelve la coordenada X del centro de masa de una mancha (centroide).
Y | GetY(Blobs, Índice de Blob) | Devuelve la coordenada Y del centro de masa (centroide) de una mancha (Blob).
Ángulo | GetAngle(Blobs, Índice de Blob) | Devuelve el ángulo del eje principal (mayor) de una mancha con respecto al eje Y.
Color | GetColor(Blobs, Índice de Blob) | Devuelve el valor del color (0 = negro, 1 = blanco) de una mancha.
Puntuación | GetScore(Blobs, Índice de Blob) | Una medida del grado de correspondencia de la mancha con los criterios utilizados por una función FindBlobs.
Área | GetArea(Blobs, Índice de Blob) | Devuelve el área de la mancha (medida en píxeles). Nota: Si la mancha presenta orificios en su interior, el valor del área variará en función de si está habilitada o deshabilitada la casilla Rellenar orificios.
Elongación | GetElongation(Blobs, Índice de Blob) | Devuelve un valor que cuantifica el alargamiento de una mancha de píxeles desde el centro de masa (centroide) de la misma. Por ejemplo, un círculo tiene una elongación de valor igual a 0, mientras que un clavo tiene un valor de elongación elevado.
Orificios | GetHoles(Blobs, Índice de Blob) | Devuelve el número de orificios contenidos en una mancha. Nota: Solo los orificios que tienen un área mayor que el valor límite de área: Mín. especificado.
Perímetro | GetPerimeter(Blobs, Índice de Blob) | Devuelve la longitud de la línea que forma el contorno de la mancha; el perímetro se determina contando los lados externos de los píxeles que forman el contorno de la mancha.
Extensión | GetSpread(Blobs, Índice de Blob) | Devuelve un valor que indica cómo se distribuyen los píxeles de una mancha que están más alejados del centro de masa (centroide) de la mancha. Por ejemplo, un objeto de forma circular tiene un valor de Spread (extensión) menor que un objeto de forma ovalada.

## Ejemplo con DetectBlobs

La función DetectBlobs se utiliza para identificar y localizar manchas formadas por píxeles conectados entre sí, que pueden tener diversas formas y tamaños. Este ejemplo ilustra cómo la información devuelta en la tabla de resultados de la estructura de datos de DetectBlobs está relacionada con las manchas encontradas y cómo dicha información puede utilizarse para clasificar y filtrar posteriormente las manchas en función de sus características.

Para este ejemplo, se ha utilizado la siguiente imagen para ayudar a ilustrar el significado de los valores que se devuelven en la tabla de resultados de la función DetectBlobs:

Se insertó una función DetectBlobs en una celda vacía de la hoja de cálculo. A partir de las formas en la imagen, los parámetros de la hoja de propiedades de DetectBlobs se configuraron de la siguiente manera:

- Imagen: Para este ejemplo se ha utilizado la configuración predeterminada, pero este parámetro puede hacer referencia a cualquier estructura de datos de Imagen, como una estructura de datos de imagen producida por una función de Filter que procesa la imagen para eliminar el exceso de ruido en ella antes de inspeccionar la imagen en busca de manchas.
- Elemento posicionador: Se ha utilizado la configuración predeterminada de elemento posicionador porque se utiliza una imagen estática que no se va a girar ni desplazar. Sin embargo, cuando se utilice la función DetectBlobs con imágenes que están sometidas a movimientos, es aconsejable asignar un Fixture [Elemento posicionador] a la región de la imagen.
- Región: La región de la imagen se maximizó para incluir todas las formas en el análisis. Tras hacer clic sobre el parámetro Región y pulsar el botón «Maximizar región» en la barra de herramientas de la hoja de propiedades, se amplia automáticamente la región hasta cubrir toda la imagen.
- Número a clasificar: El número a clasificar se ha ajustado poniéndolo a seis. Se podría haber puesto también este parámetro a 0 y entonces la herramienta habría extraído automáticamente todas las manchas que cumplieran con los parámetros de color y tamaño especificados en Color Blob/ Color Fondo y Límite de área: Mín./Límite de área: Máx. de parámetro.
- Umbral: Se ha utilizado el ajuste predeterminado con el que se calcula automáticamente el valor de Umbral en escala de grises. En esta imagen, las diferencias de valores en escala de grises son muy pronunciadas y se distingue clarísimamente cuáles son los píxeles oscuros y cuáles los claros. En las aplicaciones en las que la gradación es más sutil y el ajuste de umbral automático no llega a separar muy bien los valores, puede resultar muy útil utilizar funciones Histograma como las funciones HistHead o HistTail para determinar las intensidades en escala de grises de distintas regiones de la imagen.
- Rellenar orificios: Se utilizó el ajuste predeterminado con el que se incluye la contribución de los orificios encontrados en las manchas, lo que implica que disminuye el área total de las manchas con orificios. Si se hubiera marcado la casilla Rellenar orificios, se notificarían también los orificios encontrados dentro de manchas y se habría añadido el área del interior de los orificios, lo que habría aumentando el área de las manchas con orificios.
- Blobs fronterizos: Se ha utilizado el ajuste predeterminado con el que se incluyen las manchas que cruzan el límite de la región en la imagen. Con este ajuste, si se hubiera movido la imagen hacia la izquierda de manera que el círculo más grande y la forma cuadrada más pequeña cruzarían el límite izquierdo de la región en la imagen, las partes de dichas formas geométricas que aún estarían dentro del límite de la región se habrían extraído como manchas. Sin embargo, si la casilla estuviera sin marcar, no se habrían procesado dichas manchas.
- Límite de área: Mín./Máx.: Se han utilizado los ajustes predeterminados. Con estos ajustes se filtran, durante la fase de extracción, las manchas de la región en función de los ajustes de límite mínimo y máximo del área de una mancha con los que se determinan si una mancha puede clasificarse o no como mancha.
- Mostrar: Se ha utilizado el ajuste predeterminado con el que solo se visualizan los gráficos de resultados cuando está seleccionada la celda que contiene la estructura de datos de Blobs, como es el caso en el ejemplo siguiente.

Una vez configurada la hoja de propiedades de DetectBlobs, se genera una estructura de datos de Blobs y una tabla para los datos de resultados.

Los valores devueltos en la tabla de resultados pueden utilizarse para filtrar y clasificar las manchas utilizando las funciones FindBlobs y SortBlobs. Por ejemplo, se podría insertar una función FindBlobs en la hoja de cálculo y hacer referencia a la función DetectBlobs. Se utilizaría entonces la función FindBlobs para filtrar las manchas en función de su extensión. A continuación, se podría insertar una función SortBlobs en la hoja de cálculo y hacer con ella referencia a la función FindBlobs recientemente creada a fin de ordenar la lista de blobs en función de su posición X, Y.