私の数学は少しさびています。0 ~ 255 の範囲のグレースケール値を表す 2D 配列のヒストグラムを均等化しようとしています (値の計算方法により、値が整数にならない場合があります)。
ウィキペディアでこの記事を見つけましたが、それらが提示する式がよくわかりません。
ni
、計算はできますがn
、この関数L
を実装する方法がよくわかりません。この機能cdf
は役に立ちますか?
ここに私がこれまでに持っているものがあります:
static double[,] Normalize(double[,] mat)
{
int width = mat.GetLength(0);
int height = mat.GetLength(1);
int nPixels = width*height;
double sum = 0;
double max = double.MinValue;
double min = double.MaxValue;
var grayLevels = new Dictionary<double, int>();
foreach (var g in mat)
{
sum += g;
if (g > max) max = g;
if (g < min) min = g;
if (!grayLevels.ContainsKey(g)) grayLevels[g] = 0;
++grayLevels[g];
}
double avg = sum/nPixels;
double range = max - min;
var I = new double[width,height];
// how to normalize?
return I;
}