不只是噪声,更是数学美 ---浅谈Perlin Noise

2023-10-31

首先说明为什么这篇博客叫这个题目,我刚刚开始学习Perlin Noise是从知乎上的一篇文章入门的,作者的题目是不只是噪声,我觉得很有韵味,就借鉴过来。这是链接:https://zhuanlan.zhihu.com/p/22337544

一. 背景

Perlin Noise,译作柏林噪声,是指Ken Perlin发明的噪声算法。Ken Perlin早在1983年就提出了Perlin noise,当时他正在参与制作迪士尼的动画电影《电子世界争霸战》(TRON),但是他不满足于当时计算机产生的那种非常不自然的纹理效果,因此提出了Perlin噪声。随后,他在1984年的SIGGRAPH Course上做了名为Advanced Image Synthesis1的课程演讲,并在SIGGRAPH 1985上发表了他的论文[Perlin K. An image synthesizer[J]. ACM Siggraph Computer Graphics, 1985, 19(3): 287-296.](Perlin K. An image synthesizer[J]. ACM Siggraph Computer Graphics, 1985, 19(3): 287-296.)。由于Perlin噪声的算法简单,被迅速应用到各种商业软件中。后来Perlin继续研究程序纹理的生成,并和他的一名学生又在SIGGRAPH 1989上发表了一篇文章[Perlin K, Hoffert E M. Hypertexture[C]//ACM SIGGRAPH Computer Graphics. ACM, 1989, 23(3): 253-262](Perlin K, Hoffert E M. Hypertexture[C]//ACM SIGGRAPH Computer Graphics. ACM, 1989, 23(3): 253-262),提出了超级纹理(hypertexture)。他们使用噪声+fbm+ray marching实现了各种有趣的效果。到1990年,已经有大量公司在他们的产品中使用了Perlin噪声。在1999年的GDCHardCore大会上,Ken Perlin做了名为Making Noise的演讲[Perlin K. Making noise[C]//Proc. of the Game Developer Conference. 1999.](Perlin K. Making noise[C]//Proc. of the Game Developer Conference. 1999.),系统地介绍了Perlin噪声的发展、实现细节和应用。在2002年他对原有的柏林噪声算法做了改进,并发表了论文ImprovingNoise。
Prelin由于出色的工作,获得了奥斯卡科技成果奖(奥斯卡是电影业的诺贝尔奖,靠着一个算法单枪匹马获得这个奖励,Perlin确实厉害)。

二. 分类

看了很多博客,博主都没有把分形噪声和Simplex噪声归为柏林噪声。但是我觉得这样不对,因为分形噪声和Simplex都是柏林先后提出来的,所以我把这2个和原始的柏林噪声一起归为柏林噪声,在后面都做介绍。事实上,维基百科也是这样做的,将这3个噪声全部归为柏林噪声。https://zh.wikipedia.org/wiki/Perlin%E5%99%AA%E5%A3%B0
根据wiki,由程序产生噪声的方法大致可以分为两类:
类别 名称
基于晶格的方法(Lattice based) 又可细分为两种:
第一种是梯度噪声(Gradient noise),包括Perlin噪声Simplex噪声Wavelet噪声等;
第二种是Value噪声(Value noise)
基于点的方法(Point based) Worley噪声
从这个表格中,我们可以看到柏林噪声的产生是基于晶格的方法,从后面的介绍中相信一定会对”晶格”这个名字有一个深刻的理解。
下面贴出几张图片,先对这柏林噪声中的3种形式有一个直观的印象。

随机噪声

原始柏林噪声

分形噪声

Simplex噪声
从这4张图片中我们可以大概看出不同噪声的一些端倪,随机噪声就像黑白电视一样,杂乱无章。原始的柏林噪声中包含有随机的成分,但是相互之间又有关联,像素点之间是平滑的进行变化,而不是像白噪声那么尖锐。分形噪声就像我们在计算机图形学中学的分形树,简单的细节不断的重复,最后生成一个复杂的图形。
下面对白噪声,原始的柏林噪声,分形噪声,Simplex噪声的原理一一解释。

三. 白噪声

噪声的基础是随机数,如果给屏幕上的每个像素点赋予一个0和1之间的随机数来表示像素点的亮度,就会得到一幅杂乱无章的图片,就像我们小时候家里的电视在下雨天突然没有信号后屏幕上呈现的图像。从程序员的角度来看白噪声,我们无非就是引入一些随机变量到程序,给定一个输入(比如种子),程序给出一个输出。在C中,rand.h中对rand函数进行了声明,我们只要在自己的程序中引入这个头文件就行。不过这里生成的随机数是伪随机数,我们可以采用时间来作为种子。C++中也有实现了随机数的库,和C类似,毕竟是C的延伸和拓展。Python的第三方模块random对随机数的实现更加强大,因为在很多机器学习方法中需要用的随机数。U3D中通过Ramdom.Range()l来实现随机数的生成。基本的程序框架如下:(以Python为例)
import random
random.seed()
random.random()
我们从上面的代码生成随机数的过程中可以看出,这样产生的噪声非常不自然,听起来不自然,看起来也不好看。这学期学了信号与系统,不妨从信号的角度来考虑这个问题,一幅随机噪声的图像的功率谱密度在整个频域内均匀分布, 所有频率具有相同能量密度。也就是说,白噪声是指在较宽的频率范围内,各等带宽的频带所含的噪声能量相等。白噪声就像全彩色白颜色的光频。
白噪声虽然很好模拟,但是自身具有不可修复的缺点。观察现实生活中的自然噪声,它们不会长成上面这个样子。例如木头纹理、山脉起伏,它们的形状大多是趋于分形状(fractal)的,即包含了不同程度的细节。比如地形,它有起伏很大的山脉,也有起伏稍小的山丘,也有细节非常多的石子等,这些不同程度的细节共同组成了一个自然的地形表面。这些随机的成分并不是完全独立的,他们之间有一定的关联。采用微积分里面的说法,就是像素点之间变化是连续的,并没有发生跳变。很显然,白噪声没有做到这一点。

四. 原始的柏林噪声

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不只是噪声,更是数学美 ---浅谈Perlin Noise 的相关文章

随机推荐

  • 使用Xshell、MobaXterm、Pycharm配置连接远程服务器

    实验室使用服务器远程跑程序 大概分为以下 1 使用SSH SFTP远程连接 2 使用IDE远程调试 下面分别来介绍 文章目录 使用SSH Xshell安装及使用简介 MobaXterm安装及使用简介 下载安装教程 使用简介 使用IDE远程调
  • 安装企业级Docker

    1 关闭防火墙 1 1 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 关闭防火墙 1 2 关闭iptables防火墙 yum install iptables serv
  • /prod-api/ 整合阿里云服务器 2020年12月13日 23:44:18(日记)

    学习过程 先从nginx开始Nginx安装配置 Linux 各种踩坑 求赞安慰 Turing 的博客 CSDN博客 因为之前配置过 所以nginx很快就配置完成了 主要是修改一下配置文件 此处有个小坑 nginx配置文件默认监听80端口 但
  • 微信删除的图片怎么恢复?微信照片过期或已被清理如何还原

    小编是个不喜欢清理微信聊天记录里的照片 文档 视频等各种东西的人 但是有一次不知道是因为什么 一股脑就将好几个人的聊天记录中的文件 照片 视频通通清理并删除掉了 后面想找回来 才知道自己当时太冲动了 估计很多人都有这种经历吧 那么 微信删除
  • CSS基础之背景样式

    目录 前言 一 颜色背景 二 图片背景 三 致我们 前言 当我们在网上浏览各种好看的页面时 网页的背景样式往往是吸引我们眼球的重要因素 有用颜色作为背景图的 也有用图片作背景图的 那么怎样利用CSS简单设置一个背景图呢 来看看叭 CSS背景
  • 玩转深度学习——pytorch实现Lenet网络

    玩转深度学习 pytorch实现Lenet网络 什么是LeNet网络 LeNet网络pytorch实现 改进LeNet网络 增加卷积层 尝试修改一些超参数 开始炼丹 什么是LeNet网络 LeNet 它是最早发布的卷积神经网络之一 因其在计
  • 从前端HTML页面提取数据并保存到数据库当中

    前端页面采取form表单的提交方式 form标签中的action属性值为url 规定当提交表单时 向何处发送表单数据 首先把action中的值修改为urls py文件中设置的url method指明提交方式为post 在form表单结束前加
  • 7个案例15分钟让你了解Python套路!

    古人云 书山有路勤为径 学海无涯苦作舟 注 一般标榜着 XX天学会XX XX 分钟了解XX 的文章都不会是让你增长功力的文章 如本文 随着互联网发展 全球在快速数字化 编程这件事也从数十年前只有科研人研在实验室才能做的事变得越来越让人们所熟
  • C++对txt文件的写入读取操作

    文章目录 1 文件流知识 2 文件的写入 3 文件内容的输出 1 文件流知识 摘自c 中文网 ifstream是输入文件流 就是通过它定义的对象获取文件中的内容 ofstream是输出文件流 将内容写入文件 注意 要使用输入输出文件流要包含
  • 1 .SQL——DataGrip 中的DML三种添加数据方法

    insert into student xingx xi id name age grade xb woketime value 1 aa 10 99 男 2023 12 1 给指定字段添加数据 insert into student xi
  • 谷粒商城笔记+踩坑汇总篇

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud 黑马旅游 谷粒商城 学成在线 设计模式 牛客面试题 目录 一 摘要 二 微服务架构图 三 文章汇总 一 摘要 部
  • 【待解决】报错:gpt模型训练的时候,有报错的torch.distributed.elastic.multiprocessing.errors.ChildFailedError:

    pytorch多GPU并行的问题 torch distributed elastic multiprocessing errors c CSDN博客
  • Goby漏洞更新

    Goby预置了最具攻击效果的漏洞引擎 覆盖Weblogic Tomcat等最严重漏洞 每天从互联网 如CVE 会产生大量的漏洞信息 我们筛选了会被用于真实攻击的漏洞进行每日更新 Goby也提供了可以自定义的漏洞检查框架 发动了互联网的大量安
  • QTreeView使用整理

    在Qt开发过程中 树控件QTreeView使用的非常频繁 各种批量展示和编辑信息的地方 都用得上该控件 在使用QTreeView过程中 用到各种常规 不常规的功能 并进行过各种改造 这里将这些知识和技巧作一个总结 一 Model View框
  • C++实现基于mfc的仓库管理系统(可连MySQL数据库)

    概述 本系统是一个基于mfc实现的可以连接数据库的仓库管理系统 其余管理系统也可根据此系统进行参考与修改进行实现 主要功能 本超市仓库管理系统 通过对数据库的查询 能够实现系统登录以及对商品与用户信息的增删改查操作 支持多用户多身份登录 其
  • 大学《数据库系统》课程设计报告

    二话不说 先怼源码 gitHub源码地址 题 目 教学管理系统 专 业 计算机科学与技术 作 者 马志成 完成时间 2019年1月3日 一 实验目的 数据库系统课程设计是为了配合数据库原理及应用开发而设置的 是计算机科学与技术 网络工程 信
  • Contest2574 - 高级语言程序实践--第6次作业--计信A2107-2113

    写在前面 乍一看挺难 仔细想想也就纸老虎罢了 不写题解 自己想吧 目录 问题 A 字符串去重排序 问题 B 两数之和 问题 C 完美立方数 问题 D 分解质因数 问题 E 子列表最大长度 问题 F 列表的合并与排序 问题 G 个人数据脱敏
  • 别再问我们用什么画图的了!问就是excalidraw

    每次发 https github com tal tech go zero 相关文章时 都会有读者问我们用什么画图的 这图什么工具画的呀 好看 这个手绘风格真好看 用啥工具画的呀 可不可以介绍下这个画图的工具 诸如此类的问题 所以我决定写篇
  • MYSQL 删除空记录 NULL

    数据库小问题 今天在处理数据库中的数据的时候 遇到空记录的问题 在百度上搜索之后 给出的答案有这样几种 1 Delete from student where name null 2 Delete from student where na
  • 不只是噪声,更是数学美 ---浅谈Perlin Noise

    首先说明为什么这篇博客叫这个题目 我刚刚开始学习Perlin Noise是从知乎上的一篇文章入门的 作者的题目是不只是噪声 我觉得很有韵味 就借鉴过来 这是链接 https zhuanlan zhihu com p 22337544 一 背