


s2let_transform_analysis_mw
Compute spin directional wavelet transform, output in pixel space.
Default usage :
[f_wav, f_scal] = s2let_transform_analysis_mw(f, <options>)
f is the input field -- MW sampling,
f_wav contains the output wavelet contributions,
f_scal contains the output scaling contributions,
Option :
'B' = { Dilation factor; B > 1 (default=2) }
'L' = { Harmonic band-limit; L > 1 (default=guessed from input) }
'N' = { Azimuthal/directional band-limit; N > 1 (default=L) }
'Spin' = { Spin; (default=0) }
'J_min' = { Minimum wavelet scale to consider;
0 <= J_min < log_B(L) (default=0) }
'Upsample' = { false [multiresolution algorithm (default)],
true [full resolution wavelets] }
'Sampling' = { 'MW' [McEwen & Wiaux sampling (default)],
'MWSS' [McEwen & Wiaux symmetric sampling] }
'Reality' = { false [do not assume f real (default)],
true [assume f real (improves performance)] }
'OriginalSpin' = [integer; if the SpinLowered option is used, this
option indicates which spin number the wavelets
should be lowered from (default = 0)]
S2LET package to perform Wavelets transform on the Sphere.
Copyright (C) 2012-2015 Boris Leistedt & Jason McEwen
See LICENSE.txt for license details

0001 function [f_wav, f_scal] = s2let_transform_analysis_mw(f, varargin) 0002 0003 % s2let_transform_analysis_mw 0004 % Compute spin directional wavelet transform, output in pixel space. 0005 % 0006 % Default usage : 0007 % 0008 % [f_wav, f_scal] = s2let_transform_analysis_mw(f, <options>) 0009 % 0010 % f is the input field -- MW sampling, 0011 % f_wav contains the output wavelet contributions, 0012 % f_scal contains the output scaling contributions, 0013 % 0014 % Option : 0015 % 'B' = { Dilation factor; B > 1 (default=2) } 0016 % 'L' = { Harmonic band-limit; L > 1 (default=guessed from input) } 0017 % 'N' = { Azimuthal/directional band-limit; N > 1 (default=L) } 0018 % 'Spin' = { Spin; (default=0) } 0019 % 'J_min' = { Minimum wavelet scale to consider; 0020 % 0 <= J_min < log_B(L) (default=0) } 0021 % 'Upsample' = { false [multiresolution algorithm (default)], 0022 % true [full resolution wavelets] } 0023 % 'Sampling' = { 'MW' [McEwen & Wiaux sampling (default)], 0024 % 'MWSS' [McEwen & Wiaux symmetric sampling] } 0025 % 'Reality' = { false [do not assume f real (default)], 0026 % true [assume f real (improves performance)] } 0027 % 'OriginalSpin' = [integer; if the SpinLowered option is used, this 0028 % option indicates which spin number the wavelets 0029 % should be lowered from (default = 0)] 0030 % 0031 % S2LET package to perform Wavelets transform on the Sphere. 0032 % Copyright (C) 2012-2015 Boris Leistedt & Jason McEwen 0033 % See LICENSE.txt for license details 0034 0035 sz = size(f); 0036 if sz(1) == 2*sz(2)-1 || sz(2) == 2*sz(1)-1 0037 Lguessed = min([sz(1) sz(2)]); 0038 else 0039 Lguessed = min([sz(1) sz(2)])-1; 0040 end 0041 0042 p = inputParser; 0043 p.addRequired('f', @isnumeric); 0044 p.addParamValue('B', 2, @isnumeric); 0045 p.addParamValue('L', Lguessed, @isnumeric); 0046 p.addParamValue('J_min', 0, @isnumeric); 0047 p.addParamValue('N', Lguessed, @isnumeric); 0048 p.addParamValue('Spin', 0, @isnumeric); 0049 p.addParamValue('Upsample', false, @islogical); 0050 p.addParamValue('Sampling', 'MW', @ischar); 0051 p.addParamValue('Reality', false, @islogical); 0052 p.addParamValue('OriginalSpin', 0, @isnumeric); 0053 p.parse(f, varargin{:}); 0054 args = p.Results; 0055 0056 if strcmp(args.Sampling, 'MWSS') 0057 f_vec = s2let_mwss_arr2vec(f); 0058 else 0059 f_vec = s2let_mw_arr2vec(f); 0060 end 0061 0062 if(all(isreal(f_vec))) 0063 f_vec = complex(f_vec,0); 0064 end 0065 0066 [f_wav_vec, f_scal_vec] = s2let_transform_analysis_mw_mex(f_vec, args.B, args.L, args.J_min, ... 0067 args.N, args.Spin, ... 0068 args.Reality, args.Upsample, ... 0069 args.OriginalSpin, ... 0070 args.Sampling); 0071 0072 if strcmp(args.Sampling, 'MWSS') 0073 f_scal = s2let_mwss_vec2arr(f_scal_vec); 0074 0075 J = s2let_jmax(args.L, args.B); 0076 f_wav = cell(J+1-args.J_min, args.N); 0077 offset = 0; 0078 for j = args.J_min:J 0079 for en = 1:args.N 0080 if args.Upsample 0081 band_limit = args.L; 0082 else 0083 band_limit = min([ s2let_bandlimit(j,args.J_min,args.B,args.L) args.L ]); 0084 end 0085 temp = zeros(band_limit+1, 2*band_limit); 0086 for t = 1:band_limit+1 0087 for p = 1:2*band_limit 0088 ind = offset + (t-1) * 2 * band_limit + p; 0089 temp(t,p) = f_wav_vec(1,ind); 0090 end 0091 end 0092 f_wav{j+1-args.J_min, en} = temp; 0093 offset = offset + (band_limit+1) * 2*band_limit; 0094 end 0095 end 0096 else 0097 f_scal = s2let_mw_vec2arr(f_scal_vec); 0098 0099 J = s2let_jmax(args.L, args.B); 0100 f_wav = cell(J+1-args.J_min, args.N); 0101 offset = 0; 0102 for j = args.J_min:J 0103 for en = 1:args.N 0104 if args.Upsample 0105 band_limit = args.L; 0106 else 0107 band_limit = min([ s2let_bandlimit(j,args.J_min,args.B,args.L) args.L ]); 0108 end 0109 temp = zeros(band_limit, 2*band_limit-1); 0110 for t = 1:band_limit 0111 for p = 1:2*band_limit-1 0112 ind = offset + (t-1) * ( 2 * band_limit - 1) + p; 0113 temp(t,p) = f_wav_vec(1,ind); 0114 end 0115 end 0116 f_wav{j+1-args.J_min, en} = temp; 0117 offset = offset + band_limit * (2*band_limit-1); 0118 end 0119 end 0120 end