c++ - 柏林噪声和 FBM 生成的图像太灰

标签 c++ noise perlin-noise

据我所知,我一直致力于使用 Perlin Noise 和 FBM 生成噪音,但我似乎遇到了一些问题。

我生成的图像本来应该是灰度的,但它们似乎太灰了,但我看不到白色或黑色的变化。

此图像的一个示例是(这是使用 8 个 Octave 音程生成的)

Perlin Noise example

我期望生成的图像;

enter image description here

我按如下方式产生噪音;

float result = 0.0f;
  float amp = 1.0f;
  float frequency = 2.0f;

  float maxAmplitude = 0.0f;
  int i = _octaves;
  while (i--){
  result += noise(x * frequency, y * frequency, z * frequency) * amp;
  frequency *= 2.0f;
  maxAmplitude += amp;
  amp *= 0.5f;
  }
  return result / maxAmplitude;
  }

其中噪声函数是 Ken Perlin 在此处找到的改进噪声函数; http://mrl.nyu.edu/~perlin/noise/我正在使用默认的排列表。

然后在生成图像时,我执行以下操作以获得灰度图像;

ppm_image.pixel_colour[kk] = 255.0f  * noise;

我只是想知道如何生成具有更广泛颜色变化的相同高度图(更多的白色和黑色,而不仅仅是狭窄的灰色)。

最佳答案

我通常发现我需要应用某种方式的 histogram equalization作为噪声数据的后处理。这通常对我有用:

float min = data[0];
float max = data[0];
for (float& f : data){
  if(min > f)
    min = f;
  if(max < f)
    max = f;
}
for (float& f : data){
  f = (f-min) / (max-min);      
}

关于c++ - 柏林噪声和 FBM 生成的图像太灰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28095771/

相关文章:

C++ typedef 到可变参数模板参数

Java 2D 横向卷轴地形

java - 2D Perlin 噪声地形生成器错误 (Java)

c++ - %p 的 printf 格式说明符标志 '0',正确与否?

c++ - 如何在 Windows 上进行内存分析?

java - <native.h> 不见了,知道它应该在哪里吗?

ios - 通过默认 iPhone 耳机主动降噪

python - 如何量化添加到图像中的噪声量

c++ - 柏林噪声和高度图/位图

objective-c - Perlin 噪声 : I have the source code, 现在是什么?