universidad autónoma metropolitana unidad iztapalapa148.206.53.84/tesiuami/uami17162.pdfuniversidad...

51

Upload: trannguyet

Post on 18-Oct-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica
Page 2: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

Universidad Autónoma Metropolitana

Unidad Iztapalapa

División CBI

Ingeniería Electrónica

Especialidad Comunicaciones

Título del Proyecto Terminal: “Reconocimiento de Objetos en Secuencia de Imágenes”

Nombre de la Asesora: Martha Erika Cejudo Torres Orozco No. Económico: 34383

Nombre del Alumno: Daniel López Pérez

Matrícula: 206321210

Page 3: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

Índice

INTRODUCCIÓN. 1

1.1 Sistemas de visión y procesamiento de imágenes. 2

1.2 Procesamiento digital de imágenes. 2

1. 3 Relaciones básicas entre pixeles. 3

1.3.1 Vecinos de un pixel. 3

1.3.2 Conectividad. 3

1.4 Medidas de distancia. 4

2.1 MATLAB. 5

2.2 Consideraciones Iniciales. 6

2.3 Lectura, despliegue y escritura de imágenes. 6

2.4 Tipos de datos. 7

2.5 Tipos de imágenes en MatLAB. 8

2.5.1 Imágenes a escala de grises. 8

2.5.2 Imágenes binarias. 8

2.6 Conversión entre diferentes tipos de datos y de imágenes. 9

2.6.1 Conversión entre tipos de datos. 9

2.6.2 Conversión entre diferentes tipos de imágenes. 9

2.7 Indexado de vectores y matrices. 11

2.7.1 Indexado de vectores. 11

2.7.2 Indexado de matrices. 12

2.8 Operaciones sobre matrices completas. 13

2.9 Programación en MatLAB. 14

Page 4: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

2.10 Estructuras de control para la programación. 16

2.10.1 Estructura if y else if. 17

2.10.2 Estructura for. 18

2.10.3 Estructura while. 19

2.10.4 break y continue. 19

2.10.5 Estructura switch. 19

3.1 Operaciones de pixel en MatLAB. 20

3.1.2 Cambio de contraste e iluminación en MatLAB. 20

3.1.3 Segmentación de una imagen por umbral usando MatLAB. 20

3.1.3.1 Segmentación en línea de comandos. 21

3.1.3.2 Binarización utilizando la función im2bw. 21

3.1.4 Ajuste de contraste con MatLAB. 21

4.1 Reducción del ruido en una imagen digital. 22

4.2 Operaciones de suavizado. 22

4.3 Filtros lineales. 23

4.3.1 Filtro de la media. 23

4.4 Filtro Gaussiano. 25

4.5 Filtros no lineales. 27

5.1 Métodos de detección. 29

5.2 Detector SIFT. 29

5.2.1 Detección de Espacio – Escala. 29

5.2.2 Localización de puntos clave. 31

5.3 Detector SURF. 32

5.3.1 Imagen Integral. 33

Page 5: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

5.3.2 Detector Rápido Hessiano. 34

5.4 Detector Harris. 35

5.4.1 Determinación de los puntos esquina. 38

6.1 Metodología de comparación de los algoritmos de detección SIFT,

SURF y Harris. 38

6.1.1 Comparación de algoritmos. 39

6.1.2 Resultados experimentales. 40

6.1.3 Conclusiones. 41

7.1 DSP (Digital Signal Processing). 41

7.1.1 Aplicaciones. 43

7.1.2 Características de los DSP. 44

8.1 Referencias. 46

Page 6: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

1

INTRODUCCIÓN

En la actualidad se dispone de los medios necesarios para fabricar robots que simulen el comportamiento humano en determinadas actividades. Sin embargo, para realizar un buen uso de estos robots se necesita que sean capaces de interactuar con su entorno. Los seres humanos somos capaces de realizar esta interacción a través de nuestros sentidos. En este proyecto se busca realizar una aproximación al sentido de la vista mediante la utilización de algoritmos descriptores de imágenes, tales como SIFT (Scale Invariant Feature Transform), SURF (Speeded Up Robust Features) y Harris. Dichos algoritmos serán implementados utilizando programación en MatLAB, que es una herramienta muy útil para el procesamiento digital de imágenes. Este proyecto se enfoca en la detección de objetos, la cual amplia la inteligencia artificial de los robots y su capacidad para interactuar con su entorno.

Page 7: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

2

1.1 Sistemas de visión y procesamiento de imágenes. Un sistema de visión y procesamiento de imagen se compone de una serie de subsistemas los cuales son procesamiento de nivel bajo, medio y alto, dichos procesamientos operan sobre una escena con el objetivo de interpretar alguna característica notable. En el bajo nivel se encuentran procesos que se realizan sobre imágenes correspondientes de suavizado, umbralización, eliminación de ruido, definición de bordes, etc. Los procesos que se desarrollan en esta etapa de procesamiento suelen conocerse en la comunidad de visión como pre-procesamiento. En el nivel medio, se definen procesos tales como definición de límites y extracción de características. En el alto nivel se establecen relaciones semánticas entre los objetos de la descripción de la escena.

1.2 Procesamiento digital de imágenes. El procesamiento digital de imágenes puede definirse como la operación de imágenes mediante computadora, una diferencia importante entre el procesamiento de imágenes y la visión corresponde a que las imágenes con las que trabaja el primer caso no provienen únicamente de la captación del espectro visible a la que corresponde el sistema de visión biológico, ya que las imágenes pueden originarse de la captación de cualquier área del espectro electromagnético. Existen hoy en día sistemas de procesamiento de imagen que operan sobre imágenes generadas a partir del censado de rayos X, rayos gamma, resonancia magnética, microondas entre otras. La materia prima del procesamiento de imágenes y la visión son las imágenes, las cuales se consideraran como una representación del mundo físico que tiene información importante, la cual es captada mediante un proceso de muestreo, generalmente por medios electrónicos. Para poder obtener imágenes digitales, se requiere de un proceso que requiere capturar, muestreo, cuantificación y codificación. Una imagen puede definirse como una función bidimensional que cuantifica la intensidad de luz (el espectro visible es el más común). Una imagen normalmente es representada como , donde el valor de la intensidad se obtiene por el idexado de las coordenadas x e y. El modelo más común de representación de la imagen es por medio de una matriz, tal que:

Page 8: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

3

(1.1)

[

]

1.3 Relaciones básicas entre pixeles.

Se establecerán algunas relaciones importantes que existen entre los pixeles de una

imagen, la idea es describirlas tanto en su concepto como su nomenclatura ya que serán

tratadas de manera extensiva.

1.3.1 Vecinos de un pixel.

La vecindad se define como la relación que tiene un pixel de manera posicional con los pixeles más cercanos a él. Existen dos tipos de vecindad que posee un pixel en la imagen, la vecindad 4-vecinos y la 8-vecinos. La vecindad 4-vecinos se constituye de los pixeles (V1, V2, V3 y V4) que se encuentran arriba, abajo, a la derecha e izquierda del pixel en cuestión P. La vecindad 8-vecinos se constituye de los pixeles (V1, V2, V3, V4, V5, V6, V7 Y V8) correspondientes a los 4-vecinos más, los cuatro pixeles que se encuentran en forma diagonal al pixel en cuestión P.

1.3.2 Conectividad.

La conectividad entre pixeles es un concepto utilizado ampliamente en la detección de regiones u objetos presentes en una determinada imagen. Por esta razón la conectividad se define como una situación de adyacencia y vecindad. Bajo esta observación existen dos tipos de conectividad, la conectividad 4 y la conectividad 8. El concepto de conectividad puede ser mejor entendido si se considera una imagen binaria, es decir una imagen cuyos pixeles representan una característica en lugar de luminosidad, por lo que sus valores solo pueden ser cero o uno.

Page 9: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

4

(1.2)

(1.3)

(1.4)

Considerando lo anterior se dice que dos pixeles y , cuyos valores en la imagen son uno, están conectados con conectividad-4, la imagen tendrá dos objetos, ya que el punto en que ambas estructuras se encuentran más cercanas los pixeles de contacto no están en relación de vecindad 4-vecinos. Si en la misma imagen se considera como criterio de vecindad el de 8-vecinos los dos pixeles de contacto estarían conectados por lo que ambas estructuras serian consideradas como un solo objeto.

1.4 Medidas de distancia.

La distancia existente entre dos pixeles es una de las medidas más usadas en el procesamiento de imágenes, con aplicaciones que van desde la similitud hasta la medición de objetos encontrados en la escena. Existen varios tipos de medidas para encontrar relaciones posicionales entre pixeles, sin embrago, las más comunes son la distancia euclidiana, la distancia city-block y la chessboard. La distancia euclidiana se define como la distancia existente entre dos pixeles definida de acuerdo a:

