You are on page 1of 51

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

Noviembre de 2002
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.

1
M. en C. José Jaime Esqueda Elizondo
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
II.2.5.3 Imágenes binarias ..................................................................................... 40

2
M. en C. José Jaime Esqueda Elizondo
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
Figura 17. Imagen original ................................................................................................ 15

3
M. en C. José Jaime Esqueda Elizondo
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
Tabla IV. Comandos informativos .................................................................................... 41

4
M. en C. José Jaime Esqueda Elizondo
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).
x

0 1 1 2
7 6 6 5
y
6 0 4 0
5 5 1 2

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

5
M. en C. José Jaime Esqueda Elizondo
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.
Azul Magenta

Cian Blanco

Gris

Negro Rojo

Verde Amarillo

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

6
M. en C. José Jaime Esqueda Elizondo
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-1) (x,y) (x,y+1)

(x+1,y)

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-1,y+1)

(x,y)

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

Figura 4. Vecindad ND(p).

7
M. en C. José Jaime Esqueda Elizondo
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:
D( p, q ) ≥ 0, (D( p, q ) = 0, si p = q )
D( p, q ) = D(q, p )
D( p, z ) ≤ D( p, q ) + D(q, z )

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 ) = (x − s ) + ( y − t ) . En la figura 5 se


2

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:


D = x−s + y −t

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
Figura 6. Distancia Manhattan para una imagen de 5 por 5.

8
M. en C. José Jaime Esqueda Elizondo
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:
D( p, q ) = Max(x − s, y − t )
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:
S (x, y ) = F (I (x, y ))
donde I(x,y) es la imagen original, S(x,y) la imagen resultante y F la transformación.

9
M. en C. José Jaime Esqueda Elizondo
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 .

10
M. en C. José Jaime Esqueda Elizondo
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 .

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

