You are on page 1of 76

Procesamiento Digital de Imgenes con Matlab

UNIVERSIDAD RICARDO PALMA


FACULTAD DE INGENIERA

PROCESAMIENTO DIGITAL DE
IMGENES CON MATLAB

Marzo 2007
LIMA - PER

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

II

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

PROCESAMIENTO DIGITAL
DE IMGENES CON MATLAB

Por
Mg. Ing. Pedro Freddy Huaman Navarrete
phuamani@urp.edu.pe
Facultad de Ingeniera
Universidad Ricardo Palma

Marzo 2007

Mg. Ing. Pedro Freddy Huaman Navarrete

III

Procesamiento Digital de Imgenes con Matlab

IV

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

Presentacin

Los avances de la tecnologa digital en los ltimos aos,


ha trado consigo muchas aplicaciones al procesamiento digital
de imgenes. As tenemos: sensoreamiento remoto va satlite,
tele conferencia, almacenamiento de imgenes mdicas usadas
en sistemas de monitoreo de pacientes, interpretacin de
imgenes correspondientes a mapas climticos, identificacin
biomtrica, entre otras. Es as que en todas estas y dems
aplicaciones, surge la necesidad de implementar algoritmos
computacionales, desde el punto de vista espacial o
frecuencial, con la finalidad de identificar, comprimir, mejorar y
segmentar una o varias imgenes digitales.
Por tal motivo, este manual servir como un material
prctico y didctico, que ayudar a la investigacin y desarrollo
de proyectos y temas de tesis, que involucren el procesamiento
digital de imgenes.
Dicho manual ha sido preparado para trabajar de
manera conjunta con el Software de Computacin Cientfica
Matlab y su Toolbox Image Processing, debido a que este
software es verstil y de fcil utilizacin cuando se trata de
simulaciones computacionales. Asimismo, cabe resaltar, que
este manual cuenta con algoritmos computacionales que han
sido implementados exclusivamente por el autor, en un cdigo
simple aceptado por el Matlab, y que a su vez puede ser
emigrado a otro lenguaje de programacin requerido.

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

VI

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

CONTENIDO

Pg.

PRESENTACIN

CONTENIDO

VII

1. IMGENES DIGITALES

01

1.1 Manejo de Arreglos

01

1.2 Tipos de imgenes

04

1.3 Imagen Binaria

08

1.4 Imagen de Tonos de Gris

10

1.5 Imagen a Color

10

2. LECTURA Y ESCRITURA

15

2.1 Informacin de Archivos de Imgenes

15

2.2 Lectura de Archivos de Imgenes

16

Mg. Ing. Pedro Freddy Huaman Navarrete

VII

Procesamiento Digital de Imgenes con Matlab


2.3 Escritura en Archivos de Imgenes

18

2.4 Lectura y Escritura de Imgenes Mdicas

19

3. PROCESAMIENTO BSICO ESPACIAL

22

3.1 Reduccin del Nmero de BPP

22

3.2 Zoom de una Imagen

23

3.3 Desplazamiento y Giro

25

3.4 Histograma de una Imagen

28

3.5 Binarizacin y Negativo de una Imagen

29

4. REALCE DE IMGENES

31

4.1 Expansin del Histograma

31

4.2 Desplazamiento del Histograma

33

5. SUAVIZADO DE IMGENES

35

5.1 Promedio del Entorno de Vecindad

35

5.2 Mediana del Entorno de Vecindad

35

6. DETECCIN DE BORDES

38

6.1 Operadores de Sobel

38

6.2 Operadores de Prewitt

40

6.3 Operador de Roberts

41

VIII

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


7. COMPRESIN DE IMGENES

44

7.1 Transformada Discreta de Fourier

44

7.2 Transformada Discreta del Coseno

49

7.3 Transformada Discreta Wavelet

51

8. FILTROS DIGITALES EN 2D

55

8.1 Filtro Pasa Bajo 2D

56

8.2 Filtro Pasa Alto 2D

57

8.3 Filtro Pasa Banda 2D

58

8.4 Filtro Elimina Banda 2D

58

8.5 Filtrado de una Imagen

59

9. INTRODUCCIN A LA COMPRESIN DE VIDEO

61

9.1 Definicin

61

9.2 Codificacin Espacial (CE)

62

9.3 Codificacin Temporal (CT)

63

BIBLIOGRAFA

Mg. Ing. Pedro Freddy Huaman Navarrete

66

IX

Procesamiento Digital de Imgenes con Matlab

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

1.

Imgenes Digitales
Una imagen digital puede ser representada por un arreglo
de elementos, y donde cada elemento corresponde a un
pxel de la imagen codificado con un nmero entero de
bits.

1.1

Manejo de Arreglos
En Matlab, no es necesario declarar el tamao de los
arreglos o matrices a utilizar. Por lo tanto, se procede
directamente de la siguiente manera:
>> M1 = [ 2 50 116 ; 255 100 21 ]
M1 =
2 50 116
255 100 21
Se observa que el ingreso de cada fila debe estar
separada por un punto y coma ; , asimismo la
obtencin de la traspuesta de la matriz se obtiene con
ayuda del apstrofe .
>> M2 = [ 200 115 ; 6 55 ; 10 100 ] ;
Luego, es posible realizar operaciones aritmticas entre
matrices, siempre y cuando estas tengan las mismas
dimensiones.
>> M3 = M1 + M2;
>> M4 = M1 - M2;
>> M5 = M1 .* M2;
>> M6 = M1 ./ M2;
>> M7 = M1 * M2

%suma de elemento a elemento


%resta de elemento a elemento
%producto de elemento a
%elemento
%divisin de elemento a
%elemento
%producto de fila por columna

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


>> size( M1 )
ans =
2

>> size( M2' )


ans =
3

Por lo tanto, el tamao de M7 despus de haberse


realizado el producto, ser
>> size(M7)
ans =
2

Para generar arreglos de 2 o ms dimensiones


conformado por nmeros aleatorios, se utiliza la funcin
RANDN:
>> M8 = randn( 12 , 8 , 2 );
>> M9 = randn( 12 , 8 , 3 );

%arreglo 2 dimensiones
%arreglo 3 dimensiones

Y, si se desea que los arreglos se encuentren


conformados por elementos iguales tales como 0 o 1,
se debe utilizar:
>> M10 = ones( 3 , 4 , 2 )
M10(:,:,1) =
1
1
1

1
1
1

1
1
1

1
1
1

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


M10(:,:,2) =
1
1
1

1
1
1

1
1
1

1
1
1

>> M11 = zeros( 4 , 3 , 3 )


M11(:,:,1) =
0
0
0
0

0
0
0
0

0
0
0
0

M11(:,:,2) =
0
0
0
0

0
0
0
0

0
0
0
0

M11(:,:,3) =
0
0
0
0

0
0
0
0

0
0
0
0

Una vez creado los arreglos, estos pueden someterse al


cambio de un pixel, de una diagonal, de una fila, de una
columna o de un grupo determinado de pixels. Para
lograr ello, se utiliza una notacin abreviada haciendo
indicacin al nombre del arreglo.
>> M10(1,3,1) = 11;

%cambiando un pxel de la 1ra


%fila, tercera columna y 1ra
%matriz del arreglo M10

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


>> M10(2, : ,2) = zeros(1,4);

%cambiando todos los


%elementos de la 2da
%fila de la matriz 2 del
%arreglo M10

Una matriz muy utilizada para diversas operaciones es la


denominada Matriz Identidad.
>> M11 = eye( 5 );
A continuacin, se monta un arreglo conformado por tres
matrices identidades.
>> M12 = zeros( 5, 5 ,3 );
>> M12(:,:,1) = M11;
>> M12(:,:,2) = M11;
>> M12(:,:,3) = M11;
1.2

Tipos de Imgenes
Se puede distinguir bsicamente tres tipos de imgenes.
Estos son: imagen binaria, imagen de tonos de gris e
imagen a color.
a) Imagen Binaria. Es aquel arreglo conformado por una
matriz y cuyos elementos o pixels estn codificados
con un nico bit ( 1 bit/pixel o 1bpp). Por lo tanto, los
pixels slo podrn ser codificados con 1 o 0.
Aquel pixel codificado con 1 corresponder al color
blanco, mientras que el pixel codificado con 0
corresponder al color negro.
Por ejemplo, sea la imagen binaria I1 conformada
por 3 filas y 5 columnas.

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

1 0 1 1 1
I1 0 0 1 0 0
1 1 0 1 1
Esta imagen tendr un total de bytes:

N Bytes

3x5
x1 1.875 Bytes
8

b) Imagen de Tonos de Gris. Es aquel arreglo


