Vision Artificial

  • Uploaded by: Jorge Rodríguez Araújo
  • 0
  • 0
  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Vision Artificial as PDF for free.

More details

  • Words: 7,859
  • Pages: 37
Visión artificial

Introducción a los sistemas de visión artificial 11 de agosto de 2011 Copyright © 2008-2011 Jorge Rodríguez Araújo [email protected]

Índice 1. Visión artificial............................................................................................1 1.1 Introducción............................................................................................................ 1 1.2 Sistema de iluminación...........................................................................................1 1.2.1 Fuentes de luz................................................................................................................. 1 1.2.2 Esquemas de iluminación................................................................................................2

1.3 Captura de imagen..................................................................................................3 1.3.1 Sensores digitales de imagen.......................................................................................... 3 Sensor CCD.......................................................................................................................... 3 Sensor CMOS....................................................................................................................... 4 Características...................................................................................................................... 4 1.3.2 Objetivos.......................................................................................................................... 4 Características...................................................................................................................... 5 Selección de la lente............................................................................................................. 5

2. Procesado de imagen...............................................................................6 2.1 Introducción............................................................................................................ 6 2.2 Imágenes digitales..................................................................................................6 2.3 Transformaciones del espacio de color...................................................................7 2.4 Transformaciones de histograma .........................................................................10 Negativo................................................................................................................................... 11 Imagen gamma........................................................................................................................ 12 Pseudocolor............................................................................................................................. 12 Estiramiento del histograma..................................................................................................... 12 Ecualización del histograma.................................................................................................... 12

2.5 Eliminación de ruido .............................................................................................13 2.6 Segmentación.......................................................................................................14 2.7 Detección de bordes.............................................................................................15 2.8 Operadores morfológicos......................................................................................18

3. Localización y posicionamiento de objetos.............................................21 3.1 Contraste de modelos...........................................................................................21 3.2 Histogram backprojection......................................................................................22 3.3 Posicionamiento de objetos..................................................................................24

4. Seguimiento de objetos...........................................................................27 4.1 Introducción.......................................................................................................... 27 4.2 Meanshif Tracking.................................................................................................27

5. Identificación de un contorno rectangular...............................................28 5.1 Introducción.......................................................................................................... 28 5.2 Detección del contorno rectangular.......................................................................29 Tranformada de Hough para líneas......................................................................................... 29 i

5.3 Identificación del contorno rectangular..................................................................31

6. Cálculo de la homografía........................................................................32 6.1 Introducción.......................................................................................................... 32 6.2 Homografía...........................................................................................................32 6.3 Resolución de sistemas de ecuaciones lineales...................................................33

7. Anexo: Instalaciones robotizadas............................................................34 7.1 Introducción.......................................................................................................... 34 7.2 Fases del desarrollo de un proyecto.....................................................................34

ii

Visión artificial

1. Visión artificial 1.1 Introducción Un sistema de visión artificial se compone básicamente por: –

Sistema de iluminación: Proporciona unas condiciones de iluminación uniformes e independientes del entorno, permitiendo o facilitando la extracción de los rasgos de interés para una determinada aplicación.



Captura de imagen: Conjunto encargado de recoger las característica del objeto en estudio y proporcionar los datos para su procesado, por medio de una imagen digital.



Procesado de imagen: Conjunto de algoritmos y transformaciones necesarias para realizar el análisis de la imagen y de este modo extraer la información de las imágenes capturadas, con el fin de obtener los resultados para los que haya sido diseñado.

1.2 Sistema de iluminación Dado que la imagen se forma a partir de la luz que reflejan los objetos, la única posibilidad de obtener una imagen con características constantes en la que se resalten los aspectos de interés y se atenúen los intrascendentes permitiendo o facilitando la resolución del problema es controlando las condiciones de iluminación. Para ello, se emplea el sistema de iluminación, que se encuentra formado por la fuente de luz según un determinado esquema de iluminación, lo que en conjunto proporciona unas condiciones de iluminación determinadas.

Dentro de la reflexión de la luz se distingue entre reflexión especular, donde el rayo incidente es reflejado en una única dirección, y reflexión difusa, donde los rayos incidentes son dispersados en múltiples direcciones.

Hay que tener en cuenta que el problema de iluminación no resulta trivial y su coste supone una parte importante del total del proyecto.

 i= r

En la reflexión directa el ángulo de incidencia es igual al ángulo de reflexión:

1.2.1 Fuentes de luz

Entre la multitud de fuentes de luz existentes, las más utilizadas son:

1



Fluorescente de alta frecuencia1: no ofrece demasiada luz y presenta deriva con el tiempo, pero su precio económico y su adaptabilidad tanto en forma como en color los hacen atractivos.



Halógena: presenta gran luminosidad, pero desprende calor, su luz es caliente y su precio es caro. Además, presentan envejecimiento.

Deben emplearse fluorescentes de alta frecuencia dado que los estándar producen un efecto parpadeo en la imagen que la hace inservible.

1

Visión artificial –

Xenón: presenta aún mayor luminosidad, aunque los mismos inconvenientes, y un precio aún mayor.



LED: admite multitud de configuraciones y están disponibles en multitud de colores, son estables, duraderos, funcionan en baja tensión, aunque su precio es elevado.



LÁSER: permiten generar patrones de iluminación.

1.2.2 Esquemas de iluminación

Los principales esquemas de iluminación son: –

Iluminación posterior difusa (Backlight): mediante la iluminación difusa por la parte posterior del objeto se obtiene una imagen de alto contraste, donde la silueta oscura de los objetos se ve resaltada frente al fondo blanco, y por tanto resulta adecuado para medir la forma de los objetos.



Iluminación difusa direccional: emulando a la luz natural pero sin variaciones se emiten los rayos paralelos y en una dirección determinada para lograr una iluminación uniforme.



Cámara

Domo

Iluminación omni-direccional difusa: consigue una imagen libre de sombras y con gran contraste, gracias a que el objeto es iluminado desde todas Objeto direcciones con luz difusa. Para ello se emplea una Luz superficie reflectante de forma semiesférica llamada domo, que actúa como fuente de iluminación al reflejar la luz, con lo que se logra eliminar las sombras y reflejos, y se aumenta el contraste, suavizando las texturas y minimizando la influencia de las rayas, el polvo y los relieves, así como de las curvaturas que pueda tener el objeto inspeccionado. Se emplea en la detección de marcas de diferentes colores, caracteres y detección de todo lo que suponga un cambio de color tanto en superficies lisas, esféricas, rugosas o con brillo.



