YUV色彩空間淺析

Table of Contents

什麼是RGB

什麼是YUV

YUV基本概念

YUV 和RGB 的轉化:

YUV 的分類:

YUVFormats分成兩個格式:

YUV採樣:

YUV格式:

YUV444格式:

YUV422格式:

UYVY422:

YUV422P:

YUV420P(YU12和YV12)格式

YU12格式

​ YV12格式 :

YUV420SP(NV21和NV12)

NV21格式

​NV12格式:         

寫在後面的話:

參考文獻:


什麼是RGB

         在RGB模式下(如下圖), 每一種顏色都是紅、綠、藍三種顏色的混合, 這種模式被稱爲疊加, 這三種顏色被稱爲是主顏色(primary colors)。可以通過對主顏色的疊加, 來得到二級顏色(secondary colors), 洋紅色(紅加藍),青色(綠加藍),黃色(紅加綠)。在RGB 顏色空間上,當任何一個基色的亮度值爲零時,即在原點處,就顯示爲黑色。當三種基色都達到最高亮度時,就表現爲白色。
         RGB 模型是目前常用的一種彩色信息表達方式,它使用紅、綠、藍三原色的亮度來定量表示顏色。該模型也稱爲加色混色模型,是以RGB三色光互相疊加來實現混色的方法,因而適合於顯示器等發光體的顯示。

Primary and Secondary Colors for RGB

                                       

RGB 顏色空間可以看作是三維直角顏色座標系中的一個正立方體。如上右圖所示。紅綠藍三色在立方體的三個頂點上;洋紅、青、黃色在立方體的立方體的另外三個頂點;黑色在座標原點;而白色在離原點最遠的定點上。在連接黑色與白色的對角線上,是亮度等量的三基色混合而成的灰色,該線稱爲灰色線。

什麼是YUV

YUV基本概念

        YUV是編譯true-color顏色空間(color space)的種類,Y'UV, YUV, YCbCrYPbPr等專有名詞都可以稱爲YUV,彼此有重疊。“Y”表示明亮度(Luminance或Luma),也就是灰階值,“U”和“V”表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定像素的顏色。在 最近十年中,視頻工程師發現人眼對色度的敏感程度要低於對亮度的敏感程度。在生理學中,有一條規律,那就是人類視網膜上的視網膜杆細胞要多於視網膜錐細 胞,說得通俗一些,視網膜杆細胞的作用就是識別亮度,而視網膜錐細胞的作用就是識別色度。所以,你的眼睛對於亮和暗的分辨要比對顏色的分辨精細一些。基於此原理, 在使用YUV的時候, 保證Y分量的前提下, 可以捨棄一部分UV分量,來減少對帶寬的需求。卻也並不會太影響圖像的質量。

       YUV顏色空間是彩色電視興起後, 對黑白電視兼容的產物。因爲RGB顏色空間中, 每一個像素都需要三個分量的疊加, 就需要三通道的信號,即便是表示黑白像素。 但是在YUV顏色空間中,Y就表示了灰度信息, 也就是黑白圖像。所以YUV像素編碼, 成功的兼容了黑白電視信號。

        能看到這篇文章的朋友肯定都知道RGB顏色模式。可能會像我一樣, 總是在想, RGB三色代表了紅綠藍, YUV三個分量就究竟長啥樣呢, 能不能舉例直觀的看一下呢??需要看視頻中YUV分量的請移步我的另一篇博客:ffmpeg 分離視頻中的YUV分量

下圖演示了RGB 和YUV的關係,以及Y對UV的影響

 

UV組成的顏色平面如下:

當Y取不一樣的值對UV平面影響幾何呢?

來個更加直觀YUV色彩空間立方體:

YUV Color Cube, from the Y = 0 side.YUV Color Cube, from the Y = 1 side.

左上立方體前面Y = 0, 他的正中心是純黑的, 此處爲YUV座標系的零點。

右上立方體前面Y = 1, 他的正中心是純白色的;此立方體只是改變了左邊立方體的方位。

 

YUV 和RGB 的轉化

Y'= 0.299*R' + 0.587*G' + 0.114*B'

U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y')

V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y')

R' = Y' + 1.140*V'

G' = Y' - 0.394*U' - 0.581*V'

