---
tags: CV
---
# [Memo] YUV
記錄一些網路上比較零散、也比較少人整理的一些小資訊。
## 詞源
YUV 一詞的 Y 是從 [XYZ 色彩空間 (CIE 1931 color space)](https://en.wikipedia.org/wiki/CIE_1931_color_space) 而來。
Y 在這個色彩空間下被定義為亮度。當給定亮度 Y 時,這個亮度下能呈現的所有的色度,都會分佈在對應的 XZ 平面上。
UV 一詞並非縮寫,而是類似於 X-Y 平面的座標軸代號而已。在 Y 被定義後,為了避免混淆,選擇了與 XYZ 不重複的 UV。
有時會看到 YUV 或 YC~b~C~r~ 的 Y 有個 prime (')。討論色彩模型時,亮度代表的是實際亮度單位流明 (luminance),這個時候會記爲 Y。在討論一般的顏色儲存格式時通常是指 Y',經過 gamma 校正後的亮度值。
## Y'C~b~C~r~
雖然 YUV 常見,但實務上大多其實不是 Y'UV 而是 Y'C~b~C~r~.
Y'UV 和 Y'C~b~C~r~ 雖然有關聯但不同(如與 RGB 互轉時的係數)。
其中一個例子是灰色,U, V 的值定義上可以為負(灰色爲 0, 0),而 C~b~, C~r~ 大多落在 16-235 或 0-255(灰色爲 128, 128)
兩者常常可以互相替代的理由是,兩者的 Y' 是線性關係,U, C~b~ 和 (B-Y) 是線性關係;V, C~r~, (R-Y) 同理。
## 格式速查表
| YUV 4:2:0 | Planar | Semi-planar |
| ------------ | ------ | ----------- |
| **U then V** | IYUV | NV12 |
| **V then U** | YV12 | NV21 |
| YUV 4:2:2 | Planar | Semi-planar |
| ------------ | ------ | ----------- |
| **U then V** | I422 | NV16 |
| **V then U** | YV16 | NV61 |
:information_source: 許多人常用的 YUV viewer: [RAW Pixels](https://rawpixels.net/) 使用的 NV12 和 NV21 和這裡的表格是相反的。
## 常用縮寫
- Y'C~b~C~r~
- Y': luma component。
- C~b~: **blue**-difference chroma component
- C~r~: **red**-difference chroma component
- YV (ex: YV12, YV16)
- YV 是指排列順序爲 YV(U),12, 16 分別代表表示每個 pixel 的顏色需要的位元數。
- NV (ex: NV12, NV16)
- 很抱歉,我查不到為什麼叫 NV,以及最早是怎麽開始把 12 對調成 21 來代表 UV 的排列對調。
- Planar \(p\) / semi-planar (sp) / packed
- 用來指 Y, U, V 的排列方式:
- Planar: Y, U, V 各自分開按照順序放在一起。
[y~1~y~2~y~3~…y~n~][u~1~u~2~u~3~…u~n~][v~1~v~2~v~3~…v~n~]
- Semi-planar: Y 自己單獨在一起,但 UV 交織在一起。
[y~1~y~2~y~3~…y~n~][(u~1~v~1~)(u~2~v~2~)(u~3~v~3~)…(u~n~v~n~)]
- Packed: 每個 pixel 對應的 YUV 一組一組按照順序排列
[(y~1~u~1~v~1~)(y~2~u~2~v~2~)(y~3~u~3~v~3~)…(y~n~u~n~v~n~)]
### Ref
1. [YUV - Wikipedia](https://en.wikipedia.org/wiki/YUV)
1. [YUV - VideoLAN Wiki](https://wiki.videolan.org/YUV)
1. [About YUV formats](https://gist.github.com/Jim-Bar/3cbba684a71d1a9d468a6711a6eddbeb)