作者:i_dovelemon
日期:2017/09/04
来源:CSDN
主题:Rendering Equation, Probability Density Function, Cumulative Density Function

引言

前面几篇文章讲解了Importance Sampling的一些理论知识。自此我们知道了,重要性采样的核心在于根据被采样函数的重要性程度,合理的分布样本,在重要性大的地方样本数量要多,在重要性小的地方,样本数量可以减少。而这个分布可以根据被采样函数的PDF来得出。在了解了这些基本知识之后,我们就需要通过实际的采样操作来对Rendering Equation进行求解。而在Importance Sampling中,最重要的操作莫过于确定采样点的分布。后面的文章将陆陆续续为大家讲解,如何通过已知的Rendering Equation的PDF(因为大部分光照模型被提出的时候,模型的作者都会给出采样策略,得出PDF),求出在该PDF下的采样分布。

今天先来给大家讲解对于1D的情况,如何根据PDF进行采样。这个情况虽然不是最终的操作,但是却是最终操作中一个很重要的部分,所以有必要先了解下。

累积密度函数(Cumulative Density Function, CDF)

在讲解实际的求法之前,先来了解一个新名词-累积密度函数。拿摇骰子举例。我们知道每一个骰子点数出现的概率都为16\frac{1}{6}.那么摇一次骰子,点数小于等于4的概率为46\frac{4}{6},而这个值就可以认为是摇骰子在小于等于4时候的累积密度函数P(4)=46P(4) = \frac{4}{6}.数学上来说,累积密度函数是概率密度函数的积分,及

P(x)=∫xap(x)dx

P(x) = \int_a^xp(x)dx其中,a为概率密度函数 p(x)p(x)的下限。

Inverse Method

如果,我们已知一个离散随机变量X的概率密度函数PDF的函数图如下所示:

我们可以简单的将这个离散的概率密度函数,一个一个堆叠起来,形成下面这张图:

再得到这样一个累积分布函数图之后,我们产生一个均匀随机变量 ξ\xi,它的值范围在[0,1]里面,我们将得到的新值投影到上图中,得到如下的图:

这样,我们就得到了一个映射关系 ξ=P(xi)\xi = P(xi),其中 ξ\xi就是均匀分布随机变量,就是上图中的xi,而 P(xi)P(xi)就是此例子中随机变量X的累积密度函数。由于 ξ\xi在[0,1]的范围里面是均匀分布的,而累积密度函数的最大值(也就是上图中最右边那堆累积的值)为1,所以很自然的就能够将一个均匀分布的随机变量,映射到另外一个非均匀分布的随机变量X上。根据公式

ξ=P(xi)

\xi = P(xi)我们就可以得到新的采样分布点

xi=P−(ξ)

xi = P^{-}(\xi),这里的 P−P^{-}表示的就是函数 PP的逆,就是章节名词中Inverse的由来。

上面举的例子是一个离散的情况,试着将概率密度函数的分块无限的变小,那么就得到了一个平滑的曲线,同时将累积密度函数中的分块无限的表小,也将得到一个平滑的曲线,同样的方法也适应。