11
M. en C. José Jaime Esqueda Elizondo
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 ) = a ⋅ A( 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

12
M. en C. José Jaime Esqueda Elizondo
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, y ) ÷ B( 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
13
M. en C. José Jaime Esqueda Elizondo
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:

f (x, y ) = ∑∑ g (i, j )h(x − i, y − j )

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.

14
M. en C. José Jaime Esqueda Elizondo
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:

x f = xi + x o
y f = yi + yo
Que en coordenadas homogéneas es:

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

15
M. en C. José Jaime Esqueda Elizondo
Rotación respecto al origen
 x f  cosθ − senθ 0  xi 
 y  =  senθ cosθ 0  y i 
 f 
 1   0 0 1  1 

Rotación respecto a un punto cualquiera

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

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:
∞ ∞
g (x, y ) = h(x, y ) ∗ f (x, y ) = ∑ ∑ f (i, j )h(x − i, y − j )
i = −∞ j = −∞

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


convierte en:
2 2
g (x, y ) = h(x, y ) ∗ f (x, y ) = ∑∑ f (i, j )h(x − i, y − j )
i = 0 j =0

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


2 2
g (2,2) = ∑∑ f (i, j )h(2 − i,2 − j ) =
i =0 j =0

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

16
M. en C. José Jaime Esqueda Elizondo
! + f (1,0 )h(1,2) + f (1,1)h(1,1) + f (1,2 )h(1,0 ) + !
! + f (2,0 )h(0,2 ) + f (2,1)h(0,1) + f (2,2 )h(0,0 )

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


17 24 1 8 15

23 5 7 14 16

A= 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

h= 3 5 7

4 9 2

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:
2 9 4

7 5 3

6 1 8

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.

17
M. en C. José Jaime Esqueda Elizondo
2 9 4
17 24 1 8 15

7 5 3
23 5 7 14 16

6 1 8
4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

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.

2 9 4
0 0 0

7 5 3
0 17 24 1 8 15

6 1 8
0 23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

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:
∞ ∞
g (x, y ) = h(x, y ) " f (x, y ) = ∑ ∑ f (i, j )h(x + i, y + j )

i = −∞ j = ∞

18
M. en C. José Jaime Esqueda Elizondo
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
17 24 1 8 15

3 5 7
23 5 7 14 16

4 9 2
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

19
M. en C. José Jaime Esqueda Elizondo
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:

f (t ) = a 0 + ∑ a k cos(kω 0 t ) + bk sen(kω 0 t )
k =1
Donde:

T0 T0 T0
1 2 2
a0 =
T0 ∫
0
f (t ) ft , a k =
T0 ∫
0
f (t ) cos(kω 0 t )dt , bk =
T0 ∫ f (t )sen(kω t )dt , ω
0
0 0 =
T0

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


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

En la figura 26 se presenta la señal cuadrada


1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 1 2 3 4 5 6 0 1 2 3 4 5 6
(a) (b)

1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 1 2 3 4 5 6 0 1 2 3 4 5 6
(c) (d)

1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 1 2 3 4 5 6 0 1 2 3 4 5 6
(e) (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:

F [x(t )] = X ( f ) = ∫ x(t )e
− j 2πft
dt (ec. de análisis)
−∞
∞ ∞
x(t ) = F −1
[X ( f )] = ∫ X ( f )e j 2πft
df =
1
∫ X (ω )e
j ωt
dω (ec. de síntesis)
−∞
2π −∞
donde X (ω ) = 2πX ( f ) .

20
M. en C. José Jaime Esqueda Elizondo
Para el caso unidimensional discreto, el par transformado de Fourier está dado por:
N −1 j 2π

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

F −1 [X (k )] = x(n) =
1
∑ X ( k )e
kn
N
; n = 0, 1, ..., N-1 (ec. de síntesis)
N k =0

Para el caso bidimensional discreto, se tiene que:


M −1 N −1 j 2π j 2π

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

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

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.

21
M. en C. José Jaime Esqueda Elizondo
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.
N
2
N

I II

N
2

III IV

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’.

22
M. en C. José Jaime Esqueda Elizondo
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.

I II

I II I II
Ceros Ceros
III IV III IV

III IV
Imagen
Inserción de N ceros a
(Matriz B)
cada renglón
Inserción de N ceros a
(a) (b) cada columna
(c)
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:
M −1 N −1
π (2m + 1) p π (2n + 1)q 0 ≤ p ≤ M −1
B pq = α pα q ∑∑ Amn cos cos ,
m =0 n =0 2M 2N 0 ≤ q ≤ N −1
 1  1
 , p=0  , q=0
M  N
αp =  αp = 
 2  2 1 ≤ q ≤ N −1
1 ≤ p ≤ M −1
 M  N

Los valores Bpq son los coeficientes de la transformada discreta coseno de A. La TDC es
invertible, y su inversa está dada por:

M −1 N −1
π (2m + 1) p π (2n + 1)q 0 ≤ m ≤ M −1
Amn = ∑∑α pα q B pq cos cos ,
m =0 n = 0 2M 2N 0 ≤ n ≤ N −1

23
M. en C. José Jaime Esqueda Elizondo
 1  1
 , p=0  , q=0
αp =  M αp =  N
 2 1 ≤ p ≤ M −1  2 1 ≤ q ≤ N −1
 M  N

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:
π (2m + 1) p π (2n + 1)q 0 ≤ m ≤ M −1
α pα q cos cos ,
2M 2N 0 ≤ n ≤ N −1

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.

24
M. en C. José Jaime Esqueda Elizondo
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:

25
M. en C. José Jaime Esqueda Elizondo
c−a
y = T (c ) = A
b−a
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

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)
 αx 0≤ x≤a

y = T ( x) =  β ( x − a) + y a a ≤ x ≤ b
 γ ( x − b) + y b≤x≤L
 b

donde:
y, x son los niveles de gris de las imágenes resultante y original
α, β, γ son ganancias de cada tramo
a, b y L son los intervalos de ganancia

26
M. en C. José Jaime Esqueda Elizondo
Figura 32. Modificación de contraste

vb
Imagen original

va

a b L
Imagen original
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 = m a
donde:

27
M. en C. José Jaime Esqueda Elizondo
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
m2
Función cuadrada p=
255
m3
Función cúbica p=
255 2
Función raíz cuadrada p = 255m
Función raíz cúbica p = 3 255 2 m
ln(1 + m)
Función logarítmica p = 255
ln(1 + 255)

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
H (i ) = ∑ h(k )
k =0
Si el histograma fuera totalmente plano, el histograma para cada nivel de gris sería:
NM
G (i ' ) = (i + 1)
256
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;
NM 256
(i '+1) = H (i ) ∴ i ' = H (i ) − 1
256 NM

28
M. en C. José Jaime Esqueda Elizondo
Debido a que los niveles de gris son únicamente valores enteros, se realiza un cambio en
los niveles de gris de acuerdo a:
 256 
inuevo = Parte entera  H (i anterior ) − 1
 NM 

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:

29
M. en C. José Jaime Esqueda Elizondo
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

2
b b b

1 b 1

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]

Mediana

30
M. en C. José Jaime Esqueda Elizondo
0 0 0

a b
0 22 10 10 255 15
vecindad de a = [0,0,0,0,22,10,0,0,0]

0 0 0 7 14 16 Se ordena de mayor a menor


vecindad de a = [0,0,0,0,0,0,0,10,22]
4 6 13 20 22
Mediana
10 12 19 21 3

11 18 25 2 9

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:

31
M. en C. José Jaime Esqueda Elizondo
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:


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

32
M. en C. José Jaime Esqueda Elizondo
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:
∇f = G xx2 + G y2
 Gy 
∠∇f = arctan 
 Gx 

siendo la dirección del gradiente perpendicular al borde. Para reducir el costo


computacional, generalmente se aplica:
∇f = G x + G y

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


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

Gx =
∆f
∆x
-1 1
∗ f(x,y)


∆f
Gy = -1 f(x,y)
∆y
1

33
M. en C. José Jaime Esqueda Elizondo
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 1 -1 -1 -1

1 0 0 1 -1 0 1 0 0 0

Operador de Roberts -1 0 1 1 1 1

Operador de Prewitt

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

-2 0 2 0 0 0 − 2 0 2 0 0 0

-1 0 1 1 2 1 -1 0 1 1 2 1

Operador de Sobel 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 f ∂2 f
∇ f (x, y ) = 2 + 2
2

∂x ∂y

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 0 -1 0

-1 8 -1 -1 0 -1

-1 -1 -1 0 -1 0

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

34
M. en C. José Jaime Esqueda Elizondo
En la figura 39 se presentan algunos ejemplos de detección de contornos.

Figura 39. Ejemplos de detección de contornos.

La detección de contornos se encuentra implementada en Matlab en el comando edge.

35
M. en C. José Jaime Esqueda Elizondo
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.

36
M. en C. José Jaime Esqueda Elizondo
Tabla II. Tipos de imágenes y clases numéricas
Tipo de imagen Clase de Interpretación
almacenamiento
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.

37
M. en C. José Jaime Esqueda Elizondo
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.

38
M. en C. José Jaime Esqueda Elizondo
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.

39
M. en C. José Jaime Esqueda Elizondo
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

40
M. en C. José Jaime Esqueda Elizondo
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])

