relatorio final filtro de wiener-cledson

11
Restauração de Imagem usando Filtro de Wiener Cledson Souza 20 de julho de 2010

Upload: cledson-souza

Post on 23-Jun-2015

221 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Relatorio Final Filtro de Wiener-Cledson

Restauração de Imagem usando Filtro de Wiener

Cledson Souza

20 de julho de 2010

Page 2: Relatorio Final Filtro de Wiener-Cledson

Introdução

Neste projeto, investigaremos a restauração de imagem usando filtragem de Wiener.

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á

implementado no MATLAB 7.0 usando as funções de matriz covariância, correlação cruzada

e convolução. Não usaremos nenhuma das funções da “toolbox” da ferramenta.

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

sofrerá uma adição de ruído branco ver diagrama na figura 1

Figura 1 – Diagrama de blocos adaptado das notas de aula

O diagrama de bloco acima pode ser descrito com a seguinte equação:

Page 3: Relatorio Final Filtro de Wiener-Cledson

Como já mencionado, assumindo que x(n) tem média zero e, além disso, assumindo

que os coeficientes Wn não mudam com o tempo e a saída do filtro é a convolução da entrada

com os coeficientes de Wiener (w), então obtemos:

Onde N é o número de coeficientes do filtro.

Não nos alongaremos no detalhamento das matrizes de autocorelação e correlação

cruzada, bastando apenas dizer que o Erro Médio Quadrático é dado por:

J(w) = E[e2(n)]= E[[d(n)-wT-x(n)]2]

J(w) = E[[d(n)-wT-x(n)][d(n)- wTx(n)]T

J(w) = E[d2(n)-wTx(n)d(n)-d(n) xT(n)w +wT x(n) xT (n)w]

J(w) = E[d2(n) ]-2wTE[d(n)x(n)] +wT E[x(n) xT (n) ]w

= σ2d – 2 wT Pdx+ wT Rxw

Assim, Jmin= σ2d – Pdx T + Rx

-1 Pdx

Onde:

wT x(n)= xT(n)w = escalar

σ2d= variância do sinal desejado, d(n)

Pdx= Vetor correlação cruzada entre d(n) e x(n)

Rx = Matriz autocorrelação de x(n)

Page 4: Relatorio Final Filtro de Wiener-Cledson

Implementação:

O algoritmo implementado usando o MATLAB e todas as imagens foram

normalizadas no intervalo entre [0,1] em função da adição do ruído através da função

RANDN.

A imagem usada foi a Lena.jpg 256x256:

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.

FIGURA COM RUIDO

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

Page 5: Relatorio Final Filtro de Wiener-Cledson

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 MSE3 0,1 1,81025 0,1 0,39237 0,1 0,34549 0,1 0,2914

15 0,1 0,273717 0,1 0,2379

Tabela 01 – Redução do MSE x bloco

Evolução do Erro

0,0

0,5

1,0

1,5

2,0

0 2 4 6 8 10 12 14 16 18

Largura das Regiões de Supore

MS

E

Gráfico 01

O Gráfico 01 demonstra o resultado esperado, um salto decrescente do erro de 1,8102 com

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.

Page 6: Relatorio Final Filtro de Wiener-Cledson

FIGURA FILTRADA COM BLOCO=3

50 100 150 200 250

50

100

150

200

250

FIGURA FILTRADA COM BLOCO=5

50 100 150 200 250

50

100

150

200

250

FIGURA FILTRADA COM BLOCO=7

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

FIGURA FILTRADA COM BLOCO=9

50 100 150 200 250

50

100

150

200

250

FIGURA FILTRADA COM BLOCO=15

50 100 150 200 250

50

100

150

200

250

FIGURA FILTRADA COM BLOCO=17

50 100 150 200 250

50

100

150

200

250

Imagem filtrada com bloco=9x9 Imagem filtrada com bloco=15x15 Imagem filtrada com bloco=17x17

Tabela 02 - Imagens restauradas em ordem crescente de tamanho de bloco.

FIGURA ORIGINAL

50 100 150 200 250 300 350 400 450 500

50

100

150

200

250

300

350

400

450

500

FIGURA COM RUIDO

50 100 150 200 250 300 350 400 450 500

50

100

150

200

250

300

350

400

450

500

FIGURA FILTRADA COM BLOCO=3

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

Tabela 03 - Comparação de tratamento da imagem f16.tiff

Page 7: Relatorio Final Filtro de Wiener-Cledson

FIGURA ORIGINAL

50 100 150 200 250 300 350 400 450 500

50

100

150

200

250

300

350

400

450

500

FIGURA COM RUIDO

50 100 150 200 250 300 350 400 450 500

50

100

150

200

250

300

350

400

450

500

FIGURA FILTRADA COM BLOCO=3

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

Tabela 04 - Comparação de tratamento da imagem baboon.tiff

Conclusão

O filtro de Wiener é usado para reduzir a quantidade de ruído comparando com o sinal

desejado. Como é possível observar nos resultados a restauração da imagem não é

absolutamente perfeita, porém consegue um resultado muito próximo do original, mesmo em

um PC pouco robusto. Observamos que o erro é reduzido drástica e rapidamente variando os

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 é

necessária devido ao cálculo da matriz inversa, tornando o algoritmo muito custoso.

Page 8: Relatorio Final Filtro de Wiener-Cledson

Código:

% Limpeza da memoriaclear all

%Inicializacao das variaveisSN=0.1;bloco=3;k=0;

%leitura e exibicao na tela da imagem originalim=imread('baboon.tiff');d=(double(im)/256);colormap grayfigure(1);imagesc(d),title('FIGURA ORIGINAL');colormap gray

%calculo , adicao do ruido e exibicao da imagem com ruidoN=double(sqrt(SN)*randn(size(d)));u=d+N;colormap grayfigure(2);imagesc(u),title('FIGURA COM RUIDO');colormap Gray

%Loop para obtencao das amostras no tamanho dos blocoscov_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);

endend

%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 erroY = 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

Page 9: Relatorio Final Filtro de Wiener-Cledson

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