√ La distancia representa el vector resultante entre e . La distancia city-block corresponde a la suma de la distancia horizontal y vertical entre ambos pixeles, la cual es definida como:

| | | | Esta es la distancia que arroja un valor más grande en comparación a sus contrapartes euclidiana y chessboard para una misma relación posicional. La distancia chessboard es la máxima distancia entre el recorrido horizontal y el vertical que se experimenta entre dos pixeles. Dicha distancia se define de acuerdo a:

| | | | El hecho de que la distancia chessboard solo considere el recorrido máximo en un solo sentido la hace parecer al juego de ajedrez. La decisión de qué tipo de distancia utilizar se encuentra determinado por la aplicación y las características de posición requerida, sin embargo, la distancia euclidiana es la más

Page 10: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

5

utilizada salvo en aquellas situaciones, donde características tales como recorridos máximos entre caminos formados por pixeles es de interés.

2.1 MATLAB. Hasta hace pocos años la comunidad de procesamiento de imágenes y visión por computadora era un grupo relativamente pequeño de personas, las cuales tenían acceso a herramientas de procesamiento muy caras, o bien se caracterizaban por ser expertos en algún lenguaje de programación. Actualmente existe una gran cantidad de librerías que facilitan el proceso de diseño del sistema de procesamiento de imagen, ya sea para aplicaciones de inspección de manufactura, hasta para la navegación de un robot móvil. Ejemplos de este tipo de herramientas es OpenCV para utilizarse con lenguaje C o ImageJ para ser utilizado con Java. Aun a pesar de la oferta existente de librerías y software desarrollado por empresas e institutos de investigación, sigue siendo compleja la implementación de algoritmos de visión, esto se debe principalmente a que la curva de aprendizaje de utilización de las librerías así como la caprichosa configuración de sus ambientes hace complicado su uso. Lo anterior puede ser entendible ya que la utilización de una librería no solo involucra el dominar los tipos de datos y parámetros de las funciones que implementan, sino que demanda un conocimiento aceptable del lenguaje en el que la librería se encuentra implementada. MatLAB es un programa que permite realizar cálculos técnicos y científicos. MatLAB con ya varios años en el mercado y una gran cantidad de funciones implementadas para diferentes disciplinas científicas se ha convertido prácticamente en un estándar de programación y desarrollo rápido de aplicaciones. La unidad de procesamiento de MatLAB es la matriz, por lo que su utilización en el procesamiento de imágenes (matrices) es una extensión natural de su lenguaje de programación. Simulink puede ser considerado como un ambiente de simulación de sistemas incorporado al programa MatLAB, el cual permite analizar la respuesta en el tiempo de sistemas dinámicos complejos. Con la incorporación de la herramienta llamada “Video and Image Processing Blockset” Mathworks logro que pareciera imposible, generar un ambiente de implementación de algoritmos de procesamiento de imagen que tuviera la capacidad de operar en tiempo real. Lo anterior se denota como increíble, debido a que las herramientas desarrolladas son muy sencillas de manejar y extender, ya que para ello solo es necesario realizar código utilizando el lenguaje de programación de MatLAB.

Page 11: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

6

(2.2)

(2.1)

2.2 Consideraciones Iniciales Una imagen es considerada una función bidimensional descrita en forma matricial como:

[

]

Donde el desplazamiento en forma horizontal trae consigo un aumento en el índice x mientras que los desplazamientos en el sentido vertical aumentan el índice y, además M y N representan las dimensiones de la imagen. La forma de representar imágenes en MatLAB representa una adaptación del molde descrito en la ecuación 2.1 respecto a la manera de indexar los datos matricialmente, esto significa que los índices intercambian posiciones, con lo anterior es posible adoptar la notación matricial típica de renglón-columna. Considerando lo anterior las imágenes en MatLAB serán representadas de la siguiente manera:

[

]

2.3 Lectura, despliegue y escritura de imágenes. Las imágenes son leídas de algún dispositivo de almacenamiento al ambiente de MatLAB usando la función imread. La sintaxis general de esta función es:

A=imread(‘nombre_del_archivo’) Donde nombre_del_archivo es una cadena de caracteres que determina el nombre de la imagen con su respectiva dirección de búsqueda, mientras que la variable A almacenara la imagen obtenida. El tipo de imagen que se puede cargar mediante la función imread corresponde a los tipos descritos en la tabla 2.1. Una vez que la imagen ha sido cargada en una variable, podría ser conveniente indagar sobre sus dimensiones, lo que puede ser realizado mediante la función size. De tal manera que para indagar el tamaño de la imagen almacenada en A, se describiría:

[M N]=size(A)

Page 12: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

7

Donde la variable M almacenara el número de renglones de la imagen, mientras que N el número de columnas.

Tipo de imagen Extensión

TIFF .tif o .tiff JPG .jpg o .jpeg GIF .gif

BMP .bmp PNG .png XWD .xwd

Tabla 1. Tipos de imágenes en MatLAB.

Para desplegar imágenes en MatLAB como si se tratara de graficas generadas por un comando plot, se utiliza la función imshow. De esta manera si se deseara desplegar la imagen almacenada en la variable A, se escribiría en línea de comandos:

imshow(A) Después de que se han realizado procesamientos sobre la imagen sería conveniente guardar la imagen resultante, lo cual se realiza mediante la función imwrite. Su sintaxis se define como:

Imwrite(B, ´nombre_del_archivo’) Donde B representa la imagen que se pretende guardar, mientras que nombre del archivo representa la cadena de caracteres que define un nombre valido para la imagen junto con una extensión congruente con las definidas en la tabla anterior.

2.4 Tipos de datos. Aunque normalmente se utilizan números enteros para indexar las coordenadas de la imagen, los valores de los pixeles no se encuentran registrados a valores enteros del intervalo clásico de despliegue [0, 255], sino que estos pueden asumir diferentes valores o tipos, inclusive números complejos (en el caso de la Transformada de Fourier). Todos los cálculos numéricos desempeñados por MatLAB se realizan considerando que los números son del tipo double (o números de coma flotante), por lo que muchas de las operaciones realizadas sobre imagen tienen (o tendrán) también este formato. el tipo de

Page 13: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

8

dato uint8 (enteros en el intervalo [0, 255]) se presenta normalmente cuando se realiza la carga de una imagen al ambiente de MatLAB por medio de la función imread. Otro tipo de dato popular para la representación de imagines es el logical, el cual permite representar en forma compacta imágenes binarias, por lo que este tipo de datos solo tiene dos valores posibles 0 y 1. Otro tipo de datos común que es muy utilizado en el ambiente Simulink es el single, el cual permite representar un número real con una precisión simple, siendo su intervalo de representación [ , ].

2.5 Tipos de imágenes en MatLAB. El toolbox de procesamiento de imágenes de MatLAB permite la manipulación de cuatro tipos de imágenes:

1. Imágenes de intensidad o escala de grises. 2. Imágenes binarias. 3. Imágenes indexadas. 4. Imágenes de color RGB.

En esta sección solo se analiza el caso de las dos primeras por ser consideradas las más comunes y básicas en el procesamiento.

2.5.1 Imágenes a escala de grises.

Una imagen a escala de grises es una matriz cuyos valores han sido escalados para representar un determinado número de intervalos. Si la imagen es del tipo uint8 entonces los datos que la conforman se encuentran en el intervalo [0, 255]. Si la imagen es del tipo double, entonces los datos que la constituyen son del tipo flotante y se encuentran en el intervalo [0, 1].

2.5.2 Imágenes binarias.

Una imagen binaria del tipo logical se representa en MatLAB como un arreglo que solo contiene unos y ceros. Estos ceros y unos son especiales, porque no implican valores numéricos, sino más bien banderas que indican el estado de falso (0) o verdadero (1).

Page 14: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

9

2.6 Conversión entre diferentes tipos de datos y de imágenes. La conversión de tipos de datos que constituyen a las imágenes es una tarea frecuente en el procesamiento de imágenes, debido a que no todos los tipos de datos son convenientes para realizar un tipo de operación especifica.

2.6.1 Conversión entre tipos de datos.

La conversión entre tipos de datos se realiza de manera sencilla en MatLAB utilizando la siguiente sintaxis general:

B=tipo_de_dato(A) Donde tipo_de_dato es uno de los tipos de datos uint8, double, logical. De esta manera el tipo de datos original atribuido a A se convertirá al tipo de dato designado por tipo_de_dato y será grabado en la matriz B. Un ejemplo de esta conversión seria, si se considera la imagen A es del tipo de datos uint8 y se deseara convertir al tipo double se escribiría en la línea de comandos:

B=double(A)