41
M. en C. José Jaime Esqueda Elizondo
III. Ejercicios
A continuación se presenta una serie de ejercicios

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


Crear una matriz de 32x32, desplegarla como imagen usando el comando imshow,
cambiar los mapas de color con el comando colormap y observar los cambios.
>> y=rand(32,32);
>> imshow(y)
>> colormap(jet)
>> colormap(hot)

Ejercicio 2. Cargar y desplegar una imagen.


Primero se limpia el espacio de trabajo y se cierra cualquier ventana que este abierta
>> clear all, close all

Para cargar una imagen, se utiliza el comando imread, en este caso se cargará una
imagen en formato TIFF (consulte el apéndice A para saber con qué formatos puede
operar el toolbox de Image Processing) llamada pout.tif, la cual viene con el toolbox de
Image Processing y se guarda la imagen en un arreglo llamado I.
>>I=imread(‘pout.tif’)

La imagen se despliega mediante el comando imshow.


>>imshow(I)

Repetir el ejercicio usando la imagen a color flowers.tif.

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


Teclear el comando whos para verificar como se almacenó I en la memoria.
>> whos
y Matlab despliega
Name Size Bytes Class

I 291x240 69840 uint8 array

Grand total is 69840 elements using 69840 bytes

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


Para observar la distribución de las intensidades de gris en la imagen se utiliza el
comando imhist.. Primero cargar la imagen pout.tif y posteriormente desplegar el
histograma de la imagen, tal como se muestra en la figura 43.
>>I=imread(‘pout.tiff’);
>>imhist(I)