Iluminación direccional lateral (Grazing): resalta la textura de los objetos o aquellas características salientes, dado que al incidir la luz con un ángulo muy pequeño sólo será reflejada hacia la cámara cuando se encuentre algún saliente. Por tanto, resulta útil para resaltar protuberancias y hendiduras de la superficie del objeto.



Iluminación con luz polarizada: puede servir para eliminar brillos de objetos brillantes, como en el caso de una bolsa de patatas, dado que los filtros que se instalan en iluminación y cámara impedirán que la luz que no provenga de la fuente de iluminación, y que por tanto presentará distinta polarización, sea capturada por la cámara.



Iluminación estructurada: mediante la proyección de puntos, franjas o rejillas de luz sobre la superficie de trabajo se establece un patrón que permite extraer las características dimensionales del objeto por medio de la medición de la distorsión que sufre dicho patrón de luz ante la presencia de un objeto. Uno de los sistemas más conocidos consiste en la 2

Visión artificial

iluminación con un haz láser plano, de modo que al situarse en un ángulo conocido respecto a la cámara, la línea proyectada y distorsionada por la presencia de un objeto presentará un determinado desplazamiento según la profundidad a la que se encuentre el punto, permitiendo de este modo conocer su posición en el espacio, y finalmente reconstruir el objeto 3D mediante técnicas de computación. –

Montajes con espejos: los montajes realizados con espejos permiten ver distintas partes de un objeto en una misma imagen.

1.3 Captura de imagen En la captura de imagen intervienen las cámaras y las tarjetas de adquisición de imagen, estando las cámaras, al igual que el ojo humano, formadas por una lente convergente que proyecta la imagen sobre una superficie sensible a la luz denominada sensor de imagen. 1.3.1 Sensores digitales de imagen

Los sensores digitales de imagen están formados por una serie de elementos fotosensores (sensibles a la luz) que modifican su señal eléctrica según la intensidad luminosa que reciben, lo que permite la captura de los puntos que conforman la imagen. Estos sensores suelen estar configurados en forma matricial de modo que proporcionan una imagen bidimensional. A nivel industrial también se emplean los sensores con configuración en línea, dada sus altas resoluciones, cuando los objetos se sitúan en superficies en movimiento para aplicaciones de medida (metrológia). Con objeto de reducir costes suelen existir en el mercado multitud de cámaras que emplean lo que se conoce como imagen entrelazada, donde se capturan por un lado las líneas pares y por otro las impares, con lo que al hacerse en instantes de tiempo diferentes no pueden ser empleadas con objetos en movimiento. Los sensores son realizados en dos dos tecnologías, principalmente en CCD y en CMOS. Sensor CCD

La tecnología CCD (Charge Coupling Device) es la que proporciona una mejor imagen, sobre todo en el caso de las cámaras profesionales en las que se emplea un sensor para cada color, mientras que en las de consumo se emplea un único sensor, de modo que este está constituido como un mosaico de detectores de colores y por tanto captura una menor densidad de puntos. Cuando el sensor ha capturado la imagen envía la información completa serializada fila a fila.

3

Visión artificial

Sensor CMOS

La tecnología CMOS es la más económica, y ofrece un menor tamaño, gracias a su grado de integración electrónica. Además, puede capturar partes de la imagen, no teniendo que transmitirla completamente. Características

A la hora de seleccionar una cámara hay que tener en cuenta una serie de características, y entre las principales se destacan: –

Resolución: número de píxeles que conforman la imagen capturada.



Sensibilidad: nivel mínimo de iluminación que puede capturar el sensor.



Rango dinámico: margen de luz (intensidad luminosa) que puede capturar el sensor, o sea, diferencia máxima entre luz y oscuridad que puede distinguir.



Señal/ruido y Smear: influencia entre píxeles.



Velocidad: velocidad máxima a la que puede capturar imágenes, siendo su medida en frames por segundo [fps].

1.3.2 Objetivos

El objetivo tiene como función concentrar los rayos de luz, provenientes de los objetos a visualizar, en un plano donde se formará la imagen para ser captada por el sensor. Está formado por el diafragma, que controla la apertura y por tanto limita el haz de rayos entrante, la lente, que enfoca el objeto, y el zoom, que permite variar la distancia focal (distancia al objeto). El diafragma permite regular la apertura del objetivo y con ello la luminosidad de la imagen. Además, aunque al cerrar el diafragma los rayos salen enfocados independientemente de la distancia al objeto, entrará menos luz y por tanto la escena será más oscura, con lo que se requerirá un mayor tiempo de exposición. La lente viene caracterizada por la distancia focal (f), que es la distancia desde su centro hasta el punto en el que convergen los rayos que llegan paralelos a ella. Así, el aumento de la distancia focal disminuye el campo visible y con ello la distancia de trabajo de la misma. Lente

Eje óptico

Diafragma

f

De este modo, el desenfoque se produce según el objeto se aleja o acerca de la posición ideal, dado que la imagen dejará de formarse sobre el sensor, y por tanto cada punto de la imagen no se corresponderá con su elemento correspondiente del sensor. Para corregirlo, se cambia la focal de la lente, lo que se traduce en variar la distancia entre lente y sensor. 4

Visión artificial

Existen una clase de objetivos, llamados telecéntricos, que permiten ver los objetos en proyección ortográfica; siempre y cuando sean más pequeños que el diámetro de la propia lente. Características

La dos características principales que definen un objetivo son: –

Campo visible (FOV): es el área visible por la lente para una cierta distancia de trabajo en la que los objetivos aparecen enfocados.



Profundidad de campo (DOF): es el rango de distancias a las cuales los objetos se encuentran enfocados. Selección de la lente

Como la lente está muy cerca del sensor frente a la distancia al objeto, se aproxima la distancia focal (f) por aquella que exista entre la lente y el sensor, de modo que los rayos pasarán por el centro de la lente.

Lente de Fresnel: está compuesta por microcurvaturas que le permiten, en teoría, ser igual de funcional que una lente de alta curvatura. En la práctica se utilizan, principalmente, para conseguir una fuente de luz colimada (rayos paralelos) a bajo coste, dado su ahorro de material.

Así, si se desea que un objeto de 150x150 mm sea recogido por una cámara con un sensor CCD 1/3” (3,6x4,8 mm) que se coloca a 400 mm del objeto, la distancia focal máxima que permitiría que el objeto entrase en la imagen capturada por el sensor, vendría dada por: Objeto

f F = h H

H Sensor

f F

h

Eje óptico

Lente

