<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文搞懂圖像RGB和YUV編碼及相互轉換

硬件花園 ? 來源:硬件花園 ? 作者:硬件花園 ? 2023-06-28 08:39 ? 次閱讀

1 色彩空間和色彩模型

色彩是人眼對于不同頻率的光線的不同感受。色彩既是客觀存在的,但又是主觀感知的,所以不同人對色彩的感知會存在差異。為了規范色彩的表述,引入了色彩空間一詞。 “色彩空間”源于西方的“Color Space”,又稱作“色域”,色彩學中,人們建立了多種色彩模型,以一維、二維、三維甚至四維空間坐標來表示某一色彩,這種坐標系統所能定義的色彩范圍即色彩空間。我們經常用到的色彩空間主要有RGB、CMYK、Lab等。

498d29ea-154c-11ee-9c1d-dac502259ad0.png

色彩空間

色彩模型是描述使用一組值(通常使用三個、四個值或者顏色成分)表示顏色方法的抽象數學模型。例如三原色光模式(RGB) 印刷四分色模式(CMYK) 都是色彩模型。

不同的色彩模型的差異和優劣不在本文討論范圍之內。本文主要討論YUVRGB兩種色彩模型的相關知識。

2 RGB色彩模型

我們知道, “色彩” 是人類大腦對事物的一種主觀感覺,為了將這種 “感性” 進行 “理性” 描述,數學家們創建了 RGB 模型的概念:通過三個數的組合(色值)來表述某一種特定的顏色,從而人類可以將這種感性的色彩感受進行理性地表達和傳遞。

2.1 RGB三原色

49c84c32-154c-11ee-9c1d-dac502259ad0.pngRGB和CMY

rgb(255, 0, 0) 代表純紅色,rgb(0, 255, 0) 代表純綠色,rgb(0, 0, 255) 代表純藍色,而 rgb(255, 255, 0) 代表純黃色(光學中紅色和綠色加法混合會呈現黃色)。

49e02adc-154c-11ee-9c1d-dac502259ad0.png

RGB三原色 通過 RGB 色彩模型,我們最多能表示出256x256x256=16777216種不同的色值,也就是我們常說的1600萬色。

如果我們創建一個三維坐標系,三個軸的代表字母由X、Y、Z換成 R、G 和 B,即用 Red 代表X軸,Green代表Y軸,Blue代表Z軸,采用光學加法混色的方式構建這個立方空間的話,就形成了一個基于RGB模型的色彩空間了。

4a03afa2-154c-11ee-9c1d-dac502259ad0.png

RGB三原色立體空間

我們知道通過 rgb(x, y, z)這種方式構建的每一個顏色點,都對應于這個立方體中的某一個點,也就是說每一種顏色都被包含在我們的色彩空間之內。

2.2RGB顏色模型存在的問題

因為在自然環境下獲取的圖像容易受自然光照、遮擋和陰影等情況的影響,即對亮度比較敏感,而RGB 顏色空間的三個分量都與亮度密切相關,即只要亮度改變,三個分量都會隨之相應地改變。

另外,RGB 顏色空間是一種均勻性較差的顏色空間,人眼對于這三種顏色分量的敏感程度是不一樣的,在單色中,人眼對紅色最不敏感,藍色最敏感,如果顏色的相似性直接用歐氏距離來度量,其結果與人眼視覺會有較大的偏差。對于某一種顏色,我們很難推測出較為精確的三個分量數值來表示。

而且,在視頻領域如果使用RGB存儲的話,視頻數據會非常大。

比如有一個1080p(1920*1080)分辨率、幀率為30幀的視頻,如果使用RGB進行存儲的話,僅僅一分鐘的視頻就能達到 (1920*1080*8*30*60)bit(約等于27G)。這明顯是不現實的,所以我們需要對視頻數據進行壓縮。

基于以上兩點,所以我們需要一種數據相關性沒那么強的顏色編碼系統或色彩空間,而YUV正好就是這樣,從下面的介紹中我們就會明白。YUV能夠方便地編碼和傳輸,并且減少帶寬占用和信息出錯。

3 YUV色彩模型

我們先回到人類剛擁有彩色電視的時候,在那段從黑白電視向彩色電視的過渡期,電視系統需要提供對黑白電視的兼容性(在一文搞懂HDMI/DP/DVI/VGA顯示器接口歷史演進提到過),另外還要考慮到電視廣播系統那有限的帶寬,如果使用RGB顏色模型,那么傳輸帶寬就是原來的三倍。

所以能夠兼容黑白電視系統和更為節省帶寬的YUV色彩模型就被發明了出來,它與RGB之間是無損轉換的。第4節,會介紹不同標準下YUV與RGB如何相互轉換。

