1

I am aware that Richardson–Lucy deconvolution is for recovering the latent image, but suppose we have a noisy image and the original image. Can we find the kernel that caused the transformation?

Below is a MATLAB code for Richardson-Lucy deconvolution and I am wondering if it is easy to modify and make it recover the kernel instead of the latent image. My thoughts are that we change the convolution options to valid so the output would represent the kernel, what do you think?

function latent_est = RL_deconvolution(observed, psf, iterations)
    % to utilise the conv2 function we must make sure the inputs are double
    observed = double(observed);
    psf      = double(psf);
    % initial estimate is arbitrary - uniform 50% grey works fine
    latent_est = 0.5*ones(size(observed));
    % create an inverse psf
    psf_hat = psf(end:-1:1,end:-1:1);
    % iterate towards ML estimate for the latent image
    for i= 1:iterations
        est_conv      = conv2(latent_est,psf,'same');
        relative_blur = observed./est_conv;
        error_est     = conv2(relative_blur,psf_hat,'same'); 
        latent_est    = latent_est.* error_est;
    end

Thanks in advance.

IssamLaradji
  • 6,637
  • 8
  • 43
  • 68
  • Hi, issamou, I'm working on a very similar problem with Matlab. Did it finally work? Thanks a lot. – theholy Mar 10 '15 at 14:33
  • Hi @theholy, yes, I used the solution here http://stackoverflow.com/questions/19150516/2d-deconvolution-using-fft-in-matlab-problems for deconvolution (or for extracting the kernel) – IssamLaradji Mar 10 '15 at 20:51

1 Answers1

0

This is a very simple problem. Convolution is commutative. Hence, you don't need to change the implementation of RL deconvolution to obtain PSF, you can simply call it as follows:

psf = RL_deconvolution(observed, latent_est, iterations)
rayryeng
  • 102,964
  • 22
  • 184
  • 193
yvoronen
  • 139
  • 1
  • 3