2.6.2 Conversión entre diferentes tipos de imágenes.

El toolbox de procesamiento de imágenes posee varias funciones que permiten realizar los escalamientos necesarios para convertir diferentes tipos de imágenes. La función im2uint8 indaga el tipo de dato de la imagen de entrada y realiza a partir de este las operaciones necesarias para convertirla al intervalo de valores definido para uint8, el cual se encuentra entre 0 y 255. Para ejemplificar esta función se considera una imagen de 2X2 del tipo double definida en MatLAB como:

A= -0.2000 0.8000 1.0000 0.2000

Si se desempeñara la conversión se escribiría:

Page 15: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

10

B=im2uint8(A)

Resultado:

B= 0 204 255 51

Del resultado puede ser observado cómo se le asigna al menor número de A el menor número representable en el tipo uint8 (0) y al máximo valor de A se le asigna el máximo representable (255), los demás valores se escalan linealmente en el intervalo [0, 255]. Una función que será frecuentemente utilizada es mat2gray, dicha función escala linealmente una imagen del tipo double cuyo intervalo de valores puede ser cualquiera a otra imagen del tipo double pero con un intervalo de valores que van de 0 a 1. En el procesamiento de imágenes existen diferentes tipos de algoritmos los cuales al procesar una imagen generan una imagen resultante cuyos valores pueden variar en intervalos bastante amplios, por lo que normalmente se dificulta su análisis y visualización, es por eso que la función mat2gray será utilizada siempre en aquellos casos donde sea necesarios visualizar la información contenida en un intervalo representable a escala de grises. Para ejemplificar esta función se considera una imagen de 2X2 del tipo double definida en MatLAB como:

A= -100 20 200 1000

Si se desempeñara la función se escribiría:

B=mat2gray(A) Resultado:

B= 0 0.5100 0.6000 1.0000

Page 16: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

11

2.7 Indexado de vectores y matrices. En las operaciones de procesamiento de imágenes es frecuente la discriminación y búsqueda de elementos o pixeles contenidos en la imagen, por lo que las operaciones de indexado deben ser consideradas importantes. MatLAB soporta poderosos métodos de indexado para matices y vectores, que simplifica la elaboración de programas y mejora la eficiencia de los algoritmos.

2.7.1 Indexado de vectores.

Un vector renglón de dimensión , puede ser indexado utilizando solamente un índice numérico, de esta manera si se considera a este vector como v, se elegirá el primer elemento si se indexa como v(1), de la misma forma se elegirá el elemento número 2 del vector si se indexa v(2). Esto puede ejemplificarse si se considera:

>> v=[1 2 3 4 5 6 7]; Y se elige v(2), se tiene

>> v(2)

ans=

2 Para acceder a bloque de elementos en un vector MatLAB utiliza la notación de los dos puntos v(n1:n2), los cuales indican una secuencia de índices que va desde el primer número especificado n1, hasta el segundo n2. Por lo que si se tiene:

>> v(2:4)

ans=

2 3 4 Puede también especificarse el final de la secuencia utilizando la palabra reservada end, de tal forma que se indica el último índice considerado en el vector. Esto en el ejemplo significaría:

Page 17: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

12

>> v(2:end)

ans=

2 3 4 5 6 7 También puede seleccionarse la notación de los dos puntos que el incremento realizado del primer índice n1 y el segundo n2, no sea unitario. Por consiguiente si se quisiera elegir solo los índices pares del vector se escribiría:

>> v(2:2:end)

ans=

2 4 6

2.7.2 Indexado de matrices

Para el indexado de matrices son necesarios dos números, uno para elegir los renglones y otro para las columnas. De esta manera si se utiliza como ejemplo la matriz 3X3 definida como:

>> A=[1 2 3; 4 5 6; 7 8 9];

A=

1 2 3 4 5 6 7 8 9

Considerando la matriz A puede seleccionarse el elemento correspondiente al renglón 3 y columna 2, utilizando:

>> A(3, 2)

ans=

8

Page 18: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

13

Es posible utilizar la notación de los dos puntos para indexar de forma total, es decir los dos puntos en el contexto de matrices se considera como un comodín que indica todo o la totalidad. Por lo que si se quisiera seleccionar todo el renglón 2, se tendría:

>> A(2, :)

ans=

4 5 6 De igual manera si se quisiera indexar la columna 1, se escribiría:

>> A(:, 1)

ans=

1 4 7

2.8 Operaciones sobre matrices completas. De manera frecuente es necesario desempeñar operaciones que engloben la totalidad de los elementos de la imagen, un ejemplo típico es el encontrar ya sea el pixel máximo o mínimo presente en la imagen. El problema de utilizar de forma sencilla la función max o min de MatLAB aplicada a la imagen o matriz es que devolverá el valor máximo o mínimo de cada columna, por lo que el valor absoluto es encontrado mediante la operación concatenada de máximos o mínimos. Esto es, si se tiene una matriz definida como:

M= 1 2 3 4 5 6 7 8 9 Y si se colocara:

>> max(M)

Page 19: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

14

ans=

7 8 9 Se obtendrá el valor máximo de cada columna, de tal forma que si se elige la forma concatenada:

>> max(max(M))

ans=

9 Se obtiene el máximo global. La forma de operar en forma global con operaciones puede utilizarse con muchas operaciones.

2.9 Programación en MatLAB. MatLAB no solo puede ser usado como una potente calculador en línea de comandos, sino que es posible realizar programas utilizando estructuras y lineamientos propios de un lenguaje de programación. La ventaja de utilizar MatLAB para realizar programas es que se puede sacar ventaja de las cientos de funciones ya programadas creadas para el procesamiento de imágenes o bien de otras funciones realizadas como herramientas para otras áreas afines como el procesamiento digital de señales, además se puede de igual manera utilizar los poderosos modos de indexado de matrices mostrados anteriormente. A todas estas ventajas se añade que la forma de programar en MatLAB es prácticamente intuitiva y sencilla ya que no es necesario declarar variables (a menos que se quiera que tengan validez en varias funciones) ni preocuparse por el tipo de su contenido. En la programación de MatLAB se puede crear principalmente dos tipos de programas, los llamados tipo “.m” y las funciones. Este tipo de programas debe ser considerado como un script, el cual ejecuta una serie de instrucciones en MatLAB, tal como se hiciera secuencialmente desde la consola de MatLAB. A continuación se presenta un ejemplo de un archivo “.m”. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %Programa que encuentra el valor del pixel máximo y mínimo de una imagen considerada %como A

Page 20: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

15

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %Se encuentra el valor máximo Vmax=max(max(A)); %Se encuentra el valor mínimo Vmin=min(min(A)); % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Una función en MatLAB es un programa que a diferencia de los .m tiene una estructura definida que permite la comunicación ya sea con línea de comandos u otros programas. Esto se debe a que este segmento de código permite la transferencia de datos para que opere sobre ellos y también envié información de los resultados obtenidos como efecto de su operación. Una función tiene por lo tanto en MatLAB la siguiente estructura:

function[salida]=nombre(entrada) La palabra reservada function al inicio del programa indica que se modifica una función. Entre corchetes se establecen los datos resultados o salidas que la función regresara como resultado de operar sobre los datos recibidos en entradas o datos. Como ejemplo se estructurara el programa anterior pero ahora como función, el código se muestra a continuación %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %Función que determina los valores máximos y mínimos de los pixeles de una imagen %recibida como entrada % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % function[Vmax Vmin]=maxmin_imagen(V) %Se determinan los valores máximo y mínimo Vmax=max(max(B)); Vmin=min(min(B)); % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Page 21: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

16

2.10 Estructuras de control para la programación. Las estructuras de control se basan en una serie de condiciones lógicas que permiten cambiar el flujo de las operaciones en un programa, tales estructuras constituyen el corazón de cualquier lenguaje de programación. MatLAB posee seis estructuras de control, las cuales se encuentran resumidas en la siguiente tabla.

Estructura Descripción

if if, en conjunción con else y elsif, ejecuta una serie de instrucciones basado en si una

determinada condición lógica se cumple. for Ejecuta un conjunto de instrucciones un

determinado número de veces. while Ejecuta un conjunto de inscripciones un

indeterminado número de veces en tanto una condición lógica se cumpla.

break Termina la ejecución de un ciclo for o while.

continue Pasa el control al siguiente ciclo for saltando las instrucciones restantes del

cuerpo del ciclo. switch… case Ejecuta diferentes grupos de instrucciones

dependiendo del valor de una variable asignada a switch.

Tabla 2. Estructuras de control de la programación.

La estructura de control if se utiliza para decidir si se ejecuta o no un bloque de instrucciones, si se cumple una condición lógica. Por otro lado la estructura de control while repite continuamente un grupo de instrucciones mientras se cumple una condición lógica. Una condición lógica se define como una expresión que involucra la indagación del estatus de una determinada relación. Esta relación puede involucrar los operadores relacionales mostrados en la tabla siguiente.

