使用线扩散函数和维纳滤波器进行1D图像去模糊

时间:2014-10-07 09:47:53

标签: matlab image-processing fft

我一直在阅读使用维纳过滤器进行去模糊或恢复"一个3D图像。我的方法与MATLAB函数中使用的方法之间的区别" deconvwnr"是我对仅在z维度中对所有3D尺寸(x,y,z)中的图像进行去模糊感兴趣。我的理论是,如果我知道z维度(LSF_z)中的线扩散函数(LSF),那么我可以使用维纳滤波器和LSF_z来对z维度中的图像进行去模糊。

我对代码的抨击如下:

close all
% Define LSF (i.e. gaussian with mean = 0.5 & FWHM = 0.2)
    space=linspace(0,1,50)';
    space=fftshift(space);
    FWHM=.2;
    sigma=FWHM/2.3548;
    c=0.5;
    h = gaussmf(space,[sigma c]); % LSF 
% Define degradation function frequency cutoff
    Hcut=1e-7; % 
    Flpcut=1e-7;
% Define Transfer Function
    H=fftshift(fft(h)');

    [nx ny nz]=size(I);
    Ideconv=zeros(size(I)); % allocate memory for "true" image

    eps=1e6; % regularization parameter (i.e. constant noise to signal ratio)

% Loop over all voxels in 2D space
for j=1:ny
  for i=1:nx
    % Flp: FFT of line profile in z-dimension 
        lp=squeeze(I(i,j,:));
        Flp=fftshift(fft(lp));

    % cut-off all frequences below Flpcut
    Flp=(Flp>Flpcut).*Flp; 

% Define power spectrum of degradation function and cut-off all
% frequences below Hcut
    magsquared=(H>Hcut).*abs(H).^2; 

% Inverse FFT of (Wiener Filter x Flp) 
    Ideconv_1D_z=ifft(ifftshift((H2>Hcut.*magsquared./(H.*(magsquared+eps))).*Flp)); 

% Place "deblurred" line profile into true image matricx
    Ideconv(i,j,:)=Ideconv_1D_z; 

  end
end

数据样本:

 a=squeeze(I(250,500,:));
 a=[70
    64
    64
    57
    57
    54
    58
    59
    55
    55
    51
    52
    51
    52
    55
    57
    58
    66
    64
    66
    69
    68
    65
    66
    66
    62
    56
    55
    54
    54
    55
    58
    63
    69
    65
    52
    52
    53
    55
    58
    58
    58
    59
    60
    60
    56
    56
    55
    55
    57
    60
    58
    61
    61];

用于绘制结果的伪代码:

注意:为简单起见,这只是绘制单线轮廓的结果(i = 400和j = 600)

subplot(2,2,1); 
     plot(real(Flp),'b')
     plot(imag(Flp),'r')
     title('FT of line profile')
     legend('real(Flp)','imag(Flp')
subplot(2,2,2); 
     plot(real(H),'b')
     plot(imag(H),'r')
     title('FT of LSF')
     legend('real(H)','imag(H)')
subplot(2,2,3)
     plot(magsquared,'b');
     title('Power Spectrum: magsquared')
subplot(2,2,4)
     plot(lp,'r')
     plot(I,'b');
     legend('original','deconvolved')
     title(sprintf('Line Profile results with FWHM=%1.2f',FWHM))

我认为我的问题在于索引和/或频率截止。当我绘制结果时,它们不是我想要的。具体来说,它们几乎不依赖于LSF的FWHM。

此外,我很惊讶高斯的FT具有虚部,因为高斯是真实的甚至是fxn,它应该产生真实的甚至是FT。

Output plots

0 个答案:

没有答案