conformado por una matriz o tres matrices iguales,
cuyos elementos o pixels estn codificados con N
bits por pixel (N bpp). Donde el valor de N es mayor
e igual a 2. Por lo tanto, cada pixel podr ser
codificado con un nmero mayor de bits.
N
Aquel pixel codificado con 2 1 corresponder al
color blanco, mientras que el pxel codificado con 0
corresponder al color negro. De esta manera, se
podr contar con pixels codificados con valores
intermedios, los cuales dan como consecuencia
diferentes tonalidades de gris. Cuanto el pixel se
encuentra codificado con un valor mas cerca al 0, el
pixel se aproximar al color negro, y mientras el pixel
reciba un cdigo prximo a 2N 1 , este ser casi
blanco.
Por ejemplo, sea la imagen I2 de tonos de gris
conformada por 3 filas y 5 columnas, y codificada
con N = 4 bpp.

2 5 10 15 10
I 2 7 0 7 0 15
1 11 4 5 5

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


Esta imagen tendr un total de bytes:

N Bytes

3x5
x 4 7.5 Bytes
8

El pixel de la primera fila y cuarta columna ser de


color blanco, el de la segunda fila y primera columna
de color Gris, y el pixel de la segunda fila y cuarta
columna ser de color Negro.
c) Imagen a Color. Es aquel arreglo conformado por
tres matrices diferentes pero del mismo tamao
(Rojo R, Verde G y Azul B). Por lo tanto, cada pixel
est codificado con 3N bits por pixel (3N bpp), es
decir N bits para cada pixel de cada una de las tres
matrices.
Donde el valor de N es mayor e igual a 2 y por
consiguiente un color se forma por la combinacin de
los pixels de las tres matrices.
A
continuacin,
se
muestra
una
figura
correspondiente a un cubo normalizado. En este se
indica la generacin de los diferentes colores tales
como Negro, Blanco, Gris, Rojo, Amarillo, entre
otros.
Esto quiere decir, si el elemento de la primera fila y
primera columna de la matriz R est codificado con 8
bpp y tiene el valor de 255, en cuanto que los otros
elementos en las mismas ubicaciones para las
matrices G y B tienen el valor de 255 y 0
respectivamente, esto indicar que el primer pixel de
la imagen ser de color amarillo.

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

B
Cyan
(0,0,1)

(0,1,1)

Magenta
(1,1,1)

(1,0,1)

Blanco
(0,1,0)

Negro
(0,0,0)
(1,0,0)

G
(1,1,0)
Amarillo

R
Por ejemplo, sea la imagen I3 a color y
conformada por 3 filas y 5 columnas y a su vez
codificada con 3N = 24 bpp.

0
10
255 128 80

R 10
0 250 255 0
128 10 120 121 119

255 5 10 255 100


G 70 0 7 255 0
128 11 4
5
50
5 10 15 10
0

B 7
0 60 255 255
128 11 40 5
5

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

I3=

R
G
B

Esta imagen tendr un total de bytes:

N Bytes

3x5
x 24 45 Bytes
8

Los elementos de la segunda fila y quinta columna,


de cada matriz, juntos formarn un pixel de color
Azul. Por otro lado, los elementos de la tercera fila y
primera columna formarn un pxel de color gris.
Ms detalles sobre cada uno de estos tipos de imgenes
sern encontrados en los siguientes subttulos.
1.3

Imagen Binaria
Generamos una imagen Binaria Aleatoria de 16 filas por
16 columnas con ayuda del comando RANDERR
>> I1 = randerr(16,16);
>> colormap(gray(2))

>> imagesc( I1 )

%Configuramos la
%figura para 2 niveles
%de gris: 0 y 1
%muestra una imagen

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

Verificando los valores de los pixels.


>> max( max ( I1 ))

%retorna el mximo del mximo


%de cada columna

ans =
1
>> min( min ( I1 ))
ans =
0
Otros ejemplos:
>> I2a = zeros( 1 , 12 );
>> I2b = ones( 1, 12 );
>> I2 = [ I2a ; I2b ; I2a ; I2b ];
>> colormap(gray(2))
>> imagesc(I2)
>> figure
>> I3a = eye(9);
>> colormap(gray(2))
>> imagesc(I3a)

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


1.4

Imagen de Tonos de Gris


A continuacin generamos una imagen de 16 x 16 del
tipo tonos de gris con una codificacin de 08 bpp.
>> I4 = randint(16,16,[ 0 255] ); %este comando permite
%generar nmeros
%enteros aleatorios
%entre 0 y 255
>> colormap(gray(256))
>> imagesc(I4)

En esta imagen, es posible observar la presencia de


pixels de color blanco, negro y diferentes tonos de gris.
Otro ejemplo:
>> I5 = zeros(512,10);
>> for j =0:511, I5( j+1 , :) = j*ones(1,10); end
>> colormap(gray)
>> imagesc( I5 )
1.5

Imagen a Color
Para generar una imagen a color en el Matlab, se
procede de dos maneras diferentes. Primero, creando un
arreglo compuesto por tres matrices correspondientes a

10

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


los colores Rojo, Verde y Azul. Y, la segunda manera
llamada imagen indexada, se logra a partir de la creacin
de dos matrices. La primera matriz denominada MAP
corresponder al mapa de colores (con tamao igual a:
2 (N BPP/ matriz_color) x 3), y la segunda matriz denominada
X que representar la ubicacin del color.
A continuacin se genera una imagen a color a partir de
un arreglo conformado por tres matrices, un tamao igual
a 4x4 pixels y una codificacin de 24 bpp
>> I6 = zeros(4,4,3);
>> I6(:,:,1) = [ 242 227 209 235 ; 59 194 113 188 ; ...
155 116 157 45 ; 124 5 202 103 ];
>> I6(:,:,2) = [ 239 15 35 69 ; 234 90 52 51 ; ...
105 207 51 4 ; 228 3 154 190 ];
>> I6(:,:,3) = [ 113 216 214 212 ; 238 134 5 128 ; ...
119 52 174 181 ; 107 171 97 109 ];
>> imagesc(I6/255)

Si se desea que el pixel de la primera fila y primera


columna sea de color verde, se procede a:
>> I6(1,1,1)= 0;
>> I6(1,1,2)= 255;
>> I6(1,1,3)= 0;

Mg. Ing. Pedro Freddy Huaman Navarrete

11

Procesamiento Digital de Imgenes con Matlab


Luego, si se desea que el pixel de la segunda fila y
tercera columna sea de color negro:
>> I6(2,3,1)= 0;
>> I6(2,3,2)= 0;
>> I6(2,3,3)= 0;
Asimismo, si se desea que el pixel de la primera fila y
cuarta columna sea de color blanco:
>> I6(1,4,1)= 255;
>> I6(1,4,2)= 255;
>> I6(1,4,3)= 255;
Y, finalmente, si se desea que el pixel de la tercera fila y
primera columna sea de color amarillo:
>> I6(3,1,1)= 255;
>> I6(3,1,2)= 255;
>> I6(3,1,3)= 0;
Por otro lado, si se desea que la imagen sea mostrada
con 256 niveles de color rojo diferentes, se procede de la
siguiente manera:
>> I7 = I6;

%se replica el arreglo I6


%sobre la variable I7
>> I7(:,:,2) = zeros(4,4); %se hace la Matriz G=0
>> I7(:,:,3) = zeros(4,4); %se hace la Matriz B=0
>> imagesc(I7/255)
De igual manera, es posible generar imgenes con
niveles de azul, verde, amarillo o cualquier otro color en
particular.

12

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

Asimismo, el Matlab hace uso del concepto de imgenes


indexadas para representar las imgenes a color. Una
imagen indexada es aquella que se encuentra compuesta
por dos matrices, tal como se indic anteriormente. Por
lo tanto, cada uno de los elementos de la segunda matriz
denominada X, dar la informacin del color
correspondiente del pixel en dicha posicin, a travs de
su propio valor y utilizndolo como ndice en cada fila de
la primera matriz denominada MAP.
Es decir, si el elemento de la primera fila y tercera
columna de la Segunda Matriz X tiene el valor de 21,
dicho pixel tomar el color correspondiente a la fila 21 de
la matriz MAP. Esta matriz MAP representar un color en
particular, a partir de la combinacin de sus tres
columnas en dicha fila analizada.
Sea una imagen de 4x4 pixels y codificada con 4 bpp.
>> MAP = round(15*rand(16,3) );

%matriz de
%colores MAP

>> I8 = zeros(4,4);
>> I8 = [2 5 3 10 ; 1 4 7 7 ; 10 11 4 2 ; 9 14 8 8 ];
>> I8 = [ I8 I8 I8 ; I8 I8 I8 ; I8 I8 I8 ];
>> size( I8 )

