% Do regularised inversion using Richardson-Lucy % % addpath('../','../Lin1D'); n = 64; sb = 0.03; % blurring width %sigma = 0.1; % std.dev. of added white noise f = zeros(n,1); f(12) = 1; f(20:28) = 1.5; f(32:36) = 2; % arbitrary function. Must be non-negative [y,K] = linblur(f,sb); LowCount = false; % set to zero for 'High Count' simultation if LowCount yp = 1e11*imnoise(1e-11*y,'poisson'); else yp = 1e9*imnoise(1e-9*y,'poisson'); end figure (1);clf hold on; plot(y); plot(yp,'g'); plot(f,'r'); %% figure(3);clf; niter = 30; alpha = 1e-1; plot(f,'r'); hold on; fi = ones(size(f)); % initial guess ks = K'*ones(size(y)); derr = zeros(niter,1); ferr = derr; KL = derr; eps = 1e-9; for k=1:niter fi = (fi./ks) .* (K'*(yp./(K*fi))); figure(3);title('reconstruction'); plot(fi,'k'); pause(1); figure(1); plot(K*fi,'k');title('data'); z = K*fi; iz =find(z < eps); iy = find(yp 1e-3 && k < 20 while er > 1e-4 && k < niter disp(['iteration ',num2str(k),' relative change ', num2str(rr),' absolute change ', num2str(er)]); finext = (fi./(ks+tau*D2*fi)) .* (K'*(yp./(K*fi))); rr = norm(finext(ifnz)./fi(ifnz),1)/n; er = norm(finext - fi)/n; flast = fi; fi = finext; figure(3); plot(fi,'m'); pause(1); figure(1); plot(K*fi,'--m'); z = K*fi; iz =find(z < eps); iy = find(yp