【笔记】球面均匀采样的方法

球面均匀采样

对于一个参数化的单位球面
$$
x=\cos\theta \cos\phi\
y=\cos\theta \sin\phi\
z=\sin\theta
$$

如果很自然地对$\theta \sim U[0,\pi],\phi \sim U[0,2\pi]$ 均匀采样的话,这张可视化的图可以很容易理解(这里 $\theta,\phi$ 和我是反的)

image

回忆球面到平面参数化的展开图(如HDR图、地图),在顶部和底部的的两条线会被压缩成极点,因此靠近这两个边缘的点的分布会变得非常密集。

那么一般的做法是,因为我们考虑球面均匀采样,是面积均匀,对于某个采样点v,因此我们希望它的概率密度函数$pdf(v) = \frac{1}{4\pi}$ ,

然后我们需要将这个采样点参数化,利用概率密度函数在积分域上积分为1
$$
pdf(v)dA = \frac{1}{4\pi}dA = pdf(\theta,\phi)d\theta d\phi
$$
那么这样我们需要找到$dA$ 和$d\theta d\phi$ 的映射关系,而面积微元$dA = \sin\theta d\theta d\phi$

所以联合概率密度函数
$$
pdf(\theta,\phi) = \frac{1}{4\pi}\sin\theta
$$
可以求出边际概率密度函数,由于$\theta,\phi$ 是独立的,其实也就是$\theta,\phi$ 各自的概率密度函数
$$
pdf(\theta) = \int_0^{2\pi}pdf(\theta,\phi)d\phi = \frac{\sin\theta}{2}\
pdf(\phi)=\int_0^\pi pdf(\theta,\phi)d\theta = \frac{1}{2\pi}
$$
概率分布函数/累积分布函数
$$
F(\theta) = \int_0^\theta pdf(\theta)d\theta = \frac{1-\cos\theta}{2}\
F(\phi) = \int_0^\phi pdf(\phi)d\phi = \frac{\phi}{2\pi}
$$
也就是说,我们的参数化平面这张图上,$\theta,\phi$ 的分布就应该长这个样子了。

但是如何来获得一个这种分布呢?

方法有很多

逆变换采样

就实际应用上来说,我们最容易做的random也就是均匀分布。

利用一个均匀分布来得到另外一种分布,我们需要用到一个东西叫做逆变换采样Inverse_transform_sampling

维基百科上这张图很形象

img

其实就是假定某种变换$T$,使得$T(U) \sim F(\theta)$
$$
\因为U是均匀分布,因此有P(U\leq y) = y\
F(\theta) = P(\xi \leq \theta) = P(T(U)\leq\theta)=P(U\leq T^{-1}(\theta)) = T^{-1}(\theta)\
那么自然知道,F(\theta) = T^{-1}(\theta)\
那么这种变换T(U) = F^{-1}(U)\
取两个随机变量\xi_1,\xi_2 \sim U\
F_{\theta}^{-1}(\xi_1) = \arccos (1-2\xi_1)\
F_{\phi}^{-1}(\xi_2) = 2\pi \xi_2
$$
至此推导完毕。

其他采样方法

Wolfram MathWorld里面还给了很多神奇的采样方法

Marsaglia(1972)

(1)

$$
选择u = \cos\theta 均匀分布,所以du = \sin\theta d\theta\
x = \sqrt{1-u^2}\cos\phi\
y = \sqrt{1-u^2}\sin\phi\
z=u
$$

(2)

$$
选取x_1,x_2\sim U(0,1),进行剔除x_1^2+x_2^2\geq1\
x = 2x_1\sqrt{1-x_1^2-x_2^2}\
y = 2x_2\sqrt{1-x_1^2-x_2^2}\
z = 1-2(x_1^2+x_2^2)
$$

Cook 1957,Marsaglia 1972

$$
选取x_0,x_1,x_2,x_3\sim U(-1,1),拒绝域x_0^2+x_1^2+x_2^2+x_3^2\ge1\
利用四元数的变换规则\
x = \frac{2(x_1x_3+x_0x_2)}{x_0^2+x_1^2+x_2^2+x_3^2}\
y = \frac{2(x_2x_3-x_0x_1)}{x_0^2+x_1^2+x_2^2+x_3^2}\
z = \frac{x_0^2+x_3^2-x_1^2-x_2^2}{x_0^2+x_1^2+x_2^2+x_3^2}\
$$

Muller 1959,Marsaglia 1972

$$
生成三个高斯随机变量x,y,z\
向量\frac{1}{\sqrt{x^2+y^2+z^2}}\left[\begin{array}{} x\y\z\end{array}{}\right]
\在表面S^2上是均匀的
$$

【参考资料】

http://corysimon.github.io/articles/uniformdistn-on-sphere/

https://zhuanlan.zhihu.com/p/360420413

https://zhuanlan.zhihu.com/p/49746076

球体点拾取 – 来自 Wolfram MathWorld

逆变换采样 - 维基百科,自由的百科全书 (wikipedia.org)

https://www.bilibili.com/read/cv5661231/