Mg. Ing. Pedro Freddy Huaman Navarrete

13

Procesamiento Digital de Imgenes con Matlab


ans =
12

12

>> imshow( I8 , MAP/15 );

En la figura anterior, se observa una imagen pequea,


debido al tamao reducido de I8: 12 filas x 12 columnas.

14

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

2.

Lectura y Escritura
A travs del Matlab, es posible leer y escribir muchos
formatos de archivos correspondientes a Imgenes.
Entre los formatos ms comunes tenemos: BMP, GIF,
JPG, TIFF, DCM (formato DICOM), entre otros.

2.1

Informacin de Archivos de Imgenes


La informacin correspondiente a un archivo de imagen
en particular, se consigue a travs del comando o
funcin: imfinfo.
>> help imfinfo
Para ello, es necesario ubicar un archivo de imagen a
analizar en el directorio de trabajo del Matlab: c:\...\
work , o en todo caso direccionar el archivo desde la
raz. Para mostrar el ejemplo correspondiente, se utiliza
un archivo de nombre football.jpg propio del Matlab.
>> I = imfinfo('football', 'jpg');
% o tambin
>> F = 'c:\matlab6p5\toolbox\images\imdemos\football';
>> I = imfinfo(F, 'jpg');
% o tambin
>> I = imfinfo('football.jpg')
I=
Filename:
'C:\MATLAB6p5\toolbox\images\imdemos\football.jpg'
FileModDate: '03-Mar-2001 15:16:24'
FileSize: 27130
Format: 'jpg'
FormatVersion: ' '
Width: 320
Height: 256
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: ' '

Mg. Ing. Pedro Freddy Huaman Navarrete

15

Procesamiento Digital de Imgenes con Matlab


Comment: { }
Luego, para observar el contenido de cualquiera de estos
campos se utiliza la notacin siguiente:
>> I.Width
ans =
320
>> I.ColorType

%verifica si la
%indexada o no

imagen

es

ans =
truecolor
2.2

Lectura de Archivos de Imgenes


Para realizar la lectura de un tipo de formato de imagen
a partir del Matlab, se invoca la ayuda del comando o de
la funcin: imread
>> help imread
En esta ayuda se podr observar todos los tipos de
formatos de archivos de imgenes que el Matlab soporta.
A continuacin un ejemplo:
>> I = imread(football,jpg);
% o tambin
>> I = imread(c:\matlab6p5\toolbox ...
\images\imdemos\football,jpg);
% o tambin
>> I = imread(football.jpg);
>> whos I
I
256x320x3
245760 uint8 array
>> image(I)

16

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

Por otro lado, si se utiliza el formato mostrado a


continuacin sobre el archivo football.jpg, se determina
que la imagen es del tipo NO INDEXADA ( es decir la
matriz MAP = 0).
>> [ Irgb , MAP ] = imread(football.jpg);
>> whos Irgb MAP
Name
Size
Bytes Class
Irgb 256x320x3
245760 uint8 array
MAP
0x0
0 double array
Para convertir imgenes RGB a imgenes indexadas, se
hace uso de la funcin:
>> help rgb2ind
>> N = 128;
%Nmero de colores
>> [ Iind, MAP] = rgb2ind(Irgb,N);
>> imshow(Iind,MAP)
Asimismo,
es
conversiones:
>> help ind2gray
>> help gray2ind
>> help rgb2gray
>> help ind2rgb

posible

realizar

las

siguientes

%Indexada Tonos de Gris


%Tonos de Gris Indexada
%RGB Tonos de Gris
%Indexada RGB

Mg. Ing. Pedro Freddy Huaman Navarrete

17

Procesamiento Digital de Imgenes con Matlab


2.3

Escritura en Archivos de Imgenes


Antes de realizar la escritura en un tipo de formato de
imagen aceptado por el Matlab, se invoca a la ayuda del
comando o la funcin: imwrite
>> help imwrite
De
esta
manera,
para
realizar
el
ejemplo
correspondiente, se procede a crear un arreglo de
nmeros aleatorios, simulando un ruido. Posteriormente,
se aade este ruido a una imagen leda, para finalmente
almacenar tal informacin en un archivo BMP.
>> I1 = round( 255*rand( size( Irgb ) ) ); %redondeando
%pixels entre 0 y
%255
Transformando del formato double al formato uint8
>> I11 = uint8( I1 );
>> image( I11 )
>> imwrite( I11 , prueba1.jpg );

%imagen
%de ruido
%almacenada

Luego, para imgenes indexadas, habr que contar con


la matriz de colores correspondiente denominada MAP.
>> imwrite( Iind , MAP , prueba2.jpg );
Finalmente, se incrementa un ruido a la imagen
anteriormente leda.
>> m = size( Irgb , 1 );
>> n = size( Irgb , 2 );
>> R = round( 96*rand(m,n,3) );

%amplitud max
%del ruido: 96

>> II = double( Irgb );

18

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


>> M = max(max(max( II )));
>> II = ( II + R - 96 );

%imagen con
%ruido

>> II = uint8( II );
>> image( II )
>> imwrite( II , prueba3.jpg );
2.4

Lectura y Escritura de Imgenes Mdicas


En la actualidad, se viene utilizando con frecuencia un
nuevo formato para el almacenamiento y transmisin de
imgenes digitales mdicas. Este formato recibe el
nombre de DICOM (extensin dcm ).
La diferencia de este formato a los citados anteriormente,
es que adems de almacenar informacin de imgenes,
tambin almacena informacin referente a datos
alfanumricos del paciente (nombre, edad, fecha de
cumpleaos, sexo, etc.), del nombre del instituto mdico,
del mdico especialista, entre otros.
Por lo tanto, es necesario conocer antes cada uno de los
campos que almacena dicho formato. Para ello, se debe
invocar a la funcin dicominfo haciendo referencia a
una imagen con extensin DCM contenida en el Matlab.
>> info = dicominfo('CT-MONO2-16-ankle.dcm')
Filename: 'C:\MATLAB6P5\toolbox\images\imdemos\CTMONO2-16-ankle.dcm'
FileModDate: '24-Dec-2000 20:54:48'
FileSize: 525436
Format: 'DICOM'
FormatVersion: 3
Width: 512
Height: 512
BitDepth: 16
ColorType: 'grayscale'
.

Mg. Ing. Pedro Freddy Huaman Navarrete

19

Procesamiento Digital de Imgenes con Matlab

.
.
Luego, para leer la data de este tipo de archivo, se utiliza
el comando o funcin DICOMREAD:
>> help dicomread
>> [ X , MAP ] = dicomread('US-PAL-8-10x-echo.dcm');
>> size( X )
ans =
430 600

10

Lo anterior indica que se trata de un arreglo compuesto


por 10 matrices de 430 x 600 pixels.
>> imshow( X( : , : , 1 , 1 ) , MAP );
Y, para observar las 10 matrices en conjunto, se utiliza:
>> montage(X, MAP);

Posteriormente, para realizar una escritura en formato


DICOM, es necesario revisar antes la ayuda
correspondiente:
>> help dicomwrite

20

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


De donde se puede observar que es posible almacenar
una imagen en formato DICOM, especificando cada uno
de los campos vistos con ayuda de la funcin dicominfo
>> dicomwrite(X , MAP , 'archivo1.dcm');

Mg. Ing. Pedro Freddy Huaman Navarrete

21

Procesamiento Digital de Imgenes con Matlab

3.

Procesamiento Bsico Espacial


El procesamiento bsico espacial en imgenes digitales,
est enfocado al procesamiento de la imagen de una
forma directa sobre sus pixels [1].

3.1

Reduccin del Nmero de BPP


Para mostrar algunos ejemplos de la reduccin del
nmero de bits por pixel (BPP) en una imagen,
utilizamos la imagen BACTERIA.
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> image(bacteria)
>> colormap(gray(256))
A continuacin, se procede a reducir de 8 bpp a 2 bpp.
Por lo tanto, el menor pxel tendr un valor igual a 0,
mientras que el mayor tendr un valor igual a 22 1.
>> NIV = round ( linspace(0 , 255 , power(2,2)+1) );
>> bacteria = double(bacteria);
>> IR = zeros( size(bacteria) );
>> [ f , c ] = size(bacteria);
>> for i = 1:f
for j = 1:c
if bacteria(i,j)>=NIV(1) & bacteria(i,j)< NIV(2)
IR (i,j)=0;
elseif bacteria(i,j)>=NIV(2) & bacteria(i,j)< NIV(3)
IR (i,j)=1;
elseif bacteria(i,j)>=NIV(3) & bacteria(i,j)< NIV(4)
IR (i,j)=2;
elseif bacteria(i,j)>=NIV(4) & bacteria(i,j)< NIV(5)
IR (i,j)=3;

