周长发《精通Visual C++图像处理编程》里的一段话:加权平均值法:根据重要性或其它指标给R,G,B各分量赋予不同的权值,并使R,G,B的值等于它们的加权平均值,
R=G=B=(rR+gG+bB)/3 (1)
r,g ,b 是R,G,B的权值。当r=0.3,g=0.59,b=0.11时最合理即
R=G=B=0.3R+0.59G+0.11B (2)我想问的是
式(1)里有除以3,式(2)里却没有了,是书写错了吗?
另一本书的源码:
//使用加权平均法进行灰度处理
for (int i = Width; i >= 0; i--)
{
for (int j = Height; j >= 0; j--)
{
color = image3.GetPixel(i, j);
int R = (int)(0.3f * color.R);
int G = (int)(0.59f * color.G);
int B = (int)(0.11f * color.B); Color colorResult = Color.FromArgb(255, R, G, B);
//设置处理后的灰度信息
image3.SetPixel(i, j, colorResult);
}
}
上面明明说是加权平均法,但是源码明明没有加权平均啊?又是书写错了吗?加权的话是不是应该这样:
int R = (int)(0.3f * color.R);
int G = (int)(0.59f * color.G);
int B = (int)(0.11f * color.B);
int f=R+G+B;
Color colorResult = Color.FromArgb(255, f, f, f);
R=G=B=(rR+gG+bB)/3 (1)
r,g ,b 是R,G,B的权值。当r=0.3,g=0.59,b=0.11时最合理即
R=G=B=0.3R+0.59G+0.11B (2)我想问的是
式(1)里有除以3,式(2)里却没有了,是书写错了吗?
另一本书的源码:
//使用加权平均法进行灰度处理
for (int i = Width; i >= 0; i--)
{
for (int j = Height; j >= 0; j--)
{
color = image3.GetPixel(i, j);
int R = (int)(0.3f * color.R);
int G = (int)(0.59f * color.G);
int B = (int)(0.11f * color.B); Color colorResult = Color.FromArgb(255, R, G, B);
//设置处理后的灰度信息
image3.SetPixel(i, j, colorResult);
}
}
上面明明说是加权平均法,但是源码明明没有加权平均啊?又是书写错了吗?加权的话是不是应该这样:
int R = (int)(0.3f * color.R);
int G = (int)(0.59f * color.G);
int B = (int)(0.11f * color.B);
int f=R+G+B;
Color colorResult = Color.FromArgb(255, f, f, f);
r = g = b = L = 0.299R + 0.587G + 0.114B
算术平均:
r = g = b = L = (R + G + B) / 3
R=G=B=(rR+gG+bB)/3 这个公式是错的,应该改成 R=G=B=rR+gG+bB 这样吗?
没有这个公式
级别只有256种,即灰度图象仅能表现256种灰度颜色,常用有3种处理方法:
*最大值法(Maximum):R=G=B=Max(R,G,B),这种方法处理后灰度图象的亮度会偏高。
*平均值法(Average):R=G=B=(R+G+B)/3,这种方法处理后灰度图象的亮度较柔和。
*加权平均值法(Weighted Average):
R=G=B=wr*R+wg*G+wb*B,wr、wg、wb分别为R、G、B的权值。
当其权值取不同的值时,能够形成不同灰度的灰度图象,由于人眼对绿色的敏感度最高,红色次之,
蓝色最低,因此当wg > wr > wb时,所产生的灰度图像更符合人眼的视觉感受。
通常wr=30%,wg=59%,wb=11%,图像的灰度最合理。
周长发 的那本书上是这样的R=G=B=(wr*R+wg*G+wb*B)/3 不信你们翻翻看。到底有没有除以3啊?