Programas en Matlab

Anuncio
Apéndice
A
Programas en Matlab
A continuación se presentan los programas utilizados en el desarrollo de este trabajo de
tesis, es conveniente mencionar que para un mejor desempeño al realizar pruebas con estos
algoritmos se trabaje con imágenes en blanco y negro en formato .bmp.
A.1.
Programa que compara el módulo de la TF con
diferentes exponentes
k = 0.3;
modulo = [0.2
1
2];
xx = 0;
yy = 3;
f igure,
f or jj = 1 : yy
a = imread([0 N ombreDeLaImagen.F ormato0 ],0 F ormato0 );
a = imresize(a, [256256],0 bilinear0 );
a = double(a);
a = a − mean2(a);
af f t = abs(f f tshif t(f f t2(f f tshif t((a)))));
af f t = af f t. ∧ modulo(jj);
xx = xx + 1;
subplot(3, 3, xx)
imshow(af f t, []);
35
36
A.2. Programa que compara imágenes escaladas y rotadas
af f t = compspectrum(256). ∗ af f t;
af f t = maplog2(mapolar(f actorro(af f t)));
xx = xx + 1;
subplot(3, 3, xx)
imshow(af f t, []);
af f t = (f f tshif t(f f t2(f f tshif t(af f t))));
xx = xx + 1;
subplot(3, 3, xx)
imshow(abs(af f t), []);
end
A.2.
Programa que compara imágenes escaladas y rotadas
k = 0.3;
Escala = [80
85
Rotacion = [0
20
90
40
95
60
100
80
105];
100
120
140
160
180];
xx = 10;
yy = 10;
f or jj = 5 : yy
a = imread([0 N ombreDeLaImagen.F ormato0 ],0 F ormato0 );
af f t = T rans Escala(a, k);
f or ii = 1 : xx;
%Escaladas
f or hh = 1 : 6
b = imread([0 N ombreDeLaImagen.F ormato0 ],0 F ormato0 ); %imagenproblema
bf f t = T rans Escala(b, k);
f c = bf f t. ∗ conj(af f t);
f cf = real(f f tshif t(if f t2(f f tshif t(f c))));
[P CE esc(ii, hh), c max esc(ii, hh)] = M etrica P CE(f cf );
end
%Rotadas
A. Programas en Matlab
f or hh = 1 : 10
b = imread([0 N ombreDeLaImagen.F ormato0 ],0 F ormato0 ); %imagenproblema
bf f t = T rans Escala(b, k);
f c = bf f t. ∗ conj(af f t);
f cf = real(f f tshif t(if f t2(f f tshif t(f c))));
[P CE rot(ii, hh), c max rot(ii, hh)] = M etrica P CE(f cf );
end
end
end
A.3.
Funciones
A.3.1.
Función compspectrum
f unction OU T = compspectrum(rows)
r = (rows − 1)/2;
f = 2 ∗ pi/r;
[x y] = meshgrid(−r : r);
OU T = f. ∗ (x. ∗ x + y. ∗ y);
A.3.2.
Función factorro
f unction y = f actorro(f )
[m, n] = size(f );
centro = m/2;
f or i = 1 : m
f or j = 1 : m
r(i, j) = sqrt((sqrt((i − centro). ∧ 2 + (j − centro). ∧ 2))./(sqrt(2). ∗ centro));
end
end
r = r + 1;
y = r. ∗ f ;
37
38
A.3.3.
A.3. Funciones
Función mapolar
f unction g = mapolar(f )
[m, n] = size(f );
f or i = 1 : m
teta(i) = (2 ∗ pi) ∗ (i − 1)/(m − 1);
r(i) = m ∗ (i − 1)/(sqrt(2) ∗ (m − 1));
ind(i) = i;
end
f or i = 1 : m
f or j = 1 : m
x(i, j) = m/2 + r(i). ∗ cos(teta(j));
y(i, j) = m/2 − r(i). ∗ sin(teta(j));
if (x(i, j) > m||y(i, j) > m|x(i, j) < 1|y(i, j) < 1)
g(i, j) = 0;
else
g(i, j) = f (round(y(i, j)), round(x(i, j)));
end
end
end
f or i = 1 : 60
f or j = 1 : 256g(i, j) = interp2(ind0 , ind, f, x(i, j), y(i, j),0 ∗linear0 );
end
end
A.3.4.
Función maplog2
f unction y = maplog2(x);
[m, n] = size(x);
f or i = 1 : m
ind(i) = i;
A. Programas en Matlab
orig(i) = exp((i − 1). ∗ ((log(m))./(m − 1)));
end
y = interp2(ind0 , ind, x, ind0 , orig);
A.3.5.
Función Trans Escala
f unction af f t = T rans Escala(a, k)
a = imresize(a, [256 256],0 bilinear0 );
a = double(a);
a = a − mean2(a);
af f t = abs(f f tshif t(f f t2(f f tshif t((a)))));
af f t = compspectrum(256). ∗ af f t;
af f t = maplog2(mapolar(f actorro(af f t)));
af f t = (f f tshif t(f f t2(f f tshif t(af f t))));
af f t = imresize(af f t, [256 256],0 bilinear0 );
f f a = angle(af f t);
mods = abs(af f t). ∧ k;
af f t = mods. ∗ exp(i ∗ f f a);
A.3.6.
Función Metrica PCE
f unction [P CE, numerador] = M etrica P CE(f cf )
cn2 = f cf ;
cn2 = max(max(cn2));
numerador = abs(cn2). ∧ 2;
suma = 0.0;
f or ii = 1 : 256
f or jj = 1 : 256
suma = suma + abs(f cf (ii, jj)). ∧ 2;
end
end
deno = suma;
P CE = numerador/deno;
39
Descargar