因為相較于色彩,人眼對于亮度信息更為敏感,所以可以在色彩信息上面進行取舍來達到節約大小的目的,通過引入色度二次采樣(subsampling)的方式,YUV對原始的RGB信息進行重編碼。

亮度信息與色彩信息相分離的設計使得YUV可以減少一些色彩信息以達到節省傳輸帶寬和保存體積的目的。這也是YUV顏色模型相比于RGB顏色模型的優勢所在。

YUV同樣使用三個分量來存儲數據,他們分別是

Y:用于表示 明亮度(Luminance或Luma);

U:用于表示色度(Chrominance或Chroma);

V:用于表示色度(Chrominance或Chroma);

Y其實就是我們常說的灰度值,是圖片的總體輪廓,而U和V則用于描述色彩顏色和顏色飽和度。

一張色彩艷麗的圖片如果存儲成YUV格式的話,Y就是這張圖的黑白照、UV就是涂上顏色。

3.1 YUV圖像處理流水線pipeline

4a657c82-154c-11ee-9c1d-dac502259ad0.png

YUV圖像處理流水線

3.2 YUV色度抽樣方式

常見的YUV圖像色度抽樣方式有如下三種:YUV 444、YUV 422、YUV420。

不同類型之間的主要區別是使用了不同的方式進行U、V分量的采樣。4a7bb4a2-154c-11ee-9c1d-dac502259ad0.png

YUV采樣方式

如上圖所示,其中實心黑點表示像素點的Y分量,空心圓圈表示采用該像素點的UV分量。

可見:

YUV 444:每個Y分量分別對應一個U分量和一個V分量

YUV 422:每兩個Y分量共用一個U分量和一個V分量

YUV 420:每四個Y分量共用一個U分量和一個V分量

4a932ea2-154c-11ee-9c1d-dac502259ad0.png

YUV色度抽樣方式

YUV444和RGB顏色模型的圖像大小是一樣的,并沒有節省存儲空間。當RGB圖像轉換為YUV圖像時,也是先轉換為YUV444采樣方式的圖像。

YUV42和RGB顏色模型圖像大小相比,節省了三分之一的存儲空間,在傳輸時占用的帶寬也會隨之減少。

YUV420采樣方式,Y平面的信息完全保留,而UV這兩個色度平面的信息交錯保留,并且精度只有Y平面的一半,最終圖像、視頻的體積也就少了很多,而畫質損失實際是被控制在一個合理的范圍內。

由此,可得出對于一張1280*720大小的圖片,采用YUV420采樣比YUV 422、YUV444、RGB采樣的圖像節省的空間最大,所以現在最常見的就是YUV420采樣方式。

3.3 YUV的存儲方式

YUV有packed(打包)和 planar(平面)兩種存儲方式。

packed :packed格式是先連續存儲所有的Y分量,然后依次交叉儲存U、V分量;

planar:planar格式也會先連續存儲所有的Y分量,但planar會先連續存儲U分量的數據,再連續存儲V分量的數據,或者先連續存儲V分量的數據,再連續存儲U分量的數據;將YUV分量分別存儲到矩陣,每一個分量矩陣稱為一個平面。

3.4 YUV顏色編碼格式

由于色度抽樣方式和存儲方式的不同,YUV衍生出很多種格式。

注意下文中所述,YUV和YCbCr對應關系,Y對應Y,U對應Cb,V對應Cr。

3.4.1基于YUV422采樣的格式

YUYV格式和UYVY格式采用打包packed存儲方式。

YVUV格式

4ab0ee60-154c-11ee-9c1d-dac502259ad0.png

YVUV為YUV422采樣的存儲格式,相鄰的兩個Y共用其相鄰的兩個Cb、Cr。對于像素點Y’00、Y’01而言,其Cb、Cr的值均為Cb00、Cr00,其他的像素點YUV取值依此類推。

UYVY格式

4abff108-154c-11ee-9c1d-dac502259ad0.png

UYVY格式與YVUV不同的是,UV即Cb、Cr排列順序不一樣,還原其每個像素點的YUV值的方法與上面一樣。

YUV422P格式

YUV422P格式,又叫做I422,采用的是平面格式進行存儲,先存儲所有的Y分量,再存儲所有的U分量,再存儲所有的V分量。

4ad253d4-154c-11ee-9c1d-dac502259ad0.png

3.4.2.基于YUV420采樣的格式

YUV420是以平面方式(planar)存儲,色度抽樣為40的色彩編碼格式。其中YUV420P為三平面存儲,YUV420SP為兩平面存儲。

常見的yuv格式列表如下:

