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

C++ 柏林噪声和FBM生成的图像太灰,c++,noise,perlin-noise,C++,Noise,Perlin Noise,据我所知,我一直在使用柏林噪声和FBM产生噪声,我似乎遇到了一些问题 我生成的图像看起来太灰了,本来应该是灰度的,但我看不到白人或黑人的变化 此图像的一个示例是(使用8个八度音阶生成) 我期望产生的形象 我产生的噪音如下 float result = 0.0f; float amp = 1.0f; float frequency = 2.0f; float maxAmplitude = 0.0f; int i = _octaves; while (i--){ res

据我所知,我一直在使用柏林噪声和FBM产生噪声,我似乎遇到了一些问题

我生成的图像看起来太灰了,本来应该是灰度的,但我看不到白人或黑人的变化

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

我期望产生的形象

我产生的噪音如下

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的改进噪声函数;我使用的是默认的排列表

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

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

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

我通常发现我需要对噪声数据应用某种方式的后处理。这通常适用于我:

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);      
}
float min=数据[0];
浮点最大值=数据[0];
用于(浮动和浮动:数据){
如果(最小值>f)
min=f;
如果(最大值
我对柏林河的噪音只知道一点点,但我不知道你在问什么。你能展示一个你想要的与你得到的图像相比较的示例图像吗?如果你想在明暗之间获得更大的对比度,你能做一些后处理,并使用一种已知的技术来增加对比度吗?更新了我的问题。请注意,在示例一中,有更多的黑色色调,我希望类似于此。