将灰度图像从RGB转换为YUV会得到非零U和V

时间:2015-04-24 13:37:54

标签: c# .net image-processing graphics computer-vision

我已经读过,如果图片灰度那么 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 无论如何?图像真的是灰度吗?

2 个答案:

答案 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图像也不是真正的灰度图像。