Академический Документы
Профессиональный Документы
Культура Документы
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp(' SELECCIONAR EL TIPO DE TRANSFORMACIN A REALIZAR ')
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('
')
disp('
')
IM = input('Ingresar la imagen entre apstrofes:
');
disp('
')
disp(' 1).Dilatacin ')
disp(' 2).Contraccin ')
disp(' 3).Rotacin ')
disp(' 4).Traslacin ')
disp(' 5).Adicional ')
disp('
')
K = input('Ingresar nmero:
');
if K==1
%OPERACIN DE DILATACIN
disp('
')
h = input('Ingresar el elemento estructural [3x3] entre corchetes:
');
I = imread(IM);
[f,c,n] = size(I);
%obtenemos el tamao de la imagen: filas, columnas y
si es color (n=3) o gris (n=1)
if n==1
Id = zeros( f+2, c+2 );
%creamos una matriz Id completamente de
ceros, pero con dos filas y dos columnas ms.
Id(2:f+1 , 2:c+1 ) = I;
%encajamos la matriz de imagen "I" en el
centro de la matriz de ceros, quedando todo el permetro lleno de ceros.
for i=1:f
%Hacemos un recorrido de la matriz
"Id", por bloques de 3x3.
for j=1:c
%A ese bloque de 3x3 le
multiplicamos el elemento estructurante "h"
IdDD(i,j) = max(max( Id(i:i+2 , j:j+2) .* h ));
%y
tomamos el valor mximo de ese producto.
end
%el resultado lo almacenamos en una nueva matriz IdDD
end
IdDD = uint8(IdDD);
%hacemos la conversin al
formato ENTERO NO SIGNADO
subplot(1,3,1), imshow( I ) , title('Imagen Original')
subplot(1,3,2), imshow( IdDD ) , title('Imagen Dilatada')
subplot(1,3,3), EE=strel('arbitrary',h); M=imdilate(I,EE);
imshow(M), title('Utilizando funcin IMDILATE')
elseif n==3
IdR = zeros( f+2, c+2 );
%Creamos una matriz de ceros, con 2
filas y 2 columnas adicionales al tamao de la matriz de canal ROJO de la imagen
original
IdR(2:f+1 , 2:c+1 ) = I(:,:,1);
%encajamos la matriz de canal
rojo en el centro de la matriz de ceros.
IdG = zeros( f+2, c+2 ); IdG(2:f+1 , 2:c+1 ) = I(:,:,2); %hacemos
lo mismo con el canal VERDE
IdB = zeros( f+2, c+2 ); IdB(2:f+1 , 2:c+1 ) = I(:,:,3);
%y con
el canal AZUL
for i=1:f
for j=1:c
IdRR(i,j) = max(max( IdR(i:i+2 , j:j+2) .* h ));
%Tan igual como se hizo con la imagen de gris
IdGG(i,j) = max(max( IdG(i:i+2 , j:j+2) .* h ));
%se
hace el producto de un bloque de 3x3 de
IdBB(i,j) = max(max( IdB(i:i+2 , j:j+2) .* h ));
%cada canal y se multiplica con el elemento estructurante
end
%y se toma como resultado el valor mximo
de dicho producto. Este producto da como resultado
end
%una nueva matriz de 3x3 pixels.
IdRR = uint8(IdRR);
%se convierte cada canal de color al formato
ENTERO NO SIGNADO
IdGG = uint8(IdGG);
IdBB = uint8(IdBB);
IdRGB = cat(3,IdRR,IdGG,IdBB);
%se concatena o se juntan los tres
canales en una sola variable.
subplot(1,3,1), imshow( I ) , title('Imagen Original')
subplot(1,3,2), imshow( IdRGB ) , title('Imagen Dilatada')
subplot(1,3,3), EE=strel('arbitrary',h); M=imdilate(I,EE);
imshow(M), title('Utilizando funcin IMDILATE')
end
elseif K==2
%OPERACIN DE CONTRACCIN
disp('
')
h = input('Ingresar el elemento estructural [3x3] entre corchetes:
');
I = imread(IM);
[f,c,n] = size(I);
k1 = 1;
if n==1
Ic = 255*ones( f+2, c+2 );
%se forma una matriz con valores
iguales a 255, pero con 2 filas y 2 columnas adicionales al tamao de la imagen
original
Ic(2:f+1 , 2:c+1 ) = I;
%se encaja la matriz de la imagen
original en el centro de la matriz de valores iguales a 255.
for i=1:f
% Esta rutina permite recorrer
toda la imagen Ic por bloques de 3x3.
for j=1:c
GR = Ic(i:i+2 , j:j+2);
%Aqu se guarda el primer,
segundo, ... bloque de 3x3 en GR, temporalmente.
for i1=1:3
%Con este "for"
se recorre el bloque de 3x3 (GR) y se verifica que elemento
for j1=1:3
%coincide con el
valor "1" del elemento estructural definido en "h".
if h(i1,j1)==1,
%Aqu se hace la
verificacin si el elemento de "h" es igual a 1.
V(k1) = GR(i1,j1); %Si es
igual a 1 se construye un vector con el valor de GR.
else
V(k1) = 255;
%Si no es igual
a 1 se construye un vector con un valor grande
end
k1 = k1 + 1;
%Incrementa los
elementos del vector creado "V"
end
end
IdCC(i,j) = min(V);
%Una vez creado el vector
"V" con todos los elementos del bloque 3x3
k1 = 1;
%denominado GR, se
determina el ms pequeo (por tratarse de una
end
%transformacin de CONTRACCIN. Este valor pequeo se almacena
end
% en la matriz
IdCC.
IdCC = uint8(IdCC);
%se cambia al formato ENTERO NO SIGNADO.
subplot(1,3,1), imshow( I ) , title('Imagen Original')
subplot(1,3,2), imshow( IdCC ) , title('Imagen Contrada')
subplot(1,3,3), EE=strel('arbitrary',h); M=imerode(I,EE); imshow(M),
title('Utilizando funcin IMERODE')
elseif n==3
k1 = 1;
IcR = 255*ones( f+2, c+2 ); IcR(2:f+1 , 2:c+1 ) = I(:,:,1);
%Tan
igual que en el caso de la imagen de GRIS
IcG = 255*ones( f+2, c+2 ); IcG(2:f+1 , 2:c+1 ) = I(:,:,2); %PEro
esta vez se realiza sobre cada canal de color
negativo
positivo
negativo
color en
end
elseif HO<0 & VE>=0 %Cdigo para el caso que el desplazamiento es
para horizontal y positivo para vertical
for i=0:f-1
for j=c-1:-1:0
x = i + VE;
y = j + HO;
if x>=0 & y>=0 & x<=f & y<=c
ITr(x+1,y+1) = I(i+1,j+1,1);
ITg(x+1,y+1) = I(i+1,j+1,2);
ITb(x+1,y+1) = I(i+1,j+1,3);
end
end
end
elseif HO>=0 & VE<0 %Cdigo para el caso que el desplazamiento es
para horizontal y negativo para vertical
for i=f-1:-1:0
for j=0:c-1
x = i + VE;
y = j + HO;
if x>=0 & y>=0 & x<=f & y<=c
ITr(x+1,y+1) = I(i+1,j+1,1);
ITg(x+1,y+1) = I(i+1,j+1,2);
ITb(x+1,y+1) = I(i+1,j+1,3);
end
end
end
elseif HO<0 & VE<0 %Cdigo para el caso que el desplazamiento es
para horizontal y negativo para vertical
for i=f-1:-1:0
for j=c-1:-1:0
x = i + VE;
y = j + HO;
if x>=0 & y>=0 & x<=f & y<=c
ITr(x+1,y+1) = I(i+1,j+1,1);
ITg(x+1,y+1) = I(i+1,j+1,2);
ITb(x+1,y+1) = I(i+1,j+1,3);
end
end
end
end
IT = cat(3,ITr,ITg,ITb);
%se concatena las tres imgenes de
una sola variable.
IT = uint8(IT);
%se convierte a formato entero no
signado
subplot(1,2,1), imshow( I ) , title('Imagen Original')
subplot(1,2,2), imshow( IT ) , title('Imagen Trasladada')
end
elseif K==5
%OPERACIN DE SUMA CON UN COMPLEJO
disp('
')
a = input('Ingresar la parte real: "z = a + b i ":
'); %se almacena en
"a" la parte real de la variable compleja
b = input('Ingresar la parte imaginaria de: "z = a + b i " :
'); %se
almacena en "b" la parte imaginaria de la variable compleja
z = a + b*i;
%se forma el complejo en "z"
z1 = 1/z;
%se obtiene la inversa del complejo
z2 = 1/z/z; %se obtiene la inversa del cuadrado del complejo
z3 = 1/(z+1); %se obtiene la inversa de la suma del complejo con 1.
I = imread(IM);
[f,c,n] = size( I );
if n==1
%para una imagen de gris
I1 = double( I ) + z1 * ones(f,c);
%se suma la imagen original con
una matriz conformada por complejos del mismo valor (correspondiente a la inversa
z1)
I1 = abs( I1 );
%se obtiene el mdulo del resultado de la
suma
I1 = uint8( I1 ); %se convierte a formato entero no
signado
I2 = double( I ) + z2 * ones(f,c);
I2 = abs( I2 );
I2 =
uint8( I2 );
%lo mismo para las otras operaciones
I3 = double( I ) + z3 * ones(f,c);
I3 = abs( I3 );
I3 =
uint8( I3 );
%de inversa del complejo al cuadrado e inversa del complejo mas 1.
subplot(2,2,1), image( I ), title('Imagen Original')
subplot(2,2,2), image( I1 ), title('Imagen + 1/z ')
subplot(2,2,3), image( I2 ), title('Imagen + 1/z^2 ')
subplot(2,2,4), image( I3 ), title('Imagen + 1/(z+1) ')
elseif n==3
%para color
I1r = double( I(:,:,1) ) + z1 * ones(f,c);
I1r = abs( I1r );
I1r = uint8( I1r ); %se realiza el mismo procedimiento pero por cada canal de
color
I1g = double( I(:,:,2) ) + z1 * ones(f,c);
I1g = abs( I1g );
I1g = uint8( I1g ); %se suma a la imagen original una matriz de complejos iguales
I1b = double( I(:,:,3) ) + z1 * ones(f,c);
I1b = abs( I1b );
I1b = uint8( I1b ); %se obtiene el mdulo y se convierte a formato entero no
signado
I2r =
I2r = uint8( I2r
I2g =
I2g = uint8( I2g
I2b =
I2b = uint8( I2b
double(
); %lo
double(
);
double(
);
I3r =
I3r = uint8( I3r
I3g =
I3g = uint8( I3g
I3b =
I3b = uint8( I3b
I1
cada canal de
I2
I3
I(:,:,1) ) + z2 * ones(f,c);
I2r = abs( I2r );
mismo para el canal rojo, verde y azul
I(:,:,2) ) + z2 * ones(f,c);
I2g = abs( I2g );
I(:,:,3) ) + z2 * ones(f,c);
end
= cat(3,I1r,I1g,I1b);
I1 = uint8(I1); %se concatena
color en una sola variable y se convierte a entero no signado
= cat(3,I2r,I2g,I2b);
I2 = uint8(I2);
= cat(3,I3r,I3g,I3b);
I3 = uint8(I3);
subplot(2,2,1),
subplot(2,2,2),
subplot(2,2,3),
subplot(2,2,4),
end
image(
image(
image(
image(
I ), title('Imagen Original')
I1 ), title('Imagen + 1/z ')
I2 ), title('Imagen + 1/z^2 ')
I3 ), title('Imagen + 1/(z+1) ')