De tal modo que para que el objeto quepa en la imagen, la distancia focal máxima vendrá dada por la altura menor del sensor (h=3,6 mm), siendo H=150 mm la altura del objeto y F=400 mm la distancia. Distancia focal:

f = (3,6 · 400) / 150 = 9,6 mm

5

Procesado de imagen

2. Procesado de imagen 2.1 Introducción El procesado de imagen digital se aplica con multitud de propósitos, estando formado por el conjunto de transformaciones y algoritmos que se aplican a una imagen. Más concretamente, la visión artificial consiste en la aplicación de técnicas de procesado de imagen y datos para extraer información de las imágenes. En este caso, y con el fin de proporcionar un camino que permita explorar diferentes algoritmos de procesado de imagen, se recurre a su implementación en Python. La razón de utilizar Python se encuentra en su naturaleza de lenguaje interpretado, sencillo y potente. Lo que lo convierte en un lenguaje de programación especialmente indicado para el prototipado rápido de algoritmos. Para la realización de estos algoritmos de procesamiento de imagen se apoya en las librerías numpy (cálculo algebraico), matplotlib (representación gráfica) y opencv (procesamiento de imagen). import cv from pylab import * image = cv.LoadImage('parrots.png', cv.CV_LOAD_IMAGE_COLOR)

2.2 Imágenes digitales Una imagen digital es un conjunto de puntos (“pixels”) ordenados en forma de matriz, donde la información de cada “pixel” se encuentra contenida en la posición correspondiente de la matriz, cuyo tamaño (“size”) viene dado por el ancho (“width”) y el alto (“height”) de la imagen.

6

Procesado de imagen

X

(0, 0)

width

Y

height

Image image(x,y)

El valor de cada “pixel” se representa, normalmente, por medio de uno o varios valores de entre 0 y 255 (un byte) dependiendo del modelo de color de la imagen. Donde, para imágenes en color, lo normal es que cada “pixel” venga dado por un conjunto de tres valores que identifican el nivel de intensidad de cada uno de los colores básicos rojo, verde y azul (RGB, Red Green Blue). Así, la imagen en formato RGB de 24 bits, también llamada de color verdadero, presenta los colores que deben ser directamente representados en el monitor, pudiendo llegar hasta un total de 16777216 de colores diferentes. 2.3 Transformaciones del espacio de color Además del formato RGB, existen otros muchos espacios de color con los que representar los valores de los “pixels” de la imagen, como el de escala de grises (“Luminance”) o el HSV. En procesamiento de imagen para visión por computador suele ser habitual trabajar con imágenes en escala de grises, donde los valores RGB de cada “pixel” se convierten a su correspondiente valor de luminosidad (L, Luminance); dado que reduce sustancialmente la cantidad de datos a procesar, sin apenas asumir pérdida de información.

L=0,299⋅R0,587⋅G0,114⋅B def rgb2gray(image): """Converts the image from RGB to gray scale.""" gray = cv.CreateImage(cv.GetSize(image), cv.IPL_DEPTH_8U, 1) cv.CvtColor(image, gray, cv.CV_BGR2GRAY) return gray gray_image = rgb2gray(image)

7

Procesado de imagen

cv.SaveImage('gray.png', gray_image)

También suele ser habitual utilizar el espacio HSV (Hue Saturation Value), donde el tono (H) representa la fuerza del color, la saturación (S) representa cuan lejos está el color del blanco puro, y el valor (V) representa el brillo o iluminación (intensidad) del color. Con lo que resulta apropiado para obtener información independiente de las condiciones de iluminación. def hsv((b, g, r)): """Converts a RGB value to r = float(r) / 255 g = float(g) / 255 b = float(b) / 255 # Value v = max([r, g, b]) # Saturation if v > 0: s = 1 - min([r, g, b]) else: s = 0 # Hue if s > 0: if v == r: h = (g - b) / (6 * elif v == g: h = (b - r) / (6 * elif v == b: h = (r - g) / (6 * else: h = 0 return h, s, v

a HSV value."""

/ v

s) s) + 1.0/2 s) + 2.0/3

print hsv((37, 174, 103)) # Handles data as a numpy array matrix. img = asarray(cv.GetMat(image))

8

Procesado de imagen

# Creates a new image that shows the HSV channels and the original image. w, h = image.width, image.height H, S, V = zeros((h, w)), zeros((h, w)), zeros((h, w)) for j in range(h): for i in range(w): H[j,i], S[j,i], V[j,i] = hsv(img[j,i]) figure() subplot(221) imshow(H) subplot(222) imshow(S) subplot(223) imshow(V) subplot(224) imshow(img) axis('off') #show() (0.4452125375697724, 0.7873563218390804, 0.6823529411764706)

def rgb2hsv(image): """Converts the image from RGB to HSV.""" hsv = cv.CreateImage(cv.GetSize(image), 8, 3) cv.CvtColor(image, hsv, cv.CV_RGB2HSV) return hsv hsv_image = rgb2hsv(image) cv.SaveImage('hsv.png', hsv_image)

hue_image = cv.CreateImage(cv.GetSize(image), 8, 1) cv.Split(hsv_image, hue_image, None, None, None) cv.SaveImage('hue.png', hue_image)

9

Procesado de imagen

2.4 Transformaciones de histograma El histograma (“histogram”) es un modelo de la imagen que viene dado por las frecuencias de aparición de cada uno de los niveles de gris o color de la imagen. import Image from pylab import * # Representa los histogramas de la imagen a color fruit_image = Image.open('fruits.png') h = fruit_image.histogram() fruit_image = imread("fruits.png") # Representa la imagen figure() subplot(121) imshow(fruit_image) # Representa los histogramas subplot(333) bar(range(256), h[0:256], ec='r', fc='r') subplot(336) bar(range(256), h[256:512], ec='g', fc='g') subplot(339) bar(range(256), h[512:768], ec='b', fc='b') # Guarda el resultado savefig('histogram.png')

10

Procesado de imagen

Es uno de los atributos de la imagen más utilizado, tanto en procesado de imagen como en visión por computador, dado que facilita información para realizar multitud de operaciones de reasignación de los valores de cada “pixel” de la imagen. def histogram(image, bins): """Creates a histogram of the specified size.""" bins = [bins] ranges = [[0, 255]] hist = cv.CreateHist(bins, cv.CV_HIST_ARRAY, ranges) cv.CalcHist([image], hist) return hist histogram = histogram(gray_image, 32) print array(histogram.bins) [

7.68000000e+02 2.25800000e+03 2.41770000e+04 4.13650000e+04 1.49480000e+04 5.71700000e+03 8.66100000e+03 3.58000000e+03

2.00000000e+00 6.18800000e+03 2.99970000e+04 2.52110000e+04 8.78900000e+03 7.08500000e+03 5.55600000e+03 2.48900000e+03

5.20000000e+01 1.38440000e+04 3.72030000e+04 2.20780000e+04 6.50300000e+03 8.44900000e+03 4.91600000e+03 1.51900000e+03

8.41000000e+02 2.67480000e+04 4.43790000e+04 1.75470000e+04 6.21400000e+03 9.57200000e+03 4.20500000e+03 1.16400000e+03]

