-
Notifications
You must be signed in to change notification settings - Fork 2
/
s2let_helper.c
107 lines (88 loc) · 2.99 KB
/
s2let_helper.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <ssht/ssht.h>
#include "s2let/s2let.h"
int s2let_n_phi(const s2let_parameters_t *parameters) {
if (parameters->sampling_scheme == S2LET_SAMPLING_MW_SS)
return ssht_sampling_mw_ss_nphi(parameters->L);
else
return ssht_sampling_mw_nphi(parameters->L);
}
int s2let_n_theta(const s2let_parameters_t *parameters) {
if (parameters->sampling_scheme == S2LET_SAMPLING_MW_SS)
return ssht_sampling_mw_ss_ntheta(parameters->L);
else
return ssht_sampling_mw_ntheta(parameters->L);
}
int s2let_n_px(const s2let_parameters_t *parameters) {
return s2let_n_phi(parameters) * s2let_n_theta(parameters);
}
int s2let_n_lm(const s2let_parameters_t *parameters) {
int L = parameters->L;
return L * L;
}
int s2let_n_lm_scal(const s2let_parameters_t *parameters) {
int L = parameters->L;
int J_min = parameters->J_min;
int bandlimit =
(parameters->upsample) ? L : MIN(s2let_bandlimit(J_min - 1, parameters), L);
return bandlimit * bandlimit;
}
int s2let_n_lmn_wav(const s2let_parameters_t *parameters) {
so3_parameters_t so3_parameters = {};
fill_so3_parameters(&so3_parameters, parameters);
int L = parameters->L;
int N = parameters->N;
int J_min = parameters->J_min;
int J = s2let_j_max(parameters);
int bandlimit = L;
int j, total = 0;
for (j = J_min; j <= J; ++j) {
if (!parameters->upsample) {
bandlimit = MIN(s2let_bandlimit(j, parameters), L);
so3_parameters.L = bandlimit;
so3_parameters.N = MIN(N, bandlimit);
}
total += so3_sampling_flmn_size(&so3_parameters);
}
return total;
}
int s2let_n_gamma(const s2let_parameters_t *parameters) {
so3_parameters_t so3_parameters = {};
fill_so3_parameters(&so3_parameters, parameters);
return so3_sampling_ngamma(&so3_parameters);
}
int s2let_n_scal(const s2let_parameters_t *parameters) {
int J_min = parameters->J_min;
int L = parameters->L;
int bandlimit = (parameters->upsample)
? parameters->L
: MIN(s2let_bandlimit(J_min - 1, parameters), L);
s2let_parameters_t bl_parameters = *parameters;
bl_parameters.L = bandlimit;
return s2let_n_phi(&bl_parameters) * s2let_n_theta(&bl_parameters);
}
int s2let_n_wav(const s2let_parameters_t *parameters) {
so3_parameters_t so3_parameters = {};
fill_so3_parameters(&so3_parameters, parameters);
int L = parameters->L;
int J_min = parameters->J_min;
int J = s2let_j_max(parameters);
int bandlimit = L;
int j, total = 0;
for (j = J_min; j <= J; ++j) {
if (!parameters->upsample) {
bandlimit = MIN(s2let_bandlimit(j, parameters), L);
so3_parameters.L = bandlimit;
}
total += so3_sampling_f_size(&so3_parameters);
}
return total;
}
int s2let_n_wav_j(int j, const s2let_parameters_t *parameters) {
so3_parameters_t so3_parameters = {};
fill_so3_parameters(&so3_parameters, parameters);
if (!parameters->upsample) {
int L = parameters->L;
so3_parameters.L = MIN(s2let_bandlimit(j, parameters), L);
}
return so3_sampling_f_size(&so3_parameters);
}