Repetir con la imagen a color flowers.tif

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


Para verificar los métodos de amplificación de imágenes se utilizan los comandos
imresize, fft2 e ifft2. Primero cárguese en memoria la imagen lenaojo.tiff, posteriormente

42
M. en C. José Jaime Esqueda Elizondo
utilice el comando imresize y observe los resultados con las opciones nearest (vecino, la
cual es la opción por omisión), bilinear (bilineal), bicubic (bicúbica).
>>I=imread('lenaojo.tiff');
>>imshow(I);
>>J=imresize(I,2);
>>imshow(J)

Posteriormente implemente el método de amplificación de imágenes usando la


transformada de Fourier y compare los resultados obtenidos con lo obtenido con el
comando imresize. El resultado se muestra en la figura 16.

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

Ejercicio 6 Rotación de una imagen


Para rotar una imagen se utiliza el comando imrotate, el cual acepta principalmente dos
argumentos: la imagen a rotar y el ángulo, este último puede especificarse en grados. Si
se especifica un valor positivo, la imagen gira en sentido contrario a las manecillas del
reloj; si se especifica un valor negativo, se rota la imagen en sentido de las manecillas del
reloj. También se puede agregar como argumento el método de interpolación a utilizar y
el tamaño de la imagen procesada. Rote 30º la imagen lenaojo.tiff utilizando los tres
métodos (vecino, bilineal y bicúbico), los resultados se muestran en la figura 17.
>>I=imread('lenaojo.tiff');
>>imshow(I);
>>J=imrotate(I,30,'nearest');
>>imshow(J)

43
M. en C. José Jaime Esqueda Elizondo
Ejercicio 7. Binarización de imágenes
La binarización de una imagen se obtiene con el comando im2bw. Cargue la imagen
cameraman.tif y binarice la imagen usando diferentes valores de umbral.
>>I=imread('cameraman.tif');
>>imshow(I);
>>J=im2bw(I);
>>figure
>>imshow(J)

El resultado de la binarización se observa en la figura 27.

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


Aplique las operaciones aritméticas suma, resta y multiplicación a las imágenes rice.tif y
cameraman.tif. Realice las operaciones expuestas entre imágenes. Ahora pruebe con la
imagen flowers.tif las operaciones ahora usando un escalar. Compare sus resultados con
los mostrados en las figuras 9 a 15. Repita las operaciones con las imágenes a color
lena256a.tif y lena256b.tif.

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


Aplique las operaciones lógicas a las imágenes rice.tif y cameraman.tif. Realice las
operaciones expuestas entre imágenes. Compare los resultados obtenidos con los
mostrados en la figura 16.

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


Añada diferentes tipos de ruido a las imágenes cameraman.tif y lena256a.tif.
Posteriormente pruebe los diferentes tipos del filtros existentes.

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


Utilice el comando histeq para ecualizar la imagen de lena.tiff, cameraman.tif y pout.tif.

Ejercicio 12. Detección de contornos


Utilice el comando edge para hallar contornos en las imágenes lena.tiff, eight.tif y rice.tif.

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


Utilice la correlación para encontrar la letra “a” en la imagen text.tif, tal como se muestra
en el siguiente programa

bw =imread('text.tif');
a=bw(59:71,81:91);%Extrae la letra a buscar.
imshow(bw);
figure,imshow(a);
C =real(ifft2(fft2(bw).*fft2(rot90(a,2),256,256)));
max(C(:))%Encuentra el valor maximo de C
thresh =45;%Utiliza un umbral menor que el valor maximo
figure,imshow(C >thresh)%Despliega los píxeles con valor mayor al
%umbral

44
M. en C. José Jaime Esqueda Elizondo
Ejercicio 14. Compresión de imágenes usando la transformada discreta coseno.
Aplique la transformada discreta coseno a las imágenes autum.tif, lena.tiff y pout.tif
siguiendo el ejemplo