Operador Relación

< Menor que <= Menor o igual que > Mayor que

>= Mayor o igual que == Igual a

Page 22: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

17

~= No igual a Tabla 3. Operadores relacionales.

Debe de considerarse que en MatLAB si una condición involucra el test de un número, como podría ser if (a), la condición seria verdadera si el valor de (a) es diferente de cero, mientras que si es cero la condición será falsa. En ocasiones las condiciones que determinan el flujo del programa se determinan a partir de la concatenación de diferentes condiciones conectadas a partir de operadores lógicos. Los operadores lógicos en MatLAB son resumidos en la tabla que se presenta a continuación.

Símbolo Operador

& And | Or ~ Not

Tabla 4. Símbolos para representar los operadores relacionales.

2.10.1 Estructura if y else if.

La sintaxis de esta estructura es:

if (condición) Instrucción1; Instrucción2; . . end

En esta estructura la condición es evaluada y si es verdadera ejecutara el conjunto de instrucciones Instrucción1, Instrucción2…; etc. Si condición es falsa el control del programa se pasa al comando siguiente a if. Como se observa en la estructura de arriba toda instrucción if de be ser cerrada con un end. Otra variante de la estructura if es:

if (condición) Instrucción1; else if (condición) Instrucción2; else Instrucción3;

Page 23: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

18

end En esta estructura si condición1 es verdadera se ejecuta Instrucción1 y el control del programa sale fuera de la estructura. Sin embargo si condición1 es falsa la condición2 es evaluada, y si es verdadera se ejecuta la Instrucción2, si condición2 fuera falsa se ejecuta la Instrucción3.

2.10.2 Estructura for.

La estructura for permite la ejecución de un conjunto de instrucciones un determinado número de veces. Su sintaxis general es: for índice=inicio:incremento:final Instrucciones; end En esta estructura al valor del índice se le asigna el valor inicio, y se ejecuta el conjunto Instrucciones, cada vez que termina la ejecución, la variable índice aumenta de manera que su siguiente valor es su valor actual más incremento, de esta manera el ciclo se repite hasta que el valor de índice llega al valor final. Como ejemplo se muestra el siguiente programa, el cual suma el valor de los primeros 10 números. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %Programa que ejemplifica el uso de la estructura for % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %Suma los primeros diez números mediante un ciclo % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% suma=0; for idx=0:1:10 suma=suma+idx; end En esta estructura al igual que if es necesario cerrar con la palabra reservada end.

Page 24: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

19

2.10.3 Estructura while.

Un ciclo while ejecuta un grupo de instrucciones en tanto una condición se cumpla, su sintaxis general es: while (condición) Instrucciones; end Mientras la condición es verdadera se seguirán ejecutando Instrucciones, cuando condición es falsa el flujo del programa se pasa al siguiente comando. Normalmente dentro del cuerpo de Instrucciones se modifica el valor de condición de tal manera que en algún determinado momento el ciclo while termine.

2.10.4 break y continue.

La instrucción break termina con la ejecución de un ciclo for o while. Cuando una instrucción break es encontrada, el flujo del programa continúa con la siguiente instrucción fuera del ciclo for o while. La instrucción continue pasa el control del flujo del programa a la siguiente iteración del ciclo for o while en el cual aparece, de esta manera ya no se ejecutaran las instrucciones siguientes a continue durante esa iteración.

2.10.5 Estructura switch.

En esta estructura se elige una opción de varias posibles dependiendo del valor de la variable asociada a switch, su sintaxis general es: switch variable case valor1 Instrucción1; case valor2 Instrucción2; otherwise Instrucción3; end

Page 25: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

20

3.1 Operaciones de pixel en MatLAB. En este apartado se presentara la manera en la cual podemos utilizar las herramientas de MatLAB para la realización de operaciones pixel sobre una imagen. Estas herramientas pueden ir desde la simpe utilización de MatLAB como lenguaje de programación (archivo de extensión .m) y funciones pertenecientes al toolbox de procesamiento de imagen hasta la utilización de los módulos de Simulink de procesamiento de imagen y visión artificial.

3.1.2 Cambio de contraste e iluminación en MatLAB.

En MatLAB aumentar el contraste de una imagen se realiza mediante la multiplicación de la imagen por una constante positiva, de tal forma que el histograma de la imagen se ensancha. El siguiente comando supone que A es una imagen y se eleva el contraste 50% por lo que la imagen se multiplica por 1.5, quedando su resultado en B.

>> B=A*1.5; Para elevar la iluminación de una imagen en MatLAB solo basta sumar a la imagen el número de niveles al que se desea elevar la iluminación. De esta manera haremos que el histograma se desplace en el sentido y el número de los niveles deseados. El siguiente comando supone que a la imagen A se le desea elevar la iluminación en 10 niveles, por lo que a esta matriz se le suma diez, quedando el resultado en B.

>> B=A+10; En MatLAB no es necesario considerar lo que pasara si la multiplicación desborda el tipo de dato permisible para la imagen, ya que MatLAB automáticamente truncara los valores que sobrepasen de 255 asignándoles el valor máximo, es decir 255.

3.1.3 Segmentación de una imagen por umbral usando MatLAB.

Utilizando las herramientas de MatLAB es posible segmentar una imagen o bien frames de una fuente de video dependiendo del nivel de intensidad de los objetos participantes en una escena. Solo es necesario marcar un nivel de intensidad (umbral) a partir del cual los elementos de la imagen podrán ser clasificados en dos clases, aquellos que se encuentren arriba de este valor, serán considerados como una clase mientras que aquellos que se encuentren debajo de este valor serán considerados la otra clase.

Page 26: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

21

3.1.3.1 Segmentación en línea de comandos.

La binarización más sencilla que puede ser llevada a cabo con MatLAB es la desempeñada por línea de comandos. La forma de hacerlo es usar la propiedad de sobrecarga de signos de relación, que en el caso de matrices (imágenes) será considerado como si evaluáramos la condición lógica que se describe con el respectivo signo relacional. De tal manera que el resultado obtenido estará integrado por unos que serán aquellos elementos que hayan cumplido la condición lógica y por ceros que serán aquellos elementos cuyo resultado de la evaluación de la condición sea falso. Como ejemplo tendríamos en línea de comandos:

>> B=A -> 128; La matriz resultados resultado B estará integrada por unos y ceros. Unos en aquellas posiciones de A donde los valores de los pixeles eran mayores del umbral 128, mientras que ceros es aquellos puntos de A donde los pixeles no cumplieron la condición.

3.1.3.2 Binarización utilizando la función im2bw.

La función de MatLAB im2bw permite convertir una imagen a escala de grises en una imagen binaria. El formato de esta función es:

bw=im2bw(I, U) Donde I representa una imagen a escala de grises, U el umbral el cual se considera para realizar la calcificación de los pixeles y bw la imagen binaria resultante.

3.1.4 Ajuste de contraste con MatLAB.

MatLAB cuenta con la función imadjust lo cual permite mover el contraste de imágenes, ya sea para aumentarlo, reducirlo o ajustarlo. El formato de la función puede ser establecido en las siguientes variantes:

J=imadjust(I) J=imadjust(I,[low_in; high_in], [low_out; high_out])

J=imadjust(I) mapea los valores de intensidad de la imagen I a nuevos valores de intensidad en la imagen J de tal forma que a partir del 1% de los datos (

) se saturara para el límite inferior y superior de intensidades de la imagen I, esto

Page 27: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

22

ajustara el contraste de la imagen resultado J. El hecho de no considerar los límites de la imagen I, sino un porcentaje permite mejorar el contraste considerando el grueso de los datos, de esta manera se permitirá mejorar el contraste de la imagen aun en aquellos casos en donde el contraste cubre todo el intervalo de la imagen pero no de forma significativa. J=imadjust(I,[low_in; high_in], [low_out; high_out]) mapea los valores de la imagen I a nuevos valores de J, de tal manera que los valores low_in y high_in son apeados a los nuevos valores low_out y high_out de la imagen J. Los valores debajo de low_in y high_in de la imagen I son cortados. Es posible delimitar a los límites con la matriz vacía [ ] que significaría configurar a los limites como los considerados permisibles para este tipo de imagen [0, 1]. Existen algunas variantes adicionales de esta función en las que aparte de considerar el aumento del contraste permiten escalar aún más el contraste mediante un parámetro (SP), el cual permite representar la forma en la que se encontraran relacionadas las imágenes I y J al ser escaladas. El formato de la función es el siguiente:

