Subido por Carlos Torres

M0397 UD08 V001

Anuncio
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
Descargar