22

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


end
end
end
Luego, para observar las dos imgenes con diferentes
nmeros de BPP y un mismo COLORMAP, escalamos:
>> colormap(gray(256))
>> subplot(121),image(bacteria),title('Im. Original')
>> subplot(122),image(IR*(255/4)),title('Im. Manipulada')

3.2

Zoom de una Imagen


Existen diversos algoritmos para aumentar o disminuir el
tamao de la imagen. A continuacin se muestra un
mtodo sencillo de realizar el Zoom que lleva por nombre
Zoom por Promedios.
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> image(saturn)
>> colormap(gray(256))
>> saturn = double(saturn);
>> ZZ = zeros( 2*size(saturn) - 1 );
>> [m,n] = size(saturn);

Mg. Ing. Pedro Freddy Huaman Navarrete

23

Procesamiento Digital de Imgenes con Matlab


>> for i=0:m-1
for j=0:n-1
ZZ(2*i+1,2*j+1) = saturn(1+i,1+j);
end
end
>> for i=1:2*m-1
for j=2:2:2*n-1
ZZ(i,j) = ( ZZ(i,j-1)+ZZ(i,j+1) ) / 2 ;
end
end
>> ZZ = ZZ';
>> for i=1:2*n-1
for j=2:2:2*m-1
ZZ(i,j) = ( ZZ(i,j-1)+ZZ(i,j+1) ) / 2 ;
end
end
>> ZZ = ZZ';
>> colormap(gray(256))
>> subplot(121),image(saturn),title('Original')
>> subplot(122),image(ZZ),title('Zoom')
>> size(saturn)
ans =
128 128
>> size(ZZ)
ans =
255 255
Tambin es posible utilizar una funcin propia del Matlab
encargada de cambiar, de forma directa, el tamao de
una imagen: imresize.
>> help imresize

24

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


Por ejemplo, para la imagen MOON, procedemos a
disminuir el tamao en cuatro veces (factor M=0.25),
haciendo uso del mtodo bilinear.
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> image(moon)
>> colormap(gray(256))
>> IR = imresize(moon,0.25,'bilinear');
>> size(moon)
ans =
128 128
>> size(IR)
ans =
32 32
3.3

Desplazamiento y Giro
Las operaciones de desplazamiento y giro en una imagen
digital, son posibles de realizarlas pero a travs de las
siguientes expresiones:
Desplazamiento
x 1 0 k i
y 0 1 k j


1 0 0 1 1
Giro
x cos() sen () 0 i
y sen () cos() 0 j


1 0
0
1 1

Mg. Ing. Pedro Freddy Huaman Navarrete

25

Procesamiento Digital de Imgenes con Matlab


Donde:
(x,y), representa la nueva ubicacin del pixel de
la
imagen desplazada o rotada.
(i,j), representa la actual ubicacin del pixel de la
imagen a ser desplazada o rotada.
k, es la cantidad a desplazar.
, es el ngulo a girar.
A continuacin se muestra un ejemplo de la operacin de
desplazamiento, sobre la imagen FLOWER, haciendo
uso de un algoritmo sencillo.
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> image(flower)
>> colormap(gray(256))
>> [m,n] =size(flower);
>> IR = zeros(m,n);
>> k = 40;

%desplazam. de 40 posiciones
%horizontal y verticalmente
>> M = [1 0 k ; 0 1 k ; 0 0 1 ]; %Matriz de Desplazam.
>> for i=1:m
for j=1:n
C = M*[ i ; j ; 1 ];
x = C(1);
y = C(2);
IR1(x,y) = flower(i,j);
end
end
>> IR = IR1(1:m,1:n);
>> subplot(121),image(flower),title('Original')
>> subplot(122),image(IR),title('Desplazada')
>> colormap(gray(256))

26

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

En este ejemplo se ha desplazado horizontal y


verticalmente, por lo tanto si desea realizar el
desplazamiento slo en un sentido, habr que
reemplazar la variable k de la primera o segunda fila
por el valor de 0 segn corresponda.

Seguidamente, se realiza un ejemplo de la operacin de


rotacin pero haciendo uso de la funcin IMROTATE
propia del Matlab.
Para ello utilizamos la figura anterior y la giramos 45
haciendo uso de la tcnica bilinear.
>> IR= imrotate( flower, 45 , 'bilinear');
>> subplot(121),image(flower),title('Original')
>> subplot(122),image(IR),title('Rotada')
>> colormap(gray(256))

Mg. Ing. Pedro Freddy Huaman Navarrete

27

Procesamiento Digital de Imgenes con Matlab

3.4

Histograma de una Imagen


El histograma es una operacin realizada a nivel de
pixels, el cual consta en determinar la cantidad de pixels
de una imagen en funcin de sus niveles de intensidad.
En el Matlab, el histograma, se obtiene con la funcin
imhist.
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> figure(1)
>> image(eight)
>> colormap(gray(256))
>> figure(2)
>> imhist(eight)

28

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


3.5

Binarizacin y Negativo de una Imagen


Para realizar la conversin de una imagen a tonos de gris
en una binaria, es necesario determinar el umbral ptimo
que servir para establecer que pixels tendrn el valor
1 y que pixels el valor 0.

1, Ioriginal (i, j) umbral


IN(i, j)
0, Ioriginal (i, j) umbral
Por ejemplo, utilicemos la imagen EIGHT
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> image(eight)
>> colormap(gray(256))
>> imhist(eight)
%obtenemos el histograma de la
%imagen
>> umbral = 175;
%definimos un umbral = 175
>> [m,n] = size(eight);
>> eightB = zeros(size(eight));
>> for i=1:m
for j=1:n
if eight(i,j) >= umbral
eightB(i,j) = 1;
else
eightB(i,j) = 0;
end
end
end
>> subplot(121),image(eight),title(Im. Tonos de gris)
>> subplot(122),image(eightB*255),title(Im. Binaria)
>> colormap(gray(256))

Mg. Ing. Pedro Freddy Huaman Navarrete

29

Procesamiento Digital de Imgenes con Matlab

Luego, para obtener el negativo de una imagen se realiza


la siguiente operacin:
NBPP

Inegativo = (2

1 ) Ioriginal

>> IN = 255 - double(eight);


>> subplot(121),image(eight),title('Imagen Original')
>> subplot(122),image(IN),title('Imagen Negativo')
>> colormap(gray(256))

30

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

4.

Realce de Imgenes
El realce de imgenes se realiza con ayuda del
histograma, permitiendo de esta manera mejorar la
calidad de la imagen, ya sea eliminando sombras o
reflejos, o tambin aumentando el contraste [1].
Se puede distinguir los siguientes casos:
Si el histograma se encuentra concentrado en niveles
bajos, entonces la imagen ser oscura.
Por el contrario, si el histograma se encuentra
concentrado en niveles altos, la imagen ser brillante.

4.1

Expansin del Histograma


Es la operacin encargada de incrementar el contraste de
una imagen con bajo contraste [2]. A continuacin se
muestra una expresin matemtica para expandir el
Histograma de imgenes con intensidades de gris.

I (i, j) I O (i, j) MIN


I T (i, j) O
I O (i, j) MAX I O (i, j) MIN

N BPP
* 2
1

Donde:

I T (i, j), imagen transformada .


I O (i, j), imagen original.
I O (i, j) MAX , mayor .valor del nivel de gris en la
imagen original

I O (i, j) MIN , menor valor del nivel de gris en la


imagen original.
NBPP, nmero de bits por pxel en la imagen
con intensidades de gris.

Mg. Ing. Pedro Freddy Huaman Navarrete

31

Procesamiento Digital de Imgenes con Matlab


A continuacin se muestra un ejemplo donde se
incrementa el contraste en una imagen con intensidades
de gris.
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> image(rice2)
>> colormap(gray(256))
>> [m,n] = size(rice2);
>> rice2T = zeros(m,n);
>> rice2 = double(rice2);
>> MAX = max(max(rice2));
>> MIN = min(min(rice2));
>> for i=1:m
for j=1:n
rice2T(i,j) = (( rice2(i,j) - MIN) / (MAX - MIN) ) * 256 - 1;
end
end
>> colormap(gray(256))
>> subplot(121),image(rice2),title('Imagen Original')
>> subplot(122),image(rice2T),title('Im Mas-Contraste')

>> rice2 = uint8( rice2 );


>> rice2T = uint8( rice2T );
>> subplot(121),imhist(rice2)

32

%comparacin de ambos

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


>> subplot(122),imhist(rice2T) %histogramas
4.2

Desplazamiento del Histograma


