我正在使用一个numpy数组来保存Perlin Noise值。有人告诉我2D数组中的Perlin Noise值分别在[-0.7,0.7]范围内,但这似乎并非正确。当我调整八度,持久性和腔隙性的参数时,至少不适用于Caseman的“ noise”库。

我会使用其他库,除了找不到适用于python的库之外,其他库都将以同样快的速度运行。同样,无论如何,用于将值归一化为[0,1]的典型公式在这里似乎都不起作用。即使我得到未经修改的噪声的最小值/最大值,它仍然没有给出我想要的值范围。我只需要猜测最小值/最大值将使用什么,直到范围大约为[0,1]。

如何将Perlin Noise值标准化为[0,1]?

import noise
import numpy
import sys

def __noise(noise_x, noise_y):
    """
    Generates and returns a noise value normalized to (roughly) range [0, 1].

    :param noise_x: The noise value of x
    :param noise_y: The noise value of y
    :return: float
    """

    value = noise.pnoise2(noise_x, noise_y, 8, 1.7, 2)
    # Normalize to range [0, 1]
    value = numpy.float32((value + 0.6447) / (0.6697 + 0.6447))

    return value


map_arr = numpy.zeros([900, 1600], numpy.float32)

for y in range(900):

    for x in range(1600):

        noise_x = x / 1600 - 0.5
        noise_y = y / 900 - 0.5

        value = __noise(noise_x, noise_y)
        map_arr[y][x] = value

for row in map_arr:
    for num in row:
        sys.stdout.write(str(num) + " ")
    print("")

最佳答案

map_arr = (map_arr - map_arr.min()) / (map_arr.max() - map_arr.min())(利用numpy broadcasting和向量化的优势)就足够了。

关于python - 如何将Perlin噪声值标准化为[0,1]?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55291509/

10-12 18:20