1

我正在开发一个过滤器来处理图像。将此滤镜应用于图像后,我得到一些大于 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# 中做什么?

4

0 回答 0