0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 N=256;
0028 fsubfactor=6;
0029 p=10;
0030 alpha=50;
0031 nellipse=10;
0032 aseed=6;
0033 seed=1;
0034
0035 bpdq_opts={'dr_gamma',.1,'dr_lambda',1,'dr_verbosity',0,'dr_maxiter',50};
0036
0037 dim=[N,N];
0038 fprintf('Generating %g x %g synthetic angiogram\n',N,N);
0039 im=bpdq_generate_angiogram(N,N,nellipse,aseed);
0040
0041 K=.5*floor(N^2/fsubfactor);
0042 fprintf(['Selecting %g random fourier locations, i.e. 1/%i of the %g ' ...
0043 'available\n'],2*K, fsubfactor, N^2);
0044 rand('seed',seed);
0045 [useind,loc]=bpdq_random_fourier_locations(dim,K,'forcecenter',1);
0046
0047
0048 samp=@(x) bpdq_fft_subsample(x,useind,dim);
0049 samp_t=@(x) bpdq_fft_subsample_t(x,useind,dim);
0050
0051
0052
0053 c2r = @(x) [real(x(:));imag(x(:))];
0054 r2c = @(x) x(1:end/2)+sqrt(-1)*x(end/2+1:end);
0055
0056
0057 A=@(x) samp((x(:)));
0058 At=@(x) vec(samp_t(x));
0059
0060
0061
0062
0063 fprintf('Computing quantized measurements alpha=%g\n',alpha);
0064
0065 y=samp(im);
0066
0067 yq=bpdq_quantize(y,alpha);
0068 Nbins=2*max(abs(c2r(y)))/alpha;
0069
0070
0071
0072 dM=numel(useind);
0073 M=2*dM;
0074
0075 fprintf('Running BPDQ-TV reconstruction with p=%g\n',p);
0076 epsilon = bpdq_err_p(p,alpha,M);
0077 [xstar,D_bpdq]=bpdq_2d_tv(yq,A,At,dim,epsilon,p,bpdq_opts{:});
0078 im_bpdq=real(reshape(xstar,dim));
0079 SNR_bpdq= bpdq_compute_snr(im,im_bpdq);
0080
0081 fprintf('Running BPDN-TV (p=2) reconstruction\n');
0082 epsilon2 = bpdq_err_p(2,alpha,M);
0083 [xstar2,D_bpdn]=bpdq_2d_tv(yq,A,At,dim,epsilon2,2,bpdq_opts{:});
0084 im_bpdn=real(reshape(xstar2,dim));
0085 SNR_bpdn=bpdq_compute_snr(im,im_bpdn);
0086
0087 rmin=min([im(:);im_bpdn(:);im_bpdq(:)]);
0088 rmax=max([im(:);im_bpdn(:);im_bpdq(:)]);
0089 drange=[rmin,rmax];
0090
0091 fprintf('Displaying results and convergence curves\n');
0092 figure(1)
0093 fprintf('Original Image in Figure 1\n');
0094 bpdq_show_im(im,drange,1);
0095 title('Original Image');
0096
0097 figure(2)
0098 fprintf('BPDQ_%g Reconstruction in Figure 2\n', p);
0099 bpdq_show_im(im_bpdq,drange,1);
0100 title(sprintf('bpdq-tv (p=%g) reconstruction, SNR %g dB',p,SNR_bpdq));
0101 drawnow;
0102
0103 figure(3)
0104 fprintf('BPDN Reconstruction in Figure 3\n', p);
0105 bpdq_show_im(im_bpdn,drange,1);
0106 title(sprintf('bpdn-tv reconstruction, SNR %g dB',SNR_bpdn));
0107 drawnow;
0108
0109 figure(4)
0110 fprintf('Convergence Analysis in Figure 4\n');
0111 subplot(1,2,1)
0112 plot(log10(D_bpdq.dr_relerr_save));
0113 title('DR convergence (for bpdq)');
0114 xlabel('iteration');
0115 ylabel('log relative error');
0116
0117 subplot(1,2,2)
0118 plot(log10(D_bpdn.dr_relerr_save));
0119 title('DR convergence (for bpdn)');
0120 xlabel('iteration')
0121 ylabel('log relative error');
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134