Fundamentos de Procesamiento de Imágenes

Texto completo

(1)

Fundamentos de Procesamiento de Imágenes

Evento:

CONATEC 2002

Sede:

INSTITUTO TECNOLÓGICO DE CIUDAD MADERO

Instructor:

M. C. José Jaime Esqueda Elizondo

Universidad Autónoma de Baja California, Unidad Tijuana

(2)

Dedicatorias y agradecimientos

A mi esposa, mis padres y a ese maravilloso ser que está por venir, son el motor de mi vida.

A mis alumnos de la UABC por inspirarme y alentarme a seguir. Al ITCM y al IPN por la formación que me dieron.

Al Dr. Juan García López, guía, maestro y amigo.

Agradezco de sobremanera la ayuda de mis alumnos: Pedro Fernández Robledo, Mario A. Velarde C., Nelson Hernández Cons, Gisell Haydee Arias, Eduardo Hernández Acosta, Pilar Ivette Sánchez Benítez, Samuel García Alvarado, Julio César Trizón. Asimismo a José Luis Vargas Cruz y a Jorge Espinosa Caballero, que colaboraron con el Apéndice A.

(3)

Indice

I. Fundamentos de procesamiento de imágenes digitales ... 5

I. Fundamentos de procesamiento de imágenes digitales ... 5

I.1 Definiciones ... 5

Color... 6

I.2 Relaciones entre píxeles... 7

I.2.1 Conectividad ... 8

I.2.2 Distancia ... 8

I.3 Ruido en imágenes ... 9

I.4 Procesamiento espacial ... 9

I.4.1 Operaciones aritméticas, lógicas y transformaciones geométricas... 10

I.4.2 Operaciones lógicas ... 13

I.4.3 Transformaciones geométricas ... 13

I.4.3.1 Interpolación ... 13

I.4.3.2 Amplificación/Reducción de imágenes ... 14

I.4.3.3 Traslación... 15

I.4.3.4 Convolución bidimensional ... 16

I.4.3.5 Correlación... 18

I.5 Procesamiento en el dominio de la frecuencia... 19

I.5.1 Series de Fourier ... 19

I.5.2 Transformada de Fourier... 20

I.5.2.1 Aplicaciones de la transformada de Fourier ... 21

I.5.3 Transformada discreta coseno... 23

I.6 Procesamiento de imágenes básico ... 24

I.6.1 Binarización de una imagen... 24

I.6.2 Manipulación del contraste ... 25

I.6.3 Modificación del contraste... 27

I.6.4 Modificación del histograma ... 28

I.6.5 Filtrado de una imagen... 29

I.6.5.1 Filtros lineales espaciales... 29

I.6.5.2 Filtro pasa bajas espacial ... 29

I.6.5.3 Filtrado por la mediana ... 30

I.6.5.4 Realce de bordes ... 31

I.6.5.5 Detección de contornos... 32

I.6.5.5.1 Técnicas basadas en el gradiente ... 32

II. Manejo de las imágenes en Matlab... 36

II.1 Clases de almacenamiento usadas en el toolbox ... 36

II.2 Conversiones entre tipos de imágenes... 36

II.2.1 Despliegue de imágenes indexadas ... 37

II.2.2 Despliegue de imágenes de intensidad. ... 38

II.2.3 Despliegue de imágenes binarias... 38

II.2.4 Despliegue de imágenes RGB ... 38

II.2. 5 Tipos de imágenes en Matlab ... 38

II.2.5.1 Imágenes indexadas ... 38

II.2.5.2 Imágenes de intensidad... 39

(4)

II.2.5.4 Imágenes RBG... 40

II.2.6 Selección de una sección de imágenes en Matlab ... 41

III. Ejercicios ... 42

Ejercicio 1. Formación de imágenes y mapas de color. ... 42

Ejercicio 2. Cargar y desplegar una imagen... 42

Ejercicio 3.Verificar el almacenamiento de la imagen cargada en la memoria. ... 42

Ejercicio 4. Obtención de el histograma de una imagen. ... 42

Ejercicio 5. Amplificación/Reducción de imágenes ... 42

Ejercicio 6 Rotación de una imagen... 43

Ejercicio 7. Binarización de imágenes ... 44

Ejercicio 8. Operaciones aritméticas con imágenes. ... 44

Ejercicio 9. Operaciones aritméticas con imágenes. ... 44

Ejercicio 10. Generación de ruido y filtrado de imágenes. ... 44

Ejercicio 11. Modificación del contraste y ecualización de una imágenes. ... 44

Ejercicio 12. Detección de contornos... 44

Ejercicio 13. Detección de características usando correlación. ... 44

Ejercicio 14. Compresión de imágenes usando la transformada discreta coseno. .... 45

Apéndice A. Formatos de Imágenes ... 46

¿Qué son los formatos gráficos? ... 46

Formatos vectoriales ... 46

Formatos bitmap... 46

Formatos de gráficos mas importantes... 47

Bibliografía y Referencias... 50

Lista de Figuras

Figura 1. Imagen de 16 píxeles ... 5

Figura 2. Espacio de colores RGB. ... 6

Figura 3. Vecindad N4(p). ... 7

Figura 4. Vecindad ND(p). ... 7

Figura 5. Distancia euclidiana para una imagen de 5 por 5. ... 8

Figura 6. Distancia Manhattan para una imagen de 5 por 5... 8

Figura 7. Distancia tablero de ajedrez... 9

Figura 8. Diferentes tipos de ruido afectando a una imagen. ... 10

Figura 9. Suma de dos imágenes ... 10

Figura 10. Aumento del brillo de la imagen usando la suma de un escalar a cada píxel de la imagen, imagen original (izquierda) e imagen modificada (derecha)... 11

Figura 11. Resta de dos imágenes, imagen original (izquierda), imagen a restar (centro) y resultado (derecha). ... 11

Figura 12. Resta de un escalar (50) a cada píxel de la imagen original (izquierda) ... 11

Figura 13 Multiplicación de una imagen por si misma, imagen original (izquierda), imagen resultante (derecha). ... 12

Figura 14. Multiplicación de una imagen por un escalar, imagen original (izquierda), imagen resultante (derecha). ... 12

Figura 15. División de imágenes, se muestra la división de la imagen original (izquierda) entre el fondo (centro) dando como resultado la figura de la derecha. ... 13

Figura 16. Operaciones lógicas aplicadas a imágenes binarias... 13

(5)

Figura 18. Amplificación de la figura 17 usando diferentes métodos de interpolación.... 15

Figura 19. Rotación de la imagen de la figura 17 usando diferentes métodos de interpolación... 16

Figura 20. Imagen ... 17

Figura 21. Máscara de convolución. ... 17

Figura 22. Máscara rotada para la convolución. ... 17

Figura 23. Convolución para obtener el valor de A(2,4) ... 18

Figura 24. Inserción de ceros (zero padding) en los extremos... 18

Figura 25. Correlación de A con h. ... 19

Figura 26. Formación de la señal cuadrada mediante la serie de Fourier. (a) cinco señales senoidales (términos); (b) suma de dos términos; (c) suma de tres términos; (d) suma de cuatro términos; (e) suma de cinco términos; (f) suma de veinte términos. ... 20

Figura 27. División en cuatro partes iguales de la imagen transformada (B) ... 22

Figura 28. Inserción de ceros para obtener la matriz B aumentada (B’)... 23

Figura 29. Compresión de imágenes usando la TDC... 25

Fig. 30. Binarización de una imagen... 25

Figura 31. Expansión del histograma de la imagen. ... 26

Figura 32. Modificación de contraste... 27

Figura 33. Caso general... 27

Figura 34. Vecindad de a y obtención de la mediana... 31

Figura 35. Realce de una imagen ... 31

Figura 36. Detección de contornos mediante la primera y segunda derivada... 33

Figura 37. Máscaras para los operadores: Roberts, Prewitt, Sobel e Isotrópico. ... 34

Figura 38. Máscaras utilizadas para el operador laplaciano... 34

Figura 39. Ejemplos de detección de contornos... 35

Figura 40. Imagen indexada ... 39

Figura 41 Imagen de intensidad. ... 40

Figura 42. Imagen binaria ... 40

Figura 43. Histograma obtenido de la imagen pout.tif... 43

Lista de Tablas

Tabla I. Colores RGB... 6

Tabla II. Tipos de imágenes y clases numéricas ... 37

