Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Cledson Souza
20 de julho de 2010
Introdução
Para testar nosso algoritmo iremos intencionalmente degradar uma imagem e tentar restaurá-
la. Usaremos o algoritmo no tempo discreto e assumimos certas premissas sobre o sinal que
consideraremos estacionário e sobre o ruído que deverá ter media =0. O algoritmo será
Teoria
A degradação da imagem pode ser modelada como um borrão, ou com vários tipos de
ruído, o ruído neste caso terá distribuição gaussiana e uniforme, assim a imagem de entrada
que os coeficientes Wn não mudam com o tempo e a saída do filtro é a convolução da entrada
cruzada, bastando apenas dizer que o Erro Médio Quadrático é dado por:
Onde:
RANDN.
FIGURA ORIGINAL
50
100
150
200
250
50 100 150 200 250
Usamos o desvio padrão SN=0,1 para a geração do ruído branco adicionado a imagem.
FIGURACOMRUIDO
50
100
150
200
250
50 100 150 200 250
O código também usa a variável bloco para parametrizar a largura das regiões de
suporte ao longo do programa, Nesse caso variamos para a imagem Lena de 3x3 a 19x19.
Abaixo, Tabela 01, coma discriminações dos valores de erro, SN e largura dos macroblocos e
o Gráfico 01 com a evolução do erro médio quadrático em função do aumento da largura dos
blocos
Tam_bloco SN MSE
3 0,1 1,8102
5 0,1 0,3923
7 0,1 0,3454
9 0,1 0,2914
15 0,1 0,2737
17 0,1 0,2379
Tabela 01 – Redução do MSE x bloco
Evolução do Erro
2,0
1,5
MSE
1,0
0,5
0,0
0 2 4 6 8 10 12 14 16 18
Largura das Regiões de Supore
Gráfico 01
blocos=3x3 para 0,3923 com blocos de 5x5 depois uma queda mais lenta até 15x15.
O experimento foi feito sempre normalizado com SN=0,1, somente variando o tamanho dos
blocos.
Abaixo vemos uma Tabela 02 com as imagens restauradas, notamos que na borda inferior e
direita das imagens filtradas, há um aumento de uma faixa escura, isto acontece devido ao
crescimento das regiões de suporte e da faixa de pixels lidos, há maneiras de suavizar este
efeito.
FIGURA FILTRADA COM BLOCO=3 F IG U R A F IL T R A D A C O M B L O C O = 5 F IG URA F ILTRA DA CO M B LO CO= 7
50 50 50
150 150
150
200
200 200
250
250 250
50 100 150 200 250
50 100 150 200 250 50 100 150 200 250
Imagem filtrada com bloco=3x3 Imagem filtrada com bloco=5x5 Imagem filtrada com bloco=7x7
F IG U R A F IL TR A D A C O M B L O C O = 9 F IG U R A F IL T R A D A C O M B L O C O = 1 5 F IG U R A F IL T R A D A C O M B LO C O = 17
50 50 50
Imagem filtrada com bloco=9x9 Imagem filtrada com bloco=15x15 Imagem filtrada com bloco=17x17
FIGURA ORIGINAL F IG U R A C O M R U ID O F IG U R A F IL T R A D A C O M B L O C O = 3
50 50 50
200 200
200
250 250
250
300 300
300
350
350 350
400
400 400
450
450 450
500
500 500 50 100 150 200 250 300 350 400 450 500
50 100 150 200 250 300 350 400 450 500 50 100 150 200 250 300 350 400 450 500
Imagem Original Imagem com ruído gaussiano, SN-0,1 Imagem filtrada com bloco=3x3
50 50 50
100 100 1 00
150 150 1 50
200 2 00
200
250 2 50
250
300 3 00
300
350 3 50
350
400
400 4 00
450
450 4 50
500
500 5 00
50 100 150 200 250 300 350 400 450 500
50 100 150 200 250 300 350 400 450 500 50 100 150 200 250 300 350 400 450 500
Imagem Original Imagem com ruído gaussiano, SN=0,1 Imagem filtrada com bloco=3x3
Conclusão
O filtro de Wiener é usado para reduzir a quantidade de ruído comparando com o sinal
blocos de 3x3 para 5x5, mas a partir de blocos com largura maior que 15x15 o tempo exigido
para a execução aumenta consideravelmente e para blocos maiores cada vez mais memória é
% Limpeza da memoria
clear all
%Inicializacao das variaveis
SN=0.1;
bloco=3;
k=0;
%leitura e exibicao na tela da imagem original
im=imread('baboon.tiff');
d=(double(im)/256);
colormap gray
figure(1);imagesc(d),title('FIGURA ORIGINAL');
colormap gray
%calculo , adicao do ruido e exibicao da imagem com ruido
N=double(sqrt(SN)*randn(size(d)));
u=d+N;
colormap gray
figure(2);imagesc(u),title('FIGURA COM RUIDO');
colormap Gray
%Loop para obtencao das amostras no tamanho dos blocos
cov_aux = zeros(64516,bloco^2);
d_aux = zeros(64516,1);for n = 2:256-bloco+1; %254,
for m = 2:256-bloco+1; %254,
B=u(n:n+bloco-1,m:m+bloco-1);
v=zeros(1,bloco^2);
v(:)=B;
k=k+1;
cov_aux(k,:)=v(1,:);
d_aux(k) = d(n+1,m+1);
end
end
%Calculo da autocorrelação , correlação cruzada e dos coeficientes de Wiener
Ru=cov(cov_aux);
C = cov([cov_aux d_aux]);
Pud = C(1:bloco^2,bloco^2+1);
W=(Ru^(-1))*Pud;
W = reshape(W,bloco,bloco);
%Obtenção da imagem filtrada, exibição da imagem e calculo do erro
Y = conv2(W,u);
colormap gray;
figure,imagesc(Y), title(['FIGURA FILTRADA COM BLOCO=',num2str(bloco)]);
colormap gray;
eaux=sum(d-Y(1:256,1:256)).^2;
e=(sum(eaux))/65536
Bibliografia
1. Adaptive Filtering Primer with MATLAB - Poularikas and Ramadan.- Taylor and
Francis -2006
2. Notas de Aula – Filtros adaptativos 1/2010 – Prof. Murilo Bresciani de Carvalho.
3. Adaptive Filtering Algorithms and Practical Implementation – Springer - 2008