2014-01-07 25 views
1

我在修復圖像中的回聲。 圖片爲256X256像素。 我使用了逆濾波。Matlab修復圖像中的回波

這是代碼:

img=readImage('house'); 

lambda=0.001; 
delta=zeros(256); 
delta(1,1)=1/2; 
delta(1,20)=1/2; % delta is The echo function used on real image 
        % I checked the axes and it is echoed 20 pixels to the right 

G=fft2(img); % Fourier Transform of echoed image 

H=fft2(delta); % Fourier transform of delta 
Hs=conj(H); % H* 

filter=Hs/(Hs*H+lambda) 
cleanim=filter*G; 
cleanim=ifft2(cleanim); 

imshow(cleanim,[]); 

過濾器矩陣是NaN矩陣,爲什麼呢?我做錯了什麼?

+0

我不太確定過濾。但是:filter = Hs /(Hs * H + lambda)'對我來說似乎有問題,導致除法有矩陣除法和奇異矩陣。要麼你需要使用逐點''/'或者使用'diag(256)* lambda'(我猜這是第一個)。 – bdecaf

+0

首先,如果通過「回聲」表示重複模式,那麼逆濾波不是您的解決方案,因爲您現在可能不是重複的頻率。相反,典型的傅立葉域濾波非常適用於這種情況!對噪聲圖像進行FFT處理,並檢查您獲得某些高價值的位置。這個高值是對應於模式的頻率。取消這個值(可能還有一些值),然後進入iFFT。應該清除你的圖像的噪音。 – sepdek

+0

我的意思是回聲,有相同圖像的雙重圖像,第一個中心是(0,0),第二個是(0,20)。 –

回答

1

使用

filter=Hs./(Hs*H+lambda); 
... 
G=fftshift(fft2(img)); 
... 
cleanim=filter.*G; 
cleanim=ifft2(fftshift(cleanim)); 
imshow(real(cleanim),[]); 

代替。

+0

試過,現在過濾器矩陣不是NaN。 cleanim = ifft2(cleanim); => cleanim大多爲零,給出錯誤的圖像... 我想弄明白 –

+0

更新我的答案一點,謝謝 – lennon310

+0

你知道那個過濾器嗎?如果是的話,你能告訴我爲什麼'cleanim'每一列的所有條目都是一樣的嗎? –