Home > src > main > matlab > s2let_transform_analysis_mw.m

s2let_transform_analysis_mw

PURPOSE ^

s2let_transform_analysis_mw

SYNOPSIS ^

function [f_wav, f_scal] = s2let_transform_analysis_mw(f, varargin)

DESCRIPTION ^

 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

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

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

Generated on Fri 11-Nov-2016 11:50:36 by m2html © 2005