📄 epl_em_sparse.m
字号:
function xs = epl_em_sparse(x, G, yi, ci, ri, Asum, niter, Beta, gammaj, norm)%function xs = epl_em_sparse(x, G, yi, ci, ri, Asum, niter)% E-PL-EM algorithm for image reconstruction from Poisson emission data,% regularized by the ell-<norm> norm, encouraging sparse solutions.%% in% x [np,1] initial image guess (column - see examples)% Asum A'1 = G' * c (optional) column sums% see em_fbp.m for model, G, yi, ci, ri% gammaj - vector of gammaj parameters% norm - 0 or 1 for ell-0 or ell-1 reconstruction%% out% xs [np,niter] image iterates%% Copyright 1998-2008, Jeff Fessler & Dan Lingenfelter, University of Michiganif nargin < 3, help(mfilename), error(mfilename), endif ~isvar('ci') | isempty(ci) ci = 1; % ones(size(yi(:)));endif ~isvar('ri') | isempty(ri) ri = 0; % zeros(size(yi(:)));endif ~isvar('Asum') | isempty(Asum) if length(ci) == 1 Asum = sum(G)' * ci; else Asum = G' * ci; endendif ~isvar('norm') | isempty(norm) norm = 1;endif ~isvar('gammaj') | isempty(gammaj) gammaj = zeros(size(x));endif any(Asum <= 0), error 'Asum must be positive. Adjust mask.', endif and(norm ~= 0, norm ~= 1), error 'Norm must be either 0 or 1', endif ~isvar('niter') | isempty(niter) niter = 1;endif ~isvar('Beta') | isempty(Beta) Beta = 0;endeml_check(yi, ci, ri);if any(x <= 0), error 'need x > 0', endxs = zeros(numel(x), niter);xs(:,1) = x(:);%% loop over iterations%for iter = 2:niter ticker(mfilename, iter, niter) yp = ci .* (G * x) + ri; % predicted measurements eterm = G' * (ci .* (yi ./ yp)); if norm == 1 x = (x + gammaj) .* eterm ./ (Asum + Beta) - gammaj; else xhat = (x + gammaj) .* eterm ./ (Asum) - gammaj; x = xhat .* (eterm .* (x + gammaj) .* ... log((xhat + gammaj) ./ gammaj) - Asum.*xhat > Beta); end xs(:,iter) = x;end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -