Академический Документы
Профессиональный Документы
Культура Документы
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 ] ;
[Escriba texto]
Pgina 1
>> size( M1 )
ans =
2
%arreglo 2 dimensiones
%arreglo 3 dimensiones
[Escriba texto]
1
1
1
1
1
1
1
1
1
Pgina 2
M10(:,:,2) =
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
[Escriba texto]
Pgina 3
%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.
>>
>>
>>
>>
1.2
M12 = zeros( 5, 5 ,3 );
M12(:,:,1) = M11;
M12(:,:,2) = M11;
M12(:,:,3) = M11;
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)
1 0 1 1 1
I1 0 0 1 0 0
1 1 0 1 1
[Escriba texto]
Pgina 4
3x 5 x1 1.875 Bytes
N Bytes 8
b)
2 5 10 15 10
I2 7 0 7 0 15
1 11 4 5 5
Esta imagen tendr un total de bytes:
3x 5 x4 7.5 Bytes
N Bytes 8
[Escriba texto]
Pgina 5
B
Cyan
(0,0,1)
(0,1,1)
Magenta
(1,1,1)
(1,0,1)
Blanco
(0,1,0)
Negro
(0,0,0)
(1,1,0)
(1,0,0)
Amarillo
[Escriba texto]
Pgina 6
80
255 128 250
10
0 120
R 128 10
10
0
255
121
119
0
G 70 0 7 255 0
128 11 4
5
50
0
5 10 15 10
7
0 60 255 255
B
128 11 40 5
5
R
G
B
3x 5 x24 45 Bytes
N Bytes 8
[Escriba texto]
Pgina 7
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))
%Configuramos la
%figura para 2 niveles
%de gris: 0 y 1
%muestra una imagen
>> imagesc( I1 )
ans =
1
[Escriba texto]
Pgina 8
1.4
>>
>>
>>
>>
>>
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)
[Escriba texto]
Pgina 9
I5 = zeros(512,10);
for j =0:511, I5( j+1 , :) = j*ones(1,10); end
colormap(gray)
imagesc( I5 )
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 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);
[Escriba texto]
Pgina 10
>> 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;
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;
[Escriba texto]
Pgina 11
[Escriba texto]
Pgina 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 )
ans =
12
12
[Escriba texto]
Pgina 13
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
[Escriba texto]
Pgina 14
I = imfinfo('football', 'jpg');
% o tambin
F = 'c:\matlab6p5\toolbox\images\imdemos\football';
I = imfinfo(F, 'jpg');
% o tambin
I = imfinfo('football.jpg')
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: ' '
Comment: { }
Luego, para observar el contenido de cualquiera de estos campos
se utiliza la notacin siguiente:
>> I.Width
ans =
320
>> I.ColorType
[Escriba texto]
%verifica
si la
%indexada o no
Pgina 15
imagen
es
ans =
truecolor
2.2
[Escriba texto]
Pgina 16
help rgb2ind
N = 128;
%Nmero de colores
[ Iind, MAP] = rgb2ind(Irgb,N);
imshow(Iind,MAP)
help
help
help
help
ind2gray
gray2ind
rgb2gray
ind2rgb
[Escriba texto]
Pgina 17
%imagen
%de ruido
%almacenada
un
ruido
la
imagen
%amplitud max
%del ruido: 96
%imagen con
%ruido
>> II = uint8( II );
>> image( II )
>> imwrite( II , prueba3.jpg );
2.4
[Escriba texto]
Pgina 18
600
10
[Escriba texto]
Pgina 19
[Escriba texto]
Pgina 20
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,
2
[Escriba texto]
Pgina 21
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
[Escriba texto]
Pgina 22
>> image(saturn)
>> colormap(gray(256))
>> saturn = double(saturn);
>> ZZ = zeros( 2*size(saturn) - 1 );
>> [m,n] = size(saturn);
128
>> size(ZZ)
ans =
[Escriba texto]
Pgina 23
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
>> 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:
[Escriba texto]
Pgina 24
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
>> 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 ];
[Escriba texto]
Pgina 25
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))
[Escriba texto]
Pgina 26
3.4
[Escriba texto]
figure(1)
image(eight)
colormap(gray(256))
figure(2)
imhist(eight)
Pgina 27
)j,i(IN
Procesamiento Digital de Imgenes con Matlab
3.5
>> 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;
[Escriba texto]
Pgina 28
end
end
end
>> subplot(121),image(eight),title(Im. Tonos de gris)
>> subplot(122),image(eightB*255),title(Im. Binaria)
>> colormap(gray(256))
[Escriba texto]
NBPP
1 ) Ioriginal
IN = 255 - double(eight);
subplot(121),image(eight),title('Imagen Original')
subplot(122),image(IN),title('Imagen Negativo')
colormap(gray(256))
Pgina 29
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:
4.1
[Escriba texto]
Pgina 30
de gris en la
imagen original
IO (i, j)MIN ,
imagen original
NBPP, nmero de bits por pxel en la imagen
con intensidades 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
[Escriba texto]
Pgina 31
end
>> colormap(gray(256))
>> subplot(121),image(rice2),title('Imagen Original')
>> subplot(122),image(rice2T),title('Im Mas-Contraste')
%comparacin de ambos
>> subplot(122),imhist(rice2T)
4.2
%histogramas
[Escriba texto]
Pgina 32
>>
>>
>>
>>
>>
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
>> figure(1)
[Escriba texto]
Pgina 33
>> colormap(gray(256))
>> subplot(121),image(blood),title('Imagen Original')
>> subplot(122),image(bloodT),title('Imagen Mas Brillo')
figure(2)
bloodT = uint8( bloodT );
subplot(121),imhist(blood)
subplot(122),imhist(bloodT)