--- 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)