Así, las transformaciones de histograma como el realce, la linealización y los ajustes de brillo y contraste, son operaciones puntuales, que buscan mejorar la visualización o facilitar el tratamiento posterior de la imagen por medio de la reasignación de los valores de cada "pixel" de la imagen, según su valor original. Negativo

El negativo, o vídeo inverso, es una transformación de punto en la que se cambian los valores oscuros por claros y viceversa.

11

Procesado de imagen

g  x , y=255 – f  x , y  def negative(image): """Inverts the color values of the image.""" negative = cv.CreateImage(cv.GetSize(image), 8, 3) cv.AbsDiffS(image, negative, [255, 255, 255]) return negative #img = 255 – asarray(cv.GetMat(image)) # As numpy array negative_image = negative(image) cv.SaveImage('negative.png', negative_image)

Imagen gamma

La imagen gamma resalta los valores oscuros y satura los claros, mejorando la percepción en imágenes oscuras, o a la inversa, según el valor del exponente.

g  x , y= f  x , y Pseudocolor

Se llama pseudocolor a la asignación de un mapa de colores a una imagen en escala de grises, o a la reasignación del mapa de colores de una imagen a color (color falso), con lo que se logra apreciar detalles de la imagen que debido a la limitación del ojo humano (sólo detecta unos 20 niveles de gris) pasarían desapercibidos. Estiramiento del histograma

El estiramiento del histograma se emplea para mejorar el contraste de las imágenes, dado que distribuye un intervalo del histograma de la imagen de modo que ocupe todo el rango de valores, de tal modo que g(x,y) = 255 · (f(x,y) – a)/(b-a)), donde [a,b] es el intervalo de la imagen que será extendido. Ecualización del histograma

Mediante la ecualización del histograma se intenta igualar la frecuencia de aparición de 12

Procesado de imagen

todos los niveles de gris, mejorando el contraste de la imagen, aunque a veces, donde hay una rampa en el histograma acumulado, puede provocar la aparición de ruido. def equalization(gray_image): equalized = cv.CreateImage(cv.GetSize(gray_image), 8, 1) cv.EqualizeHist(gray_image, equalized) return equalized equalized_image = equalization(gray_image) cv.SaveImage('equalization.png', equalized_image)

2.5 Eliminación de ruido def gauss(image): """Filter to remove white noise.""" gauss = cv.CreateImage(cv.GetSize(image), image.depth, image.nChannels) cv.Smooth(image, gauss, cv.CV_GAUSSIAN, 5, 5) return gauss gauss_image = gauss(image) cv.SaveImage('gauss.png', gauss_image)

El ruido tipo sal y pimienta (“salt and pepper”) es un tipo especial de ruido impulsivo, que presenta un punteado característico que lo hace fácilmente identificable y que se elimina mediante el empleo del filtro de mediana. Este filtro presenta la ventaja de no eliminar los bordes como lo haría un filtro de media, aunque resulta computacionalmente costoso debido a que requiere la ordenación de los valores de los puntos de la vecindad para calcular la mediana y así sustituir el valor de cada píxel. def median(image): """Filter to remove salt and pepper noise.""" median = cv.CreateImage(cv.GetSize(image), cv.IPL_DEPTH_8U, image.nChannels)

13

Procesado de imagen

cv.Smooth(image, median, cv.CV_MEDIAN, 15) return median median_image = median(image) cv.SaveImage('median.png', median_image)

El ruido coherente es aquel que presenta un patrón de comportamiento frecuencial, y se elimina por medio del filtrado en frecuencia. Para esto, se realiza la transformación en frecuencia de la imagen por medio de la aplicación de la transformada discreta de Fourier (DFT), y se le aplica un filtro para eliminar el ruido. 2.6 Segmentación En la segmentación se busca la separación entre objetos y fondo (“background”), siendo lo más simple transformar la imagen a binaria según un determinado umbral (“threshold”). def threshold(image, thresh=None): """Binarizes the image from a threshold value.""" thr_img = cv.CreateImage(cv.GetSize(image), 8, 1) if thresh: cv.Threshold(image, thr_img, thresh, 255, cv.CV_THRESH_BINARY) else: cv.Threshold(image, thr_img, 0, 255, cv.CV_THRESH_OTSU) return thr_img threshold_image = threshold(gray_image, thresh=50) cv.SaveImage('threshold.png', threshold_image)

14

Procesado de imagen

otsu_image = threshold(gray_image) cv.SaveImage('otsu.png', otsu_image)

2.7 Detección de bordes La identificación de bordes (“edges”) o contornos, representa otro método de segmentación, dado que un borde es toda región de la imagen donde aparece una fuerte variación del nivel de intensidad entre “pixels” adyacentes. A la hora de identificar un borde en una imagen, existen dos posibilidades matemáticas, aplicar un filtro basado en un operador gradiente o en un operador laplaciano. Donde la diferencia estriba en que mientras que con el operador gradiente se obtienen los niveles de variación entre “pixels”, con el laplaciano lo que se obtienen son los puntos de inflexión de las variaciones de intensidad, o sea, los cambios de tendencia. 15

Procesado de imagen

Sin embargo, operacionalmente, la detección de bordes consiste en la aplicación de alguno de los núcleos de convolución (Sobel, Roberts, Laplaciano) diseñado a tal efecto. Lo que permite identificar las regiones en las que los “pixels” experimentan fuertes variaciones en sus niveles de intensidad. Uno de los operadores más usados es el de Sobel, cuyo kernel de convolución varía según la dirección de detección de los bordes.

[

−1 −2 −1 0 0 0 1 2 1

] [

−1 0 1 −2 0 2 −1 0 1

o

]

[Sobel]

def sobel(image): img = cv.CreateImage(cv.GetSize(image), cv.IPL_DEPTH_16S, image.nChannels) cv.Sobel(image, img, 1, 1) cv.Convert(img, image) return image sobel_image = sobel(gray_image) cv.SaveImage('sobel.png', sobel_image)

