Вы находитесь на странице: 1из 34

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

[Escriba texto]

%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

Pgina 1

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

[Escriba texto]

1
1
1

1
1
1

1
1
1

Pgina 2

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

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

%cambiando todos los

[Escriba texto]

Pgina 3

Procesamiento Digital de Imgenes con Matlab

%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)

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

[Escriba texto]

Pgina 4

Procesamiento Digital de Imgenes con Matlab

Esta imagen tendr un total de bytes:

3x 5 x1 1.875 Bytes
N 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.
Aquel pixel codificado con 2 N1 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
N 1 , este ser casi
reciba un cdigo prximo a 2
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
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

Procesamiento Digital de Imgenes con Matlab

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.

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

Procesamiento Digital de Imgenes con Matlab

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.

80
255 128 250
10
0 120
R 128 10

10

0
255
121

119
0

255 5 10 255 100

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

Esta imagen tendr un total de bytes:

3x 5 x24 45 Bytes
N Bytes 8

[Escriba texto]

Pgina 7

Procesamiento Digital de Imgenes con Matlab

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))

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

>> imagesc( I1 )

Verificando los valores de los pixels.


>> max( max ( I1 ))

%retorna el mximo del mximo


%de cada columna

ans =
1

[Escriba texto]

Pgina 8

Procesamiento Digital de Imgenes con Matlab

>> min( min ( I1 ))


ans =
0
Otros ejemplos:

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)

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)

[Escriba texto]

Pgina 9

En esta imagen, es posible observar la presencia de


pixels de color blanco, negro y diferentes tonos de gris.
Otro ejemplo:
>>
>>
>>
>>
1.5

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

Procesamiento Digital de Imgenes con Matlab

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.

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

Procesamiento Digital de Imgenes con Matlab

[Escriba texto]

Pgina 12

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 )
ans =
12

12

>> imshow( I8 , MAP/15 );

[Escriba texto]

Pgina 13

Procesamiento Digital de Imgenes con Matlab

En la figura anterior, se observa una imagen pequea,


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

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.

[Escriba texto]

Pgina 14

>> 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 raiz. Para mostrar el ejemplo correspondiente, se utiliza
un archivo de nombre football.jpg propio del Matlab.
>>
>>
>>
>>
I=

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: ' '

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

[Escriba texto]

%verifica
si la
%indexada o no

Pgina 15

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)

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

[Escriba texto]

Pgina 16

>> [ 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 posible realizar las siguientes conversiones:


>>
>>
>>
>>
2.3

help
help
help
help

ind2gray
gray2ind
rgb2gray
ind2rgb

%Indexada Tonos de Gris


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

Escritura en Archivos de Imgenes

Procesamiento Digital de Imgenes con Matlab

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

[Escriba texto]

Pgina 17

>> 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
anteriormente leda.

un

>> m = size( Irgb , 1 );


>> n = size( Irgb , 2 );
>> R = round( 96*rand(m,n,3) );
>> II = double( Irgb );
>> M = max(max(max( II )));
>> II = ( II + R - 96 );

ruido

la

imagen

%amplitud max
%del ruido: 96
%imagen con

Procesamiento Digital de Imgenes con Matlab

%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

[Escriba texto]

Pgina 18

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

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);

[Escriba texto]

Pgina 19

Posteriormente, para realizar una escritura en formato


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

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');

[Escriba texto]

Pgina 20

Procesamiento Digital de Imgenes con Matlab

3.

Procesamiento Bsico Espacial


mientras
que el mayor
tendr
un valorenigual
a 2 1.
El procesamiento
bsico
espacial
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,
2

>> NIV = round ( linspace(0 , 255 , power(2,2)+1) );


>> bacteria = double(bacteria);

[Escriba texto]

Pgina 21

>> 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;

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

[Escriba texto]

Pgina 22

Zoom por Promedios. Se nota una mejora considerable del image


resultante
>> 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);

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 =

[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

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:

[Escriba texto]

Pgina 24

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 ];

[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))

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))

[Escriba texto]

Pgina 26

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

[Escriba texto]

%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)

Pgina 27

)j,i(IN
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


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;

[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))

Procesamiento Digital de Imgenes con Matlab

Luego, para obtener el negativo de una imagen se realiza


la siguiente operacin:
Inegativo = (2
>>
>>
>>
>>

[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

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:

4.1

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.

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

[Escriba texto]

Pgina 30

Histograma de imgenes con intensidades de gris.


Donde:

IT (i, j), imagen transformada


IO (i, j), imagen original
IO (i, j)MAX , mayor valor del nivel

de gris en la

imagen original

IO (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.

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

[Escriba texto]

Pgina 31

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)

%comparacin de ambos

Procesamiento Digital de Imgenes con Matlab

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

%histogramas

Desplazamiento del Histograma


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

IT (i, j) IO (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

[Escriba texto]

Pgina 32

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
>> figure(1)

[Escriba texto]

Pgina 33

Procesamiento Digital de Imgenes con Matlab

>> 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)

Вам также может понравиться