0001
0002
0003
0004 adp_wt = 0;
0005 rwt = 3*(1-adp_wt)+1;
0006
0007 I_ALL = [];
0008 EXP = [0 1; 0 4; 1 1];
0009
0010
0011
0012 for exp = 1:3;
0013
0014 rseed = 2012;
0015 rand('state',rseed);
0016 randn('state',rseed);
0017
0018
0019
0020
0021
0022 adp_wt = EXP(exp,1);
0023 rwt = EXP(exp,2);
0024
0025 fprintf('adp_wt = %d, rwt = %d ',adp_wt,rwt);
0026
0027
0028 err_fun = @(z) -20*log10(z);
0029
0030
0031 SIM_stack = cell(maxsim,1);
0032 SIM_memory = cell(maxsim,1);
0033
0034 Ir_stack = [];
0035 for sim = 1:maxsim
0036
0037 in = []; in.type = sType; in.T = T; in.randgen = 1; in.take_fwt = 1;
0038 [x img wave_struct] = genSignal(N,in);
0039
0040 [val ind] = sort(abs(x),'descend');
0041 ind_pos = ind(val>0);
0042 gamma_orig = ind_pos(1:min(length(ind_pos),M-1));
0043
0044
0045 in = []; in.type = mType;
0046 AA = genAmat(M,N,in);
0047 if largescale
0048 wType = wave_struct.wType;
0049 FilterBank = wave_struct.FilterBank;
0050 h0 = FilterBank(1,:);
0051 h1 = FilterBank(2,:);
0052 g0 = FilterBank(3,:);
0053 g1 = FilterBank(4,:);
0054 J = wave_struct.J;
0055 sym = wave_struct.sym;
0056
0057 n = sqrt(N);
0058 rshp1 = @(z) reshape(z,n,n);
0059 rshp2 = @(z) z(:);
0060
0061
0062
0063 FT = @(z) z;
0064 iFT = @(z) z;
0065
0066 A = @(x) AA(iFT(x),1);
0067 AT = @(x) FT(AA(x,2));
0068
0069 Ax = A(x);
0070 sigma = sqrt(norm(Ax)^2/10^(SNR/10)/M);
0071
0072 e = randn(M,1)*sigma;
0073
0074 y = Ax+e;
0075 Aty = AT(y);
0076 else
0077 A = AA;
0078 AT = A';
0079
0080 Ax = A*x;
0081 sigma = sqrt(norm(Ax)^2/10^(SNR/10)/M);
0082
0083 e = randn(M,1)*sigma;
0084 y = A*x+e;
0085 Aty = AT*y;
0086 end
0087
0088 maxiter = 2*N;
0089
0090
0091
0092 iter_spgl1 = []; err_spgl1 = []; supp_diff_spgl1 = []; time_spgl1 = [];
0093
0094
0095 W_new = ones(N,1);
0096 delta = norm(e);
0097 delta = max(sqrt(M)*sigma,1e-1);
0098 x_spgl1 = [];
0099
0100 for rwt_itr = 1:rwt*0
0101 if adp_wt == 0
0102 spg_opts = spgSetParms('verbosity',0,'weights',W_new,'iterations',maxiter);
0103 [x_spgl1,r,g,info] = spgl1(AA,y,0,delta,x_spgl1,spg_opts);
0104
0105 else
0106 spg_opts = wspgSetParms('verbosity',0,'omega',0.3);
0107 [x_spgl1,r,g,info] = wspgl1(AA,y,0,delta,x_spgl1,spg_opts);
0108 end
0109
0110 rerr = norm(x_spgl1-x)/norm(x);
0111 iter_spgl1 = [iter_spgl1 (info.nProdA+info.nProdAt)/2];
0112 err_spgl1 = [err_spgl1 rerr];
0113 supp_diff_sgpl1 = [supp_diff_spgl1 length(setxor(gamma_orig,find(x_spgl1)))];
0114 time_spgl1 = [time_spgl1 info.timeTotal];
0115 [alpha beta epsilon] = weight_param(rwt_mode,rwt_itr,x_spgl1,M);
0116 W_new = 1/alpha./(beta*abs(x_spgl1)+epsilon);
0117
0118 r_spgl1 = A(x_spgl1)-y; Atr_spgl1 = AT(r_spgl1);
0119 end
0120
0121
0122 tau = max(1e-3*max(abs(Aty)),sigma*sqrt(log(N)));
0123
0124
0125 iter_sparsa = [];
0126 err_sparsa = [];
0127 time_sparsa = [];
0128 x_sparsa = 0;
0129 supp_diff_sparsa = [];
0130 W_new = 1;
0131
0132
0133
0134
0135
0136 for rwt_itr = 1:rwt
0137 psi_function = @(x,tau) soft(x,tau*W_new);
0138 phi_function = @(x) sum(abs(W_new.*x));
0139 tic
0140 [x_SpaRSA,x_debias_SpaRSA_m,obj_SpaRSA_m_cont,...
0141 times_SpaRSA_m_cont,debias_start_SpaRSA_m,mse_SpaRSA_m,taus_SpaRSA_m, numA, numAt]= ...
0142 SpaRSA_adpW(y,A,tau,...
0143 'Monotone',0,...
0144 'AT',AT,...
0145 'adp_wt',adp_wt,...
0146 'Debias',0,...
0147 'Initialization',x_sparsa,...
0148 'StopCriterion',2,...
0149 'ToleranceA',1e-4,...
0150 'MaxiterA',maxiter,...
0151 'psi',psi_function,...
0152 'phi',phi_function,...
0153 'Verbose',0,...
0154 'W_new',W_new,...
0155 'True_x',x,...
0156 'Continuation',1,...
0157 'Continuationsteps',-1);
0158 x_sparsa = x_SpaRSA;
0159 time_sparsa = [time_sparsa toc];
0160
0161 iter_sparsa = [iter_sparsa (numA+numAt)/2];
0162 rerr = norm(x-x_sparsa)/norm(x);
0163 err_sparsa = [err_sparsa rerr];
0164
0165 supp_diff_sparsa = [supp_diff_sparsa length(setxor(gamma_orig,find(x_sparsa)))];
0166
0167 [alpha beta epsilon] = weight_param(rwt_mode,rwt_itr,x_sparsa,M);
0168 W_new = 1/alpha./(beta*abs(x_sparsa)+epsilon);
0169
0170
0171
0172
0173
0174 end
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201 if largescale == 0
0202
0203 in = [];
0204 in.A = A; in.y = y; in.x = x;
0205 in.x_init = zeros(N,1); in.max_rwt = 0;
0206 in.tau = tau;
0207 in.rwt_mode = rwt_mode;
0208 in.delx_mode = delx_mode;
0209 in.debias = 0;
0210 in.verbose = 0;
0211 out = script_rwtBPDN_adaptive(in);
0212 xh_adp = out.x_out;
0213 iter_adp = out.iter;
0214 gamma_adp = out.gamma;
0215 W_new = out.W_new;
0216 xh_adp_init = out.x_init;
0217 err_adp = out.err;
0218 time_adp = out.time;
0219 supp_diff_adp = out.supp_diff;
0220
0221
0222 alpha = 5; beta = 10;
0223 W_new = ones(N,1); W_new(gamma_orig) = 1/alpha./(beta*abs(x(gamma_orig)));
0224
0225
0226
0227
0228
0229 in = [];
0230 in.tau = tau;
0231 in.maxiter = maxiter;
0232 in.x_orig = x;
0233 in.record = 1;
0234 in.delx_mode = 'mil';
0235
0236 AW = A*diag(1./W_new);
0237 tic;
0238 out_new = BPDN_homotopy_function(AW, y, in);
0239
0240 time_orac = toc;
0241 xh_orac = out_new.x_out.*(1./W_new);
0242 gamma_orac = out_new.gamma;
0243 iter_orac = out_new.iter;
0244
0245
0246
0247 x_LS = zeros(N,1);
0248 x_LS(gamma_orig) = A(:,gamma_orig)\y;
0249 end
0250
0251
0252 if largescale
0253 fprintf('Image-%s-%d, wavelet-%s, adp_wt = %d @ rwt = %d ... ',sType,n,wType,adp_wt, rwt);
0254
0255 I = ifwt2(reshape(x,n,n),g0,g1,J,sym); Ir_max = max(abs(I(:)));
0256 Ir_sparsa = ifwt2(reshape(x_sparsa,n,n),g0,g1,J,sym);
0257
0258
0259
0260 mse_sparsa = norm(Ir_sparsa(:)-I(:))^2/N;
0261 psnr_sparsa = 10*log10(Ir_max*Ir_max/mse_sparsa);
0262 ser_sparsa = norm(I(:))^2/norm(Ir_sparsa(:)-I(:))^2;
0263 fprintf('(PSNR,MSE,SER): SpaRSA-%3.4g,%3.4g,%3.4g ', psnr_sparsa, mse_sparsa, ser_sparsa);
0264
0265
0266
0267
0268
0269
0270
0271 fprintf('\n');
0272
0273 Ir_stack = cat(3,Ir_stack,Ir_sparsa);
0274 end
0275
0276
0277
0278
0279 if largescale
0280 SIM_stack{sim} = [sim, tau, ...
0281 psnr_sparsa, mse_sparsa, ser_sparsa, sum(iter_sparsa,2), sum(time_sparsa,2)];
0282
0283
0284 else
0285 SIM_stack{sim} = [sim, tau, (norm(x-x_LS)/norm(x)), (norm(x-xh_orac)/norm(x)), iter_orac, ...
0286 (norm(x-xh_adp)/norm(x)), sum(iter_adp,2), sum(time_adp,2), ...
0287 (norm(x-x_sparsa)/norm(x)), sum(iter_sparsa,2), sum(time_sparsa,2)];
0288
0289
0290 end
0291 index = 0;
0292 if largescale == 0
0293
0294 index = index+1;
0295 SIM_memory{sim}{index,1} = 'adp';
0296 SIM_memory{sim}{index,2} = iter_adp;
0297 SIM_memory{sim}{index,3} = err_adp;
0298 SIM_memory{sim}{index,4} = supp_diff_adp;
0299 SIM_memory{sim}{index,5} = time_adp;
0300 end
0301
0302
0303 index = index+1;
0304 SIM_memory{sim}{index,1} = 'sparsa';
0305 SIM_memory{sim}{index,2} = iter_sparsa;
0306 SIM_memory{sim}{index,3} = err_sparsa;
0307 SIM_memory{sim}{index,4} = supp_diff_sparsa;
0308 SIM_memory{sim}{index,5} = time_sparsa;
0309
0310 index = index+1;
0311 SIM_memory{sim}{index,1} = 'spgl1';
0312 SIM_memory{sim}{index,2} = iter_spgl1;
0313 SIM_memory{sim}{index,3} = err_spgl1;
0314 SIM_memory{sim}{index,4} = supp_diff_spgl1;
0315 SIM_memory{sim}{index,5} = time_spgl1;
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333 end
0334
0335
0336
0337 mS = mean(cell2mat(SIM_stack),1);
0338 if largescale == 0
0339
0340 str1 = 'maxsim %d. tau = %3.4g, oracLS=%3.4g. (err,iter,time): oracWT-%3.4g,%3.4g; adp-%3.4g,%3.4g,%3.4g; sparsa-%3.4g,%3.4g,%3.4g; spgl1-%3.4g,%3.4g,%3.4g';
0341 else
0342
0343 str1 = 'maxsim %d. tau = %3.4g,\n~sparsa-%3.4g,%3.4g,%3.4g,%3.4g,%3.4g;';
0344 end
0345 str2 = sprintf([str1,' \n'], maxsim, mS(2:end));
0346 fprintf(str2);
0347 fprintf('(N,M,SNR)-%d,%d,%d, adp-%d,rwt-%d, PSNR: $%2.4g$dB --- ($%d$) \n',N,M,SNR,adp_wt,rwt,10*log10(Ir_max*Ir_max/mS(4)),round(mS(6)));
0348
0349 Ir_avg = mean(Ir_sparsa,3);
0350
0351 figure(100); imagesc(I,[0 255]); colormap gray; axis image off;
0352 figure(101); imagesc(Ir_avg,[0 255]); colormap gray; axis image off;
0353 figure(102); imagesc(Ir_avg-I,[0 255/10]); colormap gray; axis image off;
0354
0355
0356
0357 if SAVE_RESULTS
0358 figure(100); set(gcf, 'Color', 'w');
0359 eval(sprintf('export_fig %s.pdf',sType));
0360 file_name = sprintf('%s_N%d_M%d_SNR%d_adp%d_rwt%d_%s',sType,N,M,SNR,adp_wt,rwt,wType);
0361 figure(101); set(gcf, 'Color', 'w');
0362 eval(sprintf('export_fig %s.pdf',file_name));
0363
0364
0365
0366 end
0367
0368 fprintf('\n');
0369
0370 I_ALL = [I_ALL Ir_avg];
0371
0372 figure(200);
0373
0374 subplot(2,3,exp)
0375 imagesc(Ir_sparsa, [0 255]); axis off image; colormap gray
0376
0377 subplot(2,3,exp+3)
0378 imagesc(abs(I-Ir_sparsa), [0 255/10]); axis off image; colormap gray
0379 end
0380
0381 if SAVE_RESULTS
0382 figure(200); set(gcf, 'Color', 'w');
0383 file_name = sprintf('%s_N%d_M%d_SNR%d_%s_ALL',sType,N,M,SNR,wType);
0384 eval(sprintf('export_fig %s.pdf',file_name));
0385 end