This function is not yet fully documented. This is a transcript of the text-formatted help.
bbempoisson Solve a non-negative system with Poisson noise X=bbempoisson(A,B) use the iterative Expectation Maximization (EM) algorithm of K. Lange and R. Carson to find a Maximum Likelihood (ML) solution of the linear system A*X=L, where A is a non-negative matrix, X is an unknown non-negative vector, and L is the average of the quantity being measured. Instead of L we are provided with a vector, B, containing independent samples from a Poisson-distribution. The mean of each element (or, equivalently, the parameter lambda) is given by L. This model is suitable for emission tomography and images measured in low-light conditions (e.g. astronomy). The result is a local ML estimate, and may not correspond to the global maximum. Furthermore, the solution may amplify noise and result in solutions with a large variance. NOISE. Several strategies are available to reduce noise. An easy and popular solution is post filtering, which may be applied after bbempoisson (e.g. using bbconvn). Another possibility is early stopping, which is supported via the options 'maxi' and 'all'. The first limit the number of iterations, the second returns all iterates allowing a selection strategy. SIEVES. Sieves have several purposes, and may be specified as an operator or a function handle. An operator must be N-by-N, N=size(A,2), and represent a non-negative transform. Similarly, a function must transform a non-negative column-vector of length N to another, but may be non-linear. Sieves are commonly used to control noise, using a blurring operation (e.g. bbconvn). However, they can also be used to enforce conditions such as constant values, known values, and limits. (The latter was even suggested in the original paper by Lange and Carson.) OPTIONS. Options are specified as [X,OPT2]=bbempoisson(A,B,'opt1',VAL1). Flags are not followed by a value. OPT2 is a struct with informational about the computation. The following options are available: 'init': Followed by a starting-vector, X0. This is the first approximation in the procedure (default: vector of ones). 'maxi': Limit on the number of iterations. This can be used to implement early stopping (default: 50). 'tol': Tolerance criteria. The iteration is stopped when 2-norm of two iterates has a relative difference smaller than the tolerance (default: 1e-3). 'all': If this flag is specified, X will be returned as a matrix where each column is an iterate. 'sieve': Operator, or function handle, applied on each iteration. Extra arguments may be passed to a function by putting the function handle and arguments in a cell-array. The struct OPT2 contains 'maxi' and 'tol' and the following fields: 'iter': The number of iterations actually used 'norm': A vector containing the 2-norm of each iterate Example: dim1=[150,150]; I0=ones(dim1); I0(25:75,40:100)=5; figure(1); imagesc(I0); axis image; colormap(gray); [bb,dim2,opt]=bbtomoemit(dim1,0:2:358); S=reshape(bb*I0(:),dim2); S=bbrand('poisson',S); figure(2); imagesc(S); colormap(gray); [xx,yy]=meshgrid(-8:8,-8:8); K=exp(-(xx.*xx+yy.*yy)/.5); Sieve=bbconvn(dim1,K,'same'); X=bbempoisson(bb,S(:),'sieve',Sieve); figure(3); imagesc(reshape(X,dim1)); axis image; colormap(gray); See also bbradon, bbtomoemit, bbfbp, bbrand.