Otro kernel típico es el del operador laplaciano, que es más exacto que el gradiente en la precisión del borde.

[

]

0 −1 0 −1 4 −1 0 −1 0

[Laplaciano]

def laplace(image): laplace = cv.CreateImage(cv.GetSize(image), cv.IPL_DEPTH_16S,

16

Procesado de imagen

image.nChannels) cv.Laplace(image, laplace, 3) cv.Convert(laplace, image) return image laplace_image = laplace(gray_image) cv.SaveImage('laplace.png', laplace_image)

También existe la posibilidad de aplicar un algoritmo conocido como filtro de Canny, que permite detectar un contorno óptimo de un “pixel” de ancho. Este filtro consiste en la determinación del borde más probable bajo las condiciones de que: debe detectar todos los contornos y solamente los contornos, la distancia entre el “pixel” señalado como contorno y el contorno real debe ser tan pequeña como se pueda, y un único contorno debe ser identificado por un único píxel. De este modo la aplicación del filtro de Canny produce un máximo local donde existe un contorno, eliminando así los efectos del ruido. def canny(gray_image, low_threshold, high_threshold): img = cv.CreateImage(cv.GetSize(gray_image), cv.IPL_DEPTH_8U, 1) cv.Canny(gray_image, img, low_threshold, high_threshold) return img canny_image = canny(gray_image, 155, 185) cv.SaveImage('canny.png', canny_image)

17

Procesado de imagen

2.8 Operadores morfológicos Los operadores morfológicos, que se basan en la matemática morfológica, suelen emplearse en la mejora de los resultados de la segmentación, ya que descartan o unen puntos que componen los objetos presentes en una imagen según un criterio de forma. Para esto, las distintas operaciones morfológicas emplean una estructura (núcleo) que define la forma y tamaño de la superficie mínima que compone el objeto. Y se definen dos operaciones básicas, erosión y dilatación, que darán lugar a otras dos, apertura y cierre. Con la erosión se seleccionan los puntos para los cuales el núcleo se encuentra totalmente incluido en la imagen. def erosion(image): erosion = cv.CreateImage(cv.GetSize(image), cv.IPL_DEPTH_8U, image.nChannels) cv.Erode(image, erosion, None, 3) return erosion erosion_image = erosion(image) cv.SaveImage('erosion.png', erosion_image)

18

Procesado de imagen

Con la dilatación se seleccionan los puntos para los cuales el núcleo toca a algún punto de la imagen. def dilation(image): dilation = cv.CreateImage(cv.GetSize(image), cv.IPL_DEPTH_8U, image.nChannels) cv.Dilate(image, dilation, None, 3) return dilation dilation_image = dilation(image) cv.SaveImage('dilation.png', dilation_image)

Con la apertura se eliminan objetos pequeños y se suavizan los contornos generados por la mala segmentación, dado que está compuesto por una operación de erosión seguida de una de dilatación.

19

Procesado de imagen

Con el cierre se cierran los huecos y aperturas del tamaño del núcleo que presente el objeto, dado que está compuesto por una dilatación seguida de una erosión.

20

Localización y posicionamiento de objetos

3. Localización y posicionamiento de objetos 3.1 Contraste de modelos El contraste de modelos ("Model Matching") permite calcular el grado de concordancia entre los modelos de una imagen fuente y otra candidata, para ver cuan próximos están sus histogramas, y de este modo localizar el objetivo. Entre las técnicas disponibles para el cálculo del grado de concordancia se puede destacar el cálculo del coeficiente de Bhattacharyya, que se aplica a histogramas normalizados con un número idéntico de clases. Dado que usando normalización, por medio de la división del número de apariciones de cada valor de “pixel” entre el número total de “pixels”, se añade al histograma invarianza de escala. Lo que significa que el mismo objeto con diferentes escalas tendrá idénticos histogramas. Así, dados los histogramas p y q, el coeficiente de Bhattacharyya se define como: m

=∑  pu⋅q u

[coeficiente de Bhattacharyya]

u =1

# Target Frecuency pu = array([0.065, 0.114, 0.147, 0.065, 0.081, 0.049, 0.032, 0.016, 0.016, 0.049, 0.081, 0.114, 0.016, 0.032, 0.049, 0.065]) # Candidate Frecuency qu = array([0.035, 0.124, 0.167, 0.045, 0.081, 0.049, 0.032, 0.026, 0.026, 0.049, 0.081, 0.124, 0.016, 0.032, 0.049, 0.035]) # Histograms figure() subplot(211)

21

Localización y posicionamiento de objetos

bar(arange(len(pu)), pu, facecolor='green') subplot(212) bar(arange(len(qu)), qu, facecolor='blue') savefig('histrograms.png') # Bhattacharyya coefficient rho = sqrt(pu * qu) print "+-----+-------+-------+-------------+" print "| Bin | pu | qu | sqrt(pu*qu) |" print "+=====+=======+=======+=============+" for i in range(16): print "| %3i | %.3f | %.3f | %.5f |" %(i+1, pu[i], qu[i], rho[i]) print "+-----+-------+-------+-------------+" print "Bhattacharyya Coefficient: %.4f" %(sum(rho)) +-----+-------+-------+-------------+ | Bin | pu | qu | sqrt(pu*qu) | +=====+=======+=======+=============+ | 1 | 0.065 | 0.035 | 0.04770 | | 2 | 0.114 | 0.124 | 0.11889 | | 3 | 0.147 | 0.167 | 0.15668 | | 4 | 0.065 | 0.045 | 0.05408 | | 5 | 0.081 | 0.081 | 0.08100 | | 6 | 0.049 | 0.049 | 0.04900 | | 7 | 0.032 | 0.032 | 0.03200 | | 8 | 0.016 | 0.026 | 0.02040 | | 9 | 0.016 | 0.026 | 0.02040 | | 10 | 0.049 | 0.049 | 0.04900 | | 11 | 0.081 | 0.081 | 0.08100 | | 12 | 0.114 | 0.124 | 0.11889 | | 13 | 0.016 | 0.016 | 0.01600 | | 14 | 0.032 | 0.032 | 0.03200 | | 15 | 0.049 | 0.049 | 0.04900 | | 16 | 0.065 | 0.035 | 0.04770 | +-----+-------+-------+-------------+ Bhattacharyya Coefficient: 0.9737

