我已经读过,如果图片灰度那么 B 和 R 组件> RGB , YUV 颜色空间中没有 U 和 V 。 这是否意味着他们应该等于0?
我使用此代码获取YUV值:
var px = (this.canvas.Image as Bitmap).GetPixel(i, j);
var y = 0.299 * px.R + 0.587 * px.G + 0.114 * px.B;
var u = -0.14713 * px.R - 0.28886 * px.G + 0.436 * px.B;
var v = 0.615 * px.R - 0.51499 * px.G - 0.10001 * px.B;
我获得非零 u 和 v 值,但它们接近于0.我应该将它们转换为 int 无论如何?图像真的是灰度吗?
答案 0 :(得分:1)
您从RBG到YUV的转换使用乘法与浮点值。 两个浮点乘法和你使用的公式是近似的,因此结果值不完全为0 并不奇怪,即使它是灰度图像。如果您愿意,可以将 u 和 v 设置为0。
答案 1 :(得分:1)
假设您的输入图像以色彩空间RGB(红 - 绿 - 蓝)给出,那么所有三个组件在每个像素上都应具有相同的值。如果您的图像不是这种情况(您可能想要或可能不想忽略小差异),那么它实际上并不是灰度级的。 RGB有三个真正着色的组件。
另一方面,YUV色彩空间有一个亮度(或亮度)通道,即Y分量,和2个色度通道(U和V分量)。
Y是通过加权平均值从RGB分量构建的,请参阅计算y的代码。然而,绿色成分变得更重,以便类似于人眼的灵敏度。三个系数总和为1.0并且都是正数,因此它们计算的是与平均值相似的线性组合。
但是计算U分量的3个系数(对蓝色最敏感)总计为0.0。 (V组分相同,对红色最敏感)。因此,假设您输入了真正的灰度RGB图像,得到的U和V将为0.0。
如果不是这种情况(假设非常小的值只是0的嘈杂变体),那么你的输入RGB图像也不是真正的灰度图像。