Tabla III. Comandos de conversión de imágenes ... 37

(6)

I. Fundamentos de procesamiento de imágenes digitales

I.1 Definiciones

Visión por computadora.- Consiste en la adquisición, procesamiento, clasificación y

reconocimiento de imágenes digitales.

Píxel.- Elemento básico de una imagen (picture element).

Imagen.- Arreglo bidimensional de píxeles con diferente intensidad luminosa (escala de

gris). 0 1 1 2 7 6 6 5 6 0 4 0 5 5 1 2 x y

Figura 1. Imagen de 16 píxeles

Si la intensidad luminosa de cada píxel se representa por n bits, entonces existirán 2n escalas de gris diferentes.

Matemáticamente, una imagen se representa por r= f(x,y), donde r es la intensidad luminosa del píxel cuyas coordenadas son (x,y). Matemáticamente, un sistema para procesar imágenes se representa como g(x,y)=T

[

f(x,y)

]

.

Color.- El color se forma mediante la combinación de los tres colores básicos rojo, azul y

verde (en inglés RGB). A continuación se presentan algunas definiciones básicas para comprender los espacios de color:

Brillo.- Indica si un área está más o menos iluminada.

Tono.- Indica si un área parece similar al rojo, amarillo, verde o azul o a una proporción

de ellos.

Luminosidad.- Brillo de una zona respecto a otra zona blanca en la imagen.

Croma.- Indica la coloración de un área respecto al brillo de un blanco de referencia.

Para obtener una imagen a color deben transformarse primero los parámetros cromáticos en eléctricos y representar los colores, lo cual puede realizarse de diferentes maneras, dando lugar a diferentes espacios de colores o mapas de color.

Espacio RGB.- se basa en la combinación de tres señales de luminancia cromática

distinta: rojo, verde, azul (Red, Green, Blue). La forma más sencilla de obtener un color específico es determinar la cantidad de color rojo, verde y azul que se requiere combinar

(7)

para obtener el color deseado, ver la figura 2; para lo cual se realiza la suma aritmética de las componentes: X = R + G + B, gráficamente representada por un cubo.

Negro Gris Blanco Cian Verde Amarillo Rojo Magenta Azul

Figura 2. Espacio de colores RGB.

En la recta que une el origen con el valor máximo se encuentran ubicados los grises (escala de gris) debido a que sus tres componentes son iguales. Cuando una cámara adquiere una imagen a color, para cada píxel en color se tienen en realidad 3 componentes, una para cada uno de los colores básicos (rojo, verde y azul); la ganancia máxima para cada componente corresponde a la longitud de onda de los tres colores básicos.

Color

Un color puede definirse como la combinación de tres colores básicos: rojo, verde y azul, y expresarse mediante una tripleta de valores de 0 a 1 (R, G, B), donde R, G y B representan las intensidades de cada uno de los tres colores básicos rojo, verde y azul, respectivamente. En la tabla I se presentan ejemplos de colores definidos mediante estas tripletas. Tabla I. Colores RGB Color R G B Blanco 1 1 1 Rojo 1 0 0 Amarillo 1 1 0 Verde 0 1 0 Turquesa 0 1 1 Gris 0.5 0.5 0.5 Rojo Oscuro 0.5 0 0 Azul 0 0 1 Aguamarina 0.5 1 0.83 Negro 0 0 0

(8)

Mapa de color

El mapa de color es una matriz de n x 3, donde cada renglón es una tripleta de colores. El primer renglón corresponde al valor mínimo del eje de color y el último renglón al máximo. Al definir diferentes distribuciones de intensidad de los tres colores básicos, se crean diferentes mapas de color. Algunos de los mapas de color predeterminados en MATLAB son:

hsv, cool, hot, jet, gray, flag

Histograma de una imagen.

El histograma de una imagen es una representación del número de píxeles de cierto nivel de gris en función de los niveles de gris.

I.2 Relaciones entre píxeles

Un píxel p con coordenadas (x,y) tiene cuatro vecinos horizontales y verticales, cuyas coordenadas son: (x+1,y), (x-1,y), (x,y-1), (x,y+1). A este conjunto de píxeles se llama vecindad 4 o 4 vecinos de p y se denota por N4(p), ver la figura 3. Nótese que para cada

uno de estos píxeles hay una distancia de 1 de p y que en los bordes de la imagen algunos de estos píxeles quedarán fuera de la imagen.

(x-1,y)

(x,y) (x,y+1)

(x+1,y) (x,y-1)

Figura 3. Vecindad N4(p).

Existen también 4 vecinos diagonales de p con coordenadas: (x+1,y+1), (x+1,y-1),

(x-1,y-1), (x-1,y-1) y se les denota por ND(p), ver la figura 4. N4(p) y ND(p) juntos forman la

vecindad 8 denotada por N8(p).

(x-1,y-1) (x,y) (x+1,y+1) (x-1,y+1) (x+1,y-1) Figura 4. Vecindad ND(p).

(9)

I.2.1 Conectividad

La conectividad es un concepto importante utilizado para establecer los límites de objetos en regiones dentro de una imagen. Para determinar si dos píxeles están conectados se determina si son adyacentes en algún sentido (ND(p), N4(p) por ejemplo) y si sus niveles

de gris satisfacen un criterio de similaridad (por ejemplo si son iguales). Por ejemplo, en una imagen binaria con valores de 1 y 0, dos píxeles pueden ser vecinos N4(p), pero se

dice que están conectados solo cuando tienen el mismo valor.

I.2.2 Distancia

La distancia o transformada de distancia proporciona una medición de la separación existente entre dos puntos dentro de una imagen. Dados tres píxeles, p, q y z, con coordenadas (x,y), (s,t) y (u,v), respectivamente, se puede definir una función de distancia D si se cumple:

( )

p q

(

D

( )

p q si p q

)

D , ≥0, , =0, =

( )

p q D

( )

q p D , = ,

( )

p z D

( ) ( )

p q D q z D , ≤ , + ,

Las funciones de distancia comúnmente usadas son: distancia euclidiana, distancia Manhattan o de cuadra y distancia tablero de ajedrez.

Distancia euclidiana entre p y q: DE

( ) (

p,q = xs

) (

2 + yt

)

. En la figura 5 se muestra la distancia euclidiana para una imagen de 5 por 5.

8 5 2 5 8 5 2 1 2 5 2 1 0 1 2 5 2 1 2 5 8 5 2 5 8

Figura 5. Distancia euclidiana para una imagen de 5 por 5.

Distancia Manhattan: se toman solamente en cuenta los vecinos de orden 4, es decir:

t y s x

D= − + −

En la figura 6 se muestra la distancia Manhattan de una imagen de 5 por 5.

4 3 2 3 4 3 2 1 2 3 2 1 0 1 2 3 2 1 2 3 4 3 2 3 4

(10)

Distancia tablero de ajedrez: es similar a la distancia Manhattan, en donde se observa que los 4-vecinos están a una distancia unitaria del píxel central; si se desea que los 8-vecinos estén a la misma distancia se toma:

( )

p q Max

(

x s y t

)

D , = − , −

En la figura 7 se muestra la distancia tablero de ajedrez.

2 2 2 2 2 2 1 1 1 2 2 1 0 1 2 2 1 1 1 2 2 2 2 2 2

Figura 7. Distancia tablero de ajedrez.

I.3 Ruido en imágenes

Todas las imágenes tienen cierta cantidad de ruido, la cual se puede deber a la cámara o al medio de transmisión de la señal. Generalmente el ruido se manifiesta como píxeles aislados que toman un nivel de gris diferente al de sus vecinos. Los algoritmos de filtrado que se verán más adelante permiten eliminar o disminuir este ruido. El ruido puede clasificarse en los siguientes tipos:

Gaussiano: produce pequeñas variaciones en la imagen; generalmente se debe a

diferentes ganancias en la cámara, ruido en los digitalizadores, perturbaciones en la transmisión, etc. Se considera que el valor final del píxel sería el ideal más una cantidad correspondiente al error que puede describirse como una variable aleatoria gaussiana.

Impulsional (sal y pimienta): el valor que toma el píxel no tiene relación con el valor

ideal, sino con el valor del ruido que toma valores muy altos o bajos (puntos blancos y/o negros) causados por una saturación del sensor o por un valor mínimo captado, si se ha perdido la señal en ese punto. Se encuentran también al trabajar con objetos a altas temperaturas, ya que las cámaras tienen una ganancia en el infrarrojo que no es detectable por el ojo humano; por ello las partes más calientes de un objeto pueden llegar a saturar un píxel.

