首页 > 编程语言 >Perlin噪声

Perlin噪声

时间:2023-04-24 18:36:16浏览次数:48  
标签:插值 噪声 Perlin grid np gradients

title: Perlin噪声
date: 2023-04-18 11:10:14
tags:
    - 噪声
    - perlin
categories:
    - 充电学习

perlin基本信息

Perlin噪声(Perlin noise,又称为柏林噪声)指由Ken Perlin发明的自然噪声生成算法,具有在函数上的连续性,并可在多次调用时给出一致的数值。 在电子游戏领域中可以透过使用Perlin噪声生成具连续性的地形;或是在艺术领域中使用Perlin噪声生成图样。

由于一些历史原因,Simplex噪声和分形噪声(texture synthesis)都曾在学术论文中被单独称作Perlin噪声。

经典Perlin噪声

perline噪声是基于晶格的方法。它属于梯度噪声,其原理就是将坐标系划分成一块一块的晶格,之后在晶格的顶点出生成一个随机梯度,通过与晶格顶点到晶格内点的向量进行点乘加权计算后得到噪声。

实现perlin噪声的过程需要插值

  • 对于一维:插值使用的是一个在0处为1,在1处为0,在0.5处为0.5的连续单调递减函数。例如对,设$c_{0}$,$c_{1}$为左右两个整数点的数值,t为该点距离左边点的距离,使用$(1-t)$作为插值函数,则该点的值为$c_{1}(1-t)+c_{0}t$。

但是$(1-t)$是线性插值,人工痕迹比较严重,并且在整数点上不连续。Perlin建议使用$3t{2}-2t$作为插值函数。后来建议使用$6t{5}-15t+10t{3}$作为插值函数。事实上,只有在区间[0,1]内的连续函数$f$,有$f(0)=1,f(1)=0$且$f{}(0)=f^{}(1)=0$的函数皆可作为插值函数。

  • 对于二维:对于点$(x,y)$,令$i=\lfloor x \rfloor,j=\lfloor y \rfloor$,它所在的晶格的四个顶点分别为$(i,j)、(i+1,j)、(i+1,j+1)、(i,j+1)$。令$u=x-i,v=y-j$,这四个顶点对点$(x,y)$的贡献可以使用它们的梯度$(g_{00},g_{10},g_{11},g_{01})$和$(x,y)$点与这四个顶点的方向$((u,v),(u-1,v),(u-1,v-1),(u,v-1))$进行点积获得。但是在二维的情况下,插值更为复杂。首先需要对 $(i,j)$ 和$(i+1,j)$ 两点在$x$方向插值,得到点$(x,j)$的值;之后对$(i,j+1)$ 和 $(i+1,j+1)$两点在$x$方向插值,得到点$(x,j+1)$的值;最后对$(x,j)$和$(x,j+1)$ 在$y$方向插值,得到$(x, y)$的值。

code

完整代码

def interpolant(t):
    return t*t*t*(t*(t*6 - 15) + 10)