J=imadjust(I,[low_in; high_in], [low_out; high_out], SP) Esta función transforma los valores de I para obtener los valores de J, tal y como fue explicado anteriormente, sin embargo, si SP es menor que 1 el mapeo es escalado hacia arriba (más brillante) para los valores de la imagen J, mientras que si SP es mayor a 1 el escalado es realizado hacia abajo (más oscuro). Para el caso de que SP es uno el ajuste se hace simplemente lineal.

4.1 Reducción del ruido en una imagen digital. En esta sección se detallaran las distintas funciones de MatLAB que se pueden aplicar para reducir el ruido en una imagen digital, asimismo se describirá el efecto que sobre ella producen.

4.2 Operaciones de suavizado. Tienen por objeto reducir el ruido y/o efectos espurios que pueden presentarse en una imagen a consecuencia del proceso de captura, digitalización y transmisión. Su utilización es normalmente necesaria antes de la aplicación de un detector de bordes.

Page 28: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

23

Existen distintos tipos de algoritmos que permiten la reducción del ruido. En esta práctica veremos algunos filtros lineales (convolución de una imagen con una máscara predefinida) y no lineales (operación no lineal con los píxeles del entorno de vecindad).

4.3 Filtros lineales. Como se ha comentado anteriormente en este tipo de filtros se realiza una operación de convolución entre la imagen a ser filtrada y una máscara. El principal inconveniente de estas técnicas es el enturbiamiento que se produce en la imagen, provocando el difuminado de los bordes, por lo que tienen que ser utilizados con cierta precaución. A continuación veremos algunos filtros de este tipo.

4.3.1 Filtro de la media.

Dada una imagen , el procedimiento consiste en generar una nueva imagen cuya intensidad para cada píxel se obtiene promediando los valores de intensidad de los píxeles ) incluidos en un entorno de vecindad predefinido. En MatLAB la función que permite realizar un filtro de la media será imfilter. Esta función tiene la siguiente estructura:

B=imfilter(A, H, opción1, opción2,…) Esta función filtra el array A con el filtro multidimensional H, el resultado se almacena en B. Los parámetros opción1, opción2,…, son opciones de frontera, de tamaño del array de salida y opciones de correlación o convolución. La función de MatLAB que me permite generar el filtro H será fspecial. La función fspecial crea filtros bidimensionales del tipo especificado por tipo.

h=fspecial(tipo, parámetros) El valor de tipo puede ser un filtro pasa baja gaussiano, un detector de bordes de sobel o prewitt, un operador laplaciano, un filtro de la media, etc. Los parámetros dependen del tipo de filtro. Pongamos un ejemplo de aplicar el filtro de la mediana sobre una imagen

Page 29: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

24

“cameraman.jpeg” a la que se le ha introducido ruido aleatorio del tipo sal y pimienta, con una máscara de 3X3 y otra de 9X9.

im=imread('C:\MATLAB7\work\imagenes\cameraman.gif'); fn=imnoise(im,'sal y pimienta',0.05); h1=fspecial('promedio'); h2=fspecial('promedio',[9,9]); media1=imfilter(fn,h1); media2=imfilter(fn,h2); %Representaciones de las imágenes subplot(2,2,1),subimage(im),title('Imagen original'); subplot(2,2,2),subimage(fn),title('Imagen con ruido'); subplot(2,2,3),subimage(media1),title('Filtro de media 3X3'); subplot(2,2,4),subimage(media2),title('Filtro de media 9X9');

Figura 1. Ejemplo de Filtro de la Media.

Page 30: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

25

En esta imagen puede apreciarse la importancia de definir el tamaño de la máscara. Cuanto mayor sea ésta se consigue una mayor reducción del ruido, pero a cambio se produce una mayor difuminación de los bordes. A la imagen anterior se le añadido ruido con la función imnoise.

J = imnoise(I, tipo, parámetros) El ruido que se le puede introducir es variado. Podría introducírsele ruido gaussiano, ruido multiplicativo, etc.

4.4 Filtro Gaussiano. El valor de cada punto es el resultado de promediar con distintos pesos los valores vecinos a ambos lados de dicho punto. Este tipo del filtro también tiene el problema del difuminado de los bordes, pero no es tan acusado como el caso de la media simple. Este tipo de filtro reduce especialmente el ruido tipo gaussiano. Ruido gaussiano: produce pequeñas variaciones en la imagen. Tiene su origen en diferencias de ganancias del sensor, ruido en la digitalización, etc. El código de MatLAB y las imágenes obtenidas de aplicar este tipo de filtro, comparándolo con uno de la media son:

im=imread('C:\MATLAB7\work\imagenes\cameraman.gif'); fn = imnoise(im,'gaussian'); h1=fspecial('gaussian'); h2=fspecial('promedio'); g1=imfilter(fn,h1); media2=imfilter(fn,h2); %Representaciones de las imágenes subplot(2,2,1),subimage(im),title('Imagen original'); subplot(2,2,2),subimage(fn),title('Imagen con ruido gaussiano'); subplot(2,2,3),subimage(g1),title('Filtro gaussiano'); subplot(2,2,4),subimage(media2),title('Filtro de media 3X3');

Puede apreciarse cómo el filtro gaussiano elimina el ruido mejor y además emborrona menos los bordes.

Page 31: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

26

Figura 2. Ejemplo de Filtro Gaussiano.

Page 32: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

27

4.5 Filtros no lineales. Los píxeles de la nueva imagen se generan calculando la mediana del conjunto de píxeles del entorno de vecindad del píxel correspondiente a la imagen origen. De esta forma se homogeneizan los píxeles de intensidad muy diferente con respecto a la de los vecinos. Este tipo de filtro es bastante indicado cuando se tiene ruido aleatorio. En MatLAB la instrucción empleada para realizar el filtro de la mediana es medfilt2.

B=medfilt2(A) Donde A es la matriz de entrada a la que se le aplica el filtro de la mediana utilizando por defecto una vecindad de 3X3. A continuación se muestra en la figura 3 un ejemplo de una imagen afectada por ruido gaussiano y aleatorio y filtrada por el filtro de la media y de la mediana.

imc=imread('C:\MATLAB7\work\imagenes\lena.jpg'); im=rgb2gray(imc); fg = imnoise(im,'gaussian'); fs = imnoise(im,'sal y pimienta',0.1) h1=fspecial('promedio'); media1=imfilter(fg,h1); media2=imfilter(fs,h1); mediana1=medfilt2(fg); mediana2=medfilt2(fs); %Representaciones de las imágenes subplot(2,3,1),subimage(fg),title('Imagen con ruido gaussiano'); subplot(2,3,4),subimage(fs),title('Imagen con ruido aleatorio'); subplot(2,3,2),subimage(media1),title('Filtro media'); subplot(2,3,5),subimage(media2),title('Filtro media'); subplot(2,3,3),subimage(mediana1),title('Filtro mediana'); subplot(2,3,6),subimage(mediana2),title('Filtro mediana');

Page 33: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

28

Figura 3. Aplicación de filtro Gaussiano, aleatorio, de la media y mediana.

Page 34: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

29

5.1 Métodos de detección. En esta sección se describirán los algoritmos de detección SIFT, SURF y Harris como los detectores de puntos de interés más utilizados en el procesamiento de imágenes.

5.2 Detector SIFT. El algoritmo SIFT (Scale Invariant Feature Transform) descrito por David G. Lowe, de la Universidad de British Columbia in Vancouver en 2004 [1] es un método para la detección y eliminación de los descriptores locales de la imagen, el ruido de imagen, rotación, escala y pequeñas variaciones del punto de vista de un objeto. Este método consiste en cuatro etapas que son:

1. Detección de Espacio – Escala. 2. Localización de Puntos Clave. 3. Asignación de Orientación. 4. Generación de Descriptores de Puntos Clave

5.2.1 Detección de Espacio – Escala.

Este paso consiste en encontrar los puntos de interés que se repiten en cada nivel de la escala, definiendo así una función de espacio-escala como la convolución de una función gaussiana con una una variable escalar , con la imagen como se muestra en la ecuación 4.1.

Donde la función Gaussiana se define de la siguiente manera:

( )

Para un cálculo más eficiente de la ubicación de los puntos estables de interés, tanto en el espacio y la escala, se propone utilizar el máximo y el mínimo de la función , que es la diferencia de la función de Gauss (DoG) convolucionada con la imagen. La función

(5.1)

(5.2)

Page 35: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

30

(5.4)

DoG se puede obtener a partir de dos escalas cercanas separadas por una constante multiplicativa k:

( )

La relación entre la función y (Funcion Laplaciana Normalizada) se puede entender como la ecuación de difusión de calor, donde el parámetro de tiempo es :

Se observa que se puede implementar como una diferencia finita, utilizando las escalas y :

entonces,