umbral=10;
RGB = imread('autumn.tif');
I = rgb2gray(RGB);
subplot(221),imshow(I), title('Original')
J = dct2(I);
figure(1)
subplot(222),imshow(log(abs(J)),[]), title('Transformada')
J(abs(J)<umbral) = 0;
K = idct2(J);
subplot(223),imshow(log(abs(J)),[]); title('Cuantizada')
subplot(224), imshow(K,[0 255]), title('Reconstruida')

45
M. en C. José Jaime Esqueda Elizondo
Apéndice A. Formatos de Imágenes

¿Qué son los formatos gráficos?


Básicamente, los formatos gráficos son archivos en los cuales se guarda información que
conforma una imagen. Cada formato es independiente. Las posibilidades que ofrece cada
formato con respecto a la gama de colores, a la compatibilidad, a la rapidez de carga, etc.,
merece ser explicada para determinar cuál de ellos es el más adecuado para la tarea que
estamos realizando. Con respecto a la estructura, la mayoría posee una cabecera que
indica al programa que lo solicite, las características de la imagen que almacenan; por
ejemplo su color, tipo, resolución, etc. Cada formato tiene una organización propia de su
estructura. Se pueden dividir en dos grandes grupos: los formatos vectoriales y los
formatos bitmap (mapa de bits).

Formatos vectoriales
Son más simples que los bitmap. Consisten en una serie de dibujos lineales basados en
una lista de objetos gráficos, por ejemplo: líneas, curvas, triángulos, círculos, rectángulos,
etc. Estos objetos, y muchos más, ubicados estratégicamente en la pantalla, forman
dibujos lineales complejos. En este tipo de formatos las áreas vacías entre las líneas
pueden ser llenadas con colores o con "rellenos", pequeños diseños que se repiten una y
otra vez sin dejar espacios vacíos hasta llenar el área en cuestión. El tamaño de las
imágenes almacenadas en este tipo de formatos puede ser modificado sin notar pérdida
alguna de calidad. Gracias a esta característica son muy útiles a la hora de imprimir
imágenes.

Formatos bitmap
Contienen imágenes basadas en pixeles (por ejemplo una imagen cuya resolución es de
640 x 480 pixeles, contiene 640 pixeles horizontales y 480 pixeles verticales). Las
imágenes generadas por scanner son de tipo bitmap. Cuanto mayor sea la gama de
colores, más realismo se consigue con este tipo de formato. Las imágenes bitmap poseen
un tamaño natural en el cual se imprimirán perfectamente, pero, a diferencia de las
vectoriales, no ofrecen grandes posibilidades con respecto a la variación del tamaño. Al
aumentar el tamaño bruscamente, es fácil notar una gran disminución de la calidad. Otro
punto en contra de los formatos bitmap es la cantidad de memoria y espacio que ocupan.
Debido a esto, la mayoría de ellos utilizan diversos métodos de compresión de la
información que constituye la imágen.
Nota: El bitmap o mapa de bits es una Imagen formada por miles o millones de puntos de
colores, una junto a otra y una debajo de otra, pueden tener una profundidad de colores
de: 16, 256, color de Alta densidad (65,536 colores) o Color Verdadero (16,777,216
colores), y pueden o no incluir canal de transparencia pueden ser con o sin compresión.
Ideales para digitalizar fotografías o diseño de carteles con efectos de sombras esfumados
complejos, simulación de realce y otros.

46
M. en C. José Jaime Esqueda Elizondo
Formatos de gráficos mas importantes

BMP (Bitmapped File Format)


Junto con el surgimiento de Windows 3.x se desarrolla un nuevo formato gráfico bitmap
que constituye el estándar adoptado por este entorno operativo, es decir al BMP, en el
cual están almacenadas las imágenes que constituyen los llamados wallpapers. Este
formato guarda las imágenes descomprimidas, lo que significa mayor velocidad de carga
y mayor espacio requerido. Con respecto a la resolución, cualquiera es aceptable. Las
imágenes pueden ser de 1, 4, 8 y 24 bits. La estructura de los BMPs es sencilla: se trata
de un header que contiene varias características de la imagen. Este encabezado está
compuesto por información acerca del tamaño, el número de colores, y una paleta de
colores (si es necesario) de la imagen. A continuación del encabezado se encuentra la
información que constituye la imagen en sí. Tiene una curiosa forma de almacenarla:
comienza desde la última línea inferior. Es por eso que los programas encargados de
exhibir los BMPs en pantalla trazan la imagen de abajo hacia arriba. Es un formato muy
utilizado en la actualidad y la mayoría de las aplicaciones lo utilizan.

