从C#中的图像获取像素值?为什么它们与Matlab中的值不同?

时间:2019-07-11 08:42:40

标签: c# image bitmap

我编写了一个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

1 个答案:

答案 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);