Así, el cálculo del coeficiente de Bhattacharyya se encuentra en el rango entre 0 y 1, siendo 1 cuando los histogramas son idénticos. 3.2 Histogram backprojection El "histogram backprojection" es una técnica que se utiliza para localizar un objeto conocido en una imagen a color, por medio del cálculo de la probabilidad de cada "pixel" de pertenecer al objetivo. Para ello, se modela el objetivo ("target") a través de su histograma de color y se proyecta sobre la imagen, de tal modo que el resultado muestra la probabilidad de que un "pixel" pertenezca al objeto. La caracterización del modelo de histograma de color se lleva a cabo a través de agrupaciones o clases de valores ("bins") que permiten reducir los recursos de computación, aunque a costa de la consecuente pérdida de precisión. Así, si el valor de un "pixel" RGB es 13, 232, 211, entonces significa que se corresponde con la clase 0, 14, 13:

22

Localización y posicionamiento de objetos

def get_bin_index(value, bins): """Devuelve el índice de la clase (bin) a la que pertenece el valor (value). """ return value * bins / 256 pixel = array([13, 232, 211]) bins = 16 print get_bin_index(pixel, bins) [ 0 14 13]

Mientras que la implementación del histograma de color, que considerando únicamente 16 clases por color y está formado por 4096 valores (16x16x16), viene dado por: def get_histogram_color(img, bins): """Devuelve el histograma de color de la imagen.""" hist = zeros((bins, bins, bins)) for i in arange(len(img)): bin = get_bin_index(img[i], bins) hist[bin[0]][bin[1]][bin[2]] += 1 hist = hist / len(img) return hist

Una vez se tiene la implementación del cálculo de los histogramas de color, hay que calcular los histogramas del objetivo (histT, target histogram) y de la imagen (histI, image histogram), para poder realizar la proyección. Dicha proyección consiste en asignar a cada valor de "pixel" de la imagen el correspondiente a la probabilidad de que pertenezca al objetivo, de tal modo que histT[idx] / histI[idx], siendo idx el índice del contenedor al que pertenece el valor del "pixel" de la imagen. Así, la imagen de "backprojection" se obtiene como aquella donde el valor de cada "pixel" se corresponde con dicho ratio.

23

Localización y posicionamiento de objetos

# Backprojection target_img = Image.open('target.png') image_img = Image.open('image.png') imgT = array(target_img.getdata()) imgI = array(image_img.getdata()) # Histograma de color bins = 8 histT = get_histogram_color(imgT, bins) histI = get_histogram_color(imgI, bins) # Backprojection image width, height = image_img.size imgB = zeros(width * height) for i in arange(width * height): idx = get_bin_index(imgI[i], bins) imgB[i] = (histT[idx[0]][idx[1]][idx[2]] / histI[idx[0]][idx[1]][idx[2]]) figure() gray() imshow(imgB.reshape(height, width)) savefig('backprojection.png') #show()

Así, los valores más altos se corresponden con la mayor probabilidad de pertenecer al objetivo, o sea, el objetivo viene dado por los "pixels" de valores más brillantes, al igual que algún ruido. 3.3 Posicionamiento de objetos Una vez localizado el objetivo, normalmente habrá que posicionarlo, devolviendo su posición y orientación en términos de coordenadas de la imagen. Para ello suele ser habitual utilizar las características geométricas del objeto segmentado, a través del cálculo de los momentos, dado que pueden ser descritos simplemente como una función de la intensidad de los “pixels” de la imagen. 24

Localización y posicionamiento de objetos

El momento de orden cero es el área de la imagen. Así que lo que necesitamos es básicamente los valores de intensidad de los “pixels” y las coordenadas x e y para encontrar los momentos. Usando momentos, podemos encontrar el centroide o centro de gravedad de la imagen. El centroide o centro de masas ( X CM , ( X CM =

Y CM ) viene dado por:

∑ Xi A

,

Y CM =

∑Yi A

)

Donde el tamaño queda definido por medio del área ( A ), que no es más que el número de píxeles que lo componen, y que también se utiliza para identificar el marcador, dado que será el mayor. Se puede obtener la orientación del marcador por medio de la determinación de los ejes principales de inercia, cuya dirección queda definida por medio del ángulo ( θ ), siendo aquel que forman los ejes principales con respecto al sistema de referencia ( x , y ) situado en el centro de masas.

tan (2 θ)=

−2⋅P xy I x −I y

Donde los momentos de inercia del blob respecto a los ejes 2 I x =∑ yi ,

x e

y vienen dados por:

I y =∑ x i

2

Y, el producto de inercia por:

P xy=∑ x i⋅yi (0, 0)

width

X

Y (XCM, YCM)

x

θ y

height Imagen img(x,y)

Dado que la posición de los “pixels” viene dada para el sistema de referencia absoluto ( X , Y ) de la imagen, habrá que aplicar el teorema de Steiner para determinar los momentos y el producto de inercia que hay que aplicar. 2

I p= I CM + A⋅d p De tal modo, que los momentos y productos de inercia quedan definidos a partir de aquellos respecto al origen de la imagen, como:

25

Localización y posicionamiento de objetos

I x =∑ Y i – A⋅Y CM 2

2

I y =∑ X 2i – A⋅X 2CM P xy=∑ X i⋅Y i – A⋅X CM⋅Y CM

26

Seguimiento de objetos

4. Seguimiento de objetos 4.1 Introducción El seguimiento visual puede ser descrito como la identificación de un objeto en un fotograma de vídeo y su posterior seguimiento a través de la secuencia. Siendo uno de los algoritmos de seguimiento más populares el llamado “Meanshift Tracking Algorihm". Este algoritmo, basado en segmentación en color, permite el seguimiento de objetos por medio de la búsqueda del mejor candidato en las posiciones vecinas de dos “frames” consecutivo, realizando el seguimiento y proporcionando la localización del marcador. En este método, la identificación del objeto se establece a través del patrón de color que lo identifica, con lo que, para que los resultados sean independientes de las condiciones de iluminación, habrá que utilizar un modelo de color como el HSI (Tono, Saturación, Intensidad), en lugar del RGB. Así, una vez establecido y calculado el modelo de referencia en el “frame” actual, se busca el modelo en el siguiente “frame”. Para lo cual se empieza en la posición actual y se busca en las posiciones vecinas del siguiente “frame”, hasta que se encuentra el mejor candidato según una función de máxima similitud, con la que se detiene el algoritmo y se empieza con el siguiente par de “frames”. 4.2 Meanshif Tracking El algoritmo de “Meanshift Tracking”, para el seguimiento de un objeto en una imagen, se puede resumir a través de los siguientes pasos: 1. Seleccionar el objeto en la imagen y crear el histograma del área o ventana dentro de la cual se encuentra el objetivo(“target”). 2. Segmentar el objeto usando “backprojection”, pero en lugar de buscar en toda la imagen, proyectar en una determinada área de búsqueda (ROI, Region Of Interest) para reducir el riesgo de fallo del algoritmo de seguimiento. 3. Encontrar el centroide del objeto. 4. Obtener el siguiente “frame” y segmentar la sección bajo la ventan de búsqueda “search window” realizando la proyección de fondo del histograma. 5. Encontrar el centroide del objetivo y centrar la ventana de búsqueda sobre este. 6. Repetir desde el paso 4 hasta finalizar la secuencia de imágenes. Se usa una ventana de búsqueda en torno al objeto original para optimizar la velocidad y resultados del algoritmo. Esto significa que la probabilidad de que el seguidor se pierda por causa de un objeto de similar coloración en el fondo se reduce. Además, al limitar el área se incrementa la velocidad de procesamiento, haciendo el “tracker” más rápido.