I420: YYYYYYYY UU VV =>YUV420P,主要用來遠程傳輸

YV12: YYYYYYYY VV UU =>YUV420P,先Y再V再UYU12: YYYYYYYY UU VV =>YUV420P,先Y再U再V

4aebd3d6-154c-11ee-9c1d-dac502259ad0.png

YV12和YU12,分別將Y、U、V打包,依次存儲。其中每一個像素點的YUV數據提取遵循YUV420格式的提取方式,即4個Y分量共用一組UV。注意,上圖中,Y’00、Y’01、 Y’10、Y’11共用Cb00、Cr00,其他依此類推。

NV12: YYYYYYYY UVUV =>YUV420SP //IOS中有的模式

NV21: YYYYYYYY VUVU =>YUV420SP //安卓Camera默認格式

4afbbea4-154c-11ee-9c1d-dac502259ad0.png

NV12和UV21是一種兩平面存儲方式,Y為一個平面,交錯的UV為另一個平面。提取方式與YU12和YV12類似,即Y’00、Y’01、 Y’10、Y’11共用Cb00、Cr00,其他依此類推。

4b0c479c-154c-11ee-9c1d-dac502259ad0.png

4YUV與RGB之間的轉換

YUV與RGB之間的轉換是存在標準的,常見的標準有:

ITU-R BT.601(標清)

ITU-R BT.709(高清)

ITU-R BT.2020(超高清)

不同的標準有不同的轉換公式,同時還要區分不同的Color Range。Color Range用于指定RGB分量的取值范圍,可分為Full Range(取值范圍為0255)和Limited Range(取值范圍為16235)。

BT.601, LimitedRange, which is the standard for SDTV(標清數字電視)

RGB —> YUV

Y = 0.299R+0.587G+0.114B

V = 0.713(R?Y)=0.500R?0.419G?0.081B

U = 0.564(B?Y)=?0.169R?0.331G+0.500B

YUV —> RGB

R = 1.164Y+1.596V-0.871;

G = 1.164Y-0.813V-0.391U+0.529;

B = 1.164Y+2.018U-1.0729;

BT.601, Full Range

RGB —> YUV

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

V = -0.169 * R - 0.331 * G + 0.500 * B

U = 0.500 * R - 0.439 * G - 0.081 * B

YUV —> RGB

R = Y + 1.400V - 0.7

G = Y - 0.343U - 0.711V + 0.526

B = Y + 1.765U - 0.883

BT.709, which isthe standard for HDTV(高清電視)

RGB —> YUV

Y = 0.0627 + 0.183 * R + 0.614 * g + 0.062 * b

U = 0.5 - 0.101 * R - 0.339 * g + 0.439 * b

V = 0.5 + 0.439 * R - 0.399 * g - 0.040 * b

YUV —> RGB

R = 1.164Y + 1.739V - 0.97

G = 1.164Y - 0.213U - 0.533V + 0.301

B = 1.164Y + 2.112U - 1.129

接下來,以圖像處理課程里面經常會出現的一張圖片,作為示例,演示YUV與RGB之間的轉換。

1. 從YUV420P圖像中提取Y、U、V分量

wKgZomSbruWAVcM7AAFD0KGzhB8512.png

YUV420P圖像

wKgZomSbrv6AX3iSAAFV1Dbcq_o334.png從左往右依次為Y、U、V分量
  1. 2.將YUV420P圖像轉換為RGBA8888圖像

wKgZomSbryWAYx2IAAVoghH9XVE071.pngYUV 圖像 wKgaomSbr0WALKD4AAS2FM0OEOQ996.pngYUV轉換為RGBA8888

《一文搞懂》系列文章一文搞懂HDMI/DP/DVI/VGA顯示器接口歷史演進一文搞懂USB各個版本的歷史演進一文搞懂高速TIA跨阻放大器設計一文搞懂電阻,這篇講得很全面,建議收藏一文搞懂共模電感原理一文搞懂MLCC電容的特性及生產工藝流程一文搞懂電感Isat、Irms以及測量方法

本號對所有文章陳述的觀點均保持中立,文章僅供讀者交流學習。資訊、圖片來源網絡,版權歸原作者所有,侵權請聯系刪除。


審核編輯黃宇


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RGB
    RGB
    +關注

    關注

    4

    文章

    774

    瀏覽量

    57669
  • 編碼
    +關注

    關注

    6

    文章

    835

    瀏覽量

    54509
  • YUV
    YUV
    +關注

    關注

    0

    文章

    10

    瀏覽量

    2848