Es la operacin utilizada para aclarar u oscurecer una
imagen [2]. A continuacin la expresin matemtica
correspondiente.

I T (i, j) I O (i, j) DES


Donde:
Io, es la imagen original.
IT, es la imagen transformada.
DES, es el valor que desplaza el histograma.
Si DES>0 incrementa el brillo, y si DES<0 oscurece la
imagen. Los valores que sobrepasan los niveles mximo
y mnimo deben ser redondeados al mximo o mnimo
permitidos.
A continuacin se muestra un ejemplo donde se
incrementa el brillo en una imagen con intensidades de
gris.
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> image(blood)
>> colormap(gray(256))
>> DES = 100;
%definimos el valor de DES
>> bloodT = double(blood) + DES;
>> [ X , Y ] = find( bloodT(:,:)>=255 ); %hallamos los
%pixels >=255
%para limitarlos
>> for i=1:length(X)
bloodT( X(i) , Y(i) ) = 255;
end

Mg. Ing. Pedro Freddy Huaman Navarrete

33

Procesamiento Digital de Imgenes con Matlab


>> figure(1)
>> colormap(gray(256))
>> subplot(121),image(blood),title('Imagen Original')
>> subplot(122),image(bloodT),title('Imagen Mas Brillo')

Luego, observamos sus histogramas correspondientes:


>> figure(2)
>> bloodT = uint8( bloodT );
>> subplot(121),imhist(blood)
>> subplot(122),imhist(bloodT)

34

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

5.

Suavizado de Imgenes
El suavizado de imgenes se realiza con la finalidad de
disminuir el ruido y otros efectos no deseados que
pueden presentarse en una imagen digital, despus de
realizar una operacin de muestreo, cuantizacin y
transmisin.

5.1

Promedio del Entorno de Vecindad.


Es una operacin espacial, la cual puede entenderse a
partir de la siguiente expresin matemtica:

IS (i, j)

1
I o ( x , y)
N ( x ,y )V

Donde:
N, es el nmero de pixels en el entorno de
vecindad V.
V, es el conjunto de coordenadas de los pixels
situados en el entorno de vecindad de (i,j),
incluido este.
Io(x,y), imagen original.
IS(i,j), imagen suavizada.
5.2

Mediana del Entorno de Vecindad.


Es similar al caso anterior, con la diferencia que en vez
de obtener el promedio de pixels en la vecindad V, se
obtiene la mediana en dicho entorno.

I s (i, j) ( I o ( x, y) )
( x , y )V

Donde:
M: es el operador mediana en el entorno V.

Mg. Ing. Pedro Freddy Huaman Navarrete

35

Procesamiento Digital de Imgenes con Matlab


Por ejemplo, a continuacin se aade un ruido (tipo salt
& pepper) a una imagen QUARTER, luego se reduce
dicho ruido realizando una suavizacin sobre la imagen.
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> colormap(gray(256))
>> image(quarter)
>> % Aadiendo ruido a la imagen original QUARTER
>> quarterR = imnoise(quarter , 'salt & pepper');
>> % Algoritmo para retirar ruido en quarterR
>> [ m , n ] = size(quarterR);
>> IR1 = zeros( m , n );
>> % Incrementamos una fila y una columna a ambos
>> % lados de la imagen para realizar la operacin de
>> % suavizado incluido los bordes
>> IR = [ quarterR(1,1) quarterR(1,:) quarterR(1,n) ; ...
quarterR(:,1) quarterR(:,:) quarterR(:,n); ...
quarterR(m,1) quarterR(m,:) quarterR(m,n) ] ;
>> whos IR IR1
>> for i=2:m+1
for j=2:n+1
A = IR(i-1:i+1,j-1:j+1);
B = median(median( A ));
IR1(i-1,j-1) = B;
end
end

%obtiene el pixel medio

>> colormap(gray(256))
>> subplot(121),image(quarterR), title(Imagen Ruidosa)
>> subplot(122),image( IR1 ), title(Imagen Suavizada)

36

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

Para implementar el algoritmo correspondiente al


promedio de vecindad del apartado 5.1, habr que
cambiar la lnea del algoritmo:
B=median(median( A ));

%obtiene el pixel medio

por:
B=mean(mean( A ));

Mg. Ing. Pedro Freddy Huaman Navarrete

%obtiene pixel promedio

37

Procesamiento Digital de Imgenes con Matlab

6.

Deteccin de Bordes
Los bordes son pixels alrededor de los cuales la imagen
presenta una brusca variacin en los niveles de gris.
Estos, pueden ser obtenidos a travs de operadores
derivada locales (primera o segunda) [2].
En este captulo slo se analizar la deteccin de bordes
por los operadores de primera derivada. Entre ellos
tenemos:
Operadores de Sobel.
Operador de Prewitt.
Operador de Roberts, entre otros.
La primera derivada ser 0 en todas las regiones de
intensidad constante, y tendr un valor constante igual a
1 en toda transicin de intensidad [2]. Por lo tanto, se
tendr como resultado una imagen del tipo binaria.

6.1

Operadores de Sobel
Los operadores de Sobel son los encargados de suavizar
la imagen, con la finalidad de disminuir falsos bordes
existentes. A continuacin se muestran las respectivas
mscaras u operadores:

1 0 1
Gx 2 0 2
1 0 1

1 2 1
Gy 0
0
0
2
1
1

Por ejemplo, seguidamente se obtienen los bordes para


la imagen ALUMGRNS.
>> Gx = [ -1 0 1 ; -2 0 2 ; -1 0 1 ];
>> Gy = [ -1 -2 -1 ; 0 0 0 ; 1 2 1 ];
>> load imdemos

38

%permite cargar a la plataforma

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


%del Matlab un conjunto de
%imgenes en tonos de gris
>> colormap(gray(256))
>> image(alumgrns)
>> % Incrementamos una fila y una columna a ambos
>> % lados de la imagen para realizar la operacin de
>> % deteccin de bordes en el permetro.
>> [ m , n ] = size(alumgrns);
>> IR1 = zeros( m , n );
>> IR = [alumgrns(1,1) alumgrns(1,:) alumgrns(1,n) ; ...
alumgrns(:,1) alumgrns(:,:) alumgrns(:,n); ...
alumgrns(m,1) alumgrns(m,:) alumgrns(m,n) ] ;
>> whos IR alumgrns
>> UMBRAL = 90;

>> IR = double(IR);

%Seleccionado para convertir


%imagen de borde en binaria
%Conversin a formato double

>> for i=2:m+1


for j=2:n+1
A = IR(i-1:i+1,j-1:j+1);
H1 = sum(sum(A.*Gx));
H2 = sum(sum(A.*Gy));
H12 = abs(H1) + abs(H2);
if H12 > UMBRAL
IR1(i-1,j-1) = 1;
else
IR1(i-1,j-1) = 0;
end
end
end

%Mscara Vertical
%Mscara Horizontal
%Magnitud del Grad.
%Umbral para BORDE o
% NO BORDE

>> colormap(gray(256))
>> subplot(121),image(alumgrns), title(Imagen Original)
>> subplot(122),image( 255*IR1 ), title(Imag de Bordes)

Mg. Ing. Pedro Freddy Huaman Navarrete

39

Procesamiento Digital de Imgenes con Matlab

El UMBRAL asumir un valor entero positivo que


determinar la calidad en la deteccin de bordes.
6.2

Operadores de Prewitt
Los operadores de Prewiitt son muy similares a los
operadores de Sobel, diferencindolos solamente en los
coeficientes de la mscara.

1 0 1
Gx 1 0 1
1 0 1

1 1 1
Gy 0 0 0
1 1 1

En el caso que se desee detectar slo los bordes


horizontales, habr que utilizar la mscara Gy.
Por ejemplo para la imagen CIRCUIT, se procede a
realizar el mismo algoritmo que se utiliz para la imagen
ALUMGRNS pero haciendo que la mscara Gx = 0.

40

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

Asimismo, si se desea detectar slo los bordes verticales,


habr que utilizar la mscara Gx, es decir hacer que la
mscara Gy = 0.

6.3

Operador de Roberts
El operador de Roberts es el encargado de sealar slo
los puntos de borde. Tiene mejor desempeo sobre
imgenes binarias [2].
Suma de la Magnitud de las Diferencias de los Vecinos
Diagonales.

I(x, y) I(x 1, y 1) I(x, y 1) I(x 1, y)

Mg. Ing. Pedro Freddy Huaman Navarrete

41

Procesamiento Digital de Imgenes con Matlab