B' = Y' + 2.032*U'

英文水平不錯的朋友一定要好好讀讀以下的英文原文,可以更好的理解:

The YUV color model is the basic color model used in analogue color TV broadcasting. Initially YUV is the re-coding of RGB for transmission efficiency (minimizing bandwidth) and for downward compatibility with black-and white television. The YUV color space is “derived” from the RGB space. It comprises the luminance (Y) and two color difference (U, V) components. The luminance can be computed as a weighted sum of red, green and blue components; the color difference, or chrominance, components are formed by subtracting luminance from blue and from red.

The principal advantage of the YUV model in image processing is decoupling of luminance and color information. The importance of this decoupling is that the luminance component of an image can be processed without affecting its color component. For example, the histogram equalization of the color image in the YUV format may be performed simply by applying histogram equalization to its Y component.

There are many combinations of YUV values from nominal ranges that result in invalid RGB values, because the possible RGB colors occupy only part of the YUV space limited by these ranges. Figure "RGB Colors Cube in the YUV Color Space" shows the valid color block in the YUV space that corresponds to the RGB color cube RGB values that are normalized to [0..1]).

The Y'U'V' notation means that the components are derived from gamma-corrected R'G'B'. Weighted sum of these non-linear components forms a signal representative of luminance that is called luma Y'. (Luma is often loosely referred to as luminance, so you need to be careful to determine whether a particular author assigns a linear or non-linear interpretation to the term luminance).

叨叨了半天重點是 Y分量是 RGB三色的加權和, U、V 分量則可以視爲 是亮度減去藍、紅

PS:大家一定要十分的清楚,YUV色彩空間是一種表示顏色的方法,RGB纔是真正的物理色彩,也就是說,不管你咋表示, 最後要顯示的時候, 還得要依靠紅、綠、藍三色疊加而成。鐵證就是各種屏幕都是由紅、綠、藍三種發光點組成的。

下圖就是某oled的像素點排布

YUV 的分類:

YUVFormats分成兩個格式:

  • 緊縮格式(packedformats):將Y、U、V值存儲成MacroPixels數組,和RGB的存放方式類似。

  • 平面格式(planarformats):將Y、U、V的三個分量分別存放在不同的矩陣中。

YUV採樣:

      色度通道相比較亮度通道,可以採用較低的採樣率,並不會太影響圖像質量。通常用A:B:C的形式來描述 U、V相對於Y的採樣比。

ps: 大家對採樣要有個基本的概念,也就是以點蓋面的意思,通過密集的取點,利用人眼分辨率有限的特點來達到面的效果。在圖像採集的時候,按照採樣格式對呈面的圖像進行採集。

因爲本人從事CT相關工作,舉個例子:CT是利用射線透過人體之後會衰減來成像。就需要收集透過人體後的射線強度。所以會在發射端的180°上安置一個接收器,接收器就是在一個板子上密集排列射線敏感元件。射線敏感元件的排列方式就可以認爲是一種採樣格式。

  • 4:4:4 表示不對色度(UV)下采樣。(也就是說Y、U、V都是一樣的採樣次數)
  • 4:2:2 表示按照2:1橫向下采樣,縱向不下采樣。每4次Y採樣,對應兩次U、V採樣。
  • 4:2:0 表四橫縱均2:1下采樣。
  • 4:1:1 means 4:1 horizontal downsampling, with no vertical downsampling. Every scan line contains four Y samples for each U and V sample. 4:1:1 sampling is less common than other formats, and is not discussed in detail in this article.

下圖是根據我的理解畫出的採樣示例:

下圖是微軟官網給出的示範。十字代表亮度點,圓代表色度採樣點。

上面兩幅圖的採樣示例有一些差異,主要是YUV420的圖解。不知道在採樣的時候是不是真的採樣圖中的點,還是採樣後整理成這種像素格式。但是有一點是一定的:四個Y分量,共用一組UV分量。此處還有疑問,期待大神的指點,十分感謝。

PS:在此,大家務必要明白YUV在應用中所處的位置,像素採集設備---->編碼----->顯示設備, 在此過程中, 只有編碼是用的YUV, 兩端靠的還是RGB,每個像素均有三個通道,所謂的採樣,也就是採用各個像素不同的RGB分量, 來轉化爲YUV色彩模式,這種轉化是基於人眼對色度不太敏感的理論基礎。等到了顯示端,還得再轉換爲RGB呢。

