Perlin Noise和FBM生成的图像太灰了

时间:2015-01-22 18:08:09

标签: c++ noise perlin-noise

据我所知,我一直在使用Perlin Noise和FBM制作噪音,而且我似乎遇到了一些问题。

我生成的图像似乎太灰了,因为它们意味着灰度,但我看不到白色或黑色的变化。

此图像的一个示例是(这是使用8个八度音阶生成的)

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;

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

1 个答案:

答案 0 :(得分:1)

我通常发现我需要将某种方式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);      
}