我编写了一个C#代码以从灰度图像中获取像素值。
Color x= c.GetPixel(i,j);
byte y=(byte)(((int)x.R+x.G+x.B)/3);
我将它们与使用imread命令在Matlab中获得的值进行了比较。为什么它们完全不同?在C#和Matlab中,值在0到255之间。 例如:
i=0, j=0
-C#:153
,Matlab:149
i=0, j=1
-C#:153
,Matlab:152
i=0, j=1
-C#:170
,Matlab:156
答案 0 :(得分:1)
灰度不仅仅是平均值
Y != (R + G + B) / 3
例如,R + B
-紫色-的混合应该比R + G
-黄色更暗。正确的公式是(有关详细信息,请参见https://en.wikipedia.org/wiki/Grayscale)
Y = (299 * R + 587 * G + 114 * B) / 1000
C#代码:
byte y = (byte)((499 + 299 * x.R + 587 * x.G + 114 * x.B) / 1000);