作者:i_dovelemon
日期:2017/08/06
来源:CSDN
主题:Importance Sampling, PDF, Monte Carlo

引言

前面的文章[图形学数学基础之基本蒙特卡罗尔积分(Monte Carlo Integration)](http://blog.csdn.net/i_dovelemon/article/details/76286192)中提到过,我们可以通过使用数值的方法来求解一些无法通过分析方法解决的积分问题。并且,我提到过后面会讲解,如何通过对基本蒙特卡罗尔积分方法进行改进,从而加快求解积分的速度。所以,今天就来和大家讲解在图形学里面,一种非常重要的加快积分的手段-重要性采样(Importance Sampling)。

重要性采样(Importance Sampling)

我们先回顾下基本蒙特卡罗尔积分的内容,如下所示:$$\int_a^bf(x){\rm d}x\approx\frac{b-a}{N}\sum_{i=0}^{N-1}f(x_i)$$前面提到过,我们是通过在$[a,b]$的区间里面,进行均匀分布的进行采样,以此来构造平均值$h$。可事实上,这些均匀分布的点所在的值对最终的积分贡献度实际上不一样的,只有当函数本身是均匀的时候,比如下图所示: ![均匀分布函数](https://img-blog.csdn.net/20170806173834165?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaV9kb3ZlbGVtb24=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 对于这样的函数,我们使用均匀分布的采样,他们计算出来的值对最终的积分的贡献度实际上是一样的,所以能够通过这种方法来进行计算。但是在实际情况下,我们遇到的积分都是不均匀的,比如下图所示的这样: ![非均匀分布函数](https://img-blog.csdn.net/20170806174913049?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaV9kb3ZlbGVtb24=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 对于这样的函数,直观上来说,两边的值对最终的积分贡献度要小,而中心的值对最终的积分贡献度要大,所以我们就说中心部分相比于两边部分要“重要(Importance)”,所以当我们采样的时候,最好是能够多在中心部分采样,这样相比于均匀分布采样,相同采样数的情况下,这种方法更加的精确,这就是重要性采样(Importance Sampling)。 ![重要性采样点分布](https://img-blog.csdn.net/20170806181021641?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaV9kb3ZlbGVtb24=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

概率密度函数(Probability Density Function)

从前面的描述中可以看出,我们需要根据被积分函数本身的形状来构造采样点的分布。所以这里就引进了一个概率中的函数概率密度函数(Probability Density Function, PDF),这个函数就是我们将要主要打交道的函数,所以有必要好好的讲解下它的特性。

随机变量X

随机变量X,表示的是在某个指定的区间里面,事件A发生的概率。比如说,有一个随机变量X表示了今天要下雨的概率,扔一个骰子,点数大于3的概率,以及向一个圈里面扔石子,落在某个区域A的概率等等。

随机变量一般分为两个大类,分别是离散型随机变量,比如扔骰子的点数的概率;连续型随机变量,比如向一个圈里面扔石子,落在某个区域A的概率。

在图形学里面,我们主要用到的是连续型随机变量。连续型随机变量相比于离散型随机变量的一大特点是,虽然它也拥有样本区间,但是样本区间里面的样本数量是无限的,而单个样本事件发生的概率没有实际的意义,对我们来说,更重要的是研究落在样本区间里面的子区间的概率。

概率密度

对于连续型随机变量来说,概率密度函数就是描述了在样本区间里面子区间发生概率的一种函数,它和随机变量X的关系如下所示:$$X([a,b]) = \int_a^bp(x){\rm d}x$$。其中$X([a,b])$表示的就是事件发生在样本区间$[a,b]$中的概率。而$p(x)$就是随机变量$X$的概率分布函数。所以随机变量$X$和概率密度函数$p(x)$之间就是积分关系。这也就说明了,对于单一事件发生的概率在该积分中是没有意义的。

除了上面的公式之外,概率密度函数还有一个重要的特性:$$\int_{-\infty}^{+\infty}p(x){\rm d}x = 1$$这个特性表示,事件发生在整个概率区间里面的概率为1。

新的积分器函数

在明白了上面的内容之后,我们就可以得出一个新的积分函数:$$\int_a^bf(x){\rm d}x\approx\frac{1}{N}\sum_{i=0}^{N-1}\frac{f(x_i)}{p(x_i)}$$其中$p(x)$就是概率密度函数。这里之所以要除以$p(x_i)$,是因为当我们的采样点为$x_i$的时候,我们可以通过$p(x_i)$计算出该采样点对最终积分的一个贡献度权重值,这样一除就能够得到最终的积分值。

细心的读者可能会发现,好像我们只要找到一个采样点$x_i$,然后求出$p(x_i)$和$f(x_i)$,在使用$\frac{f(x_i)}{p(x_i)}$就已经能够得到最终的积分值了啊,干么还要采样那么多的数据,然后在求个平均值?这是因为,在解决实际问题的时候,我们往往很难精确的求出某个函数$f(x)$对应的概率密度函数$p(x)$。这时候的概率密度函数,就依靠于我们选取的采样策略来定义,它实际上是与最终的概率密度函数接近的一个函数,并不是真真的概率密度函数,所以需要通过多次采样,求平均值的方法来抵消这种近似带来的误差。关于这段内容,等到后面讲解对BRDF进行采样的时候,大家就能够理解。我们对BRDF进行采样的时候,往往很难求出BRDF本身的PDF,而是通过选取合适的采样策略,比如对GGX进行采样来逼近。

同时,从我们新的积分器,也能够得出前面一篇文章中讲解的基本蒙特卡罗尔积分器来,只要将:$$p(x) = \frac{1}{b-a}$$带入新的积分器中,就能够得到。

总结

今天给大家讲解了图形学里面一种重要的求解积分的手段。希望大家能够通过我的文章对这块内容有一个大体的认识。
不过这里我只讲解了你在获取了采样点之后,如何进行积分的过程。而如何获取采样点本身的操作并没有详细描述。后面会有专门的文章来讲解,如何根据一个概率密度函数来得出合适的采样点。同时需要提醒读者,如何获取采样点的知识,相当的复杂,我自己也只掌握了皮毛,后面的文章也仅仅供大家参考,给大家指明一个方向,更深入的了解,需要大家自行去学习。

参考文献

[1] Ray Tracing From Ground Up
[2] Physically Based Rendering From Theory to Implementation
[3] Spherical Harmonic Lighting: The Gritty Details

图形学数学基础之重要性采样(Importance Sampling)相关推荐

  1. 重要性采样(Importance Sampling)详细学习笔记

    重要性采样(Importance Sampling)详细学习笔记 文章目录 重要性采样(Importance Sampling)详细学习笔记 前言: 参考主体: on-policy 和 off-pol ...

  2. 重要性采样(Importance Sampling)简介和简单样例实现

    重要性采样(Importance Sampling)简介和简单样例实现 在渲染领域,重要性采样这个术语是很常见的,但它究竟是什么呢?我们首先考虑这样的一种情况: 如果场景里有一点P,我们想计算P点的最 ...

  3. 重要性采样Importance Sampling

    参考: https://zhuanlan.zhihu.com/p/41217212 https://zhuanlan.zhihu.com/p/78720910?utm_source=wechat_se ...

  4. matlab重要性采样,Importance Sampling (重要性采样)介绍 | 文艺数学君

    摘要这一篇是关于重要性抽样(importance sampling)的介绍, 包括他的背景知识, 相关的数学转换和最后的例子. 简介 重要性抽样(importance sampling)是一种近似的抽 ...

  5. 重要性采样(importance sampling)

    重要性采样是统计学习中一种常用的方法.在强化学习中通常和蒙特卡洛方法结合使用. 重要性采样是,使用另外一种分布来逼近所求分布一种方法. 具体形式是这样的:假设我们在想要求取目标分布PPP下函数f(x) ...

  6. python求pai的近似值_PR Sampling Ⅰ: 蒙特卡洛采样、重要性采样及python实现

    刘浚嘉:PR:机器人学的概率方法学习路径​zhuanlan.zhihu.com PR 采样分章 第一节:蒙特卡洛采样.重要性采样 引言 还记得我们之前学过的贝叶斯推断吗? 刘浚嘉:PR Ⅱ:贝叶斯估计 ...

  7. 蒙特卡洛采样_PR Sampling : 蒙特卡洛采样、重要性采样及python实现

    作者:刘浚嘉 专栏地址:https://www.zhihu.com/column/c_1188392852261134336 引言 还记得我们之前学过的贝叶斯推断吗?https://zhuanlan. ...

  8. python实现采样函数_PR Sampling Ⅰ: 蒙特卡洛采样、重要性采样及python实现

    刘浚嘉:PR:机器人学的概率方法学习路径​zhuanlan.zhihu.com PR 采样分章 第一节:蒙特卡洛采样.重要性采样 引言 还记得我们之前学过的贝叶斯推断吗?刘浚嘉:PR Ⅱ:贝叶斯估计/ ...

  9. 粒子滤波 particle filter —从贝叶斯滤波到 粒子滤波—Part-III(重要性采样序贯重要性采样SIS)

    粒子滤波 particle filter -从贝叶斯滤波到粒子滤波-Part-III(重要性采样&序贯重要性采样SIS) 原创不易,路过的各位大佬请点个赞 机动目标跟踪/非线性滤波/传感器融合 ...

最新文章

  1. jdbcpingquery mysql_JDBC - liuping - 博客园
  2. Boost:BOOST_ASSERT用法的测试程序
  3. spring cloud: 使用consul来替换config server,config key/value 具体的配置详解
  4. 构建Docker镜像指南,含实战案例
  5. Struts2 s:iterator 用法
  6. 台州银行笔试考什么_台州银行笔试题型招聘考试真题考什么
  7. 编程范式:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)...
  8. 绿化版IDEA启动时报IF you already have a 64-bit jdk错误的解决
  9. C/C++ FFmepeg Qt音视频开发录屏摄像机
  10. 拯救者Y7000 2020新版Bios关闭开机自检
  11. 密码学-->buuctf49~60
  12. 谈谈任务调度的四种实现方式
  13. P9813驱动RGB灯珠
  14. 【解决】路由器设置成交换机使用
  15. Telemetry 标准日志接口如何提升运维效率?
  16. 【VMware】【XShell】从虚拟机下载文件到本地
  17. 分区表类型:MBR和GUID区别
  18. ICH10R服务器主板是什么芯片,主板上面都有啥?常见板载芯片功能介绍(一)
  19. 家里WiFi信号差,如何解决?
  20. lisp类似常青藤菜单_盘点10大影响力编程语言,你学对了吗?

热门文章

  1. Android MotionEvent详解
  2. 学习python不要盲目跟风,看看自己适合吗?
  3. iOS description方法的使用介绍
  4. 百度大脑EasyDL多人标注重磅上线啦
  5. python监控linux运行程序_python linux监控程序
  6. ie浏览器怎么打开html,win10ie浏览器不能打开html设置怎么办
  7. 如何创建数据链接文件
  8. leaflet 卷帘,比较两个地图的叠加sideBySide
  9. Mac OS系统进不去,重装也不行,只能抹盘安装,Espionage的加密文件如何救出?
  10. 低功耗蓝牙BLE之广播