GIF (Graphic Interchange Format)


Es el formato gráfico bitmap por excelencia. Fue creado por Compuserve en junio de
1987 y con el paso del tiempo se ha convertido en el formato más difundido en el mundo.
A la primera versión se la llamó GIF87a, y a la segunda, GIF89a. Esta última versión
presenta nuevas características para facilitar el manejo de imágenes en este formato. Los
GIFs utilizan una paleta de entre 2 y 256 colores. Poseen una rutina de compresión muy
eficaz que, aunque demora un poco la carga, reduce los archivos a una tamaño mucho
menor que otros formatos. Gracias a esa rutina de compresión que empequeñece los
archivos, el GIF es el formato óptimo para ser bajado de BBS o Internet. La resolución
máxima alcanzada es la de 1024 x 768 pixels en 256 colores, pero no hay razón por la
cual no pueda crearse una imagen de mayor tamaño. Incluso hay GIFs que almacenan
más de una imagen en un solo archivo, ideal para hacer slideshows. Su estructura está
basada en bloques. Sobre todo desde la incorporación del GIF 89a, se ha dado más
importancia a los bloques. Estos pueden contener uno de estos elementos: una imagen,
instrucciones acerca de cómo exhibirla, texto, información característica de alguna
aplicación, un marcador que determina el final del archivo, etc. Muchos GIFs solamente
contienen un bloque que determina su imagen. Todos los GIFs poseen dos tipos de
paleta: la paleta global y la paleta local. La global determina los colores de todas las
imágenes almacenadas en el GIF, y la local determina específicamente la paleta de cada
imagen del GIF (en el caso de haber una sola imagen, la única paleta disponible será la
global). Existe un bloque llamado comment block, o "bloque de comentarios", donde
puede incluirse un breve comentario personal acerca de la imagen en cuestión. Incluso
existe una opción para aplicar a los GIF llamada interlacing. Consiste en lo siguiente:
generalmente, cuando un programa exhibe un GIF en pantalla, comienza desde la primera
línea superior hasta llegar a la última línea inferior y de una pasada completa la imagen.
Pero si el GIF es interlaced, la imagen se visualizará de otra manera: harán falta cuatro
pasadas en lugar de una. En cada pasada se visualizan líneas que conforman la imagen,
pero esta vez no aparecen seguidas una de la otra, sino distribuidas en la parte superior,
central e inferior de la imagen. Este proceso se repite hasta finalizar las cuatro pasadas y

47
M. en C. José Jaime Esqueda Elizondo
completar esa imagen. Gracias al interlacing visualizamos distintas partes de la imagen al
bajarla de Internet o un BBS, y es posible darse cuenta si realmente nos sirve antes de que
la imagen esté completa. Si esa imagen no es lo que esperábamos, es posible cancelar la
operación. Gracias a la popularidad de este formato, se han desarrollado infinidad de
programas shareware para manipular GIFs. Ya sea para exhibirlos, modificarlos,
convertirlos o incluso comprimirlos. Si alguno de estos programas modifica el archivo
.GIF, es muy probable que aparezca alguna información sobre esta aplicación en el
application block.

IMG (Aplicación GEM)


Este formato bitmap es el utilizado por la antigua aplicación GEM. Es capaz de
almacenar imágenes de entre 2 y 256 colores. No hay restricciones con respecto al
tamaño de las imágenes y utiliza una rutina de compresión medianamente eficaz. El único
inconveniente es que hay muy pocas aplicaciones que lo utilizan, y se hace un poco
pesado tener que convertir este formato a otro más conocido cuando haya que
modificarlo y luego volver a convertirlo a IMG.