A continuacin se muestra un ejemplo, con un UMBRAL
igual a 60.
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> colormap(gray(256))
>> image(saturn)
>> % Incrementamos una fila y una columna a ambos
>> % lados de la imagen para realizar la operacin de
>> % deteccin de bordes.
>> [ m , n ] = size(saturn);
>> IR1 = zeros( m , n );
>> IR = [ saturn(1,1) saturn(1,:) saturn(1,n) ; ...
saturn(:,1) saturn(:,:) saturn(:,n); ...
saturn(m,1) saturn(m,:) saturn(m,n) ] ;
>> whos IR saturn
>> UMBRAL = 60;

%Seleccionado para convertir


%imagen de borde en binaria

>> IR = double(IR);
%Conversin a formato double
>> for i=2:m+1
for j=2:n+1
A = abs( IR(i,j) - IR(i-1,j-1) );
B = abs( IR(i,j-1) - IR(i-1,j) );
if A+B >= UMBRAL
%Umbral para BORDE o
IR1(i-1,j-1) = 1;
% NO BORDE
else
IR1(i-1,j-1) = 0;
end
end
end
>> colormap(gray(256))
>> subplot(121),image(saturn), title(Imagen Original)

42

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


>> subplot(122),image( 255*IR1 ), title(Imag de Bordes)
Tambin es posible realizar la deteccin de bordes con
ayuda de la funcin edge del Matlab, la cual permite el
uso de diferentes operadores tales como Roberts,
Sobel, entre otros.
>> help edge
Para realizar la deteccin de contornos en una imagen de
color, habr que utilizar las mscaras sobre cada imagen
R, G y B independientemente. Luego, se procede a
unirlas.

Mg. Ing. Pedro Freddy Huaman Navarrete

43

Procesamiento Digital de Imgenes con Matlab

7.

Compresin de Imgenes
En la actualidad, el procesamiento digital de imgenes se
ha difundido enormemente en diversos sectores, desde
el mdico hasta el educacional. Por ello, se ha visto la
necesidad de disminuir el nmero de bits por pxel en
una imagen, sin deteriorar la informacin presente en
esta. De esta manera se logra un almacenamiento mayor
de imgenes digitales, o como tambin un menor tiempo
de transmisin de estas.
Por lo tanto, la compresin de imgenes es un tema
amplio y de suma importancia, que engloba una serie de
algoritmos que van desde un simple RLC (Run Length
Coding), pasando por una Transformada Discreta del
Coseno,
hasta
una
Transformada
Wavelets
complementada con una Cuantizacin Vectorial. En este
captulo slo se abordan dos tipos de compresiones, pero
antes se muestra la obtencin de la Transformada
Discreta de Fourier en 2D.

7.1

Transformada Discreta de Fourier


La Transformada Discreta de Fourier (DFT) de una
imagen es posible obtenerla a partir de la funcin fft2
(DFT en 2D) o como tambin a partir de la funcin fft
(DFT en 1D).
A continuacin se muestra la expresin matemtica de la
Transformada Discreta de Fourier en 2D directa e
inversa.

1 N1 N1
TI(u, v) I( x, y)e
N x 0 y 0

44

2 ( ux vy)
j
N

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

1 N1 N1
I( x, y) TI(u, v)e
N u 0 v 0

2 ( ux vy)
j
N

Por lo general, el mdulo de la Transformada Discreta de


Fourier da valores elevados para frecuencias bajas. Por
lo tanto, se acostumbra a escalarla utilizando la
expresin:

TI (u, v)* c x log( 1 TI (u, v) )


Donde:
c:
es una constante de escalamiento.
TI(u,v)*: es la Transformada Discreta de Fourier
escalada.
A continuacin un ejemplo haciendo uso de la fft en 1D:
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> colormap(gray(256))
>> image(flower)
>> flower = double(flower);
>> [ m , n ] = size(flower);
>> flowerT = zeros(m,n);
>> for i=1:m
%FFT para todas las filas
flowerT(i,:) = fft( flower(i,:) );
end
>> for j=1:n
%FFT para todas las columnas
flowerT(:,j) = fft( flowerT(:,j) );
end

Mg. Ing. Pedro Freddy Huaman Navarrete

45

Procesamiento Digital de Imgenes con Matlab


Seguidamente, se utiliza la funcin fftshift para
permutar el primer y tercer cuadrante al segundo y cuarto
cuadrante respectivamente. Esto ayuda a tener una
mejor visualizacin del espectro de frecuencia.
>> flowerT = fftshift( flowerT );
Realizando el escalamiento del espectro de frecuencia.
>> MflowerT = 10*log(1 + abs( flowerT ));
>> subplot(121), image(flower), title('Imagen Original');
>> subplot(122), image( MflowerT ), title('FFT2 Imagen');

Luego, para retornar a la imagen inicial, habr que


obtener la Transformada Discreta de Fourier Inversa en
2D, con ayuda de la funcin ifft2.
>> flowerT = fftshift( flowerT );
%permutando
>> flowerINV = ifft2( flowerT );
>> flowerINV = abs( round ( flowerINV ) );
>> subplot(121), image(flower), title(Imagen Original)
>> subplot(122), image(flowerINV), title(ImRecuperada)
Asimismo, es posible observar que la FFT2 es una
herramienta muy utilizada cuando se trata de imgenes
rotadas o trasladadas.

46

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

Y, finalmente, tambin es posible observar con ayuda de


la FFT2, la presencia de imgenes con abundante baja
frecuencia (tenues), e imgenes con presencia de alta
frecuencia.
>> %IMAGEN CON BAJA FRECUENCIA
>> %generamos una imagen con pequeas transiciones
>> I = zeros(128,128);
>> for i=1:128
for j=1:128
if i<65
I(i,j) = i;
else
I(i,j) = 128-i;
end
end
end
>> I = 4*I;
>> image( I )
%imagen tenue
>> IT = fft2( I );
>> IT = fftshift(IT );
>> MIT = 15*log(1 + abs(IT ));
>> subplot(121), image( I ), title('Imagen Original');
>> subplot(122), image( MIT ), title('FFT2 Imagen');

Mg. Ing. Pedro Freddy Huaman Navarrete

47

Procesamiento Digital de Imgenes con Matlab

>> %IMAGEN CON ALTA FRECUENCIA


>> load imdemos
%permite cargar a la plataforma
%del Matlab un conjunto de
%imgenes en tonos de gris
>> colormap(gray(256))
>> image(vertigo)
%imagen con cambios bruscos
>> vertigoT = fft2( vertigo );
>> vertigoT = fftshift( vertigoT );
>> MvertigoT = 15*log(1 + abs( vertigoT ));
>> subplot(121), image( vertigo ), title('Imagen Original');
>> subplot(122), image( MvertigoT ), title('FFT2 Imagen');

48

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


7.2

Transformada Discreta del Coseno


La Transformada Discreta del Coseno (DCT) es una
transformada que es utilizada frecuentemente. Esta se
encarga de separar la alta energa de la imagen de la
baja energa. Lo cual permite codificar con un nmero
mayor de bits los pocos coeficientes de Alta Energa, y
con menor nmero de bits los de Baja Energa.
A continuacin un ejemplo
>> load trees
>> I = ind2gray(X,map);

>> I = round(255*I );

%imagen del Matlab


%transformando de
%imagen indexada a
%imagen de gris
%Escalando a 8 bpp

Luego, se procede a obtener la DCT. Es posible obtener


dicha transformada en forma directa haciendo uso de la
funcin dct2, o tambin de la funcin dct pero
aplicado primero a filas y luego a columnas, tal como se
hizo con la DFT en 2D.
>> TI = dct2( I );
>> image ( TI )
>> colormap(gray(256))

Mg. Ing. Pedro Freddy Huaman Navarrete

%para observarlo en gris

49

Procesamiento Digital de Imgenes con Matlab


De la figura anterior se puede observar que la esquina
superior izquierda representa a los coeficientes de mayor
energa, mientras que el resto representa a los de menor
energa. Por lo tanto, la mayor cantidad de coeficientes
ser codificada con menor nmero de bits.
Asimismo, se procede a recuperar la imagen con ayuda
de una Transformada Discreta del Coseno Inversa
(IDCT), pero a partir de slo un 3% del nmero de
coeficientes totales.
>> size( I )
>> Coef_Totales = 258 * 350;
>> TIR = zeros( size( TI ) );
>> Porc_Coef = 3 * Coef_Totales / 100; % aproximad.
% 52 x 52
Asignamos a la matriz TIR las primeras 52 filas y 52
columnas (coeficientes de alta energa) de la DCT de la
imagen I
>> TIR(1:52 , 1:52 ) = TI( 1:52 , 1:52 );
>> IR = idct2( TIR );
>> subplot(121), image(I), title(Imagen Inicial)
>> subplot(122), image(IR), title(ImRecuperada)

50

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