27

Identificación de un contorno rectangular

5. Identificación de un contorno rectangular 5.1 Introducción Cuando se quiere obtener, independientemente de la posición de la cámara, la imagen de un plano delimitado por un contorno rectangular, como una hoja de papel o la pantalla de un ordenador, se puede establecer la proyección que define la verdadera proporción de la imagen conocidas las dimensiones reales del rectángulo e identificándolo en la imagen. Para identificar ese contorno rectangular se realiza un proceso de tres etapas: 1. Se aplica un operador tipo laplaciano para detectar los bordes existentes en la imagen. 2. Sobre la imagen de bordes, se identifican los bordes rectos por medio de la aplicación de la transformada de Hough para líneas. 3. Una vez obtenidas las líneas, se buscan aquellas que verifican las condiciones impuestas por un contorno rectangular. image = cv.LoadImage('background.png', cv.CV_LOAD_IMAGE_COLOR) image_gray = rgb2gray(image) image_laplace = laplace(image_gray) image_threshold = threshold(image_laplace, 17) # Hough from math import pi, cos, sin storage = cv.CreateMemStorage(0) #lines = cv.HoughLines2(image_threshold, storage, cv.CV_HOUGH_STANDARD, 1, pi/180, 100, 0, 0) #print lines #for line in lines: # rho = line[0] # theta = line[1] # a = cos(theta) # b = sin(theta) # x0 = a * rho # y0 = b * rho # pt1 = (cv.Round(x0 + 1000*(-b)), cv.Round(y0 + 1000*(a))) # pt2 = (cv.Round(x0 – 1000*(-b)), cv.Round(y0 – 1000*(a))) # cv.Line(color_dst, pt1, pt2, CV_RGB(255,0,0), 3, 8) lines = cv.HoughLines2(image_threshold, storage, cv.CV_HOUGH_PROBABILISTIC, 1, pi/180, 75, 50, 10) for line in lines: cv.Line(image, line[0], line[1], cv.CV_RGB(255, 0, 0), 1, 8) cv.SaveImage('rectangle.png', image)

28

Identificación de un contorno rectangular

5.2 Detección del contorno rectangular Para la identificación de contorno rectangular se aplica, sobre la imagen de bordes binarizada, la transformada de Hough para líneas, para de este modo identificar las líneas rectas de la imagen que permitirán encontrar las que conforman el contorno rectangular. Tranformada de Hough para líneas

La transformada de Hough para líneas es una técnica muy robusta que permite encontrar puntos alineados en una imagen binarizada, o sea, detectar líneas rectas. Una serie de puntos (xi, yi) alineados definen una línea recta cuya ecuación en la forma explícita es y = m·x + b. Con lo que cada recta del espacio de la imagen (X, Y) vendrá dada por un único par (m, b) en el espacio paramétrico. Debido a que tanto la pendiente de la recta (m) como el término independiente (b) tienden a infinito cuando la recta tiene una posición cercana a la vertical, en lugar de utilizar la ecuación y = m·x + b se emplea la parametrización (ρ, θ), que define la recta en su forma polar: ρ = x ⋅ cos θ + y ⋅ sen θ Por tanto hay que realizar una transformación entre el plano de imagen (x, y) y el espacio de parámetros (ρ, θ).

29

Identificación de un contorno rectangular

(0, 0)

width/2

X

width

Y

x

height/2

θ y

ρ height Imagen img(x,y)

Como por cada punto de la imagen podrán pasar un número infinito de rectas, y por tanto podrá presentar un conjunto infinito de parámetros, se toma un espacio de parámetros discretizado. Así, dado que dos puntos que estén sobre la misma recta presentarán un par de parámetros comunes, si por cada punto perteneciente a la recta se genera un voto sobre un acumulador, se tiene que el número de votos para un par de parámetros es el número de puntos perteneciente a esa recta. Para ello, en la transfomada de Hough se crea una matriz de acumulación A(i,j) que subdivide el espacio paramétrico en una serie de intervalos que irán desde ρmin a ρmax, y desde θmin a θmax, de tal modo cada celda (i,j) de la matriz contendrá la probabilidad de que (ρi, θj) sea una recta de la imagen. Dado que la parametrización (ρ, θ) se define desde el centro de la imagen, los intervalos de valores posible para una imagen de tamaño WxH vendrán dados por:

 ∈

[

]

−W H  W H , 2 2   2

2

−d

2

d