Para detectar máximos y mínimos locales no sólo elige el píxel que es mayor o menor que sus ocho vecinos en la imagen, también hay que seleccionar el máximo y el mínimo entre las imágenes superior e inferior de la columna vertical, como se muestra en la figura 4.

Figura 4. La selección de pixeles y más de sus ocho vecinos y el máximo y mínimo entre las imágenes superior e

inferior.

(5.3)

(5.5)

(5.6)

Page 36: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

31

5.2.2 Localización de puntos clave.

El siguiente paso es para llevar a cabo el ajuste fino de la posición, la escala y la proporción de las curvaturas principales cerca de los datos. Esta información nos permite rechazar los puntos que no son estables debido a su bajo contraste o mala ubicación a través de un borde. La primera aplicación se puede hacer para que este enfoque es simplemente para localizar los puntos clave a la ubicación y la escala del punto focal del punto de muestreo. En su lugar, hay otro método mediante el ajuste de una función cuadrática, lo que mejora en gran medida los resultados en términos de coincidencia y la estabilidad en los puntos. Esta función es la expansión de Taylor de la función DoG:

Donde y sus derivados son evaluados en el punto de muestreo y es el desplazamiento del punto. La ubicación del punto crítico, , se determina por la derivada de la función anteriormente con respecto a e igualando a cero, la ecuación se obtiene a continuación:

(

)

Se puede demostrar que la derivada de Hess se aproxima mediante el uso de las diferencias entre los puntos de muestreo. Por lo tanto, el resultado del sistema lineal 3×3 se pueden resolver con un costo mínimo. Si el desplazamiento es > 0.5 en cualquier dimensión, entonces significa que el punto crítico se encuentra muy cerca de otro punto de muestreo. Así pues, en este caso, se cambia el punto de muestreo y la interpolación se lleva a cabo alrededor de ese punto. El valor de la función en el punto crítico, , es útil para rechazar candidatos potenciales que son inestables en bajo contraste. Este valor se obtiene utilizando las ecuaciones (5.7) y (5.8), por lo tanto:

(5.7)

(5.8)

Page 37: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

32

(

)

La curvatura principal puede ser procesada a partir de una matriz de Hesse de 2 × 2, evaluada en el punto clave.

(

)

Los derivados necesarios para obtener la matriz se calculan teniendo diferencias con los vecinos de los puntos de muestreo. Los valores propios de la matriz (5.10) son proporcionales a las curvaturas principales de . Se necesita α como el mayor de los valores propios y β como la más pequeña. Entonces se puede conseguir la suma de los valores propios a partir de la traza y el producto del determinante:

Si las curvaturas tienen signos diferentes, entonces ese punto debe ser descartado como que no representa un máximo o mínimo. Así que si tomamos como la relación entre los dos valores propios , obtenemos:

Por lo tanto para verificar la relación entre las curvas sólo es necesario para calcular la relación entre el cuadrado de la traza y determinante .

5.3 Detector SURF. El algoritmo SURF (Speed Up Robust Features) está basado en conceptos usados en SIFT, pero con un mejor rendimiento según sus creadores [2]. Su objetivo es identificar y describir con mayor rapidez los lugares de interés y tienen una alta capacidad de

(5 12)

(5.9)

(5.10)

(5.11)

(5.13)

Page 38: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

33

repetición, es decir, que sea fiable para encontrar los mismos puntos de interés en las diferentes condiciones de visión. Este algoritmo consiste de las siguientes etapas:

1. Imagen Integral. 2. Detector Rápido Hessiano. 3. Descriptor de Puntos de Interés.

5.3.1 Imagen Integral.

Gran parte del aumento de rendimiento en SURF se puede atribuir a la utilización de una representación de la imagen intermedia conocida como la "Imagen Integral". La imagen integral se calcula rápidamente a partir de una imagen de entrada y se utiliza para acelerar el cálculo de cualquier área rectangular vertical. Dada una imagen de entrada y un punto (x, y) la imagen integral, ∑ se calcula por la suma de los valores entre el punto y

el origen. Formalmente esto puede ser definido por la formula 5.14:

∑ ∑∑

Usando la imagen integral, la tarea de calcular el área de una región rectangular en posición vertical se reduce cuatro operaciones. Si consideramos un rectángulo delimitado por los vértices A, B, C y D como en la Figura 5, la suma de las intensidades de los píxeles se calcula:

Figura 5. Calculo de área utilizando la Imagen Integral.

Dado que el tiempo de cálculo es invariante para cambiar de tamaño este enfoque es particularmente útil cuando se requieren grandes áreas. SURF hace un buen uso de esta propiedad para realizar convoluciones rápidas de diferentes filtros de tamaño de la caja en tiempo casi constante.

(5.14)

(5.15)

Page 39: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

34

5.3.2 Detector Rápido Hessiano.

El detector de SURF se basa en el determinante de la matriz de Hesse. Para motivar el uso de la Hesse, consideramos una función continua de dos variables de tal manera que el valor de la función en está dada por La matriz de Hess, , es la matriz de derivadas parciales de la función

( )

[

]

El determinante de esta matriz, conocido como el discriminante, se calcula:

El valor del discriminante se utiliza para clasificar los máximos y mínimos de la función de la segunda derivada para. Ahora podemos calcular la matriz de Hesse, , como función tanto de espacio y escala .

[

]

Aquí se refiere a la convolución de la derivada de segundo orden de Gauss

con la imagen en el punto y de manera similar para los y . Estos

derivados se conocen como Laplaciano de Gauss. Trabajando a partir de esto, podemos calcular el determinante de la Hessiano para cada píxel de la imagen y utilizar el valor para encontrar puntos de interés. Bay [3] propone una aproximación a la Laplaciano de Gauss mediante el uso de representaciones de filtro de caja en los respectivos núcleos. Determinante de Hess usando una aproximación Gaussiana:

( )

El paso final en la localización de los puntos consiste en la interpolación de los datos de cerca para encontrar la ubicación en el espacio y la escala de precisión sub-pixel. Esto se

(5.16)

(5.17)

(5.18)

(5.19)

Page 40: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

35

realiza mediante el ajuste de una ecuación cuadrática 3D tal como se propone por Brown [4]. Con el fin de hacer esto, expresamos el determinante de la función de Hesse, , como una expansión de Taylor hasta términos cuadráticos centrados en la ubicación detectada. Esto se expresa como:

La ubicación interpolado de la extrema, , se encuentra tomando la derivada de esta función y ajuste a cero de tal manera que:

Los derivados de aquí se aproximan por diferencias finitas de píxeles vecinos. Si > 0.5 en , o direcciones ajustamos el lugar y realizar la interpolación de nuevo. Este procedimiento se repite hasta pixeles < 0.5 en el que se ha excedido todas las direcciones o el número de pasos de interpolación predeterminados. Los puntos que no convergen se lanzan desde el conjunto de puntos de interés dejando sólo el más estable y repetible.

5.4 Detector Harris.

El algoritmo detector de esquina Harris se basa en la idea de que una esquina es un punto de imagen en la que el valor del gradiente muestra un valor alto en varias direcciones simultáneamente [5]. Este algoritmo es robusto en la diferenciación de las esquinas de los bordes que muestran un valor de alto gradiente en una dirección, sino también el detector para localizar las esquinas con firmeza a la orientación por lo que no importa la orientación de la esquina. El algoritmo de Harris cálculo se basa en el desarrollo de la primera derivada parcial en un píxel horizontal y verticalmente de tal manera que:

Para cada píxel de la imagen se calculan tres cantidades diferentes que son conocidos , donde:

(5.20)

(5.21)

(5.22)

Page 41: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

36

Estos valores pueden interpretarse como aproximaciones de los elementos de la matriz de estructuras definidas como de tal manera que:

[

]

donde . Para la ubicación de las esquinas utilizando el algoritmo de Harris es necesario suavizar los valores de cada elemento de la matriz de estructuras por su convolución por un filtro de Gauss , de tal manera que la matriz se define como la matriz , de tal manera que:

[

] [

]

La mariz debido a su simetría puede ser diagonalizada modo que:

[

]

Donde and son los valores propios de la matriz , estos valores se calculan de acuerdo a:

√(

)

Donde implica la traza de la matriz y el determinante de la matriz . El desarrollo de las operaciones de la traza y el determinante de la ecuación E’ obtenido:

Ambos valores propios y son positivas y contienen información importante acerca de las estructuras locales de la imagen contenida. Dentro de una región de la imagen cuyo contenido es un valor de intensidad uniforme determina el valor así también los

(5.23)

(5.24)

(5.25)

(5.26)

(5.27)

(5.28)

Page 42: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

37