Multiplicativo: La imagen obtenida es el resultado de la multiplicación de dos señales.

En la figura 8 se muestran los diferentes ruidos afectando a una imagen.

I.4 Procesamiento espacial

El procesamiento espacial esta formado por aquellas técnicas que operan directamente sobre los valores de los píxeles de la imagen. Las transformaciones son de la siguiente forma:

( )

x y F

(

I

( )

x y

)

S , = ,

(11)

I.4.1 Operaciones aritméticas, lógicas y transformaciones geométricas.

Las operaciones aritméticas más usadas en procesamiento de imágenes son; suma, resta, multiplicación y división. Para que se pueda llevar a cabo una operación aritmética, ambas imágenes deben ser del mismo tamaño. En la figura 9 se muestra la suma de dos imágenes, la cual se realiza de la forma C(x,y)= A(x,y)+B(x,y) mediante el comando

imadd en Matlab.

Figura 8. Diferentes tipos de ruido afectando a una imagen.

+

=

Figura 9. Suma de dos imágenes

También es posible aumentar el brillo a una imagen sumándole un valor constante a cada píxel. En la figura 10 se muestra el efecto de sumar un escalar (50) a una imagen, el cual se realiza de la forma B(x,y)= A(x,y)+a.

(12)

Figura 10. Aumento del brillo de la imagen usando la suma de un escalar a cada píxel de la imagen, imagen original (izquierda) e imagen modificada (derecha).

La resta de imágenes consiste en restar de una imagen el valor correspondiente de otra imagen. Esta operación es un paso intermedio en algunos procesamientos más complejos, como la detección de movimiento, etc. La resta, al igual que la suma de imágenes requiere que ambas imágenes sean de igual tamaño. En la figura 11 se muestra el efecto de restar una imagen de otra, de la forma C(x,y)= A(x,y)−B(x,y) mediante el comando imsubtract en Matlab.

-

=

Figura 11. Resta de dos imágenes, imagen original (izquierda), imagen a restar (centro) y resultado (derecha).

En la figura 12 se muestra la resta de un escalar (50) a cada píxel de la imagen original, la cual se lleva a cabo de la forma B(x,y)= A(x,y)−a.

(13)

En el campo de las imágenes, la multiplicación se puede llevar a cabo, entre dos imágenes del mismo tamaño, multiplicando elemento a elemento cada uno de los píxeles de la imagen, de la forma C(x,y)= A(x,y)⋅B(x,y), en Matlab esto se realiza con el comando immultiply. En la figura 13 se muestra la multiplicación de dos imágenes.

Figura 13 Multiplicación de una imagen por si misma, imagen original (izquierda), imagen resultante (derecha).

Cuando se multiplica cada uno de los píxeles de una imagen por un escalar, se le conoce como escalamiento, el cual se realiza de la siguiente forma B(x,y)=aA(x,y) . Cuando el escalar o constante es menor a 1, se oscurece la imagen y si es mayor a uno aumenta el brillo de la imagen. En la figura 14 se muestra el resultado de multiplicar la imagen original por el escalar 1.2

Figura 14. Multiplicación de una imagen por un escalar, imagen original (izquierda), imagen resultante (derecha).

La división de imágenes consiste en una división de elemento a elemento, como las demás operaciones vistas anteriormente. La división entre imágenes puede utilizarse para detectar cambios en dos imágenes, sin embargo, en lugar de dar el cambio absoluto de cada píxel, la división da el cambio fraccional o razón de cambio entre los valores de dos píxeles correspondientes. A la división de imágenes también se le conoce como

(14)

