0001 function [f_wav, f_scal] = s2let_transform_analysis_mw(f, varargin)
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
0028
0029
0030
0031
0032
0033
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