0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 clear all;
0013 close all;
0014
0015
0016 L = 64;
0017 B = 2;
0018 Spin = 0;
0019 J_min = 1;
0020 J = s2let_jmax(L, B);
0021 disp('-------------')
0022
0023
0024
0025 disp('Checks the harmonic tiling of curvelets')
0026 [cur_lm scal_l] = s2let_curvelet_tiling(B, L, J_min, ...
0027 'Spin', Spin, 'SpinLowered', false, 'SpinLoweredFrom', 0);
0028 error_on_cur_tiling = s2let_check_cur_tiling(cur_lm, scal_l, L, Spin, J, J_min)
0029
0030
0031
0032 disp('Generate random band-limited (complex) function')
0033
0034 flm_gen_cur = zeros(L^2,1);
0035 flm_gen_cur = rand(size(flm_gen_cur)) + sqrt(-1)*rand(size(flm_gen_cur));
0036 flm_gen_cur = 2.*(flm_gen_cur - (1+sqrt(-1))./2);
0037 disp('Construct the corresponding signal on the sphere')
0038 f_gen_cur = ssht_inverse(flm_gen_cur, L, 'Method', 'MW');
0039
0040 disp('Construct the corresponding spin signal on the sphere')
0041
0042 f_spin_gen_cur = ssht_inverse(flm_gen_cur, L, 'Spin', Spin, 'Method', 'MW');
0043 flm_spin_gen_cur = ssht_forward(f_spin_gen_cur, L, 'Spin', Spin, 'Method', 'MW');
0044
0045
0046 disp('==============')
0047 disp('Complex Signals, Full resolution tests start (Upsample: true):')
0048 disp('==============')
0049 disp('ana_lm2lmn : Perform (spin) harmonic-to-Wigner transform (lm2lmn) with custom parameters')
0050 [f_cur_lmn, f_scal_lm]= s2let_transform_curvelet_analysis_lm2lmn(flm_spin_gen_cur, cur_lm, scal_l, ...
0051 'B', B, 'L', L, 'J_min', J_min,...
0052 'Spin', Spin, ...
0053 'Reality', false,...
0054 'Upsample', true,...
0055 'SpinLowered', false, ...
0056 'SpinLoweredFrom', 0);
0057 disp('syn_lmn2lm : Perform inverse transform (lmn2lm) with custom parameters')
0058 flm_rec_spin_lmn2lm_custom = s2let_transform_curvelet_synthesis_lmn2lm(f_cur_lmn, f_scal_lm, cur_lm, scal_l,...
0059 'B', B, 'L', L, 'J_min', J_min,...
0060 'Spin', Spin, ...
0061 'Reality', false,...
0062 'Upsample', true,...
0063 'SpinLowered', false, ...
0064 'SpinLoweredFrom', 0);
0065 default = max(abs(flm_spin_gen_cur - flm_rec_spin_lmn2lm_custom))
0066
0067 disp('-------------')
0068 disp('ana_lm2cur: Perform (spin) harmonic-to-curvelet transform (lm2cur) with custom parameters')
0069 [f_cur, f_scal] = s2let_transform_curvelet_analysis_lm2cur(flm_spin_gen_cur, ...
0070 'B', B, 'L', L, 'J_min', J_min,...
0071 'Spin', Spin, 'Upsample',true);
0072 disp('syn_cur2lm: Perform inverse transform (cur2lm) with custom parameters')
0073 flm_rec_spin_lm2cur_custom = s2let_transform_curvelet_synthesis_cur2lm(f_cur, f_scal,...
0074 'B', B, 'L', L, 'J_min', J_min, ...
0075 'Spin', Spin, 'Upsample', true);
0076 default = max(abs(flm_spin_gen_cur - flm_rec_spin_lm2cur_custom))
0077
0078 disp('-------------')
0079 disp('ana_px2cur: Perform (spin) curvelet transform (px2cur) with custom parameters')
0080
0081 [f_cur, f_scal] = s2let_transform_curvelet_analysis_px2cur(f_spin_gen_cur ,...
0082 'B', B, 'L', L, ...
0083 'J_min', J_min, 'Spin', Spin, ...
0084 'Upsample', true, 'Reality', false,...
0085 'SpinLowered', false, ...
0086 'SpinLoweredFrom', 0);
0087 disp('syn_cur2px: Perform inverse transform (cur2px) with custom parameters')
0088
0089 f_rec_spin_px2cur_custom = s2let_transform_curvelet_synthesis_cur2px(f_cur, f_scal, ...
0090 'B', B, 'L', L, ...
0091 'J_min', J_min, 'Spin', Spin, ...
0092 'Upsample', true, 'Reality', false,...
0093 'SpinLowered', false, ...
0094 'SpinLoweredFrom', 0);
0095 default = max(abs(f_spin_gen_cur(:)-f_rec_spin_px2cur_custom(:)))
0096
0097 disp('')
0098 disp(' - CHECK also: the Spin Curvelet Transform of spin signals in MW sampling with default parapmeters:')
0099 disp('ana_px2cur: Perform (spin) curvelet transform with default parameters')
0100 [f_cur, f_scal] = s2let_transform_curvelet_analysis_px2cur(f_spin_gen_cur,...
0101 'Spin', Spin, ...
0102 'Upsample', true);
0103 disp('syn_cur2px: Perform inverse transform (cur2px) with default parameters')
0104 f_rec_spin_px2cur_custom = s2let_transform_curvelet_synthesis_cur2px(f_cur, f_scal, ...
0105 'Spin', Spin, ...
0106 'Upsample', true);
0107 default = max(abs(f_spin_gen_cur(:)-f_rec_spin_px2cur_custom(:)))
0108
0109 disp('')
0110 disp(' -CHECK also: the Spin Curvelet Transform of scalar signalsin MW sampling with default parapmeters:')
0111 disp('ana_px2cur: Perform (scalar) curvelet transform with default parameters')
0112 [f_cur, f_scal] = s2let_transform_curvelet_analysis_px2cur(f_gen_cur,...
0113 'Upsample', true);
0114 disp('syn_cur2px: Perform inverse transform (cur2px) with default parameters')
0115 f_rec_spin_px2cur = s2let_transform_curvelet_synthesis_cur2px(f_cur, f_scal, ...
0116 'Upsample', true);
0117 default = max(abs(f_gen_cur(:)-f_rec_spin_px2cur(:)))
0118
0119
0120 disp('')
0121 disp('==============')
0122 disp('Complex Signals, Multi-resolution tests start (Upsample: false):')
0123 disp('==============')
0124 disp('ana_lm2lmn : Perform (spin) harmonic-to-Wigner transform (lm2lmn) with custom parameters')
0125 [f_cur_lmn, f_scal_lm]= s2let_transform_curvelet_analysis_lm2lmn(flm_spin_gen_cur, cur_lm, scal_l, ...
0126 'B', B, 'L', L, 'J_min', J_min,...
0127 'Spin', Spin, ...
0128 'Reality', false,...
0129 'Upsample', false,...
0130 'SpinLowered', false, ...
0131 'SpinLoweredFrom', 0);
0132 disp('syn_lmn2lm : Perform inverse transform (lmn2lm) with custom parameters')
0133 flm_rec_spin_lmn2lm_custom = s2let_transform_curvelet_synthesis_lmn2lm(f_cur_lmn, f_scal_lm, cur_lm, scal_l,...
0134 'B', B, 'L', L, 'J_min', J_min,...
0135 'Spin', Spin, ...
0136 'Reality', false,...
0137 'Upsample', false,...
0138 'SpinLowered', false, ...
0139 'SpinLoweredFrom', 0);
0140 default = max(abs(flm_spin_gen_cur - flm_rec_spin_lmn2lm_custom))
0141
0142 disp('-------------')
0143 disp('ana_lm2cur: Perform (spin) harmonic-to-curvelet transform (lm2cur) with custom parameters')
0144 [f_cur, f_scal] = s2let_transform_curvelet_analysis_lm2cur(flm_spin_gen_cur, ...
0145 'B', B, 'L', L, 'J_min', J_min,...
0146 'Spin', Spin, 'Upsample',false);
0147 disp('syn_cur2lm: Perform inverse transform (cur2lm) with custom parameters')
0148 flm_rec_spin_lm2cur_custom = s2let_transform_curvelet_synthesis_cur2lm(f_cur, f_scal,...
0149 'B', B, 'L', L, 'J_min', J_min, ...
0150 'Spin', Spin, 'Upsample', false);
0151 default = max(abs(flm_spin_gen_cur - flm_rec_spin_lm2cur_custom))
0152
0153 disp('-------------')
0154 disp('ana_px2cur: Perform (spin) curvelet transform (px2cur) with custom parameters')
0155 [f_cur, f_scal] = s2let_transform_curvelet_analysis_px2cur(f_spin_gen_cur ,...
0156 'B', B, 'L', L, ...
0157 'J_min', J_min, 'Spin', Spin, ...
0158 'Upsample', false, 'Reality', false,...
0159 'SpinLowered', false, ...
0160 'SpinLoweredFrom', 0);
0161 disp('syn_cur2px: Perform inverse transform (cur2px) with custom parameters')
0162 f_rec_spin_px2cur_custom = s2let_transform_curvelet_synthesis_cur2px(f_cur, f_scal, ...
0163 'B', B, 'L', L, ...
0164 'J_min', J_min, 'Spin', Spin, ...
0165 'Upsample', false, 'Reality', false,...
0166 'SpinLowered', false, ...
0167 'SpinLoweredFrom', 0);
0168 default = max(abs(f_spin_gen_cur(:)-f_rec_spin_px2cur_custom(:)))
0169
0170 disp('')
0171 disp('- CHECK also: the Spin Curvelet Transform of spin signals in MW sampling with default parameters:')
0172 disp('ana_px2cur: Perform (spin) curvelet transform with default parameters')
0173 [f_cur, f_scal] = s2let_transform_curvelet_analysis_px2cur(f_spin_gen_cur,...
0174 'Spin', Spin);
0175 disp('syn_cur2px: Perform inverse transform (cur2px) with default parameters')
0176 f_rec_spin_px2cur= s2let_transform_curvelet_synthesis_cur2px(f_cur, f_scal, ...
0177 'Spin', Spin);
0178 default = max(abs(f_spin_gen_cur(:)-f_rec_spin_px2cur(:)))
0179
0180 disp('')
0181 disp('- CHECK also: the Spin Curvelet Transform of scalar signals in MW sampling with default parameters:')
0182 disp('ana_px2cur: Perform (scalar) curvelet transform with default parameters')
0183 [f_cur, f_scal] = s2let_transform_curvelet_analysis_px2cur(f_gen_cur);
0184 disp('syn_cur2px: Perform inverse transform (cur2px) with default parameters')
0185 f_rec_spin_px2cur = s2let_transform_curvelet_synthesis_cur2px(f_cur, f_scal);
0186 default = max(abs(f_gen_cur(:)-f_rec_spin_px2cur(:)))
0187
0188
0189 disp(' ')
0190 disp('==============')
0191 disp('REAL Signals TEST')
0192 disp('==============')
0193
0194 disp('Constraint on flms to generate real signal')
0195
0196 for el = 0:L-1
0197 ind = el*el + el + 1;
0198 flm_gen_cur(ind,1) = real(flm_gen_cur(ind,1));
0199 for m = 1:el
0200 ind_pm = el*el + el + m + 1;
0201 ind_nm = el*el + el - m + 1;
0202 flm_gen_cur(ind_nm,1) = (-1)^m * conj(flm_gen_cur(ind_pm,1));
0203 end
0204 end
0205 disp('Construct the corresponding real signal on the sphere')
0206 f_real_gen = ssht_inverse(flm_gen_cur, L, 'Method', 'MW', 'Reality', true);
0207
0208 disp('ana_px2cur: Perform (REAL) curvelet transform (px2cur) with custom parameters')
0209 [f_cur, f_scal] = s2let_transform_curvelet_analysis_px2cur(f_real_gen ,...
0210 'B', B, 'L', L, ...
0211 'J_min', J_min, ...
0212 'Upsample', true, ...
0213 'Reality', true);
0214 disp('syn_cur2px: Perform inverse transform (cur2px) with custom parameters')
0215 f_rec_real_px2cur_custom = s2let_transform_curvelet_synthesis_cur2px(f_cur, f_scal, ...
0216 'B', B, 'L', L, ...
0217 'J_min', J_min, ...
0218 'Upsample', true, ...
0219 'Reality',true);
0220 default = max(abs(f_real_gen(:)- f_rec_real_px2cur_custom(:)))
0221
0222
0223
0224 disp('')
0225 disp('==============')
0226 disp('Rea, Signals, Multi-resolution tests start (Upsample: false):')
0227 disp('==============')
0228 disp('ana_px2cur: Perform (REAL) curvelet transform (px2cur) with custom parameters')
0229 [f_cur, f_scal] = s2let_transform_curvelet_analysis_px2cur(f_real_gen ,...
0230 'B', B, 'L', L, ...
0231 'J_min', J_min, ...
0232 'Upsample', false, ...
0233 'Reality', true);
0234 disp('syn_cur2px: Perform inverse transform (cur2px) with custom parameters')
0235 f_rec_real_px2cur_custom = s2let_transform_curvelet_synthesis_cur2px(f_cur, f_scal, ...
0236 'B', B, 'L', L, ...
0237 'J_min', J_min, ...
0238 'Upsample', false, ...
0239 'Reality',true);
0240 default = max(abs(f_real_gen(:)- f_rec_real_px2cur_custom(:)))
0241
0242
0243 disp('')
0244 disp('==============')
0245 disp('Real Signals, DEFAULT parameters:')
0246 disp('==============')
0247 disp('- CHECK also: the REAL Curvelet Transform of scalar signals in MW sampling with default parameters:')
0248 disp('ana_px2cur: Perform (scalar) curvelet transform with default parameters')
0249 [f_cur, f_scal] = s2let_transform_curvelet_analysis_px2cur(f_real_gen ,'Reality', true);
0250 disp('syn_cur2px: Perform inverse transform (cur2px) with default parameters')
0251 f_rec_real_px2cur_custom = s2let_transform_curvelet_synthesis_cur2px(f_cur, f_scal, 'Reality',true);
0252 default = max(abs(f_real_gen(:)- f_rec_real_px2cur_custom(:)))
0253
0254
0255
0256