YUV格式:

       個人理解。所謂的YUV格式,指的是針對一幀圖像的數據組織形式。請與YUV採樣對比理解。

YUV444格式:

        YUV是最好理解的採樣格式。請大家結合下面的YUV422和YUV420自行腦補以下哈。

YUV422格式:

       YUYV爲YUV422採樣的存儲格式中的一種,相鄰的兩個Y共用其相鄰的兩個U、V,分析,對於像素點Y1、Y2 而言,其U、V的值均爲 U1、V1,其他的像素點的YUV取值依次類推。YUVY422: 

UYVY422:

         UYVY格式也是YUV422採樣的存儲格式中的一種,只不過與YUYV不同的是UV的排列順序不一樣而已,還原其每個像素點的YUV值的方法與上面一樣.

YUV422P:

         YUV422P也屬於YUV422的一種,它是一種Plane模式,即平面模式,並不是將YUV數據交錯存儲,而是先存放所有的Y分量,然後存儲所有的U(Cb)分量,最後存儲所有的V(Cr)分量,如上圖所示。其每一個像素點的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即兩個Y共用一個UV。比如,對於像素點Y'00、Y'01 而言,其U、V的值均爲 U1、V1。

YUV420P(YU12和YV12)格式

      YUV420P又叫plane平面模式,Y , U , V分別在不同平面,也就是有三個平面,它是YUV標準格式4:2:0,主要分爲:YU12和YV12

YU12格式

       在android平臺下也叫作I420格式,首先是所有Y值,然後是所有U值,最後是所有V值。 

       在SDL中對應的是SDL_PIXELFORMAT_IYUV, 大家不要換個馬甲就不認識了

       YU12:亮度(行×列) + U(行×列/4) + V(行×列/4)


 YV12格式 :

       YV12格式與YU12基本相同,首先是所有Y值,然後是所有V值,最後是所有U值。只要注意從適當的位置提取U和V值,YU12和YV12都可以使用相同的算法進行處理。     

YV12佔用內存:亮度Y(行×列) + V(行×列/4) + U(行×列/4)

YUV420SP(NV21和NV12)

        YUV420SP格式的圖像陣列,首先是所有Y值,然後是UV或者VU交替存儲,NV12和NV21屬於YUV420SP格式,是一種two-plane模式,即Y和UV分爲兩個plane,但是UV(CbCr)爲交錯存儲,而不是分爲三個平面。

NV21格式

         android手機從攝像頭採集的預覽數據一般都是NV21,存儲順序是先存Y,再VU交替存儲,NV21存儲順序是先存Y值,再VU交替存儲:YYYYVUVUVU,以 4 X 4 圖片爲例子,佔用內存爲 4 X 4 X 3 / 2 = 24 個字節


NV12格式:         

          NV12與NV21類似,也屬於YUV420SP格式,NV12存儲順序是先存Y值,再UV交替存儲:YYYYUVUVUV,以 4 X 4 圖片爲例子,佔用內存爲 4 X 4 X 3 / 2 = 24 個字節。

寫在後面的話:

        YUV顏色空間,是視頻像素格式(每一幀視頻數據的組織形式)。大家在理解的時候最好能知道它在視頻傳遞中所處的位置。視頻在採集和顯示的兩端,還得仰仗RGB,在流通環節,纔是YUV的勢力範圍。

         本文參看學習了很多資料, 足足收集整理了一週才搞完,有很多自己的理解。困於能力有限,水平一般,肯定有一些下次,還望各位不吝賜教,共同進步。

參考文獻:

https://docs.microsoft.com/en-us/windows/win32/medfound/recommended-8-bit-yuv-formats-for-video-rendering

https://www.baslerweb.com/en/sales-support/knowledge-base/frequently-asked-questions/how-does-the-yuv-color-coding-work/15182/

https://scc.ustc.edu.cn/zlsc/sugon/intel/ipp/ipp_manual/IPPI/ippi_ch6/ch6_color_models.htm

https://blog.csdn.net/byhook/article/details/84037338

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章