2

 ∈ [ 0,  De este modo se toma un conjunto de ángulos  de prueba, resultado de dividir 90 veces el intervalo [0º, 180º) , y con cada uno de ellos se calculan los valores de  para cada punto de la imagen y se vota la celda de acumulación A(i,j) correspondiente a (θ,ρ), estando el intervalo [-d, d] dividido en 100 partes, donde d es la mitad de la diagonal de la imagen. Finalmente se tiene que las celdas de la matriz de acumulación A(i,j), más votadas, serán las rectas más probables, y siempre según la precisión de las subdivisiones tomadas. Algoritmo // Descripción del algoritmo

30

Identificación de un contorno rectangular

1. Inicializar el acumulador a cero. 2. Para cada punto de la imagen calcular los posibles valores de ρ partiendo de los valores de θ. ρ = x ⋅ cos θ + y ⋅ sen θ 3. Incrementar la celda del acumulador correspondiente. A(θ,ρ) ++ 4. Identificar las celdas con mayor valor.

5.3 Identificación del contorno rectangular Finalmente, para localizar los vértices que definen el contorno rectangular, se buscarán entre todas las líneas más probables proporcionadas por la transformada de Hough aquellas primeras que cumplan las siguientes condiciones: –

La orientación de dos lado vecinos debe diferir en al menos 20º (lados perpendiculares).



La orientación de dos lados opuestos no debe diferir en más de 20º (lados paralelos).



Los lados opuestos deben presentar un

 diferente en al menos 40 píxeles.

31

Cálculo de la homografía

6. Cálculo de la homografía 6.1 Introducción Para establecer la correspondencia entre las coordenadas de la imagen y las reales se asume que la cámara cumple con una perspectiva proyectiva (modelo pin-hole), de modo que la relación entre la proyección de un plano y su vista ortogonal viene dada por la homografía. 6.2 Homografía Dado un punto (x, y) que se sitúa en la proyección del plano identificado en la imagen, el punto correspondiente en la vista ortogonal de ese plano buscado (X, Y) viene dado por la relación que establece la matriz de homografía ( H ), de tal modo que:

   

h 11 h12 h13 X  Y = h 21 h 22 h23 1 h 31 h32 1

x y 1

H

donde

 es un factor de escala distinto de cero que queda fijado al hacer h 33=1 .

v1

v2

V1

V2

V4

V3

Transformación proyectiva v3

v4

Así, se tiene que para determinar H y con ella realizar la corrección de orientación y posición que permita obtener la posición real del marcador, basta con establecer la correspondencia entre los cuatro pares de puntos, los determinados en la etapa anterior sobre la imagen, y los que representan a los vértices del contorno rectangular de dimensiones reales, quedando un sistema de ecuaciones lineales con solución única, tal que:



x1 x2 x3 x4 0 0 0 0

y1 y2 y3 y4 0 0 0 0

1 1 1 1 0 0 0 0

0 0 0 0 x1 x2 x3 x4

0 0 0 0 y1 y2 y3 y4

0 0 0 0 1 1 1 1

− x 1 X 1 − x 2 X 2  − x 3 X 3  − x 4 X 4  − x 1 Y 1  − x 2 Y 2 − x 3 Y 3  − x 4 Y 4

32

   

− y1 X 1  h11 X1 − y 2 X 2 h12 X2 − y 3 X 3  h13 X3 − y 4 X 4 h 21 ⋅ = X4 − y 1 Y 1 h 22 Y1 − y 2 Y 2  h 23 Y2 Y3 − y 3 Y 3 h31 Y4 − y 4 Y 4  h32

Cálculo de la homografía

Cada punto proporciona dos ecuaciones lineales para la solución de los elementos de la matriz H, con lo que conocidos 4 puntos se tiene una solución exacta, ya que h 33 = 1. Si se tuviesen más de cuatro puntos, la matriz sería sobredeterminada y H tendría que ser estimado en términos de minimización, donde la mejor opción pasaría por aplicar el método de descomposición en valores singulares (SVD), dado que facilita la obtención de una solución óptima y robusta de un sistema de ecuaciones lineales, a pesar de que se encuentre mal condicionado.

6.3 Resolución de sistemas de ecuaciones lineales A la hora de resolver un sistema de ecuaciones lineales, la solución pasa por aplicar alguno de los métodos existentes, pudiendo ser directo o iterativo según las características del problema en cuestión.

An ×n⋅x n=bn En este caso se opta por aplicar un método directo , concretamente el método de eliminación de Gauss con pivotación parcial, con lo que se logra minimizar los problemas debidos a los errores de redondeo. Esto se debe a que con este tipo de pivotación se toma como pivote el elemento de mayor valor absoluto de la columna. Este es el método más sencilllo de resolución de sistemas de ecuaciones lineales. 1. Eliminación: consiste en reducir el sistema a uno triangular superior 2. 2. Sustitución: consiste en la obtención de la solución por medio del método conocido como sustitución regresiva. Otra opción podría ser aplicar el método de Gauss-Jordan, con el que se elimina la etapa de sustitución regresiva al eliminar los elementos a ambos lados de la diagonal.

2

Matriz que tiene todos sus coeficientes debajo de la diagonal iguales a cero.

33

Anexo: Instalaciones robotizadas

7. Anexo: Instalaciones robotizadas 7.1 Introducción Las instalaciones robotizadas son aquellas que se encuentran formadas por una agrupación de elementos en torno a un robot constituyendo una célula de trabajo, que de forma autónoma realizan una serie de tareas. Siendo un robot un manipulador multifuncional reprogramable, capaz de mover materiales, piezas, herramientas o dispositivos especiales, según trayectorias variables, que son programadas para realizar tareas diversas en aplicaciones de automatización industrial. Con todo esto resulta un sistema mecánico, electrónico e informático capaz de adaptarse a diferentes tipos de acciones en las que concurren la polivalencia, autonomía, movilidad y gobernabilidad. Un robot industrial está constituido por dos elementos principales, la unidad de control, y el manipulador, de modo que mientras que la unidad de control proporciona la inteligencia del robot, el manipulador es la parte mecánica encargada de realizar el trabajo. Existen multitud de configuraciones del manipulador, de las que depende directamente el volumen de trabajo y la movilidad del robot. Siendo las configuraciones más utilizadas la articular y la cartesiana, aunque también se emplean otras como la Scara, la cilíndrica, la esférica o la paralela. Los sistemas de visión artificial y los robots industriales suelen encontrarse ligados, como sistemas complementarios, en aplicaciones de un alto grado de automatización y sofisticación. 7.2 Fases del desarrollo de un proyecto 1. Definición y especificación de requerimientos: descripción detallada de lo que debe hacer el sistema. 2. Diseño: modelado, descripción y especificación de la solución adoptada para la implementación del sistema. 3. Desarrollo, construcción e integración: realización de los sistemas hardware, software y de comunicaciones, e integración y verificación de los mismos. (tal vez la parte más delicada del proyecto) 4. Instalación, validación y puesta en servicio: tras el desarrollo del sistema se procede a su instalación y validación. (mientras que verificar es comprobar que el sistema funciona, validar es que lo hace cumpliendo los requerimientos especificados) 5. Explotación, mantenimiento y mejora del sistema: se pone el sistema en producción corrigiendo las desviaciones que se produzcan y se aplica la mejora continua. 6. Retirada: la retirada de un sistema de producción al final de su vida útil puede ser un problema si no ha sido contemplado desde la concepción del proyecto.

34

Related Documents

Vision Artificial
November 2019 11
Vision Artificial
June 2020 4
Vision
October 2019 52
Vision
June 2020 25

More Documents from "JUAN GOMEZ"

Actividad 8.docx
December 2019 75
May 2020 7
Leccion5avestruz
May 2020 19
Metro Df 2006
April 2020 17
Abordagem Policial - Ok (1)
October 2019 33
May 2020 17