Se observa una alta recuperacin de la imagen, debido a
un alto porcentaje de coeficientes de alta energa
elegidos para la codificacin y posterior decodificacin.
7.3

Transformada Discreta Wavelet


La Transformada Discreta Wavelet (DWT) se obtiene a
partir de un banco de filtros conformado por filtros de:
descomposicin y de reconstruccin (ms conocido como
algoritmo de Mallat) [3]. Tales filtros son FIR del tipo
Pasa-Bajo y Pasa-Alto (dos para la descomposicin y
dos para la reconstruccin), y varan segn el tipo de
familia.
En la actualidad existe una diversidad de Familias
Wavelets tales como: Daubechies, Meyer, Splines,
Biortogonales, entre otras [10]. Cada familia se
caracteriza por utilizar un grupo de filtros en particular
con un nmero de orden adecuado.
A continuacin se muestra el procedimiento de obtencin
de la DWT de una imagen en tonos de gris.
Columna
s
Filas
h

bb

ba

ab

aa

b
2

I
Original

Anlisis: Filtrado y
Decimacin

Mg. Ing. Pedro Freddy Huaman Navarrete

51

Procesamiento Digital de Imgenes con Matlab


Donde:
h: filtro Pasa-Bajo de Descomposicin.
g: filtro Pasa-Alto de Descomposicin.
bb: imagen resultante de filtro Pasa Bajo-Bajo.
ba: imagen resultante de filtro Pasa Bajo-Alto
ab: imagen resultante de filtro Pasa Alto-Bajo
aa: imagen resultante de filtro Pasa Alto-Alto
Para la Reconstruccin o Sntesis, se inicia con una
interpolacin por 2, seguido del filtrado por columna de
cada imagen bb, ba ab y aa. Seguidamente se
suma y se procede a realizar lo mismo pero esta vez a
travs de cada fila.
Columna
s
bb

Filas

h*

+
ba

h*

g*

+
ab

h*

+
aa

g*

I
Reconstruida

g*

Sntesis: Interpolacin y
Filtrado

Donde:
h*: filtro Pasa-Bajo de Reconstruccin .
g*: filtro Pasa-Alto de Reconstruccin.

El Matlab cuenta con un toolbox para Wavelets [3]


>> help wavelet

52

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

El cual presenta las diversas familias existentes,


representadas por funciones en archivos con extensin
M. Tales funciones permiten el Clculo de la
Transformada Wavelets Discreta (DWT) en 1D y 2D. A
continuacin se procede a utilizar la DWT y en particular
la familia Daubechies de orden 09.
>> %Retorna los filtros Pasa-Bajo y Pasa-Alto de
>> %Descomposicin y Reconstruccin
>> help wfilters
>> [LO_D , HI_D , LO_R , HI_R ] = wfilters( 'db5 ' );
>> load trees
>> I = ind2gray(X,map);

>> I = round(255*I );

%imagen del Matlab


%transformando de
%imagen indexada a
%imagen de gris
%Escalando a 8 bpp

Primera Descomposicin por Wavelets


>> [CA1 , CH1 , CV1 , CD1] = dwt2( I , LO_D , HI_D );
>> image( [ CA1 CH1 ; CV1 CD1 ] )
>> colormap(gray(256))

Seguidamente, es posible volver aplicar la DWT sobre la


imagen filtrada con Pasa-Bajo-Bajo (denotado por CA1),

Mg. Ing. Pedro Freddy Huaman Navarrete

53

Procesamiento Digital de Imgenes con Matlab


para volver a descomponerla en cuatro sub-imgenes. La
idea central es que las imgenes producidas a travs de
un filtrado Pasa-Bajo utilizarn un nmero mayor de bits
para su codificacin, en cuanto que las dems utilizarn
menor nmero de bits.
A continuacin se muestra un ejemplo de una doble
descomposicin con DWT.

Finalmente, para retornar a la imagen inicial, se hace uso


de la Transformada Discreta de Wavelets Inversa
(IDWT), haciendo uso de los filtros de la misma familia.
>> IR = idwt2( CA1, CH1, CV1, CD1, LO_R , HI_R );
>> subplot(121), image( I ), title(Imagen Original)
>> subplot(122), image( IR ), title(Im Reconstruida)

54

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

8.

Filtros Digitales en 2D
Los Filtros Digitales en 2D tienen el objetivo de resaltar
determinadas frecuencias de una imagen. Tales filtros
pueden ser utilizados desde el punto de vista espacial o
de la frecuencia.
Una operacin de filtrado espacial, no es otra cosa que la
manipulacin directa de los pixels de la imagen, a partir
de mscaras de Convolucin. Por lo tanto, es innecesario
realizar transformaciones a la frecuencia. Por ejemplo
tenemos, el filtro de promedio, el filtro de mediana, entre
otros, los cuales ya fueron estudiados en el Captulo 5. A
continuacin se muestra la aplicacin de un filtro
Espacial Pasa Bajo.
Filtro Espacial Pasa Bajo:

1 2 1
1
h[n]
2 4 2 ,
16
1 2 1

1 1 1
1
h[n]
1 2 1
10
1 1 1

>> h = [ 1 2 1 ; 2 4 2 ; 1 2 1 ] / 16;
>> load imdemos
%permite cargar a la plataforma
%del Matlab un conjunto de
%imgenes en tonos de gris
>> flower = double(flower);
>> Fflower = conv2( h , flower );
>> colormap(gray(256))
>> subplot(1,2,1),image(flower), title(Imagen Original)
>> subplot(1,2,2),image(Fflower), title(Imagen Filtrada)

Mg. Ing. Pedro Freddy Huaman Navarrete

55

Procesamiento Digital de Imgenes con Matlab

Por otro lado, la operacin de filtrado en el dominio de la


frecuencia, indica un producto de los espectros de
frecuencia de la imagen digital y del filtro en 2D..
8.1

Filtro Pasa Bajo 2D


Encargado de resaltar las frecuencias Bajas, las cuales
pueden ser encontradas en aquellas superficies
homogneas de una imagen.
>> %se construyen dos matrices con frecuencias
>> %espaceadas
>> [f1,f2] = freqspace(19,'meshgrid');
>> Hd = ones(19);
%filtro ideal
>> r = sqrt(f1.^2 + f2.^2);
>> Hd( (r<0.1) | (r>0.5) ) = 0;
%restricciones
>> h = fwind1( Hd , hamming(19));
%diseo de filtro
>> subplot(1,2,1) , freqz2( h , [16 16] )
>> subplot(1,2,2) , freqz2( h , [16 16] )
>> rotate3d on
%habilita
rotacin
% Girar con ayuda del mouse
% para proyeccin en el plano.

56

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

8.2

Filtro Pasa Alto 2D


Encargado de resaltar las frecuencias Altas, las cuales
pueden ser encontradas en todos los bordes de algn
objeto en la imagen analizada.
>> [f1,f2] = freqspace(17,'meshgrid');
>> Hd = zeros(17);
>> r = sqrt(f1.^2 + f2.^2);
>> Hd( (r<0.1) | (r>0.5) ) = 1;
%restricciones
>> h = fwind1( Hd , hanning(17));
%diseo de filtro
>> subplot(1,2,1) , freqz2( h , [16 16] )
>> subplot(1,2,2) , freqz2( h , [16 16] )
>> rotate3d on
%habilita rotacin
% Girar con ayuda del mouse
% para proyeccin en el plano.

Mg. Ing. Pedro Freddy Huaman Navarrete

57

Procesamiento Digital de Imgenes con Matlab


8.3

Filtro Pasa Banda en 2D


Encargado de resaltar un rango de frecuencias, las
cuales estn delimitadas por dos frecuencias de corte.
>> [f1,f2] = freqspace(15,'meshgrid');
>> Hd = zeros(15);
>> r = sqrt(f1.^2 + f2.^2);
>> Hd( (r<0.1) | (r>0.4 & r<0.8) ) = 1;
%restricciones
>> h = fwind1( Hd , hanning(15));
%diseo de filtro
>> subplot(1,2,1) , freqz2( h , [16 16] )
>> subplot(1,2,2) , freqz2( h , [16 16] )
>> rotate3d on
%habilita rotacin
% Girar con ayuda del mouse
% para proyeccin en el plano.

8.4

Filtro Elimina Banda en 2D


Encargado de anular o atenuar un rango de frecuencias,
las cuales estn delimitadas por dos frecuencias de
corte.
>> [f1,f2] = freqspace(17,'meshgrid');
>> Hd = ones(17);
>> r = sqrt(f1.^2 + f2.^2);
>> Hd( (r<0.1) | (r>0.4 & r<0.8) ) = 0;
>> h = fwind1( Hd , hanning(17));
>> subplot(1,2,1) , freqz2( h , [16 16] )

