Professional Documents
Culture Documents
PROCESAMIENTO DIGITAL DE
IMGENES CON MATLAB
Marzo 2007
LIMA - PER
II
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
III
IV
Presentacin
VI
CONTENIDO
Pg.
PRESENTACIN
CONTENIDO
VII
1. IMGENES DIGITALES
01
01
04
08
10
10
2. LECTURA Y ESCRITURA
15
15
16
VII
18
19
22
22
23
25
28
29
4. REALCE DE IMGENES
31
31
33
5. SUAVIZADO DE IMGENES
35
35
35
6. DETECCIN DE BORDES
38
38
40
41
VIII
44
44
49
51
8. FILTROS DIGITALES EN 2D
55
56
57
58
58
59
61
9.1 Definicin
61
62
63
BIBLIOGRAFA
66
IX
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
%arreglo 2 dimensiones
%arreglo 3 dimensiones
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
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
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.
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
2 5 10 15 10
I 2 7 0 7 0 15
1 11 4 5 5
N Bytes
3x5
x 4 7.5 Bytes
8
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
B 7
0 60 255 255
128 11 40 5
5
I3=
R
G
B
N Bytes
3x5
x 24 45 Bytes
8
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
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)
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
11
12
%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 )
13
12
14
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
15
%verifica si la
%indexada o no
imagen
es
ans =
truecolor
2.2
16
posible
realizar
las
siguientes
17
%imagen
%de ruido
%almacenada
%amplitud max
%del ruido: 96
18
%imagen con
%ruido
>> II = uint8( II );
>> image( II )
>> imwrite( II , prueba3.jpg );
2.4
19
.
.
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
20
21
3.
3.1
>> 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
3.2
>> image(saturn)
>> colormap(gray(256))
>> saturn = double(saturn);
>> ZZ = zeros( 2*size(saturn) - 1 );
>> [m,n] = size(saturn);
23
24
>> 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
25
>> 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
27
3.4
>> figure(1)
>> image(eight)
>> colormap(gray(256))
>> figure(2)
>> imhist(eight)
28
>> 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))
29
Inegativo = (2
1 ) Ioriginal
30
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
N BPP
* 2
1
Donde:
31
>> 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')
32
%comparacin de ambos
>> 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
33
34
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
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
I s (i, j) ( I o ( x, y) )
( x , y )V
Donde:
M: es el operador mediana en el entorno V.
35
>> 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
>> colormap(gray(256))
>> subplot(121),image(quarterR), title(Imagen Ruidosa)
>> subplot(122),image( IR1 ), title(Imagen Suavizada)
36
por:
B=mean(mean( A ));
37
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
38
>> IR = double(IR);
%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)
39
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
40
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.
41
>> 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;
>> 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
43
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
1 N1 N1
TI(u, v) I( x, y)e
N x 0 y 0
44
2 ( ux vy)
j
N
1 N1 N1
I( x, y) TI(u, v)e
N u 0 v 0
2 ( ux vy)
j
N
>> 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
45
46
47
48
>> I = round(255*I );
49
50
bb
ba
ab
aa
b
2
I
Original
Anlisis: Filtrado y
Decimacin
51
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.
52
>> I = round(255*I );
53
54
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)
55
56
8.2
57
8.4
58
%restricciones
%diseo de filtro
8.5
%restricciones
%diseo de filtro
59
%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
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;
61
%en GigaBytes
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
>> 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
82
81
79
81
81
79
82
79
82
81
81
82
tiempo
>> load mri
>> whos
63
Size
Bytes Class
4-D
89x3
1x3
>> size(D)
ans =
128 128
27
%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
65
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