收藏 人收藏

    評論

    相關推薦

    一文搞懂圖像RGBYUV編碼相互轉換

    ”源于西方的“Color Space”,又稱作“色域”,色彩學中,人們建立了多種色彩模型,以一維、二維、三維甚至四維空間坐標來表示某一色彩,這種坐標系統所能定義的色彩范圍即色彩空間。我們經常用到的色彩空間主要有RGB、CMYK、Lab等。 ? 色彩
    的頭像 發表于 05-17 08:37 ?9787次閱讀
    一文<b class='flag-5'>搞懂</b><b class='flag-5'>圖像</b><b class='flag-5'>RGB</b>和<b class='flag-5'>YUV</b><b class='flag-5'>編碼</b>及<b class='flag-5'>相互轉換</b>

    RGB-YUV轉換的Verilog程序

    RGB-YUV轉換的Verilog程序
    發表于 08-12 16:22

    字符 數字相互轉換

    很慚愧,俺對基礎的東西不是很了解,數字 1和字符 ‘1’ 怎么相互轉換 ,因為在LCD1602和TFT彩屏顯示涉及到相互轉換,總是弄不清楚,請大蝦給科普下,‘0’是代表字符 0 嗎?
    發表于 05-26 11:22

    基于FPGA的rgbyuv顏色空間轉換

    `基于FPGA的rgbtoyuv顏色空間轉換、概述 般來說,攝像頭輸出的格式有RGB、YUV(Ycbcr)RAW
    發表于 03-03 17:59

    基于FPGA的RGB2YUV、圖像增強、YUV2RGBIP仿真實例

    `基于FPGA的RGB2YUV、圖像增強、YUV2RGBIP仿真實例AT7_Xilinx開發板(USB3.0+LVDS)資料共享騰訊鏈接:https://share.weiyun.com
    發表于 08-12 18:50

    字符數字相互轉換‘0’是代表字符0嗎?

    很慚愧,俺對基礎的東西不是很了解,數字 1和字符 ‘1’ 怎么相互轉換 ,因為在LCD1602和TFT彩屏顯示涉及到相互轉換,總是弄不清楚,請大蝦給科普下,‘0’是代表字符 0 嗎?為什么 1+‘0’ 就轉換為字符1了呢?字符1
    發表于 03-13 03:59

    如何實現了SPI/ASI的相互轉換?

    如何實現了SPI/ASI的相互轉換?
    發表于 06-08 06:32

    UNICODE與GBK的相互轉

    UNICODE與GBK的相互轉化,在些應用場景可能只有UNICODE編碼然后中文形式顯示在LCD屏上,這時可能需要轉換為GBK編碼。GBK
    發表于 01-12 06:58

    H264編碼如何將RGBYUV格式?

    您好,我正在使用 Raw 傳感器開發 IMX8MM。我已經完成了 YUV 格式的編碼 (h264),同樣我需要使用 RGB 在 h264 上流式傳輸。有沒有人使用 h264 將 rgb
    發表于 03-16 07:23

    二進制數與十六進制數的相互轉換

    二進制數與十六進制數的相互轉換 二進制數與十六進制數的相互轉換,按照每4位二進制數對應于一位十六進制數進行轉換。
    發表于 09-24 11:28 ?9564次閱讀
    二進制數與十六進制數的<b class='flag-5'>相互轉換</b>

    觸發器的相互轉換

    觸發器的相互轉換 基本觸發器之間是可以互相轉換的,JK觸發器和D觸發器是兩種最常用的觸發器,別的觸發器可以通過這兩種觸發器轉化得來,它們
    發表于 09-18 08:56 ?4259次閱讀
    觸發器的<b class='flag-5'>相互轉換</b>

    各種進制相互轉換

    各種進制相互轉換 1、其它進制轉換為十進制  方法是:將其它進制按權位展開,然后各項相加,就得到相應的十進制數。
    發表于 09-19 11:29 ?3763次閱讀
    各種進制<b class='flag-5'>相互轉換</b>

    yuv444、yuv422、yuv420之間的關系和轉換

    先來說說YUV信號: 準確來說,YUV是一種顏色編碼方法,而yuv信號是由RGB經過矩陣變換電路(至于是如何
    發表于 01-16 18:40 ?1725次閱讀

    什么是YUV

    簡單的講YUV是一種圖像和視頻的編碼方式,RGB通過三種顏色來表達現實世界中的各種顏色,YUV通過亮度與色度飽和度來表示顏色。
    的頭像 發表于 03-03 09:50 ?1380次閱讀
    什么是<b class='flag-5'>YUV</b>

    YUVRGB是如何進行轉換

    首先要明確待轉換格式和目標格式的特點和相互轉換關系,這是編程實現轉換的核心。對于 RGBYUV 的過程,我們要首先拿到
    的頭像 發表于 07-30 10:06 ?1370次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>