2014-01-07 22 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'每一列的所有条目都是一样的吗? –