使用直方图归一化来固定颜色饱和度

时间:2013-06-12 08:55:40

标签: c# image-processing

我正在开发一个处理图像的过滤器。将此滤镜应用于图像后,我得到一些大于255或小于0的RGB值。我可以将这些像素分别饱和到255和0,但随后图像不好。

我想找到一种标准化像素直方图的方法,以便在标准化后RGB的值在0,255之间。

代码如下:

  double max = outputPixel.Cast<double>().Max();
  double targetMax = 300;
  double min = outputPixel.Cast<double>().Min();
  double targetMin = -50;
  for (int c = 0; c < 3; c++)
  {
       for (int i = 0; i < outputPixel.GetLength(0); i++)
       {
           for (int j = 0; j < outputPixel.GetLength(1); j++)
           {
                outputPixel[i, j, c] = wb[c] * (((outputPixel[i, j, c] - min) * (targetMax-targetMin) / (max - min))+targetMin);
                    outputPixel[i, j, c] = Saturate(outputPixel[i, j, c]);
                }
            }

        }
     }

outputPixel定义为

  private static double[, ,] outputPixel;

并初始化如下:

    outputPixel = new double[inputImage.Width, inputImage.Height, 3];

问题是:

如果我没有进行直方图归一化,则暗区域会出现大量的斑点类噪声,并且大部分图像都会被漂白掉。

如果我使用直方图归一化,那么我可以在白色区域(主要是云区域)看到红色。

一种解决方案是在HSB中标准化直方图,但我不能对HSB使用内部C#计算,因为RGB的值比255(0)更大(或更小)。

我可以在C#中做些什么?

0 个答案:

没有答案