周长发《精通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);

解决方案 »

  1.   

    加权平均:
    r = g = b = L = 0.299R + 0.587G + 0.114B
    算术平均:
    r = g = b = L = (R + G + B) / 3
      

  2.   

    那就是说
    R=G=B=(rR+gG+bB)/3 这个公式是错的,应该改成 R=G=B=rR+gG+bB 这样吗?
      

  3.   

    R=G=B=(rR+gG+bB)/3
    没有这个公式
      

  4.   

            图像灰度化就是使色彩的三种颜色分量R、G、B的值相同,由于颜色值的取值范围是[0,255],所以灰度的
            级别只有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%,图像的灰度最合理。
      

  5.   

    2个公式都是正确的,但是你只要记住用   R=G=B=0.3R+0.59G+0.11B  就可以了,我当初看了书后也没有管,就是这样灰度化的。
      

  6.   


    周长发 的那本书上是这样的R=G=B=(wr*R+wg*G+wb*B)/3  不信你们翻翻看。到底有没有除以3啊?