YUV格式

YUV格式

YUV

YUV中Y代表明度信息,UV代表色度信息,其中Y[0,1]\in[0,1] U,V[0.5,0.5]\in[-0.5,0.5]

YCbCr是YUV的经过缩放和偏移的版本,根据量化范围不同分为limit range和full range

  1. limit range Y[16,235]\in[16,235],Cb[16,240]\in[16,240],Cr[16240]\in[16-240]
  2. full range Y,Cb,Cr[0,255]\in[0,255]

YUV转YCbCr limit range进行线性映射即可

Y=(23516)Y+16Y^{'} = (235-16)*Y+16

Cb=(24016)×(U+0.5)+16Cb = (240-16)\times (U+0.5) + 16

Cr=(24016)×(V+0.5)+16Cr = (240-16)\times (V+0.5) + 16

YUV转YCbCr full range同理,不过大部分使用的都是limit range

YUV转RGB

YUV转RGB公式不固定,基于BT.601和BT.709的不同标准变换的标准不一样,不过都是用的线性变换

  1. BT.601

[YCbCr]=[0.2990.5870.1140.2991.7720.5871.7720.8861.7720.7011.4020.5871.4020.1141.402][RGB]\left[ \begin{matrix} Y \\ Cb \\ Cr \end{matrix} \right]= \left[ \begin{matrix} 0.299 & 0.587 & 0.114 \\ \frac{-0.299}{1.772} & \frac{-0.587}{1.772} & \frac{0.886}{1.772} \\ \frac{0.701}{1.402} & \frac{-0.587}{1.402} & \frac{-0.114}{1.402} \end{matrix} \right] \left[ \begin{matrix} R \\ G \\ B \end{matrix} \right]

  1. BT.709

[YCbCr]=[0.21260.71520.07220.21261.85560.71521.85560.92781.85560.78741.57480.71521.57480.07221.5748][RGB]\left[ \begin{matrix} Y \\ Cb \\ Cr \end{matrix} \right]= \left[ \begin{matrix} 0.2126 & 0.7152 & 0.0722 \\ \frac{-0.2126}{1.8556} & \frac{-0.7152}{1.8556} & \frac{0.9278}{1.8556} \\ \frac{0.7874}{1.5748} & \frac{-0.7152}{1.5748} & \frac{-0.0722}{1.5748} \end{matrix} \right] \left[ \begin{matrix} R \\ G \\ B \end{matrix} \right]

量化版YCbCr乘相应矩阵即可

YUV数据格式

因为YUV的特性,采样时可以通过公用UV来减少采样的数据,同时保证图像质量不会大幅下降,根据公用UV的多少分为以下三种格式

1. YUV444

一个Y对应一组UV

1
2
YUV YUV YUV YUV
YUV YUV YUV YUV

2. YUV422

两个Y对应一组UV

1
2
YUV Y YUV Y
YUV Y YUV Y

3. YUV420

四个Y对应一组UV

1
2
YUV Y YUV Y
Y Y Y Y

由于YUV的特性,即使只有Y显示的图像也可以分辨,所以YUV的存储可分为两大类

  1. planar: 先存Y后存UV
  2. packed: YUV交错存储

其中packed并不常见

以下为常见格式示例

YUV420p

  1. I420: YYYYYYYY UU VV
  2. YV12: YYYYYYYY VV UU

YUV420sp

  1. NV21: YYYYYYYY VU VU
  2. NV12: YYYYYYYY UV UV

标准文档

  1. BT.601
  2. BT.709