valores de esta región son . Sin embargo, en un cambio de paso en el valor de la intensidad y , independientemente de la orientación del borde. De lo anterior se puede decir que los valores propios codifican la magnitud del gradiente, mientras que los vectores propios codifican dirección. Un punto de vértice tiene un alto valor de la pendiente, tanto en la dirección principal, que se corresponde con el valor de los dos valores propios y en la dirección normal a la principal, que corresponde a los valores propios más pequeños. De lo anterior se puede concluir que para un punto de esquina se considera que los valores propios y tienen valores significativos. Porqué , a continuación, se puede observar que el , con este y mirando a las ecuaciones (5.27) y (5.28) se puede aceptar que | | | |. Teniendo en cuenta esto y la afirmación de que un punto de esquina debe tener tanto un importante autovalores magnitud, entonces, para la determinación de una esquina se considera sólo el valor de es el más pequeño, ya que si este valor es grande es mucho más . Como se muestra en las ecuaciones (5.27) y (5.28) la diferencia entre los dos valores propios se establece como:

√(

)

Cuando en un caso se cumple que . En una diferencia de ángulo entre los dos valores propios es pequeño. El algoritmo utiliza esta propiedad para Harris y implementa valor significativo como una medida de la función de esquina:

La ecuación (5.25) conduce a:

Cuando el parámetro controla la sensibilidad del algoritmo. se define como la función del valor de la esquina y el valor más grande es mejor caracteriza a un punto de esquina . El valor de se fija en el rango [0.04, 0.25]. Si el valor de es grande, es menos sensible a los puntos de esquina, por ejemplo, si lo que se quiere configurar el algoritmo para el aumento de la sensibilidad del valor de Harris ser 0.04. Por lo tanto, es claro que si α es pequeña, un mayor número de puntos de esquina se encuentra en una imagen dada.

(5.29)

(5.30)

(5.31)

Page 43: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

38

5.4.1 Determinación de los puntos esquina.

Un punto de la imagen se considera como una esquina potencial si se cumple la condición.

Donde es el valor umbral normal típicamente en el intervalo 900 < th < 10000, dependiendo del contenido de la imagen. Así que la ecuación 5.32 tendrá un binario que contiene un (verdadero) cuando la condición se cumplió y el cero (falso), que no era válido. Para evitar que la localización de los puntos de esquina regiones densamente pobladas son calculados debido a la alta sensibilidad del valor de α se seleccionan sólo los píxeles cuyo valor es el más grande dentro de una zona determinada.

6.1 Metodología de comparación de los algoritmos de detección

SIFT, SURF y Harris. En esta sección, el objetivo es explicar el procedimiento para la comparación de los algoritmos propuestos. El primer paso es hacer el código correspondiente a la etapa de detección de los diferentes algoritmos con la ayuda del software MATLAB [6]. El segundo paso es obtener el número de puntos de interés para cada imagen detectada, este es el argumento de la comparación y que fue tomada para determinar qué algoritmo tiene un mejor rendimiento. Para tener una visión más amplia del funcionamiento de los detectores, se realizó una comparación de los diferentes cambios en las condiciones de formación de imágenes, como:

1. Variación de luminosidad. 2. Cambio del punto de observación de un objeto. 3. Las imágenes con escenarios en los que está presente más de un objeto (árboles,

coches, casas, etc) Por lo tanto, el resultado final podría llegar a encontrar un algoritmo con un rendimiento más alto o más bajo ciertos parámetros, lo que significa que un algoritmo puede no ser óptima para todos los casos posibles. En esencia, podemos determinar qué algoritmo es adecuado para cada aplicación y por lo tanto tienen los resultados más óptimos

(5.32)

Page 44: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

39

6.1.1 Comparación de algoritmos.

Para cada imagen de una secuencia, que da el número de puntos detectados, a continuación, los puntos detectados en cada imagen se comparan con los de la siguiente imagen en la misma secuencia, por lo que hasta que todas las imágenes que componen la secuencia se han comparado con cada uno otra. Al desestimar la comparación no coincidirán con los puntos entre cada par de imágenes al final de la comparación sólo los puntos que permanecen coinciden a lo largo de la secuencia, estos puntos se cuentan y se utilizaron para la comparación general entre los tres algoritmos. De esta manera, se puede determinar la eficacia de cada detector y finalmente saber cuál es el más alto rendimiento. A continuación se presentan las secuencias que se utilizaron para la simulación de algoritmos:

Figura 7. Secuencia de imágenes con cambios en luminosidad.

Figura 8. Secuencia de imágenes con cambios en el punto de observación.

Figura 9. Secuencia de imágenes con diferentes objetos.

Page 45: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

40

6.1.2 Resultados experimentales.

Los resultados experimentales se muestran en la Tabla 1, que muestra el número total de puntos que coinciden para las secuencias de imágenes en diferentes condiciones propuestas.

Algoritmo

Condición

Numero

de

puntos

promedio

imagen 1

imagen 2

imagen 3

SIFT lighting 178 225 202 201 SURF lighting 262 617 528 469 Harris lighting 114 135 126 125 SIFT several

objects 33 30 30 31

SURF several objects

122 142 155 139

Harris several objects

29 36 31 32

SIFT angle 82 83 99 88 SURF angle 380 421 401 400 Harris angle 86 91 82 86

Tabla 5. Resultados de la simulación de los algoritmos de detección.

Figura 10. Resultados de puntos de detección en una secuencia de imágenes con cambios de iluminación.

Page 46: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

41

6.1.3 Conclusiones

Para cada secuencia de imágenes se llevó a cabo una simulación con cada uno de los tres algoritmos, en cada simulación se obtuvo como resultado el número de puntos detectados para cada imagen de la secuencia y luego se hizo una comparación entre los puntos detectados de cada imagen para obtener la media de los puntos detectados y observar el rendimiento de cada algoritmo como se muestra en la Tabla 5. De acuerdo con los resultados se determinó que el algoritmo con mayor rendimiento en las simulaciones es el algoritmo de SURF, este algoritmo tuvo el mayor número de puntos detectados en tres condiciones diferentes aplicadas. Adicional al rendimiento del algoritmo SURF en la detección de puntos, cabe mencionar que también es el algoritmo más eficiente en términos de velocidad, menciona el autor [3]. El resultado obtenido en este documento es para ser utilizado en la investigación y aplicaciones en algoritmos específicos utilizados para la simulación de "flujo óptico", que se utiliza en la etapa de detección. Adicionalmente en trabajos posteriores, se pretende crear una interfaz entre MatLAB y un DSP para la implementación en hardware de los resultados obtenidos.

7.1 DSP (Digital Signal Processing). DSP o procesadores digitales de señal son microprocesadores específicamente diseñados para el procesado digital de señal. Algunas de sus características más básicas como el formato aritmético, la velocidad, la organización de la memoria o la arquitectura interna hacen que sean o no adecuados para una aplicación en particular, así como otras que no hay que olvidar, como puedan ser el coste o la disponibilidad de una extensa gama de herramientas de desarrollo. Un sistema de procesado digital de señal puede definirse como cualquier sistema electrónico que realice procesado digital de señal, entendiéndose por él la aplicación de operaciones matemáticas a señales representadas de forma digital. Las señales son representadas de forma digital mediante secuencias de muestras. A menudo, estas muestras se obtienen de señales físicas (por ejemplo, señales de audio) utilizando transductores (un micrófono en este caso) y convertidores analógico-digitales. Después del procesado matemático, las señales digitales pueden volver a convertirse en señales físicas mediante convertidores digital-analógicos.

Page 47: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

42

Figura 11. Estructura de un filtro de respuesta infinita (FIR).

Si bien, en principio, el corazón de un sistema de procesado digital puede ser un microcontrolador, un procesador de propósito general o un procesador digital de señal (DSP), en sistemas en los cuales la carga computacional es extremadamente intensa la solución óptima pasa por escoger a un DSP. En la actualidad, los cuatro grandes fabricantes de DSP son Texas Instruments, con la serie TMS320; Motorola, con las series DSP56000, DSP56100, DSP56300, DSP56600 y DSP96000; Lucent Technologies (anteriormente AT&T), con las series DSP1600 y DSP3200; y Analog Devices, con las series ADSP2100 y ADSP21000. Estrictamente hablando, el término DSP se aplica a cualquier chip que trabaje con señales representadas de forma digital. En la práctica, el término se refiere a microprocesadores específicamente diseñados para realizar procesado digital de señal. Los DSP utilizan arquitecturas especiales para acelerar los cálculos matemáticos intensos implicados en la mayoría de sistemas de procesado de señal en tiempo real. Por ejemplo, las arquitecturas de los DSP incluyen circuitería para ejecutar de forma rápida operaciones de multiplicar y acumular, conocidas como MAC. A menudo poseen arquitecturas de memoria que permiten un acceso múltiple para permitir de forma simultánea cargar varios operandos, por ejemplo, una muestra de la señal de entrada y el coeficiente de un filtro simultáneamente en paralelo con la carga de la instrucción. También incluyen una variedad de modos especiales de direccionamiento y características de control de flujo de programa diseñadas para acelerar la ejecución de operaciones repetitivas. Además, la mayoría de los DSP incluyen en el propio chip periféricos especiales e interfaces de