def generate_perlin_noise_2d(
        shape, res, tileable=(False, False), interpolant=interpolant
):
    delta = (res[0] / shape[0], res[1] / shape[1])
    d = (shape[0] // res[0], shape[1] // res[1])
    grid = np.mgrid[0:res[0]:delta[0], 0:res[1]:delta[1]]\
             .transpose(1, 2, 0) % 1
    # Gradients
    angles = 2*np.pi*np.random.rand(res[0]+1, res[1]+1)
    gradients = np.dstack((np.cos(angles), np.sin(angles)))
    if tileable[0]:
        gradients[-1,:] = gradients[0,:]
    if tileable[1]:
        gradients[:,-1] = gradients[:,0]
    gradients = gradients.repeat(d[0], 0).repeat(d[1], 1)
    g00 = gradients[    :-d[0],    :-d[1]]
    g10 = gradients[d[0]:     ,    :-d[1]]
    g01 = gradients[    :-d[0],d[1]:     ]
    g11 = gradients[d[0]:     ,d[1]:     ]
    # Ramps
    n00 = np.sum(np.dstack((grid[:,:,0]  , grid[:,:,1]  )) * g00, 2)
    n10 = np.sum(np.dstack((grid[:,:,0]-1, grid[:,:,1]  )) * g10, 2)
    n01 = np.sum(np.dstack((grid[:,:,0]  , grid[:,:,1]-1)) * g01, 2)
    n11 = np.sum(np.dstack((grid[:,:,0]-1, grid[:,:,1]-1)) * g11, 2)
    # Interpolation
    t = interpolant(grid)
    c0 = n00*(1-t[:,:,0]) + t[:,:,0]*n10
    c1 = n01*(1-t[:,:,0]) + t[:,:,0]*n11
    return np.sqrt(2)*((1-t[:,:,1])*c0 + t[:,:,1]*c1)

结果

  • Perlin 2D噪声

  • 3D perline噪声

  • 给人物图像添加perlin噪声

标签:插值,噪声,Perlin,grid,np,gradients
From: https://www.cnblogs.com/peixu/p/17350429.html

相关文章

  • gaussian噪声
    title:gaussian噪声date:2023-04-1820:24:45tags:-gaussian噪声categories:-充电学习高斯噪声高斯噪声(Gaussiannoise)是一种具有正态分布(也称作高斯分布)概率密度函数的噪声。换句话说,高斯噪声的值遵循高斯分布或者它在各个频率分量上的能量具有高斯分布。它......
  • 27、图像中加入噪声
    1、图像中加入椒盐噪声椒盐噪声又被称作脉冲噪声,它会随机改变图像中的像素值,是由相机成像、图像传输、解码处理等过程产生的黑白相间的亮暗点噪声,其样子就像在图像上随机的撒上一些盐粒和黑椒粒,因此被称为椒盐噪声。考虑到椒盐噪声会随机产生在图像中的任何一个位置,因此对于......
  • QR码制作公司Paperlinks推订餐应用PayDragon
    Paperlinks不但能利用QR码让你与菜单互动起来,还能为你提供简单的手机订餐服务,公司最近发布了iPhone及Android订餐应用PayDragon,两步方可完成手机订餐。在如果你正忙着写博......
  • m基于KSVD字典训练法的图像噪声滤波matlab仿真,对比图像中值滤波,ACWMF滤波,DWMR滤波以
    1.算法描述K-SVD算法是一种新型的字典训练法,其基本原理是基于K-SVD算法改进所得到的,其主要过程是字典的训练过程,其具有非常好的自适应性能。该算法的整体流程图如下图所示:......
  • m基于KSVD字典训练法的图像噪声滤波matlab仿真,对比图像中值滤波,ACWMF滤波,DWMR滤波以
    1.算法描述       K-SVD算法是一种新型的字典训练法,其基本原理是基于K-SVD算法改进所得到的,其主要过程是字典的训练过程,其具有非常好的自适应性能。该算法的整体流......
  • 柏林噪声地形图
     publicRectTransformredimg;//小地图中的人物红点publicTransformplayer;//人物publicImagemap;//小地图(父级要有个Mash组件)publicTexture2D......
  • 柏林噪声算法制作地图+小地图
      以上是效果展示1,柏林噪声算法做地图代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassGr......
  • 合成带噪声音信号
    通过使用FaNT工具合成:https://blog.csdn.net/qzhou961/article/details/105426440自己设计含噪语音生成器:https://blog.csdn.net/yyhaohaoxuexi/article/details/88350343......
  • SAS与eviews用ARIMA模型对我国大豆产量时间序列预测、稳定性、白噪声检验可视化
    全文链接:http://tecdat.cn/?p=31480原文出处:拓端数据部落公众号我国以前一直以来都是世界上大豆生产的第一大国。但由于各国的日益强大,导致我国豆种植面积和产量持续缩减......
  • 噪声治理行业的“崔布斯”——天津蓝清创始人的精益创新之路
    李大钊曾有言:青年者,国家之魂。噪声污染治理领域,正有一位有为“青年”,用严谨的科研、极致的创业,推动着噪声治理技术变革和社会进步,他就是天津蓝清环保的创始人兼总经理崔志浩......