本文的主角是多媒体领域非常重要的一个概念:YUV。
简介
YUV,是一种颜色编码方法,跟RGB是同一个级别的概念,广泛应用于多媒体领域中。
也就是说,图像中每1个像素的颜色信息,除了可以用RGB的方式表示,也可以用YUV的方式表示。
vs RGB
对比RGB,YUV有哪些不同和优势呢?
体积更小
- 如果使用RGB
- 比如RGB888(R、G、B每个分量都是8bit)
- 1个像素占用24bit(3字节)
- 如果使用YUV
- 1个像素可以减小至平均只占用12bit(1.5字节)
- 体积为RGB888的一半
组成
RGB数据由R、G、B三个分量组成。
YUV数据由Y、U、V三个分量组成,现在通常说的YUV指的是YCbCr。
- Y:表示亮度(Luminance、Luma),占8bit(1字节)
- Cb、Cr:表示色度(Chrominance、Chroma)
- Cb(U):蓝色色度分量,占8bit(1字节)
- Cr(V):红色色度分量,占8bit(1字节)
YCbCr
当Y等于0.5时
兼容性
原始图像
RGB
YCbCr
根据上面的图片,不难看出:
- Y分量对呈现出清晰的图像有着很大的贡献
- Cb、Cr分量的内容不太容易识别清楚
此外,你是否感觉:Y分量的内容看着有点眼熟?其实以前黑白电视的画面就是长这样子的。
YUV的发明处在彩色电视与黑白电视的过渡时期。
- YUV将亮度信息(Y)与色度信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的
- 这样的设计很好地解决了彩色电视与黑白电视的兼容性问题,使黑白电视也能够接收彩色电视信号,只不过它只显示了Y分量
- 彩色电视有Y、U、V分量,如果去掉UV分量,剩下的Y分量和黑白电视相同
转换
公式1
Y = 0.257R + 0.504G + 0.098B + 16
U = -0.148R - 0.291G + 0.439B + 128
V = 0.439R - 0.368G - 0.071B + 128
R = 1.164(Y - 16) + 2.018(U - 128)
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
B = 1.164(Y - 16) + 1.596(V - 128)
- RGB的取值范围是[0,255]
- Y的取值范围是[16,235]
- UV