步骤

  • 求出随机变量X的概率密度函数p(x)
  • 求出随机变量X的累积密度函数P(x)
  • 随机产生一个均匀分布采样数ξ\xi
    • 带入公式xi=P−(ξ)xi = P^{-}(\xi),求出在新随机变量X下的采样数
    • 总结

      这里讲解的情况十分的简单,但是理解了这个,将为后面更加复杂的操作,提供基础,所以大家好好的理解下这里的知识,后面会在此基础上和大家讲解,如何根据一个多维的概率密度函数,求出它的采样点。

      参考文献

      [1] Physically Based Rendering From Theory to Implementation

  • 图形学数学基础之1D采样分布计算方法Inverse Method相关推荐

    1. 图形学数学基础之重要性采样(Importance Sampling)

      作者:i_dovelemon 日期:2017/08/06 来源:CSDN 主题:Importance Sampling, PDF, Monte Carlo 引言 前面的文章[图形学数学基础之基本蒙特卡 ...

    2. 【图形学数学基础】第一章

      数学基础(一) 笛卡尔坐标系 弧度和角度的换算 三角函数恒等式 对称相关 毕达哥拉斯定理 毕达哥拉斯恒等式 和差恒等式 等腰三角形恒等式(a=b= θ \theta θ) 正弦定理 余弦定理 计算机图 ...

    3. 计算机图形学数学基础——向量点乘和叉乘

      简单总结闫老师图形学课程中向量点乘和叉乘及其在图形学中的意义 1. 向量点乘和叉乘 1.1 向量点乘 1.2 向量叉乘 1.3 向量叉乘的意义 1.3.1 判断向量左右位置 1.3.2 判断点的内外位 ...

    4. 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)

      台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix) matrix left division左除:\ or mldivide() solvi ...

    5. V-rep学习笔记:机器人逆运动学数值解法(Damped Least Squares / Levenberg-Marquardt Method)...

      The damped least squares method is also called the Levenberg-Marquardt method. Levenberg-Marquardt算法 ...

    6. python计算机器人运动学分析_V-rep学习笔记:机器人逆运动学数值解法(The Jacobian Transpose Method)...

      机器人运动学逆解的问题经常出现在动画仿真和工业机器人的轨迹规划中:We want to know how the upper joints of the hierarchy would rotate ...

    7. MPB:原核微生物群落随机性和确定性装配过程的计算方法

      为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

    8. B站台湾大学郭彦甫|MATLAB 学习笔记|12 线性方程式和线性系统 Linear equations

      MATLAB学习笔记(12 线性方程式和线性系统 Linear equations) 如想获得更好得阅读体验,可以转到后面链接 12 文章目录 MATLAB学习笔记(12 线性方程式和线性系统 Lin ...

    9. 2000门课程名称翻译大全,写英文简历时用得着的

      C 语言 C Language  CAD 概论 Introduction to CAD  CAD/CAM CAD/CAM  COBOL语言 COBOL Language  生物物理学 Biophysi ...

    最新文章

    1. boost::math::tools::centered_continued_fraction用法的测试程序
    2. 关于html和javascript在浏览器中的加载顺序问题的讨论(zz)
    3. u盘引导linux加载raid卡驱动,使用U盘加载SCSI/RAID卡驱动
    4. 经典SQL语句集锦(收藏版)
    5. perl多进程实战之一
    6. weblogic修改banner_Via WLST Monitor Weblogic Server
    7. dynamic的使用
    8. B00004 atoi函数
    9. SonarLint黄线警告python:S125
    10. ExtJs TreePanel使用TreeLoader在IE下无法正常加载显示的解决方法
    11. 德国人制作的 Windows 2000/XP 优化脚本2.2_build9 (2008-05-31)
    12. 信息系统综合知识六 标准化与知识产权
    13. C++ 控制台编译时显示‘ ld returned 1 exit status’
    14. 电源设计那些事儿-ppt01
    15. 微型计算机一个汉字多少字节,一个汉字多少字节(Byte)?
    16. 阿里云手机号停机了怎么办?阿里云手机号收不到验证码,阿里云子账号建立教程
    17. 携手腾讯官方打造,微信(统信UOS版)首发
    18. matlab 求矩阵程序设计,MATLAB程序设计教程(2)—MATLAB矩阵及其运算(3)
    19. android 高德地图设置不能旋转_北京实习阿里巴巴、国寿投资、小饭桌、高德软件...
    20. 安卓 jni 开发错误 UnsatisfiedLinkError: Native method not found

    热门文章

    1. 四种编程命名规则:驼峰命名法,帕斯卡命名法,匈牙利命名法,下划线命名法
    2. 2023西北大学计算机考研信息汇总
    3. 那些android你需要知道的事
    4. 维护一个大型开源项目,例如vscode是怎样的体验?
    5. 主元素、主元素II、主元素III
    6. Hadoop(二):入门
    7. Android本地视频播放器开发--NDK编译FFmpeg
    8. 为什么element ui 中表单验证validate验证成功不执行验证成功的逻辑代码
    9. spoolsv病毒的清除
    10. 软件测试周刊(第59期):觉得自己生活的很好吗?为什么视而不见?