understanding the kernel estimation algorithm
From
khouloud.guemri.tn@ieee.org@21:1/5 to
All on Thu Apr 28 19:58:17 2016
hello,
can any one explain me step by setp the algorithm bellow:
function psf = estimate_psf(blurred_x, blurred_y, latent_x, latent_y, weight, psf_size)
%----------------------------------------------------------------------
% these values can be pre-computed at the beginning of each level
% blurred_f = fft2(blurred);
% dx_f = psf2otf([1 -1 0], size(blurred));
% dy_f = psf2otf([1;-1;0], size(blurred));
% blurred_xf = dx_f .* blurred_f; %% FFT (Bx)
% blurred_yf = dy_f .* blurred_f; %% FFT (By)
latent_xf = fft2(latent_x);
latent_yf = fft2(latent_y);
blurred_xf = fft2(blurred_x);
blurred_yf = fft2(blurred_y);
% compute b = sum_i w_i latent_i * blurred_i
b_f = conj(latent_xf) .* blurred_xf ...
+ conj(latent_yf) .* blurred_yf;
b = real(otf2psf(b_f, psf_size));
p.m = conj(latent_xf) .* latent_xf ...
+ conj(latent_yf) .* latent_yf;
%p.img_size = size(blurred);
p.img_size = size(blurred_xf);
p.psf_size = psf_size;
p.lambda = weight;
psf = ones(psf_size) / prod(psf_size);
psf = conjgrad(psf, b, 20, 1e-5, @compute_Ax, p);
psf(psf < max(psf(:))*0.05) = 0;
psf = psf / sum(psf(:));
end
function y = compute_Ax(x, p)
x_f = psf2otf(x, p.img_size);
y = otf2psf(p.m .* x_f, p.psf_size);
y = y + p.lambda * x;
end
THANKS
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)