FEN- 06723 Processamento Digital de Imagens Projeto 3 Utilizando filtragem rejeita faixa para tirar ruído de imagem Marcelo Musci Mestrado Geomática/UERJ-2004 Abstract Frequency space offers some attractive advantages for image processing. It makes large linear filtering operations (equivalent to the application of large neighborhood kernels) much faster, and it collects information together in different ways that can sometimes separate signal from noise or allow measurements that would be very difficult in the spatial domain. The common denominator in all of these operations is the FFT or fast Fourier transform. The Fourier transform of an image, as expressed by the amplitude spectrum, is a breakdown of the image into its frequency or scale components. Filtering can be viewed as a technique for separating these components. Such filters operate on the amplitude spectrum of an image and remove, attenuate or amplify the amplitudes in specified wavebands. Any wavelength or waveband can be operated upon in the frequency domain. Periodic noise is commonly performed in frequency space. In images with periodic noise, which can result from the image sensor, from electronic interference, etc., the frequency transform collects all of the noise into a few spots which can be eliminated. There are automatic ways to locate peaks in the FFT image, for instance a top hat filter, but in this experiment it will be selected manually. The same forward FT is performed, visualized and then eliminated, afterwards the inverse transform, IFFT, is calculated and the original image is visualized without noise. All these experiments are made using matlab.
Introdução A Transformada de Fourier é uma importante ferramenta no processamento digital de imagens, ela decompõe uma imagem, composta de suas coordenas espaciais, em componentes de freqüência. Qualquer curva ou superfície pode ser expressa como a soma de um certo número de funções seno e co-seno sendo no domínio da freqüência uma imagem é representada pelos valores de suas funções seno e co-seno. A saída da transformada de Fourier representa uma imagem no domínio da freqüência, enquanto que a imagem original é representada no domínio espacial. Na imagem no domínio de Fourier, cada ponto representa uma freqüência particular equivalente ao domínio espacial da imagem Para o uso em imagens digitais, torna-se necessário o uso da Transformada Discreta de Fourier (DFT), que não contem todas as freqüências que formam uma imagem, mas somente um conjunto de freqüências, suficientemente largo, para descrever a imagem em seu domínio espacial. O número de freqüências envolvidas corresponde ao número de pixels da imagem no domínio espacial. Para uma imagem quadrada de tamanho NxN, a transformada bidimensional DFT é dada por: aonde f(i,j) é a imagem no domínio espacial e o termo exponencial corresponde aos pontos F(k,l) no domínio de Fourier. As funções básicas são seno e co-seno com freqüências em ordem crescente, aonde F(0,0) representa a componente DC da imagem, que corresponde ao brilho médio da imagem original e F(N-l,N-l) representa a mais alta freqüência. De forma similar, a imagem de Fourier pode ser re-transformada para o domínio espacial. A Transformada Inversa de Fourier é da dada por: Para efeitos computacionais utiliza-se algoritmos que implementam de forma rápida a transformada de Fourier e sua inversa, sendo estes algoritmos chamados de Transformada Rápida de Fourier (FFT) e sua Inversa (IFFT). O Matlab implementa essas funções, chamadas respectivamente de fft2 e ifft2. A Transformada de Fourier produz em sua saída uma imagem com valor numérico no campo dos números complexos, que pode ser mostrada como duas imagens, sendo uma a parte real e a outra a parte imaginária, ou como módulo e fase. Em processamento de imagens é usual trabalhar-se somente com o módulo da transformada, que contém a maioria da informação da estrutura geométrica do domínio espacial da imagem. Entretanto para a correta reconstrução da imagem original, como uso da IFFT, torna-se necessário a presença de ambos os componentes, módulo e fase. Filtrando Ruído Uma grande aplicação da FFT é a filtragem de ruídos, em imagens ou sons. Se um sinal contendo ruído for analisado no domínio da freqüência, a implicação do ruído será um ou mais valores altos correspondentes a freqüências altas, correspondendo a picos na transformada de Fourier do sinal. O que se deseja é, portanto, anular o valor dessa transformada nos pontos em que há tais picos. A diferença básica entre uma imagem com ruído e a mesma sem ruído é o fato de a FFT da imagem com ruído ter valores altíssimos em pontos muito específicos; à exceção desses pontos, os valores entre essas
duas FFTs são muito próximos, ou proporcionais. Sendo assim, dada a FFT de uma imagem, seja P o conjunto de pares (x,y) tal que FFT(I(x,y)) assume valores altíssimos correspondentes às altas freqüências dominantes. Para facilitar a análise da FFT, podemos decompô-la em funções A, B, tais que: I(x,y) = A(x,y) +B(x,y), onde: A(x,y) = I, se (x,y) P 0, se (x,y) P B(x,y) = I, se (x,y) P 0, se (x,y) P Nesse caso, a componente A corresponde à imagem em si, sem ruído, enquanto que a componente B corresponde ao ruído. Se for feita uma transformação L em I tal que L(I) = A, e fizermos a IFFT dessa transformação, o resultado deverá ser muito parecido com I (a única diferença que deve haver entre a IFFT( L(I) ) e I é a ausência de ruído em IFFT( L(I) ). A transformação L é simplesmente a retirada dos picos de freqüência dos ruídos na imagem da transformada. Implementação e Resultados A imagem original,, figura 1, corrompida por ruído senoidal, apresenta um acréscimo de uma função periódica, com um período suficientemente pequeno para que sejam percebidos na direção da imagem. Funções desse tipo, quando não fazem parte propriamente do objeto que a imagem representa, são denominadas ruído. Uma outra forma de perceber a presença do ruído é observar a imagem no domínio da freqüência (FFT). Foi aplicada a Transformada de Fourier (fft2), e em seguida a função fftshift para centralização da freqüência zero (nível DC) da transformada no centro do eixo de coordenas. Observa-se na figura 2 a FFT da imagem mostrada anteriormente. Nota-se que as altas freqüências mencionadas anteriormente aparecem sob a forma de picos, cuja distância em relação ao centro é proporcional à sua freqüência. Dessa maneira, o ruído, que aparece em toda a imagem no domínio do espaço, aparece concentrado em pontos isolados no domínio da freqüência. Como nesse caso a operação é simétrica em módulo, cada freqüência de ruído corresponde a dois picos. Percebe-se o surgimento de dois pares de picos afastados da origem. As coordenadas dos picos de ruídos,visualizados na figura 2, foram calculadas como uso de uma função max do matlab, essa função é aplicada nos quatro quadrantes que compõem a imagem, da transformada e calculadas as coordenadas relativas aos pontos encontrados. A seguir foram calculadas as coordenadas absolutas, em relação ao canto superior esquerdo da imagem origem dos eixos, para eliminação dos picos de ruído, que forma então zerados. Esse artifício torna-se necessário para aplicação da função max, que de outra forma não poderia ser usada pois além de termos quatro valores de máximo diferentes (calculo de quatro coordenadas) temos também que evitar introduzir a coordenado da freqüência zero (pico central), não é interessante zerar o pico central, pois esse corresponde à freqüência nula, que naturalmente não é ruído. Após a retirada dos picos, figura 4, aplica-se a função ifftshift e a inversa da transformada (ifft2), para recuperação da imagem no domínio espacial, que agora se encontra livre dos ruídos, figura 3.
Resultados - Imagens Figura 1 Imagem Original Figura 2 FFT da Imagem Original Figura 3 Imagem limpa Figura 4 FFT da Imagem limpa
Apêndice Script de chamda da FFT : %fftvisual.m I=imread('imagem3.tif'); %subplot(2,1,1); %imshow(i),title('imagem Original'); [nx,ny]=size(i); fti=fftshift(fft2(i)); [x,y]=meshgrid(1:ny,1:nx); figure,mesh(x,y,abs(fti/(nx*ny))),title('transformada de Fourier'); %Calcula coordenadas dos quatros pontos de interferencia %Exclui o centro de valor medio - espaço de 10 pixels [a(1),b(1)]=find(fti(1:(nx/2-10),1:(ny/2-10))==max(max(fti(1:(nx/2-10),1:(ny/2-10))))); [a(2),b(2)]=find(fti(1:(nx/2-10),(ny/2+10):ny)==max(max(fti(1:(nx/2-10),(ny/2+10):ny)))); [a(3),b(3)]=find(fti((nx/2+10):nx,1:(ny/2-10))==max(max(fti((nx/2+10):nx,1:(ny/2-10))))); [a(4),b(4)]=find(fti((nx/2+10):nx,(ny/2+10):ny)==max(max(fti((nx/2+10):nx,(ny/2+10):ny)))); %Calcula coordenadas em valores absolutos a(3)=(nx/2+10)-1+a(3); a(4)=(nx/2+10)-1+a(4); b(2)=(ny/2+10)-1+b(2); b(4)=(ny/2+10)-1+b(4); %Exclui pontos de interferencia for c=1:4 fti(a(c),b(c))=0; end; figure,mesh(x,y,abs(fti/(nx*ny))), title('transformada de Fourier - Imagem sem Interferencia'); %Calcula transformada inversa fti2=ifft2(ifftshift(fti)); fti2=uint8(real(fti2)); imwrite(fti2,'exemplo3limpo.tif'); figure,subplot(2,1,1),imshow(i),title('imagem Original'); subplot(2,1,2),imshow(fti2),title('imagem Limpa');