en otra ventana

Anuncio
APÉNDICE B
Programas y funciones de MATLAB®
En éste Apéndice, se muestran los códigos para Matlab®, para llevar a cabo la
simulación del método propuesto en ésta tesis.
B.1 Función de los filtros de árbol doble para la implementación de la DTCWT(Real).
function [lo, hi] = afb2D(x, af1, af2)
if nargin < 3
af2 = af1;
end
% filter along columns
[L, H] = afb2D_A(x, af1, 1);
% filter along rows
[lo,
hi{1}] = afb2D_A(L, af2, 2);
[hi{2}, hi{3}] = afb2D_A(H, af2, 2);
B.2 Función de los coeficientes de los filtros de análisis.
function [af, sf] = farras
af = [
0
-0.01122679215254
0
0.01122679215254
-0.08838834764832
0.08838834764832
0.08838834764832
0.08838834764832
0.69587998903400
-0.69587998903400
0.69587998903400
0.69587998903400
0.08838834764832
-0.08838834764832
-0.08838834764832
-0.08838834764832
0.01122679215254
0
0.01122679215254
0
];
sf = af(end:-1:1, :);
B.3 Función de los coeficientes de los filtros de síntesis.
function [af, sf] = FSfarras
af{1} = [
143
APÉNDICE B
144
0
0
-0.08838834764832
-0.01122679215254
0.08838834764832
0.01122679215254
0.69587998903400
0.08838834764832
0.69587998903400
0.08838834764832
0.08838834764832
-0.69587998903400
-0.08838834764832
0.69587998903400
0.01122679215254
-0.08838834764832
0.01122679215254
-0.08838834764832
0
0
];
sf{1} = af{1}(end:-1:1, :);
af{2} = [
0.01122679215254
0
0.01122679215254
0
-0.08838834764832
-0.08838834764832
0.08838834764832
-0.08838834764832
0.69587998903400
0.69587998903400
0.69587998903400
-0.69587998903400
0.08838834764832
0.08838834764832
-0.08838834764832
0.08838834764832
0
0.01122679215254
0
-0.01122679215254
];
sf{2} = af{2}(end:-1:1, :);
B.4 Función para realizar la implementación del Umbral Óptimo con la
DWT.
function y=Ti_DWT(x)
[af, sf] = farras;
w1 = dwt2D(x,1,af);
W1=w1{1}{3};
sig2=(1/prod(size(x)))*sum(sum(abs(W1).^2));
Ti_1=(sqrt(2*log(prod(size(x)))*sig2));
y1 = idwt2D(w1,1,sf);
J=4;
w = dwt2D(y1,J,af);
W2=w{4}{3};
T=sqrt(((2*log(prod(size(x))))/(prod(size(x))))*sum((sum((abs(W2).^2)))));
% loop thru scales:
for j = 2:J
% loop thru subbands
for s = 1:3
w{j}{s} = soft(w{j}{s},T);
end
end
y = idwt2D(w,J,sf);
APÉNDICE B
145
B.5 Función para realizar la implementación del Umbral Óptimo con la
SWT.
function y=Ti_SWT(x)
W1 = swt2(x,1,'db4');
sig2=(1/prod(size(x)))*sum(sum(abs(W1(:,:,1)).^2));
Ti_1=(sqrt(2*log(prod(size(x)))*sig2));
SWTD1 = wthresh(W1,'s',Ti_1);
y1=iswt2(SWTD1,'db4');
%W1b = iswt2(x,1,'db4');
J=3;
W=swt2(y1,J,'db4');
T=sqrt(((2*log(prod(size(x))))/(prod(size(x))))*sum((sum((abs(W(:,:,1)).^2)))));
SWTD = wthresh(W,'s',T);
% Reconstruct the signal.
y = iswt2(SWTD,'db4');
B.6 Función para realizar la implementación del Umbral Óptimo con la DTCWT(Real).
function y = Ti_RCWT(x);
[Faf, Fsf] = FSfarras;
[af, sf] = dualfilt1;
w1 = dualtree2D(x,1,Faf,af);
W1=w1{1}{2}{3};
sig2=(1/prod(size(x)))*sum(sum(abs(W1).^2));
Ti_1=(sqrt(2*log(prod(size(x)))*sig2));
J1=1;
for j = 1:J1;
% loop thru subbands
for s1 = 1:2
for s2 = 1:3
w1{j}{s1}{s2} = soft(w1{j}{s1}{s2},Ti_1);
end
end
end
y1 = idualtree2D(w1,J1,Fsf,sf);
J = 4;
% loop thru scales:
w = dualtree2D(y1,J,Faf,af);
W2=w{4}{2}{3};
T=sqrt(((2*log(prod(size(x))))/(prod(size(x))))*sum((sum((abs(W2).^2)))));
for j = 2:J
% loop thru subbands
for s1 = 1:2
for s2 = 1:3
w{j}{s1}{s2} = soft(w{j}{s1}{s2},T);
end
APÉNDICE B
146
end
end
y = idualtree2D(w,J,Fsf,sf);
B.7 Ejemplo que implementa los diferentes métodos analizados en ésta tesis
con el algoritmo de umbral óptimo a la imagen de “Lenna”, realizando el
cálculo de las medidas de desempeño.
s1 = double(imread('Lenna2.tif'));
s = s1(:,:,3);
%load wbarb
x = s + 20*randn(size(s));
y1 = wiener2(x,[5 5]);
y2=Ti_DWT(x);
y3=Ti_SWT(x);
y4=Ti_RCWT(x);
figure(1)
clf
imagesc(s)
title('"Imagen Original"')
colormap(gray)
figure(2)
imagesc(x)
title('"Imagen con ruido"')
colormap(gray)
figure(3)
imagesc(y1)
title('"Imagen sin ruido" --Usando Filtrado Wiener--')
colormap(gray)
axis image
figure(4)
imagesc(y2)
title('"Imagen sin ruido" --Usando DWT--')
colormap(gray)
axis image
figure(5)
imagesc(y3)
title('"Imagen sin ruido" --SWT--')
colormap(gray)
axis image
figure(6)
imagesc(y4)
title('"Imagen sin ruido" --Usando DT-CWT(Real)--')
colormap(gray)
axis image
MSE_WIE_4=((1/prod(size(s))))*(sum(sum(((s-y1).^2))));
PSNR_WIE_4=20*(log10((256-1)/(sqrt(MSE_WIE_4))));
APÉNDICE B
147
MSE_DWT_4=((1/prod(size(s))))*(sum(sum(((s-y2).^2))));
PSNR_DWT_4=20*(log10((256-1)/(sqrt(MSE_DWT_4))));
MSE_SWT_4=((1/prod(size(s))))*(sum(sum(((s-y3).^2))));
PSNR_SWT_4=20*(log10((256-1)/(sqrt(MSE_SWT_4))));
MSE_RCWT_4=((1/prod(size(s))))*(sum(sum(((s-y4).^2))));
PSNR_RCWT_4=20*(log10((256-1)/(sqrt(MSE_RCWT_4))));
MSE_DCWT_4=((1/prod(size(s))))*(sum(sum(((s-y5).^2))));
PSNR_DCWT_4=20*(log10((256-1)/(sqrt(MSE_DCWT_4))));
MSE_T=[MSE_WIE_4 MSE_DWT_4 MSE_SWT_4 MSE_DCWT_4 MSE_RCWT_4];
PSNR_T=[PSNR_WIE_4 PSNR_DWT_4 PSNR_SWT_4 PSNR_DCWT_4 PSNR_RCWT_4];
B.8 Ejemplo con la función de Matlab® “wiener2” [MAT02], para llevar a
cabo la reducción de ruido con filtrado Wiener a la imagen de “Lenna”.
s1 = double(imread('Lenna2.tif'));
s = s1(:,:,3);
x = s + 20*randn(size(s));
y1 = wiener2(x,[5 5]);
imagesc(y1)
title('"Imagen sin ruido" --Usando Filtrado Wiener--')
colormap(gray)
axis image
Descargar