sopt_mltb_solve_rwTVDN - Solve reweighted TVDN problem Solve the reweighted TV minimization function using an homotopy continuation method to approximate the L0 norm of the magnitude of the gradient. At each iteration the following problem is solved: min_x ||W x||_TV s.t. ||y-A x||_2 < epsilon where W is a diagonal matrix with diagonal elements given by esentially the inverse of the graident. The input parameters are defined as follows. - y: Input data (measurements). - epsilon: Noise bound. - A: Forward measurement operator. - At: Adjoint measurement operator. - paramT: Structure containing parameters for the TV solver (see documentation for sopt_mltb_solve_TVDN). - sigma: Noise standard deviation in the analysis domain. - tol: Minimum relative change in the solution. The algorithm stops if ||x(t)-x(t-1)||_2/||x(t-1)||_2 < tol. where x(t) is the estimate of the solution at iteration t. - maxiter: Maximum number of iterations of the reweighted algorithm. - initsol: Initial solution for a warmstart. References: [1] R. E. Carrillo, J. D. McEwen, D. Van De Ville, J.-Ph. Thiran, and Y. Wiaux. Sparsity averaging for compressive imaging. IEEE Sig. Proc. Let., in press, 2013. [2] R. E. Carrillo, J. D. McEwen, and Y. Wiaux. Sparsity Averaging Reweighted Analysis (SARA): a novel algorithm for radio-interferometric imaging. Mon. Not. Roy. Astron. Soc., 426(2):1223-1234, 2012.
0001 function sol = sopt_mltb_solve_rwTVDN(y, epsilon, A, At, paramT, ... 0002 sigma, tol, maxiter, initsol) 0003 % sopt_mltb_solve_rwTVDN - Solve reweighted TVDN problem 0004 % 0005 % Solve the reweighted TV minimization function using an homotopy 0006 % continuation method to approximate the L0 norm of the magnitude of the 0007 % gradient. At each iteration the following problem is solved: 0008 % 0009 % min_x ||W x||_TV s.t. ||y-A x||_2 < epsilon 0010 % 0011 % where W is a diagonal matrix with diagonal elements given by esentially 0012 % the inverse of the graident. 0013 % 0014 % The input parameters are defined as follows. 0015 % 0016 % - y: Input data (measurements). 0017 % 0018 % - epsilon: Noise bound. 0019 % 0020 % - A: Forward measurement operator. 0021 % 0022 % - At: Adjoint measurement operator. 0023 % 0024 % - paramT: Structure containing parameters for the TV solver (see 0025 % documentation for sopt_mltb_solve_TVDN). 0026 % 0027 % - sigma: Noise standard deviation in the analysis domain. 0028 % 0029 % - tol: Minimum relative change in the solution. 0030 % The algorithm stops if 0031 % ||x(t)-x(t-1)||_2/||x(t-1)||_2 < tol. 0032 % where x(t) is the estimate of the solution at iteration t. 0033 % 0034 % - maxiter: Maximum number of iterations of the reweighted algorithm. 0035 % 0036 % - initsol: Initial solution for a warmstart. 0037 % 0038 % References: 0039 % [1] R. E. Carrillo, J. D. McEwen, D. Van De Ville, J.-Ph. Thiran, and 0040 % Y. Wiaux. Sparsity averaging for compressive imaging. IEEE Sig. Proc. 0041 % Let., in press, 2013. 0042 % [2] R. E. Carrillo, J. D. McEwen, and Y. Wiaux. Sparsity Averaging 0043 % Reweighted Analysis (SARA): a novel algorithm for radio-interferometric 0044 % imaging. Mon. Not. Roy. Astron. Soc., 426(2):1223-1234, 2012. 0045 0046 Psit = @(x) x; Psi=@(x) x; 0047 0048 param=paramT; 0049 iter=0; 0050 rel_dist=1; 0051 0052 if nargin<9 0053 fprintf('RW iteration: %i\n', iter); 0054 sol = sopt_mltb_solve_TVoA_B2(y, epsilon, A, At, Psi, Psit, param); 0055 else 0056 sol = initsol; 0057 end 0058 0059 0060 delta=std(sol(:)); 0061 0062 while (rel_dist>tol && iter<maxiter) 0063 0064 iter=iter+1; 0065 delta=max(sigma/10,delta); 0066 fprintf('RW iteration: %i\n', iter); 0067 fprintf('delta = %e\n', delta); 0068 0069 %Warm start 0070 param.initsol=sol; 0071 sol1=sol; 0072 0073 % Weights 0074 [param.weights_dx_TV param.weights_dy_TV] = sopt_mltb_gradient_op(real(sol)); 0075 param.weights_dx_TV = delta./(abs(param.weights_dx_TV)+delta); 0076 param.weights_dy_TV = delta./(abs(param.weights_dy_TV)+delta); 0077 param.identical_weights_flag_TV = 0; 0078 param.gamma=1e-1*max(abs(sol1(:))); 0079 0080 %Weighted TV problem 0081 sol = sopt_mltb_solve_TVDNoA(y, epsilon, A, At, Psi, Psit, param); 0082 0083 %Relative distance 0084 rel_dist=norm(sol(:)-sol1(:))/norm(sol1(:)); 0085 fprintf('relative distance = %e\n\n', rel_dist); 0086 delta = delta/10; 0087 0088 end 0089