8 UNIDAD DIDÁCTICA 8 Visión artificial aplicada a la industria 8. Procesado 8: Procesado ÍNDICE OBJETIVOS................................................................................................................................................................ 257 INTRODUCCIÓN....................................................................................................................................................... 258 8.1. Detectores de Salto............................................................................................................................................. 259 8.1.1. ROI´s de línea..................................................................................................................................................... 259 8.1.2. ROI´s de Área..................................................................................................................................................... 266 8.2. Lectores de códigos............................................................................................................................................ 271 8.2.1. Códigos de barras............................................................................................................................................... 271 8.2.2. Códigos 2D como Datamatrix o QR....................................................................................................................... 272 8.2.3. OCR.................................................................................................................................................................. 273 8.3. Search (buscadores de patrones)...................................................................................................................... 279 8.3.1. Search Geoemtric............................................................................................................................................... 279 8.3.2. Search Line Based.............................................................................................................................................. 281 8.3.3. Search Correlation............................................................................................................................................... 281 8.3.4. Search Edge...................................................................................................................................................... 283 8.4. Analizador de Blobs............................................................................................................................................. 286 8.5. Algoritmos Estadísticos....................................................................................................................................... 289 8.6. Funciones para analizar el color........................................................................................................................ 290 8.6.1. Pre-procesos color.............................................................................................................................................. 291 8.6.2. Algoritmos color.................................................................................................................................................. 293 8.6.3. Color Presence................................................................................................................................................... 293 8.7. Aligment............................................................................................................................................................... 297 RESUMEN................................................................................................................................................................... 301 255 8: Procesado OBJETIVOS ■ En el siguiente capítulo vamos a ver las funciones más utilizadas en Sherlock para procesar una imagen y extraer información de ella. Veremos funciones muy diferentes entre ellas y el objetivo es entender la función más que no saber utilizarla en Sherlock ■ ■ Entender los diferentes Detectores de salto y comprender cuando y porque utilizaremos unos u otros. En los Lectores de códigos nos encontraremos con dos filosofías muy dispares el objetivo es conocer los lectores simples y entender los problemas que podemos tener al utilizarlos, así como conocer los más avanzados y saber cuándo los deberemos usar. ■ Ser capaces de configurar y utilizar el Search (buscadores de patrones) dentro del Sherlock, así como entender los diferentes tipos de Search y las ventajas y desventajas que tienen cada uno de ellos ■ ■ ■ Entender el funcionamiento de los Analizadores de Blobs, así como comprender las posibles utilidades que le podemos dar a la función. De las funciones Estadísticas nos interesar simplemente conocerlas debido a que son funciones muy simples que se utilizaran en pocas aplicaciones.. En los algoritmos para procesar imágenes en color nos centraremos en los Comparadores de color viendo cómo se configuran en el Sherlock y los diferentes resultados que podremos obtener de cada uno de ellos. 257 Visión artificial aplicada a la industria INTRODUCCIÓN En los capítulos anteriores hemos estado describiendo los diferentes componentes de un sistema de visión, para llegar a este punto. Hasta ahora todos los esfuerzos que hemos realizado han sido para conseguir una buena imagen, que nos facilitara la detección de las características que deseamos extraer de ella. A grandes rasgos nos encontraremos las siguientes funciones: En teoría, llegados a este punto tenemos que tener una imagen óptima para empezar a trabajar. Pero el empezar a procesar la imagen va a depender mucho de lo que deseemos hacer. Encontraremos un gran número de funciones que nos permitirán extraer información de la imagen. ■■ Analizador de Blobs. ■■ Detectores de salto. ■■ Lectores de códigos. ■■ Search (buscadores de patrones). ■■ Estadísticos. ■■ Comparadores de color. Como es lógico existirían muchísimos más, pero esta podría ser una selección básica de los algoritmos que Los algoritmos o funciones de procesado de imagen más se usan en la visión industrial. los podremos clasificar de diferentes formas, según En ella encontraremos funciones que trabajan a nivel el tipo de dato que se quiera extraer, el proceso de ROI de línea y funciones que pueden trabajar tanto matemático que utilicen, la ROI sobre la que trabajen en imágenes en color como en monocromo. o el tipo de imagen que traten. A medida que describamos los grupos y las funciones En este capítulo las clasificaremos según el tipo de que corresponden a cada grupo indicaremos a qué dato que deseamos extraer o más concretamente tipo de ROI van asociadas y el tipo de imagen que sobre el trabajo que realiza la función. procesan. 258 8: Procesado 8.1. Detectores de Salto Las funciones de detección de salto nos las encontraremos básicamente en las ROI´s de línea o multilinea , pero también podremos encontrar alguna función como pueden ser el HVLine o el Crawler en las ROI´s de Area. Los detectores de salto siempre trabajan en imágenes en monocromo y son funciones que detectan el gradiente en la línea y se quedan con un determinado nivel de gradiente. En Sherlock podremos encontrar los siguientes detectores de salto: ROI´S de línea: ■■ Find Edge. ■■ Edge Count. ■■ Detect Edges. ■■ Outside caliper. ■■ Inside Caliper. ROI´s de Area: ■■ HVLine. ■■ Edge Crawler. ■■ Laser Points. 8.1.1. ROI´s de línea Cuando trabajemos con ROI´s de línea o multi-linea nos encontraremos que la gran mayoría de funciones se basan en la detección de los saltos en la imagen. Entendiendo saltos en la imagen como cualquier cambio brusco de nivel de gris. Figura 8.216. Imagen original Figura 8.217. Proyección de la línea 259 Visión artificial aplicada a la industria Si nos fijamos en las imágenes superiores podemos apreciar en el lado Izquierdo una pieza circular iluminada con Back-light, donde podemos apreciar una línea en verde. Mientras que en el lado derecho podemos ver la representación gráfica de la ROI de línea (línea verde), donde tenemos el nivel de gris de cada pixel representado en marrón y el gradiente representado en rojo. En las funciones de detección de salto nos basaremos en el gradiente y buscaremos picos en esa gráfica. 8.1.1.1. Find Edge El Find Edge es una función que detecta el primer salto, es una función que encontraremos en todos los programas de visión con diferentes nombres y que nos permite mediante los parámetros para localizar el primer o ultimo salto en la línea. Para ello deberemos de parametrizar las diferentes opciones que dispone la función y que veremos a continuación. Figura 8.218. Ventana de parametrización del Find Edge. Edge Profile En el Edge Profile se nos pregunta la geometría del salto, pudiendo modificar si deseamos detectar un salto estrecho donde la diferencia de nivel de gris se produce muy rápidamente o un salto ancho donde en la gráfica de nivel de gris tendremos una pendiente menos pronunciada. 260 8: Procesado Smoothing El Smooting sería un pre-procesado de la línea, con el suavizaríamos la línea de pixeles para evitar Ruido. Particularmente recomendamos trabajar con esta opción a 0 y si realmente precisamos de suavizar la ROI, utilizaremos las funciones de pre-procesado que hemos visto en el capítulo anterior. Detector Size En el Detector Size indicamos el número de píxeles con el que calculamos el gradiente, el gradiente en una línea es el número de niveles de gris que existe entre un píxel y el vecino. Para incrementar el gradiente en vez de realizar la diferencia entre el píxel y su vecino lo podemos hacer con n vecinos o sea con n posiciones adyacentes al píxel y quedarnos con la diferencia mayor. Min Edge Strength En este valor definiremos qué consideramos como salto y que no, este sería el parámetro más importante y definimos cuantos niveles de gris precisamos para considerar que se produce un salto en nuestra línea. Edge Type En esta opción indicamos si deseamos buscar un salto de blanco a negro, de negro a blanco o cualquiera de los dos. Find Edge Aquí indicamos el salto que deseamos encontrar, el primero, el segundo, el tercero, etc... Una vez configurada la herramienta, el sistema nos devolverá un punto. Este punto normalmente será parte del contorno de la pieza o de una zona que deseamos localizar en concreto. En Sherlock tendremos toda una serie de funciones de tratamiento de datos, que a partir de puntos podrán medir distancias, calcular ángulos, rectas de regresión o circunferencias. En la mayoría de aplicaciones donde usemos funciones como el Finde Edge usaremos estas funciones para obtener datos más significativos que un punto. 261 Visión artificial aplicada a la industria Un ejemplo de ello podría ser el siguiente programa: Figura 8.219. Calculo del diámetro de una pieza. En el pantallazo superior podemos ver como mediante una ROI de multilineas aplicamos un Find Edge para detectar el contorno de la pieza. La función nos devuelve una Array con 8 puntos, si seleccionamos una función como el Pts to Best Circle que encontraremos en las funciones geométricas, podemos enlazar los puntos y que la función nos calcule la circunferencia que mejor se adapta a estos 8 puntos devolviéndonos el centro, el diámetro y el nivel de circularidad entre otros parámetros. Este podría ser un ejemplo muy simple de para qué podemos usar el Find Edge. 8.1.1.2. Edge Count El Edge count funciona igual que el Find Edge pero con diferente filosofía en vez de pedirle que detecte un salto se le pide que nos diga cuantos saltos localiza. A nivel de configuración veremos que es mucho más simple 262 8: Procesado Figura 8.220. Ventana de parametrización del Edge Count. En el Edge Count tenemos que indicarle el número máximo de saltos tanto de negro a blanco como de blanco a negro que deseamos detectar. El Min Edge Strength seria exactamente igual que en el Find Edge y veremos que aparece en casi todas las funciones de detección de salto. Pixel 2 Skip: El parámetro de Pixel 2 Skip nos indica el número de pixeles que tiene que haber entre un salto y otro, de forma que podemos filtrar saltos que están muy juntos. 263 Visión artificial aplicada a la industria Figura 8.221. Ejemplo de Edge Count. En la imagen superior podemos apreciar cómo funciona el Edge Count devolviéndonos el número de transiciones de negro a blanco y de blanco a negro que localiza así como su posición. En este ejemplo en concreto nos podría servir para ver que no falta ninguno de los pins y poder saber el tamaño de los pins al medir la distancia de punto a punto. 8.1.1.3. Detect Edges El Detect Edges es muy parecido al Edge Count obteniendo como resultado casi los mismos datos que el Edge Count, pero el Detect Edges está más orientado a localizar los puntos que a contarlos, de forma que tendremos más opciones como ocurría en el Find Edge. Figura 8.222. Ventana de parametrización del Detect Edges. 264 8: Procesado Debido a poder parametrizar más valores y ajustar mejor la función utilizaremos mucho más el Detect Edges que no el Edge Count ya que en los dos obtendremos los mismos resultados. 8.1.1.4. Outside Caliper e Inside Caliper Estas dos funciones están pensadas para detectar dos puntos en una misma recta de forma que tengamos la opción que la búsqueda se realice, de fuera a dentro empezando por los extremos de la línea (Outside Caliper) o de dentro para fuera partiendo del centro de la línea (Inside Caliper). Figura 8.223. Ventana de parametrización del Outside Caliper. A nivel de parametrización nos encontramos que es exactamente igual que el de Finde Edge pero con dos Minim Edge Strength en vez de uno. A nivel de resultados nos devolverá la posición de los dos puntos y la distancia entre ellos. Figura 8.224. Ejemplo de Outside Caliper. 265 Visión artificial aplicada a la industria En el Ejemplo podemos apreciar cómo funciona el Outside Caliper localizando los dos extremos y dándonos la distancia en pixeles así como la fuerza del salto en los dos puntos. Por experiencia recomendamos no medir distancias con una sola recta debida a que si existe alguna pequeña inclinación entre la recta y la pieza, la medición no será correcta. Obteniendo una medición mayor que la cota que deseamos medir. 8.1.2. ROI´s de Área En las ROI de área nos encontraremos con funciones que realizan la búsqueda del salto, pero en vez de devolvernos un punto nos devolverán resultados mucho más específicos, ya que las funciones aparte de detectar el salto realizaran otros procesos como sería calcular la recta de regresión y devolvernos una línea. 8.1.2.1. HVLine El HVLine es una función donde el objetivo es localizar una recta, el sistema a través de detectores de salto localiza los puntos del contorno y genera una recta de regresión dándonos como resultado una línea. Figura 8.225. Imagen procesada con HVLine. En la imagen superior podemos apreciar como la función HVLine detecta el contorno superior de la pieza y realiza una regresión lineal con los puntos para mostrar la línea roja que sería la que se adapta mejor a todos los puntos que detecta. 266 8: Procesado A nivel de configuración nos encontraremos que deberemos indicar en qué sentido deseamos localizar el borde (Edge Orientation) y la fuerza del salto (Min Edge Strength). Figura 8.226. Ventana de parametrización del HVLine. En la mayoría de softwares de visión nos encontraremos funciones de este tipo, que están pensadas para facilitar la integración. Aportándonos herramientas muy fáciles de parametrizar, que realizan diferentes pasos en una sola función. Yo soy de la opinión que cuando más simple sea la función mejor, ya que tendremos una mayor control sobre ella. De forma que prefiero una ROI de multilineas con un Find Edge, junto con una función geométrica de Pts to Best Line, que nos devolverán la misma línea de regresión que la que obtendremos con el HVLine, pero teniendo control sobre los diferentes pasos y pudiendo intervenir si el resultado no se adapta a lo que esperamos. 8.1.2.2. Edge Crawler La función de Crawler es un detector de saltos que nos devolverá puntos de líneas de contorno. Como el HVline el Edge Crawler es una función evolucionada que detecta líneas de contorno y nos devuelve los diferentes puntos de esas líneas. En la imagen inferior podemos apreciar la imagen procesada con el Edge Crawler, en ella aparecen unas líneas de colores que representarían las líneas de contorno que detecta el sistema. En los resultados podremos ver que nos devuelve diferentes grupos de puntos que corresponderían a los diferentes contornos que localiza. 267 Visión artificial aplicada a la industria Figura 8.227. Imagen procesada con Edge Crawler A nivel de configuración nos encontraremos con diferentes parámetros para poder filtrar las líneas de contorno y quedarnos con las que nos interesan. Observando los parámetros podemos apreciar cómo es una herramienta más compleja, donde aparte del Minim Edge Strength que nos podíamos encontrar en las demás funciones nos encontramos con parámetros para limitar el tamaño del contorno, tanto por abajo con el (Min Contour Length) o por arriba con el (Max Contour Length). Aparte encontraremos otros parámetros que nos permitirán seleccionar densidad de puntos en el contorno como es el (Use), o el tipo de contorno al que le damos prioridad. 268 8: Procesado Figura 8.228. Ventana de parametrización del Edge Crawler Este tipo de función se utiliza para delimitar una pieza y poder adaptar una ROI a la pieza delimitada. De forma que si la pieza tiene ligeras deformaciones o defectos nos podamos adaptar a ellos. Para ello utilizaríamos los puntos que nos devuelve la función para crear una ROI Poligonal. En la imagen inferior podemos apreciar un ejemplo de cómo adaptamos una ROI Poligonal a la forma de la pieza a partir de Edge Crawler. 269 Visión artificial aplicada a la industria Figura 8.229. Programa de ejemplo con el Edge Crawler 8.1.2.3. Laser Points El láser Point es una función que describiremos ampliamente cuando hablemos de las aplicaciones 3D, es un detector de saltos especializado para detectar líneas laser y darnos los puntos centrales de esas líneas laser. En la mayoría de los softwares nos encontraremos funciones de este tipo y sobretodo en algunas librerías de programación tendremos la opción de transformar estos puntos que localizamos en cotas en el eje Z. Figura 8.230. Imagen procesada con Laser point. 270 8: Procesado 8.2. Lectores de códigos En el grupo de lectores de código nos encontraremos funciones para leer todo tipo de códigos como son: ■■ Códigos de barras. ■■ Códigos 2D como Datamatrix o QR. ■■ OCR (lectores de caracteres). Habitualmente utilizaremos imágenes en monocromo, todo y que en algún caso nos puede interesar utilizar imágenes color para segmentar el código del fondo y facilitarnos la lectura. En estos casos es habitual una vez realizada la segmentación pasar a monocromo para disminuir el coste computacional al realizar la decodificación. 8.2.1. Códigos de barras Los códigos de barras son el sistema de lectura más simple que nos podemos encontrar en un sistema de visión, debido a ello difícilmente montaremos un sistema de visión para realizar tan solo la lectura de un código de barras, ya que existen sistemas mucho más económicos como son los lectores laser. Pero nos podemos encontrar en aplicaciones donde realicemos otros cálculos y aparte se nos pida la lectura de un código de barras o aplicaciones donde debido al tipo de material, habitualmente superficies muy reflectantes el láser no trabaje correctamente. En estos casos montaremos un sistema de visión y para realizar una lectura de código de barras. Las funciones de lectura de códigos de barra son funciones completamente automáticas donde podemos colocar la función y sin modificar ningún parámetro nos devolverán un resultado. Si entramos en los parámetros de la herramienta veremos que podremos modificar el tipo de código, tamaño, color del fondo respecto al código y toda una serie de parámetros que nos permitirán que la función realice menos iteraciones y vaya más rápida. En la imagen inferior podemos apreciar como en el Sherlock realizamos la lectura del código de barras con la función Barcode 1D. 271 Visión artificial aplicada a la industria Figura 8.231. Imagen procesada con Barcode 1D. Lo que si tendremos que tener en cuenta cuando vayamos a realizar una lectura de código de barras es la resolución mínima del sistema. Para que un software sea capaz de realizar una lectura correcta precisaremos de 3 píxeles en el elemento de menor tamaño del código, en este caso será una de las líneas finas blancas o negras. Si conseguimos esa resolución mínima la mayoría de softwares nos realizan las lecturas de forma automática, sin ningún problema. 8.2.2. Códigos 2D como Datamatrix o QR En los Datamatrix nos vamos a encontrar con una función muy parecida al código de barras, ya que un Datamarix o un código QR no son nada más que un código de barras pero en dos dimensiones. De esa manera en un espacio más reducido conseguimos almacenar mucha más información. En el Datamatrix no tendremos líneas de forma que cuando queramos calcular la resolución necesaria para que el sistema sea capaz de leerlo usaremos el Dot (o punto más pequeño en el Datamatrix). Igual que en el código de barras en el Datamatrix la resolución mínima para que el equipo sea capaz de leer el código será de 3 pixeles, en este caso como es un punto tendremos que el punto tiene que tener un tamaño de 3 x 3 pixeles. 272 8: Procesado Figura 8.232. Resultado herramienta Barcode Datamatrix. En la imagen superior podemos ver como Sherlock detecta y lee el Datamatrix que hay pegado en la caja de Aspirinas. Si nos fijamos en la información que nos devuelve la función podremos apreciar que aparte del número de códigos y el código que decodifica, nos encontraremos mucha más información, como la posición del Datamatrix en la imagen o la calidad del mismo. Esta información en la mayoría de las aplicaciones no la usaremos, pero en algunas como por ejemplo, conseguir un Feed-Back entre la impresora y el sistema de visión nos puede ser muy útil, de forma que consigamos antes de que empiecen a salir mal los Datamatrix, mediante el sistema de visión advierta a la impresora que está empezando a imprimir mal. 8.2.3. OCR La lectura de caracteres no tiene nada que ver con la lectura de código de barras o del Datamatrix. Y las funciones que utilizaremos se asemejan más a un buscador de patrones que a un sistema de decodificación. Cuando tengamos que realizar un OCR lo primero que tendremos que hacer, es estudiar cómo se realiza la impresión o marcado de los caracteres. Esto es debido a que el punto clave en un sistema de lectura de caracteres es el nivel de repetividad de los caracteres, ya que dependiendo de la repetividad deberemos usar un tipo de software u otro. A nivel de software nos encontraremos con dos sistemas: ■■ Comparadores directos de patrones ■■ Redes Neuronales 273 Visión artificial aplicada a la industria 8.2.3.1. Comparadores directos de patrones Los comparadores directos se basan en un buscador, serán los algoritmos que normalmente encontraremos en la mayoría de softwares de visión y en todos los entornos gráficos de programación como el Sherlock. Los comparadores directos de patrones cogen pequeñas partes de la imagen y le asocian un carácter o grupo de caracteres y realizan una búsqueda en toda la imagen del trozo de imagen que le hemos asociado al carácter. Este tipo de funciones trabajan muy bien cuando el código a leer es muy repetitivo y no tiene deformaciones. La comparación se realiza de forma muy eficiente y realizar el aprendizaje es rápido y fácil. El problema surge cuando los caracteres presentan deformaciones de forma que precisaremos más de una imagen para que el sistema pueda interpretar un carácter. Cuando mayor sea el nivel de deformación, mayor será el número de pequeñas imágenes que definirán a un carácter, llegando al punto que el sistema se vuelve inestable y deja de funcionar. En Sherlock nos encontramos con varias funciones de OCR todos ellos basados en comparadores directos de patrones, el más sencillo y por ese motivo más fácil de ver cómo funciona es el Grayscale OCR. En el Graysacle OCR deberemos de seleccionar manualmente que es lo que entendemos por cada uno de los caracteres. Figura 8.233. Ventana de configuración Graysacle OCR. 274 8: Procesado En la imagen superior podemos ver la ventana de configuración del Graysacle OCR, en el debemos seleccionar la zona de la imagen que consideramos el carácter y lo asociamos en este caso a una (A). Esto lo iremos haciendo para cada uno de los caracteres, en este caso solo enseñaremos una imagen por letra para ver las diferencias en el resultado final. Pero cuando trabajemos con estas funciones lo habitual es trabajar con más de una imagen por cada uno de los caracteres. El número dependerá del nivel de deformación que tengamos que absorber. Figura 8.234. Ventana de configuración Graysacle OCR. En la imagen superior podemos ver todos los trozos de imagen que hemos ido asociando a cada uno de los caracteres. Una vez tengamos todos los caracteres enseñados deberemos de configurar las función, en la imagen inferior podemos apreciar diferentes opciones que deberemos de modificar para que la herramienta trabaje correctamente. Max Character Count: en este parámetro especificaremos el número de caracteres máximos que deseamos leer. Acceptance Level %: este parámetro viene definido por un porcentaje y representa el nivel mínimo de similitud para que el sistema reconozca el carácter. Probablemente este sea el parámetro más importante de todos e intentaremos trabajar siempre por encima del 80%. 275 Visión artificial aplicada a la industria Los demás parámetros los podemos dejar por defecto. Figura 8.235. Ventana de configuración Graysacle OCR En la imagen inferior podemos apreciar como el Graysacle OCR realiza la lectura del codigo, si nos fijamos podemos apreciar como aparte del String con el codigo, nos devuelve el numero de caracteres y un Array con el Score de cada una de las letras. El Score es el nivel de similitud que tiene la letra que esta leyendo, respecto de los patrones que tienen memorizados. Si nos fijamos en los resultados del Score que nos devuelebe la herramienta, nos encontramos que los primeros caracteres tienen un valor del 100% ya que comparamos contra el propio patron.En cambio en los numeros repetidos el procentaje baja y trabajamos en el entorno del 95%. 276 8: Procesado Figura 8.236. Resultado herramienta Graysacle OCR Si nos fijamos muy atentamente apreciaremos ligeras diferencias entre los caracteres que están repetidos. Si tuviéramos una aplicación con este tipo de caracteres, estaríamos delante de una aplicación perfecta para este tipo de función. El problema se nos presenta cuando existe mucha variación entre dos caracteres iguales como ocurre con los caracteres marcados por micro-percusión, Inkjet, letra manuscrita, etc… En estos casos deberemos de renunciar a este tipo de función y plantearnos usar funciones basadas en redes neuronales. 8.2.3.2. Redes Neuronales Los lectores de caracteres basados en redes neuronales trabajan de forma parecida a los comparadores directos, el sistema es un comparador pero en vez de comparar con la zona de la imagen que hemos enseñado, el sistema extrae una serie de características de la imagen y las asocia al carácter que le indicamos. La ventaja de trabajar con este tipo de buscador es que al extraer características en vez de comparar directamente la imagen, nos permite permutar las características dentro de un mismo grupo (carácter) de forma que conseguimos sistemas mucho más robustos. La principal desventaja de este tipo de algoritmos son la cantidad de imágenes que les deberemos enseñar para que el sistema trabaje correctamente, si a esto le sumamos un mayor precio a nivel de software y unos tiempos de procesos mayores. Llegamos a la conclusión que a no ser que la aplicación lo requiera, usar este tipo de función cuando podríamos utilizar un comparador directo de patrones ara que nuestro sistema no sea competitivo. 277 Visión artificial aplicada a la industria Programar un comparador directo de patrones nos puede llevar un par de días, mientras que programar un sistema basado en redes neuronales nos puede llevar un par de meses. Por este motivo solo usaremos los sistemas basados en redes neuronales cuando el nivel de repetividad de los caracteres nos obligue a ello. Desgraciadamente el determinar cuándo usar uno u otro nos lo marcará la experiencia y el haber trabajado mucho con ambos sistemas y conocer los límites de cada uno. 278 8: Procesado 8.3. Search (buscadores de patrones) Como ocurre con los OCR en los algoritmos de búsqueda de patrones (Search) nos encontraremos con comparadores directos y sistemas basados en redes neuronales. Este parecido se debe a que en realidad los OCR y los Search se basan en las mismas funciones pidiéndole que nos de diferentes resultados. En este apartado nos centraremos en los comparadores directos ya que son los algoritmos que incorpora Sherlock y, como ya comentaba, todos los entornos gráficos de programación. A nivel de buscadores basados en redes neuronales hasta hace poco eran muy raros en la visión industrial principalmente por su elevado coste computacional que generaba tiempos de procesado muy largos y por el gran número de imágenes que le tendremos que aportar para que trabaje bien, cosa que eterniza la programación. Hoy día debido a que cada vez más trabajamos con productos con altos niveles de deformación como podrían ser todos los productos naturales, cada vez más se usan este tipo de buscadores sobretodo en aplicaciones genéricas que la herramienta ya puede entregarse programada con los patrones, como podrían ser los lectores de matrículas ,los clasificadores en el sector de la alimentación o los sistemas de lectura de letra manuscrita. En Sherlock encontraremos 4 tipos diferentes de Search ■■ Search Geometric ■■ Search Line Based ■■ Search Correlation ■■ Search Edge 8.3.1. Search Geoemtric El Search Geoemtric es un buscador de patrones que se basa en las líneas de contorno, el sistema realiza una extracción de contornos y memoriza las líneas. La ventaja de trabajar solo con las líneas de contorno es que nos permite realizar el Search de una forma muy rápida y nos permite darle un nivel de rotación de 360º sin penalizar mucho el tiempo de búsqueda. Para realizar un aprendizaje en el Search Geometric reducimos la ROI al tamaño de la pieza que deseamos aprender y vamos a la ventana de Parameters del Search Geometric. 279 Visión artificial aplicada a la industria Figura 8.237. Ventana de configuración Search Geometric Al entrar en la ventana el sistema automáticamente detecta las líneas de contorno de mayor relevancia en la imagen y las selecciona pintándolas en verde. Por ese motivo reducimos la ROI y nos centramos en la pieza que deseamos localizar. Si nos fijamos en la parte inferior de la pieza podemos apreciar tres botones que nos permiten eliminar o crear nuevas líneas en nuestro patrón. Aparte encontraremos toda una serie de parámetros que nos permitirán ajustar la función, como más significativos tendríamos los siguientes: ■■ Execution mode: este parámetro nos permite escoger entre modo reconocimiento o reaprender el patrón. En el Search Geometric trabajamos con un solo patrón de forma que cuando realizamos un reaprender el patrón eliminamos el anterior. ■■ Patterns to Find: en este parámetro indicamos el número de objetos que deseamos detectar en la imagen, de modo que no localizaremos nunca más del valor que indiquemos. ■■ Min Score: este parámetro que ya lo hemos visto en el OCR es el porcentaje mínimo de similitud, para que la función entienda que el objeto que está viendo es el patrón que le hemos enseñado ■■ Proximity Exclusion: con este parámetro limitamos la zona de búsqueda alrededor de piezas ya localizadas. De forma que podamos evitar que piezas superpuestas sean detectadas o que un mismo objeto sea detectado en diferentes posiciones bajando el porcentaje de similitud. 280 8: Procesado ■■ Reference Point: en el Reference Point nos indica el centro de masa del patrón, pudiendo modificar este punto y trasladarlo en la imagen para que varié el punto de referencia. Esto se suele usar cuando usamos el Search Geometric para dar coordenadas a un robot. En muchos casos nos interesar un punto concreto de la pieza y no su centro de masas. Con el Reference Point podemos desplazar el punto y colocarnos donde nos interese dar las coordenadas. Figura 8.238. Resultado herramienta Search Geometric En la imagen superior podemos ver cómo trabaja el Search Geoemtric, el sistema una vez tiene un patrón memorizado intenta localizar en la imagen el objeto que más se asemeja al patrón. Como resultados nos devuelve el número de patrones que localiza, el centro de masas del patrón (Reference Point), el ángulo, la escala y el porcentaje de similitud respecto al patrón original. 8.3.2. Search Line Based El Search Line Based es exactamente igual al Geometric, se basa en las líneas de contorno. Pero en este caso esta optimizado para realizar la operación en el mínimo tiempo posible, teniendo limitado la rotación de los modelos. En la práctica es un Search que se usa muy poco ya que se puede conseguir lo mismo con el Search Geometric y se tiende a utilizar siempre el mismo. 8.3.3. Search Correlation El Search Correlation a diferencia de los dos Search anteriores no se basa en las líneas de contorno, sino en todos los pixeles del patrón que le enseñamos. 281 Visión artificial aplicada a la industria Eso provocara que la función sea mucho más lenta debido a que tendrá que correlacionar muchos más pixeles que con los Search basados en las líneas de contorno. Pero a la vez será más exacto y robusto. Figura 8.239. Ventana de configuración Search Correlation A nivel de configuración nos encontraremos con una ventana de configuración donde ha desaparecido la parte gráfica respecto al Search Geometric, ya que no tenemos líneas de contorno que crear o eliminar. En contrapartida nos aparecen toda una serie de parámetros para ajustar de forma más óptima la función que en el Search Geometric no teníamos. A continuación comentamos los parámetros más importantes: ■■ Execution Mode: en el execution mode tenemos lo mismo que en el Search geometric y nos serviría para aprender un nuevo patrón, o buscar el actual. Igual que el Search Geometric, el Search Correlation trabaja solo con un patrón. ■■ Output Mode: en el Output Mode solicitamos que nos muestre el resultado final o todos los candidatos que la función calcula. ■■ Use Rotation: el Use Rotación nos permite trabajar con rotación, debajo de él nos encontraremos los limites inferior y superior para esta rotación. Si queremos poder buscar un patrón rotado lo tendremos que tener en cuenta cuando enseñemos el patrón ya que si lo enseñamos sin rotación, por mucho que después la activemos, no realizará correctamente la búsqueda. 282 8: Procesado ■■ Model Scale: el Model Scale nos permite variar el tamaño del patrón y que el sistema lo siga encontrando, en la parte inferior tendremos los límites inferior y superior de la variación de escala y los incrementos en la búsqueda. Aplicar la rotación o la escala nos permitirán una función mucho más robusta, pero a la vez mucho más lenta de forma que tendremos que minimizar al máximo los límites de la búsqueda. Figura 8.240. Resultado herramienta Search Correlation Los resultados que nos devuelve el Search Correlation son los mismos que en el Search Geoemetric, pero al trabajar a nivel sub-píxel conseguiremos una mayor precisión. 8.3.4. Search Edge El Search Edge es una evolución del Search Geometric que se implementó posteriormente, trabaja igual que el Search Geometric con las líneas de contorno pero nos permite añadir más de un modelo a la búsqueda. Debido a ello el Search Edge se utiliza mucho como clasificador ya que podemos poner diferentes modelos en una misma función y que nos devuelva la posición y el modelo. A nivel de configuración variará un poco el interface gráfico para poder añadir más de un modelo pero los parámetros serán los mismos que teníamos en el Search Geoemtric. 283 Visión artificial aplicada a la industria Figura 8.241. Ventana de configuración Search Edge En la ventana de configuración podemos ver cómo implementa la opción de Scale que en el Search Geometric no teníamos 284 8: Procesado Figura 8.242. Ventana de configuración Search Edge 2 Aparte incorpora una ventana de configuración avanzada que nos permitirán ajustar de forma más fina la función y de este modo que trabaje mejor. Figura 8.243. Resultado herramienta Search Edge A nivel de resultado con el Search Edge aparte de los parámetros ya vistos en los demás Search tendremos el Name que nos indicara el nombre del modelo localizado. 285 Visión artificial aplicada a la industria 8.4. Analizador de Blobs Este tipo de algoritmo lo encontraremos en todos los software de procesado de imagen debido a la gran cantidad de datos que nos dará comparado con el coste computacional que requiere. En Sherlock al Analizador de blobs se le llama Connectivity, pero nos encontraremos que en otros softwares lo llamaran Blobs o Blob. Este tipo de función trabaja con imágenes binarias de forma que precisaremos de un Threshold previo a nivel de pre-procesos para binarizar la imagen. Un Blob (mancha) es una zona de un determinado nivel de gris, como las imágenes con las que trabaja son binarias tendremos blobs blancos y blobs negros. El hecho de trabajar con imágenes binarias es para simplificar la imagen y facilitar el procesado de los blobs. A nivel de parametrización nos encontraremos la siguiente ventana: Figura 8.244. Ventana de configuración Connectivity. 286 8: Procesado A nivel de parametrización tendremos: ■■ Black Blobs: en Black Blobs deberemos indicar si deseamos analizar los blobs negros o los blobs blanco. En el ejemplo como las figuras en la imagen son negras nos quedaremos con el True para trabajar con los Black Blobs. ■■ 8Way: en el 8Way indicamos el nivel de vecindaje que tienen los pixeles. Un píxel puede considerar que sus vecinos solo son los pixeles que coinciden por las caras, si trabajamos con este nivel de vecindaje trabajaremos en vecindaje 4. O podemos considerar que los vecinos son las caras y las aristas, en tal caso trabajaremos en vecindaje 8. Figura 8.245. Conectividad 4. Figura 8.246. Conectividad 8. Por defecto siempre dejaremos conectividad 8 debido a que nos interesa que líneas muy finas a 45 grados las entienda como un solo blob y no como pixeles inconexos. Min Area y Max Area: Con Min Area y Max Area podremos delimitar el tamaño de los blobs que deseamos analizar. Aparte igual que por área podremos delimitar los blobs que deseamos analizar según su alto y ancho. Otro parámetro muy importante es el Sorting Criteria que por defecto nos viene fijado por área. Como en la mayoría de aplicaciones tendremos más de un blob en la imagen el orden en que nos devuelva la información de los mismos es muy importante y dependiendo de la aplicación nos interesará que sea por área o por circularidad del blob o por alguna de las más de 20 formas que tiene de ordenarlos. Un ejemplo muy claro donde se utiliza el Conectivity es en aplicaciones donde deseemos detectar defectos superficiales ya que nos devolverá el número y área de cada uno de los defectos siempre y cuando seamos capaces de segmentarl los defectos con un Threshold. 287 Visión artificial aplicada a la industria En la imagen inferior podemos apreciar el resultado de una inspección con el Connectivity, si nos fijamos en los resultados que nos devuelve la herramienta veremos que aparte del número de blobs nos dará mucha información geométrica de cada uno de los blobs. Figura 8.247. Resultado herramienta Connectivity 288 8: Procesado 8.5. Algoritmos Estadísticos Las funciones estadísticas son las funciones más básicas, se basan en aplicar funciones estadísticas a los píxeles de la imagen. En el caso de Sherlock las tenemos agrupadas todas en una función que recibe por nombre Statistic y se utiliza en ROI´s de área. En la función Stadistic encontraremos el número total de píxeles, el valor y posición del píxel con mayor nivel de gris y la posición y valor del píxel con menor valor de gris, la suma del valor de gris de todos los píxeles, la media de nivel de gris de todos los píxeles y la varían y por último el Histograma de la ROI. Figura 8.248. Resultado herramienta Statistic Este tipo de función raramente nos servirá para decidir si una pieza es buena o mala pero en algún caso la podemos utilizar para modificar valores de otras ROI´s o detectar variaciones en la imagen. 289 Visión artificial aplicada a la industria 8.6. Funciones para analizar el color En otros capítulos ya hemos comentado diferentes temas sobre el color, Sherlock al trabajar con una cámara lee el fichero de configuración y carga la ventana para imágenes color o monocromo. Cuando trabajamos con secuencias de imágenes individuales, el sistema asumirá que es monocromo cuando la imagen es un Bitmap a 256 niveles de gris y para todos los demás formatos los interpretara como color. Una de las ventajas de Sherlock es que nos permite trabajar en un mismo programa con imágenes color y monocromo de forma que es muy habitual pasar la imagen color a monocromo o quedarnos uno de los tres planos (R, G o B). Para ello simplemente deberemos de abrir otra imagen y realizar la conversión como se puede apreciar en la siguiente imagen. Figura 8.249. Configuración de una segunda imagen Si nos fijamos en la ventana de Options de la segunda imagen, seleccionamos el Img Windows y podemos seleccionar entre los diferentes canales (R, G o B) o directamente en trasformar la imagen en Monocromo . Aparte también podríamos realizar con esta opción un cambio de espacio de color pasando la imagen de RGB a CIELAB, YUV o HSB. Si seleccionamos una opción que nos dé como resultado una imagen monocromo (R, G, B o Mono8) podremos usar las funciones monocromo que son las que hemos visto hasta ahora. Al trabajar con una imagen color cuando seleccionemos una ROI veremos que los Pre-procesos y algoritmos que nos aparecen son diferentes a los que teníamos en las imágenes en monocromo. 290 8: Procesado A nivel de pre-procesos solo comentaremos uno ya que los otros son más o menos lo mismo que hemos visto en monocromo, pero trabajando en tres canales. Mientras que en los procesados nos centraremos en un grupo de algoritmos que se basan en el mismo motor de búsqueda y serian un símil del OCR pero en color. 8.6.1. Pre-procesos color En los pre-procesos en color nos quedaremos con el filtro Color Correction, este filtro por sí solo no tiene mucho sentido ya que aplica un Gain individual a cada uno de los canales. Esto hoy día lo realizan casi todas las cámaras digitales a nivel de hardware. De forma que aplicar un Gain fijo a cada canal no tiene sentido. Figura 8.250. Ventana de configuración Color Correction Pero esta función si la ligamos a un algoritmo de color llamado Color Correction Coeficients, el cual calcula el Gain necesario en cada canal para compensar pérdidas de iluminación en la imagen respecto a la imagen original. Para ello deberemos colocar una pequeña ROI en una zona de la imagen que no varié y donde le habremos colocado un testigo (elemento blanco), que la función tomara como referencia. 291 Visión artificial aplicada a la industria Al configurar la función le debemos especificar el nivel de tonalidad en la zona de cada uno de los canales que tenemos al realizar la puesta en marcha. Figura 8.251. Ventana de configuración Color Correction Coeficiens. En el siguiente ejemplo engañaremos al sistema y pondremos que en la imagen original el fondo era más blanco de lo que es actualmente para ver el cambio que realiza. Figura 8.252. Resultado Color Correction + Color Correction Coeficients 292 8: Procesado Esta suma de funciones seria perfecta para corregir pequeñas variaciones de luz en el tiempo, como pueden ser las causadas por la pérdida de intensidad de un fluorescente. 8.6.2. Algoritmos color En el apartado anterior ya hemos descrito el primero que era el Color Correction Coeficients en este nos centraremos en un grupo de funciones que comparten el motor de búsqueda. Se tratan del Color Maps, Color Presence y el Spot Meter, estas tres funciones serian el símil de un OCR de color y cada una de ellas nos dará un resultado distinto. 8.6.3. Color Presence El Color Presence es una función que nos indica la cantidad de píxeles de los colores que le enseñemos. A nivel de funcionamiento es muy simple. Tenemos una ventana donde se le enseñan los colores y el sistema te devuelve el número de píxeles, en porcentaje respecto al total en la ROI y el nombre del color. Para realizar el aprendizaje deberemos ir a los parámetros de la función Figura 8.253. Ventana de aprendizaje de los colores. 293 Visión artificial aplicada a la industria Esta ventana será común en las tres funciones Color Maps, Color Presence y el Spot Meter. Pudiendo importar y exportar los colores aprendidos entre las tres funciones. Para enseñar los colores tan solo deberemos de darle al botón de Teach escribir el nombre que deseamos enseñarle y seleccionar los dos únicos parámetros que podemos modificar que son el Bit Resolution y el Distance. El Bit Resolution nos indica con cuantos Bits por Canal nos quedaremos de la imagen. Las imágenes color con las que vamos a trabajar tienen 8 bits en cada uno de los tres canales (rojo, verde y azul), bajando a 7 eliminamos parte de la información para simplificar la imagen. Lo recomendable es trabajar siempre con 8 o 7 bits por canal. El Distance nos permite aumentar o disminuir el tamaño del nuestro color en el espacio de tres dimensiones que es la representación R, G y B. Imaginaros cada color como un punto en un espacio tridimensional. Figura 8.254. Representación espacio R, G y B. Si solo tuviéramos en cuenta este punto por pequeña que fuera el cambio de color o de luz dejaríamos de identificar los colores aprendidos. Para que el sistema sea más robusto con el Distance generamos una esfera centrada en el punto (este punto es la media de color de la zona enseñada), donde el Distance es el diámetro de la esfera. De forma que si el Distance es mayor la esfera será mayor y el número de tonalidades dentro de nuestro color será más grande. Tenemos que buscar un equilibrio con el Distance ya que al crecer, crece en todos los sentidos de forma que si es muy grande empezaremos a identificar colores que no nos interesan. Para solventar este problema a un mismo nombre le podemos añadir tantas esferas como queramos. En la imagen inferior podemos ver como dentro del color rojo tenemos diferentes rojos aprendidos y en la imagen nos aparece en gris lo que entiende como rojo. 294 8: Procesado Figura 8.255. Ventana de aprendizaje de los colores 2. Como resultados la función nos devolverá una serie de valores indicándonos la cantidad y porcentaje de cada color. En este caso como solo tenemos uno, solo nos devolverá información del Rojo. Figura 8.256. Resultado Color Presence. 295 Visión artificial aplicada a la industria 8.6.3.1. Color Map El Color Map se basa en el mismo motor de búsqueda que el Color Presence y utilizaremos el mismo entorno de aprendizaje de colores, pudiendo importar bases de datos de colores creados con el Color Presence. La diferencia radica en los resultados que nos devuelve, el Color Presence nos daba información de la cantidad de los diferentes colores que le habíamos enseñado. Pero no obteníamos información espacial de los colores, no sabíamos cómo estaban distribuidos estos colores. En el Color Map obtendremos como resultado una nueva imagen en monocromo donde cada color que le enseñemos estará guardado en un nivel de gris. De forma que tendremos una imagen monocromo con información del color. Esto nos permitirá poder usar las funciones que hemos visto en el apartado de imágenes en monocromo, sobre una imagen ya segmentada por colores. Figura 8.257. Resultado Color Map. En la imagen superior podemos ver el resultado del Color Map aplicando el aprendizaje previo del color Rojo. En la imagen de la derecha tenemos en negro (nivel de gris 0) lo pixeles que el sistema considera como rojos. Al convertir el resultado en una imagen en escala de grises como mucho le podremos enseñar 256 colores que son los niveles de gris en una imagen monocromo. 8.6.3.2. Spot Meter El Spot Meter difiere un poco de los dos algoritmos anteriores, el Spot meter trabaja con colores homogéneos, no sirve para segmentar colores sino que compara colores homogéneos respecto la base de datos de colores que hemos realizado. Devolviéndonos como de diferente es el color que está viendo, respecto a los que tenemos memorizados. 296 8: Procesado 8.7. Aligment El Aligment no es ninguna función o proceso de visión. El Aligment son puntos de referencia, sirven para permitir desplazar las ROI´s y seguir a las piezas cuando ellas se desplazan. Este tipo de opción las encontraremos en todos los programas debido a que en todas las aplicaciones de visión lo primero que realizamos es una búsqueda de la pieza para que todas las ROI´s se reposicionen. Debido a que es muy complicado y caro el tener perfectamente controlada la posición de la pieza. En el Aligment podemos usar cualquier punto que calcule el programa, pero lógicamente tendrá que desplazarse con el objeto que queremos referenciar. El primer punto en el Aligment nos dará la traslación (desplazamiento en X e Y) y el segundo punto en el Aligment nos dará la rotación. Si solo colocamos un punto solo tendremos Traslación. El Aligment igual que el Calibration lo encontraremos en las opciones de imagen, en la pestaña de Aligment. Dentro de un programa podemos tener tantos Aligments como queramos. En la imagen inferior tenemos el configurador de Aligment donde hemos creado uno y le hemos asociado dos puntos que hemos calculado con un Search Geometric. Para asociar los puntos tan solo debemos arrástralos. 297 Visión artificial aplicada a la industria Figura 8.258. Ventana de configuración del Aligment. Una vez tenemos creado el Aligment, podremos en cada ROI referenciarla o no respecto el Aligment que nos interese. En las imágenes inferiores podemos apreciar cómo funcionaría el Aligment, desplazando una ROI a la posición donde se encuentra la figura. Figura 8.259. Imagen original. 298 Figura 8.260. Imagen con la pieza desplazada 8: Procesado Si nos fijamos podemos apreciar cómo en la imagen donde tenemos la pieza desplazada, la ROI se ha colocado encima de la pieza exactamente igual a como estaba en la original y en líneas discontinuas aparece la posición original de la ROI. Para que las funciones que hay en las ROI´s trabajen correctamente deberemos de utilizar siempre un Aligment si la posición de la pieza no es fija. 299 8: Procesado RESUMEN ■ En este capítulo hemos realizado una descripción de diferentes funciones que aparecen en el software de procesado de imagen Sherlock, describiendo su funcionamiento y parametrización, así como ejemplos de posibles aplicaciones. ■ Sobre las funciones hemos descrito lo que consideramos la base de la visión industrial, las funciones más usadas y que resuelven el 90% de las aplicaciones. ■■ Detectores de salto. ■■ Lectores de códigos. ■■ Search (buscadores de patrones). ■■ Analizador de Blobs. ■■ Estadísticos. ■■ Comparadores de color. ■ Aparte hemos mencionado el Alignement o sistema de puntos de referencia ya que lo encontraremos en casi todos los programas de visión y va muy ligado con las funciones. Debido a que precisamos de puntos que nos darán como resultado alguna de estas funciones. Con estos puntos podremos crear los diferentes Alignements y precisamos de los Alignements para que la mayoría de funciones trabajen correctamente cuando la pieza no tenga una posición fija. 301