racionalización. En la figura 15 se presenta la división entre imágenes, la cual se realiza de la forma C(x,y)= A(x,yB(x,y).

Figura 15. División de imágenes, se muestra la división de la imagen original (izquierda) entre el fondo (centro) dando como resultado la figura de la derecha.

I.4.2 Operaciones lógicas

Las principales operaciones lógicas utilizadas en el procesamiento de imágenes son: AND, OR, NOT, las cuales se aplican solo a imágenes binarizadas. En la figura 16 se muestran las operaciones lógicas aplicadas a imágenes binarias.

Figura 16. Operaciones lógicas aplicadas a imágenes binarias.

I.4.3 Transformaciones geométricas

Las transformaciones geométricas modifican las relaciones espaciales entre píxeles; a continuación se presentan algunas.

I.4.3.1 Interpolación

La interpolación es el proceso en el cual se estiman los valores de una imagen en una sección específica, cuando por ejemplo, se cambia el tamaño de una imagen y en la nueva imagen existen más píxeles que en la imagen original. Dentro de Matlab los comandos

(15)

imresize e imrotate utilizan interpolación bidimensional como paso intermedio en sus procesos.

De forma general, la interpolación de una imagen se presenta como:

( )

x y =

∑∑

g

( ) (

i j h xi yj

)

f , , ,

donde: g(x,y) es la imagen original, f(x,y) representa la imagen procesada y h(x,y) es la interpolación (máscara). En el toolbox de Image Processing se encuentran implementados los siguientes métodos de interpolación: interpolación por el vecino más próximo, interpolación bilineal e interpolación bicúbica. Dichos métodos se explicarán más delante de forma breve. Los tres métodos de interpolación funcionan de forma similar, en cada caso para determinar el valor para un píxel interpolado, se encuentra el punto en la imagen original que corresponde a la imagen interpolada. Se asigna el valor del píxel interpolado calculando el promedio ponderado de el conjunto de píxeles hallados en la vecindad de dicho punto. Los tres métodos difieren en el conjunto de píxeles que consideran:

• Vecino más próximo: al píxel interpolado se le asigna el valor del píxel que corresponde

• Interpolación bilineal: el valor del píxel interpolado es el promedio ponderado de los píxeles en la vecindad 2x2 más cercana.

• Interpolación bicúbica: el valor del píxel interpolado es el promedio ponderado de los píxeles presentes en la vecindad 4x4 más cercana.

Nótese que el número de píxeles considerado aumenta la complejidad del cálculo, es por eso que la interpolación bilineal es más lenta que el método del vecino más próximo y el método bicúbico es más lento que el método bilineal. Nótese también que si se considera un mayor número de píxeles, se tendrán mejores resultados.

Para la mayoría de las funciones el método utilizado por omisión es el de vecino más próximo. Este método produce resultados aceptables para todos los tipos de imágenes y es el único método apropiado para imágenes indexadas. Sin embargo, para imágenes de intensidad y RBG generalmente se especifica la interpolación bilineal o bicúbica porque estos métodos proporcionan mejores resultados. Para imágenes RGB, la interpolación se ejecuta en los planos de color rojo, verde y azul de forma individual.

I.4.3.2 Amplificación/Reducción de imágenes

Para el cambio de tamaño de una imagen (amplificación/reducción) se utiliza el comando

imresize. Este comando permite especificar: el tamaño de la imagen de salida (procesada), el método de interpolación utilizado y el filtro a usar para evitar el efecto alias. El efecto alias se presenta al reducir el tamaño de una imagen. Esto es debido a que se presenta una pérdida de información cuando se reduce el tamaño de una imagen.

En las figuras 17 y 18 se presenta un ejemplo de amplificación de imágenes usando los métodos de interpolación descritos anteriormente. La interpolación mediante Fourier se expone más adelante.

(16)

Figura 17. Imagen original

Figura 18. Amplificación de la figura 17 usando diferentes métodos de interpolación.

I.4.3.3 Traslación

Si se requiere trasladar el origen de una imagen se aplican las ecuaciones:

o i f o i f y y y x x x + = + =

Que en coordenadas homogéneas es:

                    =           1 1 0 0 1 0 0 1 1 i i o o f f y x y x y x

(17)

Rotación respecto al origen                     − =           1 1 0 0 0 cos 0 cos 1 i i f f y x sen sen y x θ θ θ θ

Rotación respecto a un punto cualquiera

                    − −           −           =           1 1 0 0 1 0 0 1 1 0 0 0 cos 0 cos 1 0 0 1 0 0 1 1 i i o o o o f f y x y x sen sen y x y x θ θ θ θ

En la figura 19 se muestra la rotación de la figura 17 usando diferentes métodos de interpolación.

Figura 19. Rotación de la imagen de la figura 17 usando diferentes métodos de interpolación.

I.4.3.4 Convolución bidimensional

La convolución bidimensional discreta es la base de algunos procesamientos comunes, como el filtrado de imágenes. En la convolución, el valor de un píxel de salida se calcula mediante la suma ponderada de los píxeles vecinos. Dentro del campo del procesamiento de imágenes, la convolución se realiza entre la imagen y una matriz (los coeficientes del filtro) llamada máscara para filtrar una imagen. En Matlab la convolución bidimensional (aplicada a imágenes) se encuentra en el comando conv2. La convolución de f(x,y) y

h(x,y) está dada por:

( ) ( ) ( )

∑ ∑

( ) (

)

−∞ = ∞ −∞ = − − = ∗ = i j j y i x h j i f y x f y x h y x g , , , , ,

Lo más común es usar convoluciones de 3 x 3 elementos; entonces la ecuación anterior se convierte en:

( ) ( ) ( )

∑∑

( ) (

)

= = − − = ∗ = 2 0 2 0 , , , , , i j j y i x h j i f y x f y x h y x g

que, por ejemplo, para obtener g(2,2) se tiene:

( )

∑∑

( ) (

)

= = = − − = 2 0 2 0 2 , 2 , 2 , 2 i j j i h j i f g

( ) ( ) ( ) ( ) ( ) ( )

0,0h 2,2 + f 0,1h 2,1 + f 0,2h 2,0 +! f

(18)

( ) ( ) ( ) ( ) ( ) ( )

! !+ f 1,0 h1,2 + f 1,1h1,1 + f 1,2 h1,0 +

( ) ( ) ( ) ( ) ( ) ( )

2,0 h 0,2 f 2,1h 0,1 f 2,2 h0,0 f + + + !

Considérese que la imagen es la mostrada en la figura 20:

A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 Figura 20. Imagen y la máscara se muestra en la figura 21:

8 1 6

3 5 7

4 9 2

h =

Figura 21. Máscara de convolución.

En la figura 22 se muestra como calcular el píxel de salida (procesada) mediante los siguientes pasos:

1. Rotar la máscara de convolución 180 grados a partir del elemento del centro. La máscara rotada queda entonces como:

8 1 6 3 5 7 4 9 2

Figura 22. Máscara rotada para la convolución.

2. Sobreponer el elemento central de la máscara de tal forma que quede sobre el elemento de interés, en este caso el elemento (2,4) de A, tal como se muestra en la figura 23.

(19)

17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 8 1 6 3 5 7 4 9 2

Figura 23. Convolución para obtener el valor de A(2,4)

3. Multiplicar cada peso (valor) de la máscara rotada por el píxel de A que se encuentra “bajo” la máscara.

4. Sumar los productos individuales obtenidos en el paso 3. Por ejemplo, para el píxel (2,4), el píxel de salida (procesado) es:

1 · 2 + 8 · 9 + 15 · 4 + 7 · 7 + 14 · 5 + 16 · 3 + 13 · 6 + 20 · 1 +22 · 8 = 575

Cuando se trabaja en los extremos de la imagen, se acostumbra insertar ceros (zero padding) en los extremos, tal como se muestra en la figura 24.

8 1 6 3 5 7 4 9 2 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 0 0 0 0 0

Figura 24. Inserción de ceros (zero padding) en los extremos.

I.4.3.5 Correlación

La correlación es una operación parecida a la convolución, en la cual el valor de un píxel de salida se calcula como la suma ponderada de los píxeles vecinos. La diferencia está en que la matriz de pesos o máscara, en este caso llamada núcleo o kernel de correlación no se rota durante el cálculo. La correlación está dada por:

( ) ( ) ( )

∑∑

( ) (

)

−∞ = ∞ ∞ = ∗ + + = = i j j y i x h j i f y x f y x h y x g , , " , , ,

(20)

La correlación se utiliza para encontrar el parecido entre píxeles de una imagen. Si los píxeles son iguales o parecidos, se dice que están altamente correlacionados entre si. La correlación permite hallar patrones.

La diferencia entre la correlación y la convolución estriba en que la máscara de correlación no se rota como en la convolución. En la figura 25 se muestra como se calcula la correlación para el píxel (2,4) de la imagen A usando como máscara de correlación a h. 8 1 6 3 5 7 4 9 2 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9

Figura 25. Correlación de A con h.

El algoritmo de la correlación opera de la siguiente forma:

1. Sobreponer el elemento central de la máscara de tal forma que quede sobre el elemento de interés, en este caso el elemento (2,4) de A, tal como se muestra en la figura 22.

2. Multiplicar cada peso (valor) de la máscara rotada por el píxel de A que se encuentra “bajo” la máscara.

3. Sumar los productos individuales obtenidos en el paso 2. Por ejemplo, para el píxel (2,4), el píxel de salida (procesado) es:

1 · 8 + 8 · 1 + 15 · 6 + 7 · 3 + 14 · 5 + 16 · 7 + 13 · 4 + 20 · 9 +22 · 2 = 585

I.5 Procesamiento en el dominio de la frecuencia

En el campo de las imágenes, el dominio de la frecuencia es aquel en el que una imagen se representa como la suma de señales periódicas con diferentes frecuencias. Por ejemplo, la transformada de Fourier de una imagen es la representación de dicha imagen como una suma de exponenciales complejos de diferentes magnitudes, frecuencias y fases. Este tipo de transformaciones frecuenciales se llevan a cabo para una amplia gama de procesamientos, entre los cuales se encuentran: la convolución, el mejoramiento de imágenes, la detección de características, compresión, etc.

I.5.1 Series de Fourier

Dada una función periódica en el dominio del tiempo f(t), es lógico pensar que esta función se puede expresar mediante la suma de otras funciones periódicas. Lo anterior se expresa mediante las series de Fourier, las cuales dan las fórmulas matemáticas que

(21)

expresan esta relación con las funciones periódicas seno y coseno. Así, cualquier función

f(t) con periodo To se puede expresar como:

∞ = + + = 1 0 0 0 cos( ) ( ) ) ( k k k k t b sen k t a a t f ω ω Donde:

= 0 0 0 0 ( ) 1 T ft t f T a , =

0 0 0 0 ) cos( ) ( 2 T k f t k t dt T a ω , =

0 0 0 0 ) ( ) ( 2 T k f t sen k t dt T b ω , 0 0 2 T π ω =

La serie de Fourier de la señal cuadrada se puede representar como:

∞ = + + = 0 2 1 ) ) 1 2 (( 4 ) ( k k t k sen t f π

En la figura 26 se presenta la señal cuadrada

0 1 2 3 4 5 6 -1 -0.5 0 0.5 1 (a) 0 1 2 3 4 5 6 -1 -0.5 0 0.5 1 (b) 0 1 2 3 4 5 6 -1 -0.5 0 0.5 1 (c) 0 1 2 3 4 5 6 -1 -0.5 0 0.5 1 (d) 0 1 2 3 4 5 6 -1 -0.5 0 0.5 1 (e) 0 1 2 3 4 5 6 -1 -0.5 0 0.5 1 (f)

Figura 26. Formación de la señal cuadrada mediante la serie de Fourier. (a) cinco señales senoidales (términos); (b) suma de dos términos; (c) suma de tres términos; (d) suma de

cuatro términos; (e) suma de cinco términos; (f) suma de veinte términos.

I.5.2 Transformada de Fourier

La transformada de Fourier es una extensión de las series de Fourier a señales no periódicas. El par transformado analítico de Fourier está dado por:

[ ]

∞ ∞ − − = = X f x t e dt t x F ( ) ( ) ( ) jft (ec. de análisis)

[

]

∞ − ∞ ∞ − − = = = ω ω π ω π d e X df e f X f X F t x j ft ( ) j t 2 1 ) ( ) ( ) ( 1 2 (ec. de síntesis) donde )X(ω =) 2πX(f .

(22)

Para el caso unidimensional discreto, el par transformado de Fourier está dado por:

[ ]

− = − = = 1 0 2 ) ( ) ( ) ( N n kn N j e n x k X n x F π ; k = 0, 1, ..., N-1 (ec. de análisis)

[

]

− = − = = 1 0 2 1 ) ( 1 ) ( ) ( N k kn N j e k X N n x k X F π ; n = 0, 1, ..., N-1 (ec. de síntesis)

Para el caso bidimensional discreto, se tiene que:

[

]

∑∑

− = − = − − = = 1 0 1 0 ln 2 2 ) , ( ) , ( ) , ( M m N n N j km M j e e n m x l k X l k x F π π ; k = 0, 1, ..., M-1; l = 0, 1, …, N-1

[

]

∑∑

− = − = − = = 1 0 1 0 ln 2 2 1 ) , ( 1 ) , ( ) , ( M k N l N j km M j e e l k X MN n m x l k X F π π ; m = 0, 1, ..., M-1; n = 0,1,…, N-1

Los valores X(k,l) son los coeficientes de la transformada de Fourier de la imagen x(m,n). A los coeficientes referentes a la frecuencia cero, X(0,0) usualmente se les conoce como la componente de corriente directa. La transformada de Fourier se encuentra implementada en Matlab en el comando fft (para el caso unidimensional), fft2 (para el caso bidimensional) y fftn (para el caso N-dimensional). Las transformadas inversas se encuentran en los comandos ifft (para el caso unidimensional), ifft2 para el caso bidimensional e ifftn (para el caso N-dimensional).

La fase obtenida mediante la transformada de Fourier contiene información esencial sobre la estructura de la imagen. La amplitud por si sola implica solo que existe una estructura periódica dentro de la imagen, pero no especifica donde se encuentra. Es decir, si no se conoce la fase de la transformada de Fourier, se puede determinar que objetos hay en la imagen, pero no su posición. Por lo tanto, resulta obvio que si se obtiene un espectro de potencia, se tendría muy poca información sobre la imagen debido a que la fase se ha perdido. Si se asocia un nivel de gris con la amplitud de un proceso físico, por ejemplo una oscilación armónica, entonces el espectro de potencia proporciona la distribución de la energía en el dominio de la frecuencia.

I.5.2.1 Aplicaciones de la transformada de Fourier

En esta sección se presentan algunos procesamientos de imágenes relacionados con la transformada de Fourier.

Respuesta a la frecuencia de filtros lineales

La transformada de Fourier de la respuesta al impulso de un filtro lineal proporciona la respuesta a la frecuencia del filtro. Esto puede obtenerse mediante el comando freqz2, el cual calcula y despliega la respuesta a la frecuencia de un filtro.

Convolución rápida

Una propiedad clave de la transformada de Fourier es que la multiplicación de dos transformadas de Fourier de dos funciones corresponde a la convolución de las funciones espaciales asociadas. Esta propiedad, junto con la transformada rápida de Fourier forman la base para el algoritmo de la convolución.

(23)

Supóngase que A es una matriz de M por N y B es una matriz de P por Q; la convolución de A y B se obtiene de la siguiente forma:

1. Se agregan ceros a A y a B para que su longitud sea de al menos (M+P+1) por (N+Q-1). Generalmente se les agrega ceros a A y B para que su tamaño sea una potencia de 2 debido a que el algoritmo de la fft2 es más rápido para potencias de dos.

2. Se calcula la transformada de Fourier bidimensional mediante fft2

3. Se multiplican las dos transformadas

4. Se obtiene la transformada inversa de Fourier bidimensional de la multiplicación mediante el comando ifft2.

Localización de características en imágenes

La transformada de Fourier se utiliza también para realizar correlaciones. La correlación se utiliza para localizar algunas características en una imagen. Por ejemplo si se desea encontrar la letra “a” en una imagen que contenga texto, se establece un patrón (sección de la imagen con la característica de búsqueda deseada) con la letra “a” . Posteriormente se obtiene la correlación de la imagen patrón y la imagen original rotando 180º la imagen patrón y se utiliza la técnica de convolución basada en la transformada de Fourier, descrita anteriormente (Nota: la convolución es equivalente a la correlación si se rota el kernel de convolución 180º. Para buscar coincidencias en la imagen se utiliza la transformada de Fourier y la transformada inversa de Fourier.

Amplificación de imágenes

Para realizar la ampliación de una imagen se utiliza una interpolación en el dominio del tiempo (espacial) mediante la transformada discreta de Fourier, siempre y cuando los lados de la imagen tengan un número de píxeles que sea potencia de dos. A continuación se presenta el procedimiento para cuadruplicar el tamaño de una imagen (duplicar cada lado),

1. Transformar la imagen A al dominio de la frecuencia (imagen o matriz B).

2. Dividir la imagen transformada (imagen o matriz B) en cuatro partes iguales, tal como se muestra en la figura 27.

I II III IV N N N 2 N 2

Figura 27. División en cuatro partes iguales de la imagen transformada (B)

3. Insertar N ceros a cada renglón de la matriz B, ver la figura 28 (b); enseguida insertar N ceros a cada columna, tal como se muestra en la figura 28(c) para formar una matriz aumentada, B’.

(24)

4. El siguiente paso es antitransformar la matriz aumentada B’ para obtener una matriz A’ aumentada, de dimensiones 2N x 2N.

5. Dividir cada elemento de la matriz X’ entre 64. La relación es 4(2n-1), donde n es el número de veces que se amplifica la imagen, en este caso n = 2.

El procedimiento anterior amplifica la imagen original por un factor de 2 (el área original se cuadruplica). Si se requiere un factor de amplificación diferente de dos, por ejemplo un factor α, deberán agregarse a B (α -1) ceros.

Imagen

(Matriz B) Inserción de N ceros a

cada renglón Ceros I II III IV Ceros IV III II I Inserción de N ceros a cada columna (a) (b) (c) III I II IV

Figura 28. Inserción de ceros para obtener la matriz B aumentada (B’).

I.5.3 Transformada discreta coseno

La transformada discreta coseno (TDC) representa una imagen como la suma de senoidales de diferentes amplitudes y frecuencias. La transformada discreta coseno tiene una propiedad tal que para una imagen típica, la mayoría de la información visualmente significativa de una imagen se concentra en solo unos cuantos coeficientes de la DCT. Por esta razón, la TDC es comúnmente usada en aplicaciones de compresión de imágenes. Por ejemplo, la TDC es el corazón del algoritmo estándar de compresión de imágenes conocido como JPEG (Joint Photographic Experts Group).

La transformada discreta coseno de una matriz A de M por N, tal como se define a continuación:

(

)

(

)

1 0 1 0 , 2 1 2 cos 2 1 2 cos 1 0 1 0 ≤ ≤ − − ≤ ≤ + + =

∑∑

− = − = q N M p N q n M p m A B M m N n mn q p pq π π α α       − ≤ ≤ = =       − ≤ ≤ = = 1 1 2 0 q , 1 1 1 2 0 , 1 N q N N M p M p M p p α α

Los valores Bpq son los coeficientes de la transformada discreta coseno de A. La TDC es

invertible, y su inversa está dada por:

(

)

(

)

1 0 1 0 , 2 1 2 cos 2 1 2 cos 1 0 1 0 ≤ ≤ − − ≤ ≤ + + =

∑∑

− = − = n N M m N q n M p m B A M m N n pq q p mn π π α α

(25)

      − ≤ ≤ = =       − ≤ ≤ = = 1 1 2 0 q , 1 1 1 2 0 , 1 N q N N M p M p M p p α α

La ecuación de la TDC inversa se puede interpretar como una matriz A de M por N que puede escribirse como la suma de MN funciones de la forma:

(

)

(

)

1 0 1 0 , 2 1 2 cos 2 1 2 cos − ≤ ≤ − ≤ ≤ + + N n M m N q n M p m q p π π α α

A estas funciones se les llama funciones básicas de la TDC, estos coeficientes Bpq se

conocen como pesos aplicados a cada función base. La razón por la cual las imágenes pueden ser comprimidas y recuperadas exitosamente con pequeños errores es la gran cantidad de redundancia en las imágenes típicas. El propósito de esta transformada es obtener un conjunto de coeficientes que representen la imagen con valores que no estén correlacionados (es decir, cada valor en el arreglo o imagen proporciona nueva información no dada por ningún otro valor en el arreglo). Algunos valores en el arreglo transformado dan poca o ninguna información acerca de la imagen original y pueden ser descartados. En la figura 29 se presenta un ejemplo de compresión usando la transformada discreta coseno (comando dct2) usado para transformar la imagen mostrada. La imagen transformada muestra de forma logarítmica la distribución de los niveles de gris en la imagen transformada. La imagen cuantizada muestra los niveles de gris transformados representativos de forma logarítmica, los tonos negros pueden desecharse (en este caso se desecharon valores inferiores a 10), con lo que se comprime la imagen y por último se muestra la imagen reconstruida.

I.6 Procesamiento de imágenes básico

En esta sección se presentan y describen algunos procesamientos más comunes.

I.6.1 Binarización de una imagen

La binarización de una imagen consiste en comparar los niveles de gris presentes en la imagen con un valor (umbral) predeterminado. Si el nivel de gris de la imagen es menor que el umbral predeterminado, se le asigna al píxel de la imagen binarizada el valor 0 (negro), y si es mayor, se le asigna un 1 (blanco). De esta forma se obtiene una imagen en blanco y negro. Generalmente se utiliza un umbral de 128 si se trabaja con 255 niveles de gris, pero en algunas aplicaciones se requiere de otro umbral. En la figura 30 se muestra un ejemplo de imagen binarizada.

(26)

Figura 29. Compresión de imágenes usando la TDC.

Fig. 30. Binarización de una imagen

I.6.2 Manipulación del contraste

El histograma que se muestra en la figura 31 toma valores limitados, por lo que el contraste en la imagen es muy bajo y apenas se aprecian los detalles. Se desea encontrar una función que produzca una nueva imagen que si cubra todo el conjunto de valores posibles de la imagen (niveles de gris). Si a y b son los valores mínimos y máximos, respectivamente, puede definirse la función T(c) que asigna los nuevos valores de gris a partir de los antiguos:

(27)

a b a c A c T y − − = = ( )

donde: a y b son los límites inferior y superior, c es el valor de gris de la imagen original y A es el valor máximo que se desea que tengan los píxeles de la imagen.

a c b

0 A

Figura 31. Expansión del histograma de la imagen.

En la figura 32 se muestra el resultado de aplicar a la imagen la modificación del contraste, procesamiento también conocido como ecualización de la imagen. El contraste (separación entre los niveles de gris) ha mejorado y ahora se aprecian mejor los detalles de la imagen. En el nuevo histograma puede observarse como la separación entre los diferentes niveles de gris es mayor. En este caso la separación es igual para todos los niveles de gris debido a que la transformación es lineal. Nótese que aunque la imagen se ve mejor, la información es la misma en ambas imágenes, lo único que se ha hecho es asignar nuevos niveles de gris, pero los píxeles que tenían un nivel de gris determinado en la imagen original diferente a los niveles de gris inferior y superior, son los mismos en la imagen nueva.

Para un caso más general la función buscada tendrá la forma (ver la figura 33)

    ≤ ≤ + − ≤ ≤ + − ≤ ≤ = = L x b y b x b x a y a x a x x x T y b a ) ( ) ( 0 ) ( γ β α donde:

y, x son los niveles de gris de las imágenes resultante y original

α, β, γ son ganancias de cada tramo

(28)

Figura 32. Modificación de contraste a b L Imagen original Imagen original a v b v

Figura 33. Caso general

I.6.3 Modificación del contraste

La modificación del contraste consiste en aplicar una función a cada uno de los píxeles de la imagen, de la forma: p=ma

(29)

m es el valor de gris de la imagen original

p es el nuevo valor de gris en la imagen resultante a es la potencia a la que se eleva

Entre las transformaciones más usuales se encuentran: Función inversa p=255−m Función cuadrada 255 2 m p= Función cúbica 2 3 255 m p=

Función raíz cuadrada p= 255m

Función raíz cúbica 3 2

255 m p= Función logarítmica ) 255 1 ln( ) 1 ln( 255 + + = m p

El valor 255 se utiliza para normalizar los valores entre 0 y 255 si se trabaja con imágenes con niveles de gris de 8 bits, de lo contrario se debe remplazar este valor por el valor máximo representable con el número de bits utilizados.

Con la función cuadrada y cúbica se oscurece la imagen resultante. Con las funciones raíz cuadrada, raíz cúbica y logarítmica sucede lo inverso.

I.6.4 Modificación del histograma

Los métodos anteriores modifican cada nivel de gris y dependen únicamente de su valor y por lo tanto, son locales. Si se desea adquirir una información global de la imagen, la forma más fácil de hacerlo es analizar y modificar el histograma. Esto se hace con la idea de que éste se ajuste a una forma predeterminada; la forma más usual se conoce como ecualización del histograma, en la que se pretende que éste sea horizontal, es decir, que para todos los valores de gris se tenga el mismo número de píxeles.

La ecualización del histograma se realiza trabajando sobre el histograma acumulado, el cual está dado por:

= = i k k h i H 0 ) ( ) (

Si el histograma fuera totalmente plano, el histograma para cada nivel de gris sería: 256 ) 1 ( ) ' (i i NM G = +

donde N y M son las dimensiones de la imagen y 256 corresponde al número de niveles dado por el número de bits con los que se representan (en este caso 8 bits).

Como se desea que G(i’) = H(i), se tiene que; ) ( 256 ) 1 ' (i+ NM = H i ∴ '= 256 H(i)−1 NM i

(30)

Debido a que los niveles de gris son únicamente valores enteros, se realiza un cambio en los niveles de gris de acuerdo a:

(

)





=Parteentera 256 anterior 1

nuevo H i

NM i

I.6.5 Filtrado de una imagen

El filtrado es una técnica para modificar o mejorar a una imagen. Por ejemplo, un filtro puede resaltar o atenuar algunas características. El filtrado es una operación de vecindario, en la cual el valor de un píxel dado en la imagen procesada se calcula mediante algún algoritmo que toma en cuenta los valores de los píxeles de la vecindad de la imagen original.

I.6.5.1 Filtros lineales espaciales

El ruido en una imagen es una característica que se desea eliminar, y al ser este variaciones sobre los niveles de gris, le corresponden las frecuencias altas. Si se supone que el ruido es una señal que se suma a la señal (imagen) original, el nivel de gris de un píxel puede definirse como la suma del nivel de gris ideal y el ruido:

f(x, y) = fi(x, y) + r(x, y)

Aunque el ruido esta siempre presente, el que afecte más o menos a un píxel determinado es aleatorio. Si se trata de un ruido Gaussiano, este esta definido por una distribución normal de media cero y variancia típica de σ .

I.6.5.2 Filtro pasa bajas espacial

Una forma de eliminar el ruido consiste en hacer pasar la imagen por un filtro pasa bajas que disminuya la ganancia de las componentes de alta frecuencia. El filtro más sencillo e intuitivo es aquel que tiene coeficientes unitarios en todos los elementos, tal como se muestra a continuación.

1 1 1

1 1 1

1 1 1

Si al resultado se le multiplica por un noveno, se obtiene la media de todos los píxeles, por lo que el ruido disminuye. Sin embargo, este filtro presupone que la influencia de todos los píxeles es igual. Otra consideración es que cuanto más alejado esté el píxel del central, su valor será menor y se obtiene la siguiente máscara:

(31)

1 1 1

1 2 1

1 1 1

Si se desea dar mayor peso al píxel central que a sus vecinos, y a los vecinos tipo 4 que a los de tipo 8, se tiene

1 2 1 2 4 2 1 2 1 En general, se tiene: 1 b 1 b b b 1 b 1 2

debiendo ser la ganancia de todas ellas la unidad para no variar la imagen. El filtrado de imágenes en Matlab está implementado en el comando filter2.

I.6.5.3 Filtrado por la mediana

El filtrado por la mediana permite eliminar el ruido tipo sal y pimienta, es decir, elimina puntos blancos y negros presentes en la imagen. En una secuencia de números x1, x2, ...xN,

la mediana es aquel valor que cumple que (N-1)/2 elementos tienen un valor menor o igual a ella y que (N-1)/2 tiene un valor mayor o menor que la mediana. La mediana se obtiene ordenando las intensidades de los píxeles de menor a mayor, y el píxel que se encuentra en (N-1)/2 es la mediana , tal como se muestra en la figura 34. A continuación se muestra como el filtrado por la mediana puede eliminar un valor.

vecindad de x = [0,0,0,0,255,0,0,0,0] vecindad de x = [0,0,0,0,0,0,0,0,255]

(32)

22 10 10 255 15 0 0 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 0 0 0 0 0 vecindad de a = [0,0,0,0,22,10,0,0,0] a b

Se ordena de mayor a menor

vecindad de a = [0,0,0,0,0,0,0,10,22]

Mediana

Figura 34. Vecindad de a y obtención de la mediana. En Matlab este filtro se encuentra implementado en el comando medfilt2.

I.6.5.4 Realce de bordes

El realce de bordes en una imagen tiene un efecto opuesto a la eliminación de ruido; consiste en enfatizar o resaltar aquellos píxeles que tienen un valor de gris diferente al de sus vecinos. Cabe resaltar que si la imagen contiene ruido, su efecto se multiplicará, por lo que ser recomienda primero eliminar el ruido. En la figura 35 se muestra un ejemplo de realce de contornos.

Figura 35. Realce de una imagen

En el realce de imágenes consiste en aumentar la ganancia de las altas frecuencia, es decir:

(33)

Imagen resultante = (Ganancia)(Imagen Original) – Bajas frecuencias De forma general, la máscara usada para realzar los bordes es:

-1 -1 -1

-1 A -1

-1 -1 -1

donde:

A = 9 · Ganancia –1 y todo ello multiplicado por un noveno.

I.6.5.5 Detección de contornos

La detección de contornos es un paso intermedio en el reconocimiento de patrones en imágenes digitales. En una imagen, los contornos corresponden a los limites de los objetos presentes en la imagen. Para hallar los contornos se buscan los lugares en la imagen en los que la intensidad del píxel cambia rápidamente, generalmente usando alguno de los siguientes criterios:

• Lugares donde la primera derivada (gradiente) de la intensidad es de magnitud mayor que la de un umbral predefinido

• Lugares donde la segunda derivada (laplaciano) de la intensidad tiene un cruce por cero.

En el primer caso se buscarán grandes picos y en el segundo cambios de signo, tal como se muestra en la figura 36.

I.6.5.5.1 Técnicas basadas en el gradiente

Estas técnicas se basan en una aproximación al concepto de la derivada para espacios discretos. Esta generalización se basa en el cálculo de diferencias entre píxeles vecinos; estas diferencias, según la relación de píxeles considerados, puede dar lugar a derivadas unidimensionales o bidimensionales, así como aplicarse en una dirección determinada de la imagen o en todas direcciones. Otras aproximaciones diferenciales de gran utilidad son la de Roberts y la de Sobel.

El operador gradiente G aplicado a una imagen f(x,y) esta definido como:

[

]

      ∂ ∂ ∂ ∂ = = ∇ y f x f G G y x f( , ) x y

(34)

f(x)

f ' (x)

f '' (x)

Figura 36. Detección de contornos mediante la primera y segunda derivada.

El vector gradiente representa el cambio máximo de intensidad para el punto (x,y); su magnitud y dirección están dados por:

2 2 y xx G G f = + ∇     = ∠∇ x y G G f arctan

siendo la dirección del gradiente perpendicular al borde. Para reducir el costo computacional, generalmente se aplica:

y

x G

G

f = +

Debido a que las imágenes digitales no son señales continuas, se tiene:

[

]

     ∆ ∆ ∆ ∆ = = ∇ y f x f G G y x f( , ) x y que se puede representar mediante las máscaras:

x

f

G

x

=

-1 1

f(x,y)

y

f

G

y

=

-1 1

f(x,y)

(35)

Estas máscaras generalmente no se utilizan debido a que son muy poco sensibles al ruido al tomar en cuenta solamente la información de dos píxeles. Entre los filtros (operadores) más usados, que además permiten obtener un gradiente suavizado, se encuentran: Roberts, Prewitt, Sobel e Isotrópico. En la figura 37 se muestran las máscaras referentes a estos operadores. 0 -1 1 0 -1 0 0 1 Operador de Roberts -1 0 -1 0 -1 0 1 1 1 -1 -1 0 0 1 1 -1 0 1 Operador de Prewitt -1 0 -2 0 -1 0 1 2 1 -1 -2 0 0 1 2 -1 0 1 Operador de Sobel -1 0 0 -1 0 1 1 -1 0 0 1 -1 0 1 2 − 2 2 − 2 Operador Isotrópico

Figura 37. Máscaras para los operadores: Roberts, Prewitt, Sobel e Isotrópico.

I.6.5.5.2 Técnicas basadas en el laplaciano

El laplaciano es la segunda derivada de una función y representa la derivada de esta respecto a todas las direcciones, y esta dado por:

( )

2 2 2 2 2 , y f x f y x f ∂ ∂ + ∂ ∂ = ∇

Generalmente para el laplaciano se utilizan las máscaras mostradas en la figura 38. Nótese que el píxel central toma el valor negativo de la suma de todos los que lo rodean, de tal forma que la suma aritmética de todos los píxeles sea cero.

-1 -1 -1 8 -1 -1 -1 -1 -1 0 -1 -1 0 0 -1 0 -1 0 Figura 38. Máscaras utilizadas para el operador laplaciano.

(36)

En la figura 39 se presentan algunos ejemplos de detección de contornos.

Figura 39. Ejemplos de detección de contornos.

(37)

II. Manejo de las imágenes en Matlab

La estructura básica de datos en Matlab es el arreglo, el cual se puede definir como un conjunto ordenado de datos reales o complejos. En el caso de las imágenes, estas pueden ser representadas por matrices formadas por conjuntos ordenados de valores reales que representan la intensidad de color o de niveles de gris.

Matlab almacena la mayoría de las imágenes como arreglos bidimensionales (matrices) en los cuales cada elemento de la matriz corresponde a la intensidad de un píxel de la imagen. Por ejemplo, una imagen de 200 renglones por 300 columnas se almacena en Matlab como una matriz de 200x300. Algunas imágenes, como las imágenes a color (RGB), que requieren de un arreglo tridimensional, donde en el primer plano en el espacio tridimensional representa la intensidad de rojo de los píxeles, el segundo plano representa la intensidad de verde de los píxeles y el tercer plano representa la intensidad de azul de los píxeles.

Esta convención hace que el trabajar con imágenes en Matlab sea similar al trabajar con matrices con datos de cualquier tipo. Por ejemplo, se puede seleccionar un solo píxel de una imagen-matriz de la forma I(2,15), con lo cual Matlab regresa el valor del píxel localizado en el renglón 2, columna 15 de la imagen-matriz I.

II.1 Clases de almacenamiento usadas en el toolbox

Por omisión, Matlab almacena la mayoría de los datos en clase double (doble). Los datos en estos arreglos se almacenan como datos de punto flotante de doble precisión (64 bits). En el caso de las imágenes, esta representación no es la ideal, debido a que en una imagen se tiene un número grande de píxeles. Por ejemplo, si se tiene una imagen de 1000 x 1000 píxeles tiene un millón de píxeles y debido a que cada píxel se representa con al menos un elemento del arreglo, se requerirían aproximadamente 8 MB de memoria para almacenarla.

Para reducir el espacio en memoria requerido para almacenar imágenes, Matlab almacena los datos en arreglos de 8 o 16 bits sin signo, clases uint8 y uint16, respectivamente. Estos arreglos requieren cuando mucho la octava o cuarta parte de la memoria requerida por un arreglo tipo double.

II.2 Conversiones entre tipos de imágenes

Para ciertas operaciones es necesario convertir una imagen de su tipo original a otro tipo de imagen que facilite su procesamiento. Por ejemplo, si se desea filtrar una imagen a color almacenada como imagen indexada, primero se debe convertir la imagen a formato RGB. Esto es para que Matlab filtre los valores de intensidad de la imagen de forma apropiada. Si se intenta filtrar una imagen indexada, el filtro simplemente se aplica a los índices que se encuentran en la matriz indexada y los resultados no serán los deseados. En la Tabla II se presentan los tipos de imágenes y en la Tabla III se presentan los comandos usados para la conversión entre tipos de imágenes. En el Apéndice A se presenta más información sobre los tipos de imágenes.

(38)

Tabla II. Tipos de imágenes y clases numéricas Tipo de imagen Clase de

almacenamiento

Interpretación

Binaria lógica Arreglo de 1s y 0s

Indexada1 double Arreglo de enteros en el rango [1, p]

uint8 o uint16 Arreglo de enteros en el rango [1, p-1] Intensidad1 double Arreglo de valores en punto flotante, su

rango típico es [0, 1]

uint8 o uint16 Arreglo de enteros, rango típico [0, 255] o [0, 65535], respectivamente

RGB (color verdadero) double Arreglo de valores en punto flotante de m x n x 3 en el rango [0, 1]

uint8 o uint16 Arreglo de enteros de m x n x 3 en el rango [0, 255] o [0, 65535],

respectivamente

1. El mapa de color asociado es un arreglo de p x 3 de valores en punto flotante en el rango [0, 1]. Para imágenes de intensidad, el mapa de color típicamente es una escala de gris.

Tabla III. Comandos de conversión de imágenes Comando Descripción

dither Crea una imagen binaria a partir de una imagen de intensidad en escala de gris por difuminación. Crea una imagen indexada a partir de una imagen RGB por difuminación.

gray2ind Crea una imagen indexada a partir de una imagen de intensidad en escala de gris

grayslice Crea una imagen indexada a partir de una imagen en intensidad en escala gris mediante un umbral

im2bw Crea una imagen binaria a partir de una imagen de intensidad, imagen indexada o RGB basado en un umbral de luminancia

ind2rgb Crea una imagen RGB a partir de una imagen indexada

mat2gray Crea una imagen de intensidad en escala de gris a partir de los datos almacenados en una matriz escalándolos

rgb2gray Crea una imagen de intensidad en escala de gris a partir de una imagen RGB

rgb2ind Crea una imagen indexada a partir de una imagen RGB

II.2.1 Despliegue de imágenes indexadas

Para desplegar una imagen indexada, se utiliza el comando imshow, pero se especifica tanto la matriz-imagen como el mapa de color de la forma: imshow(X,mapa), donde

imshow despliega para cada píxel de X el color almacenado en la correspondiente columna del mapa de color.

(39)

II.2.2 Despliegue de imágenes de intensidad.

Para desplegar las imágenes de intensidad (escala de gris) se utiliza imshow(I), donde

imshow despliega la imagen escalando los valores de intensidad para que funcionen como índices de un mapa de color en escala de gris. Si I es tipo double, un píxel con valor 1.0 se despliega como blanco y los demás valores como niveles de gris.

II.2.3 Despliegue de imágenes binarias

El despliegue de imágenes binarias se sigue la siguiente sintaxis imshow(I). En Matlab esta clase de imágenes es de tipo logical, debido a que este tipo de imágenes solo contiene 1s (blanco) y 0s (negro).

Para invertir los colores al desplegar la imagen, se utiliza la operación NOT en Matlab, es decir, se utiliza imshow(-BN). Para desplegar la imagen en otros dos colores se puede hacer uso de un mapa formado por los dos colores deseados. Por ejemplo, si se desea desplegar una imagen binaria solo en rojo y azul, imshow(I,[1 0 0; 0 0 1]).

II.2.4 Despliegue de imágenes RGB

Las imágenes RGB, también conocidas como imágenes de color verdadero (truecolor), representan directamente valores de color, mejor que usando un mapa de color. Para desplegar este tipo de imágenes, la sintaxis básica es imshow(RGB), donde RGB es un arreglo de m x n x 3. Para cada píxel (renglón, columna) de RGB, el comando imshow

despliega el color representado por la tripleta (renglón, columna,1:3).

II.2. 5 Tipos de imágenes en Matlab

El toolbox de Procesamiento de Imágenes maneja cuatro tipos de imágenes básicos: imágenes indexadas, imágenes con intensidad, imágenes binarias e imágenes RGB, los cuales se discutirán a continuación.

II.2.5.1 Imágenes indexadas

Una imagen indexada consiste de una matriz de datos X y un mapa de color, mapa. Los datos de la matriz pueden ser de clase uint8, uint16 o double. El mapa de color es una matriz (arreglo) de m x 3 de clase double que contiene valores en punto flotante en el rango de 0 a 1. Cada una de las columnas especifica las componentes de rojo, verde y azul de un solo color. Una imagen indexada utiliza el mapeo directo de los valores de un píxel a los valores del mapa de color. El color para cada píxel de la imagen se determina usando el correspondiente valor de X como un índice dentro de mapa. El valor de 1 apunta a la primer columna del mapa, el valor 2 apunta a la segunda columna y así sucesivamente.

Generalmente se almacena un mapa de color con una imagen indexada y automáticamente se carga al usar el comando imread. Sin embargo, el usuario no está limitado a usar el mapa de color por omisión. En la figura 40 se muestra la estructura de una imagen indexada. Los píxeles en la imagen son enteros, los cuales apuntan (índices) a los valores de color almacenados en el mapa de color.

(40)

Figura 40. Imagen indexada

La relación entre los valores de la imagen y el mapa de color depende de la clase de la matriz que almacena la imagen. Si la matriz es de clase double, el valor 1 apunta a la primera columna del mapa de color, el valor 2 apunta a la segunda columna y así sucesivamente. Si la matriz que almacena la imagen es de clase uint8 o uint16, existe un

offset, el valor 0 apunta a la primer columna del mapa de color, el valor 1 apunta a la

segunda columna, y así sucesivamente.

El toolbox de Image Processing permite manejar imágenes de clase uint16, pero antes de procesar estas imágenes, deben convertirse a clase double o uint8. Para convertir a double, utilizar el comando im2double, para reducir la imagen a 256 colores o menos (clase uint8), utilizar el comando imapprox.

II.2.5.2 Imágenes de intensidad

Una imagen de intensidad es una matriz de datos, llamada I, cuyos valores representan intensidades dentro de un rango. Matlab almacena las imágenes de intensidad como una sola matriz, donde cada elemento corresponde a la intensidad de un píxel de la imagen. La matriz puede ser de clase double, uint8 o uint16. Debido a que las imágenes de intensidad rara vez se guardan con un mapa de color, pero Matlab usa un mapa de color para desplegarla. Los elementos en una matriz de intensidad representan varios niveles de intensidad o niveles de gris, donde generalmente el 0 representa el negro y la intensidad ya sea 1, 255 o 65535 representa el blanco. En la figura 41 se muestra una imagen de intensidad.

(41)

Figura 41 Imagen de intensidad.

II.2.5.3 Imágenes binarias

En una imagen binaria, cada píxel asume un valor discreto; esencialmente dichos valores corresponden a 1 o 0, encendido o apagado. Una imagen binaria se almacena en un arreglo de píxeles 1s o 0s. En la figura 42 se muestra una imagen binaria.

Figura 42. Imagen binaria

II.2.5.4 Imágenes RBG

A las imágenes RGB generalmente se les conoce como imágenes de color verdadero. En Matlab estas imágenes se almacenan mediante 3 arreglos de dimensión m x n que definen

(42)

los componentes de colores rojo, verde y azul para cada píxel. En estas imágenes, el color se forma mediante la combinación de las intensidades almacenadas en cada plano de color para cada píxel.

En la Tabla IV se presentan algunos comandos de Matlab que pueden utilizarse para determinar el tipo de imagen con que se está trabajando

Tabla IV. Comandos informativos Comando Descripción

isbw Regresa un valor verdadero (1) si la imagen es binaria isgray Regresa un valor verdadero (1) si la imagen es de intensidad isind Regresa un valor verdadero (1) si la imagen es indexada isrgb Regresa un valor verdadero (1) si la imagen es RGB imfinfo Regresa información sobre la imagen

Los comandos listados en la Tabla III se pueden utilizar de la siguiente forma: bandera = isbw(A)

info = imfinfo(archivo,formato) info = imfinfo(archivo)

II.2.6 Selección de una sección de imágenes en Matlab

Para tomar una sección de cualquier imagen se utiliza el comando imcrop. A continuación se presenta la sintaxis de este comando:

I2 =imcrop(I) X2 =imcrop(X,map) RGB2 =imcrop(RGB)

Si se omite el argumento de entrada, el comando opera sobre la imagen actual. Para seleccionar la región a cortar, simplemente presione el botón derecho del ratón y forme un rectángulo sobre la región. Si presiona la tecla Shift, se captura una sección cuadrada. Cuando se suelta el botón del ratón, el comando regresa la sección seleccionada al argumento de salida especificado. Si no se especifica ningún argumento, el comando simplemente despliega la imagen seleccionada en una nueva figura.

También es posible seleccionar la sección de interés de forma no interactiva; en este caso se debe especificar el rectángulo de la forma:

I2 =imcrop(I,[xmin ymin ancho alto]) X2 =imcrop(X,map,[xmin ymin ancho alto]) RGB2 =imcrop(RGB,[xmin ymin ancho alto])

Figure

Actualización...

Referencias

Actualización...

Related subjects :