58 |
|
odd(n) : .5*n - floor(.5*n) - .25; |
59 |
|
LegendreP(n,m,x) : if(m+.5, |
60 |
|
LegendreP2(n,m,x,sqrt(1-x*x)), |
61 |
< |
if(odd(-m),-1,1)*fact(n+m)/fact(n-m) * |
62 |
< |
LegendreP2(n,-m,x,sqrt(1-x*x)) |
61 |
> |
fact(n+m)/fact(n-m) * LegendreP2(n,-m,x,sqrt(1-x*x)) |
62 |
|
); |
63 |
|
{ SH normalization factor } |
64 |
|
SHnormF(l,m) : sqrt(0.25/PI*(2*l+1)*fact(l-m)/fact(l+m)); |
71 |
|
SphericalHarmonicYi(l,m,theta,phi) : SHthetaF(l,m,theta)*sin(m*phi); |
72 |
|
|
73 |
|
{ Ordered, real SH basis functions } |
74 |
< |
SH_B4(l,m,o,theta,phi) : if(m-.5, if(o, SphericalHarmonicYi(l,m,theta,phi), |
74 |
> |
{ Coeff. order based on Basri & Jacobs paper, "Lambertian Reflectance and |
75 |
> |
Linear Subspaces," IEEE Trans. on Pattern Analysis & Machine Intel., |
76 |
> |
vol. 25, no. 2, Feb. 2003, pp. 218-33, Eq. (7): |
77 |
> |
|
78 |
> |
i n m even/odd |
79 |
> |
= = = ======== |
80 |
> |
1 0 0 x |
81 |
> |
2 1 0 x |
82 |
> |
3 1 1 e |
83 |
> |
4 1 1 o |
84 |
> |
5 2 0 x |
85 |
> |
6 2 1 e |
86 |
> |
7 2 1 o |
87 |
> |
8 2 2 e |
88 |
> |
9 2 2 o |
89 |
> |
10 3 0 x |
90 |
> |
11 3 1 e |
91 |
> |
... |
92 |
> |
} |
93 |
> |
SH_B4(l,m,o,theta,phi) : if(m-.5, sqrt(2) * |
94 |
> |
if(o, SphericalHarmonicYi(l,m,theta,phi), |
95 |
|
SphericalHarmonicYr(l,m,theta,phi)), |
96 |
< |
SHthetaF(l,0,theta) ); |
96 |
> |
SHthetaF(l,0,theta) ); |
97 |
|
SH_B3(l,r,theta,phi) : SH_B4(l,floor((r+1.00001)/2),odd(r+1),theta,phi); |
98 |
|
SH_B2(l,i,theta,phi) : SH_B3(l,i-l*l-1,theta,phi); |
99 |
|
SphericalHarmonicB(i,theta,phi) : SH_B2(ceil(sqrt(i)-1.00001),i,theta,phi); |
100 |
|
|
101 |
< |
{ Application of SH fitting coeff. f(i) } |
101 |
> |
{ Application of SH coeff. f(i) } |
102 |
|
SH_F2(n,f,theta,phi) : if(n-.5, f(n)*SphericalHarmonicB(n,theta,phi) + |
103 |
|
SH_F2(n-1,f,theta,phi), 0); |
104 |
|
SphericalHarmonicF(f,theta,phi) : SH_F2(f(0),f,theta,phi); |