|

一、什么是YUV、YCrCb?YUV是应用在视频领域中常用的颜色空间(color space),所谓颜色空间就是用来描述一个像素的包含了什么必要的元素。所以YUV其实包含了多种像素格式,它是一系列应用在视频领域的像素格式的总称。相对应的RGB也是一个用在显示领域常用的颜色空间,其像素格式有RGB565、RGB888等等。颜色空间之间是可以相互转换的,只不过某些过程可能存在损失。
YUV颜色空间中对一个像素的描述存在三个分量:
Y表示亮度(luminance),也就是灰度值,表示了图像的明暗的分量,Y的范围从[0,255],0表示纯黑,255表示纯白。U表示红色色度分量(red Chroma),带有颜色的部分。V表示蓝色色度分量(blue Chroma),带有颜色部分。从上面的描述可以知道,每个分量都是8 bit位,也就是一个字节。(大多数情况)
YUV和YCrCb是什么关系呢?对于嵌入式来讲,只需要知道U和Cr分量是相似的,V和Cb是相似的。差异点在于他们的取值范围不一样:UV[0-255],CrCb[-128-127].因此YUV和YCrCb是可以相互转换的。在模拟信号上使用YUV,在数字信号上使用YCrCb
Y = Y
U = Cr + 128
V = Cb + 128
二、YUV的排列方式YUV有三种排列方式,是描述YUV三个分量中的分量在内存中的布局。分别有packed、
semi-planar、planar。
packd(打包排列)指YUV的三个分量在内存中紧紧挨在一起,因此,每个YUV像素的分量依次排列在连续的内存中。
如:
//连续内存
YUVYUVYUVYUV...YUV
YUVYUVYUVYUV...YUV
YUVYUVYUVYUV...YUV
semi-planar(半平面排列)它将Y分量单独放在一个内存区域,UV分量交错地放在另外一个内存区域。也就是总共两块内存。其中存放UV分量的内存有两种形式:UVUVUV…UV或者VUVUVU…VU
如:
//addr 0
YYYYYYYY...YYY
YYYYYYYY...YYY
YYYYYYYY...YYY
YYYYYYYY...YYY
//addr 1
UVUVUVUVUVUVUVUV…UVUVUV
UVUVUVUVUVUVUVUV…UVUVUV
UVUVUVUVUVUVUVUV…UVUVUV
UVUVUVUVUVUVUVUV…UVUVUV
planar(全平面排列)这种排列方式意思是说所有分量都单独存放在一个内存区域,也就是最多会有三个内存区域,单独存放Y/U/V
如:
//addr 0
YYYYYYYY...YYY
YYYYYYYY...YYY
YYYYYYYY...YYY
//addr 1
UUUUUUUU...UUU
UUUUUUUU...UUU
UUUUUUUU...UUU
//addr 2
VVVVVVVV...VVV
VVVVVVVV...VVV
VVVVVVVV...VVV
三、YUV的采样率经常听到的YUV4:4:4、YUV4:2:2、YUV4:2:0这三种后面带的数字就是YUV的采样比(Subsampling)。
但是上面的数字并不是YUV的分量数量的比值!
为什么会有采样比呢?因为科学家发现,人眼对亮度信息比色度信息敏感,因此可以按场景减少一些色度信息UV,这样能减少数据量以及可以在某些数据处理上有优势。
采样比的格式为a:b:c,我们在讨论采样比的时候针对的是一块4x2的像块,宽4个像素,高2行。
a=4b表示第一行色度U/V采样的像素个数,最大为4c表示第二行和第一行色度U/V发生变化的像素个数,最大为4YUV444: |
|