JPG (JPEG)
El formato JPEG ofrece los imprescindibles 16 millones de colores (truecolor), unido a
una compresión realmente asombrosa (valores superiores a 20:1 son habituales). Sólo
tiene una limitación: para obtener esos valores de compresión modifica sutilmente la
imágen, descartándose su uso en aplicaciones en las que se desea mantener una calidad
bit a bit. El diseño de este formato está pensado para almacenar imágenes del "mundo
real", también llamadas imágenes de tono continuo, como digitalizaciones o
renderizaciones de alta calidad. Si se intenta almacenar imágenes de tipo vectorial o
dibujos sencillos no realísticos, se observará como la compresión disminuye
enormemente, y las modificaciones hechas sobre la imagen original por el algoritmo de
compresión se observan a simple vista. La abreviación JPEG viene de las iniciales de
Joint Photographic Experts Group. Se trata del grupo de expertos que definieron las
bases de este formato. El formato JPEG sólo puede almacenar imágenes de 24 bits (true
color), utilizando tres canales para su almacenamiento o de escala de grises, usando sólo
un canal. La compresión JPEG consiste en una serie de complejas operaciones
matemáticas, tales como: conversión del formato del color, transformación separada de
coseno (DCT), cuantizaciones y codificación entrópica. JPEG, junto con GIF, son los
formatos de imágenes usados en WWW.

TIFF (Tagged Image File Format - TIFF) O TIF


Más que una imagen en una archivo, el formato TIF (formato de archivo de imagen
etiquetada) contiene una serie de bloques que conforman la imagen. Estos bloques
pueden contener cierta información sobre la imagen en sí, su tamaño, su manejo del
color, información a las aplicaciones que utilicen ese archivo, texto, y hasta thumbnails.
Un thumbnail o miniatura es una pequeña representación de una imagen mucho más
extensa, a la cual el programa accede rápidamente y no pierde tiempo descomprimiendo
toda la imagen. Sirve para ver el contenido del archivo de una manera rápida y segura.
Este formato es totalmente compatible con PC y Macintosh. Soporta gran cantidad de
colores y es uno de los formatos preferidos por las aplicaciones de hoy en día. Fue

48
M. en C. José Jaime Esqueda Elizondo
introducido por Aldus Corporation y es el formato más usado cuando se trabaja con
scanners debido a su útil manejo del color.

RAW (Raw Binary Image Format )


En el formato RAW (formato imagen crudo binario) se guardan la datos tal cual esta en la
imagen sin ningún tipo de análisis de la misma, además los datos son brutos, o sea, están
sin procesamiento y generalmente sin formatos, no teniendo informaciones de "header".
Ellos son de fácil lectura y escritura y son almacenados en 8 bits por pixel, variando de 0
a 255 niveles de gris.
En cuanto al cuerpo de la imagen, este formato es el más sencillo de todos porque no se
utiliza ningún método de compresión para la imagen como se menciono antes, sino que
simplemente se almacena en el disco de manera lineal. Es decir, se almacenan de forma
consecutiva los datos de la imagen y de la paleta en el archivo, y opcionalmente la
cabecera (header), que normalmente se coloca al principio. Con este método se puede
saber el tamaño del archivo crudo resultante, sabiendo el ancho y el alto de la imagen, el
número de colores y la longitud de la cabecera y la paleta. Los ficheros RAW (a veces
también llamados SCR, CLP o similar) se basan pues simplemente en el almacenamiento
de los mapas de bits en archivos binarios.

49
M. en C. José Jaime Esqueda Elizondo
Bibliografía y Referencias
[1] Arturo de la Escalera, “Visión por computador”
[2] Juan García López, “Procesamiento Digital de Señales”
[3] Mathworks, “Image Processing Toolbox, User`s Guide”, Version 3
[4] J. R. Parker, “Practical Computer Vision using C”, John Wiley & Sons, Inc., New
York
[5] A. Low, “Introductory Computer Vision and Image Processing”, Prentice-Hall,
Englewood Cliffs, New Jersey, 1989
[6] Brend Jähne, “Digital Image Processing, Concepts, Algorithms and Scientific
Applications”, 4th Edition, Springer
[7] R. C. González, Woods, R. E., “Digital Image Processing”, Addison Wesley, 1993

50
M. en C. José Jaime Esqueda Elizondo

You might also like