58

%restricciones
%diseo de filtro

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


>> subplot(1,2,2) , freqz2( h , [16 16] )
>> rotate3d on
%habilita rotacin
% Girar con ayuda del mouse
% para proyeccin en el plano.

8.5

Filtrado de una Imagen


La operacin de filtrado es posible realizarlo de dos
maneras diferentes. Primero, multiplicando los espectros
de frecuencia de la imagen original y del filtro digital en
2D, para finalmente obtener la IFFT2 del producto
realizado. Y, segundo, realizando la convolucin desde el
punto de vista espacial entre la imagen original y el filtro
digital 2D.
A continuacin se muestra un ejemplo de una operacin
de filtrado con un Filtro Pasa Alto 2D
>> %Filtro Pasa Alto 2D
>> [f1,f2] = freqspace(17,'meshgrid');
>> Hd = zeros(17);
>> r = sqrt(f1.^2 + f2.^2);
>> Hd( (r<0.1) | (r>0.5) ) = 1;
>> h = fwind1( Hd , hanning(17));

%restricciones
%diseo de filtro

>> load imdemos

Mg. Ing. Pedro Freddy Huaman Navarrete

59

Procesamiento Digital de Imgenes con Matlab


>> I = double( rice );
>> riceF = filter2( h , I );
>> riceF = riceF * 2;

%filtrado en 2D
%escalado por 2
%mejora visualizacin

>> colormap(gray(256))
>> subplot(1,2,1), image( I ), title('Imagen Original')
>> subplot(1,2,2), image( riceF ), title('Imagen Filtrada')
Se observa que la imagen filtrada a travs del pasa alto
2D, da presencia de bordes lo cual indica transiciones
bruscas que es equivalente a frecuencias altas.

60

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab

9.

Introduccin a la Compresin de
Video
El Video Digital se caracteriza por estar conformado por
un conjunto de imgenes digitales, las cuales son
transmitidas a una velocidad de N cuadros por segundo
(N fps), pero en un formato comprimido.
Por lo tanto, es el estndar Motion Pictures Experts
Group MPEG, el encargado de comprimir dicha
informacin, tanto el correspondiente al audio como al
video.

9.1

Definicin
Para tener una idea de la cantidad de informacin
presente en un video digital no comprimido, se muestra a
continuacin un ejemplo:
Video con duracin de 02 horas, codificado con 24
bpp, con una resolucin de 1024 x 768 pixels, una
frecuencia de 30 fps y un audio codificado a 16 bits
por muestra (bpm), 02 canales y una frecuencia de
muestreo de 44100 Hz.
>> Tiempo = 2 * 3600;
>> Canales = 2;
>> BPM = 16;
>> Fs = 44100;
>> BPP = 24;
>> TAM = 1024 * 768;
>> FPS = 30;
>> MBytesIMAGEN = TAM * BPP * Tiempo * FPS / ( ...
1024 * 1024 * 8 );
>> MBytesAUDIO = Fs * BPM * Tiempo *Canales / ( ...
1024 * 1024 * 8 );
>> Total = MBytesIMAGEN + MBytesAUDIO;

Mg. Ing. Pedro Freddy Huaman Navarrete

61

Procesamiento Digital de Imgenes con Matlab


>> Total / 1024

%en GigaBytes

Por esta razn se hace necesario comprimir excesiva


cantidad de bytes.
Para comprimir slo las imgenes, se procede a dos
tipos de compresin Codificacin Intra-Cuadros o
Espacial, y Codificacin Inter.-Cuadro o Temporal.
9.2

Codificacin Espacial (C.E)


Es la encargada de remover la redundancia dentro de
una imagen. Pues, en toda imagen de televisin siempre
se encuentran pixels con el mismo valor espacial.

C..E.

tiempo
A continuacin un ejemplo de UNA imagen de televisin,
donde muchos de los pixels presentan valores espaciales
muy similares entre si.
>> load imdemos

%permite cargar a la plataforma


%del Matlab un conjunto de
%imgenes en tonos de gris

>> colormap(gray(256))
>> image(pout)
>> axis([ 20 25 41 43])
>> I = pout(20:25 , 41:43);
>> I
I=

62

%Seleccionando una
%porcin de la imagen:
%cabello del nio

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


82
82
81
81
81
81

82
81
79
81
81
79

82
79
82
81
81
82

Se observa todo ese conjunto de pixels con valores


iguales o prximos entre s.
En estos casos, el MPEG se vale de la Transformada
Discreta del Coseno (DCT), para codificar con mayor
nmero de bits la alta energa, y menor nmero de bits la
informacin de baja energa (ver apartado 5.2).
9.3

Codificacin Temporal (C.T)


Conjunto de algoritmos encargados de explorar la
redundancia entre imgenes sucesivas.
Es decir, este tipo de codificacin aprovecha la ventaja
que existe cuando los cuadros sucesivos son similares.
En lugar de enviar la informacin de cada cuadro por
separado, el codificador temporal enva la diferencia
existente entre el cuadro previo y el actual.
C..T.

tiempo
>> load mri

%Cargar del Matlab


%Imagen Multi-Cuadros

>> whos

Mg. Ing. Pedro Freddy Huaman Navarrete

63

Procesamiento Digital de Imgenes con Matlab


Name
D
map
siz

Size

Bytes Class

4-D
89x3
1x3

442368 uint8 array


2136 double array
24 double array

>> size(D)
ans =
128 128

27

Esto indica que la variable D es una imagen mltiple


conformado por 27 cuadros de tamao 128 pixels x 128
pixels. El valor 1, da la indicacin que se trata de un
conjunto de imgenes de tonos de gris, y esto es
confirmado con el contenido de la variable map:
>> map(1:7,:)
ans =
0
0.0078
0.0196
0.0314
0.0431
0.0549
0.0667

%Matriz R = G = B

0
0
0.0078 0.0078
0.0196 0.0196
0.0314 0.0314
0.0431 0.0431
0.0549 0.0549
0.0667 0.0667

>> immovie(D,map);

>> D = double(D);
>> c1 = D(:,:,1,15);
>> c2 = D(:,:,1,16);
>> dif = c2 - c1;
>> colormap(gray(256))
>> image(dif)

64

%Otorga movimiento al
%conjunto de cuadros

%captura 15avo cuadro


%captura 16avo cuadro
%diferencia de cuadros

Mg. Ing. Pedro Freddy Huaman Navarrete

Procesamiento Digital de Imgenes con Matlab


>> subplot(1,3,1),image(c1),title('Cuadro 15avo')
>> subplot(1,3,2),image(c2),title('Cuadro 16avo')
>> subplot(1,3,3),image(dif),title('Diferencia')

De esta manera, es posible observar la cantidad de


informacin redundante entre dos cuadros sucesivos de
un video digital.

Mg. Ing. Pedro Freddy Huaman Navarrete

65

Procesamiento Digital de Imgenes con Matlab

Bibliografa
1. Jain Anil. Fundamentals of Digital Image Processing.
Prentice-Hall, Inc. New Jersey. 1989.
2. Pajares Gonzalo y De la Cruz Jess. Visin por
Computador. Imgenes Digitales y Aplicaciones.
Alfaomega Ra-Ma 2001.
3. Toolbox Signal Processing del Matlab. The Mathwork.
Versin 6.5.
4. Toolbox Image Processing del Matlab. The Mathwork.
Versin 6.5.
5. Toolbox Wavelet del Matlab. The Mathwork. Versin 6.5.
6. Parker J. Algorithms for Image Processing And
Computer Vision. Wiley Computer Publishing. Canad.
1997.
7. Gray Robert. Gersho Allen. Vector Quantization and
Signal Compression.
8. Pajares Gonzalo, de la Cruz Jess, Molina Jos,
Cuadrado Juan, Lpez Alejandro. Imgenes Digitales
Procesamiento Prctico con Java. Alfaomega Ra-Ma.
Mxico. 2004.
9. Fu K, Gonzalez R. Lee C.. Robtica Control, Deteccin,
Visin e Inteligencia. Mc Graw-Hill, Inc. Mxico. 1987.
10. Mladen Victor Wickerhauser. Adapted Wavelet Analysis
from Theory to Software. A K Peters. 1994.
11. Huaman Navarrete. Pedro, F. Cuaderno de Ingeniera:
Procesamiento Digital de Seales Utilizando el Matlab.
Universidad Ricardo Palma. Noviembre 2005.
12. Huaman, Navarrete. Pedro, F. Matlab 6.0. Gua
Prctica. Editorial de la Universidad Tecnolgica del
Per. Noviembre 2003.

66

Mg. Ing. Pedro Freddy Huaman Navarrete

You might also like