Page 48: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

43

entrada salida que permiten que el procesador se comunique eficientemente con el resto de componentes del sistema, tales como convertidores analógico-digitales o memoria. La diferencia esencial entre un DSP y un microprocesador es que el DSP tiene características diseñadas para soportar tareas de altas prestaciones, repetitivas y numéricamente intensas. Por contra, los microprocesadores de propósito general o microcontroladores no están especializados para ninguna aplicación en especial; en el caso de los microprocesadores de propósito general, ni están orientados aplicaciones de control, en el caso de los microcontroladores.

La mecánica del algoritmo del filtro FIR es bastante sencilla. Los bloques D en la figura 11 son retardos unitarios; su salida es una copia de la entrada retardada en un período de muestreo. El filtro FIR se construye a partir de una serie de etapas básicas que se van repitiendo. Cada etapa básica incluye una operación del tipo multiplicación y acumulación. La señal de entrada xk es un conjunto de valores discretos obtenidos mediante muestreo de una señal analógica. El valor xk-1 es en realidad el valor que tenía xk en un período de muestreo anterior. De forma similar xk-2 sería la xk de dos períodos de muestreo anteriores. Cada vez que una nueva muestra llega, las que estaban almacenadas previamente se desplazan una posición hacia la derecha y una nueva muestra de salida se calcula después de multiplicar la nueva muestra y cada una de las anteriores por sus correspondientes coeficientes. Los resultados de cada multiplicación se suman para formar la nueva muestra de salida yk. El algoritmo de cálculo se basa en operaciones del tipo multiplicación y acumulación (A=B*C+D), siendo la multiplicación el verdadero cuello de botella en el cálculo de la mayoría de los algoritmos de procesado digital.

7.1.1 Aplicaciones.

Los DSP se utilizan en muy diversas aplicaciones, desde sistemas radar hasta la electrónica

de consumo. Naturalmente, ningún procesador satisface todas las necesidades de todas o

la mayoría de aplicaciones. Por lo tanto, la primera tarea para el diseñador al elegir un DSP

es ponderar la importancia relativa de las prestaciones, coste, integración, facilidad de

desarrollo, consumo y otros factores para las necesidades de la aplicación en particular.

Las grandes aplicaciones, en términos de dinero que mueven sus productos, se realizan

para los sistemas pequeños, baratos y con un gran volumen de producción como los de

telefonía celular, disqueteras y modems, en donde el coste y la integración son de la

mayor importancia. En sistemas portátiles, alimentados por baterías, el consumo es

crítico.

Page 49: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

44

Sin embargo, la facilidad de desarrollo es generalmente en estas aplicaciones menos

importante para el diseñador. A pesar de que estas aplicaciones casi siempre implican el

desarrollo de hardware y software a medida, el enorme volumen de producción justifica el

esfuerzo extra de desarrollo.

Una segunda clase de aplicaciones englobaría a aquellas que procesan un gran volumen de datos mediante algoritmos complejos. Ejemplos incluyen la exploración sonar y sísmica, donde el volumen de producción es bajo, los algoritmos más exigentes y el diseño del producto más largo y complejo. En consecuencia, el diseñador busca un DSP que tenga máximas prestaciones, buena facilidad de uso y soporte para configuraciones multiprocesador. En algunos casos, más que diseñar el propio hardware y software, el sistema se construye a partir de placas de desarrollo de catálogo y el software a partir de librerías de funciones ya existentes.

7.1.2 Características de los DSP.

La elección de un DSP que posea unas ciertas características estará muy condicionada a la aplicación que se quiera destinar. En este apartado se presenta un conjunto de aspectos característicos de los DSP sin que se pretenda con ello hacer una lista exhaustiva. Dichos aspectos deberán tenerse en cuenta a la hora de su elección para una aplicación en particular. Una de las características fundamentales de los DSP es el tipo de formato aritmético utilizado por el procesador. La figura 12 muestra la estrecha relación entre formato numérico y número de bits del DSP.

Figura 3. (Arriba) Formato de coma

flotante IEEE-754; 1 bit de signo, 8 de

exponente y 23 de mantisa. (Abajo)

Formato en coma fija; 1 bit de signo y

31 bits significativo

Figura 12. (Arriba) Arquitectura Von Neumann. (Abajo) Arquitectura Harvard.

Page 50: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

45

La figura 12, arriba y abajo, muestra los formatos de coma flotante y coma fija, respectivamente. En el formato IEEE-754 de coma flotante la “s” indica que el bit más significativo es el signo, donde un 1 indica que se trata de un número negativo. La “e” indica exponente, formado por 8 bits y la “m”, de 23 bits, la mantisa del número. Al carecer de exponente el formato en coma fija, éste puede representar números con más bits significativos que el formato en coma flotante del mismo tamaño en bits. En este ejemplo, 31 bits son significativos, “f ”, comparados con los 23 del formato IEEE-754. Para un mismo tamaño en número de bits, el formato en coma fija proporciona una mejor resolución que el formato en coma flotante. Sin embargo, es este último quien posee un margen dinámico superior. Así, por ejemplo, si se considera una representación en coma fija de 32 bits, el mínimo valor que puede ser representado es 2 -31 siendo el mayor 1-2-31. La relación entre ambos, la cual resulta en el margen dinámico, es de 2,15 109 , aproximadamente 187 dB. En cambio, con una representación en coma flotante, con 24 bits de mantisa y 8 de exponente, pueden representarse números desde 5,88 10-39 hasta 3,40 1038, resultando en un margen dinámico de 5,79 1076 o de 1535 dB. La aritmética de coma flotante es más flexible que la de coma fija. Con coma flotante, los diseñadores de sistemas tienen acceso a un margen dinámico más amplio. En consecuencia, los DSP de coma flotante son generalmente más fáciles de programar que los de coma fija, pero son usualmente más caros. El mayor coste es resultado del requisito de una mayor complejidad circuital que se traduce en un mayor tamaño de chip. Sin embargo, el mayor margen dinámico facilita su programación pues el programador no debe preocuparse por el margen dinámico ni por la precisión. Por el contrario, en los DSP de coma fija el programador a menudo debe escalar las señales en sus programas para asegurar una adecuada precisión numérica con el limitado margen dinámico del DSP de coma fija. Por lo general, las aplicaciones con un gran volumen de unidades y/o bajo consumo utilizan los DSP de coma fija al ser la prioridad en este tipo de aplicaciones el bajo coste. Los programadores determinan el margen dinámico y la precisión necesarias de la aplicación, ya sea analíticamente o a través de simulaciones, y entonces aplican operaciones de escalado dentro del código de la aplicación en los puntos en donde sea necesario. En aplicaciones donde el coste no sea un requisito crítico o que demanden un margen dinámico y precisión elevadas, o donde la facilidad de desarrollo sea vital, los DSP de coma flotante poseen ventaja. Mediante rutinas software es posible emular el comportamiento de un dispositivo de coma flotante con uno de coma fija. Sin embargo, tales rutinas resultan generalmente caras en términos de ciclos del procesador. En consecuencia, raramente se suele emular la aritmética de coma flotante

Page 51: Universidad Autónoma Metropolitana Unidad Iztapalapa148.206.53.84/tesiuami/UAMI17162.pdfUniversidad Autónoma Metropolitana Unidad Iztapalapa División CBI Ingeniería Electrónica

46

8.1 Referencias. [1] D.G. Lowe. Distinctive image features from scale-invariant keypoints. International Journal of

Computer Vision, 60(2):91-110, 2004.

[2] Christopher Evans. Notes on the OpenSURF Library. January 18, 2009.

[3] H. Bay, T. Tuytelaars, and L. Van Gool. Surf: Speeded up robust features. European

Conference on Computer Vision, 1:404-417, 2006.

[4] M. Brown and D.G. Lowe. Invariant features from interest point groups. British Machine Vision

Conference, Cardiff, Wales, pages 656-665, 2002.

[5] C. Harris and M. Stephen. A combined corner and edge detector. In Proc. Alvey Visual Conf.,

pages 147–151, September 1988.

[6] MATLAB®

. Web site, 2010. http://www.mathworks.com/products/matlab/

[7] Erik Cuevas, Daniel Zaldivar and Marco Perez. Procesamiento digital de imágenes con MATLAB

y Simulink, pages 252-260, 2010.