0.引言
本篇文案重點(diǎn)講解YUV格式和內(nèi)存擺列,看完本篇文案,能夠快速對YUV格式有個(gè)更清楚的認(rèn)識(shí)。
從下圖就能夠看出,YUV4:1:1,YUV4:2:0,就壓縮的最厲害。一般在網(wǎng)絡(luò)傳輸時(shí),通常在送到編碼之前,都轉(zhuǎn)換作為這2種格式。
1.YUV簡述
yuv是歐洲電視系統(tǒng)采用的顏色編碼辦法之一,包括一個(gè)亮度信號(hào)Y和兩個(gè)色差信號(hào)U、V。yuv格式能夠優(yōu)化彩色視頻信號(hào)數(shù)據(jù)的存儲(chǔ)方式。與RGB格式相比,最大的優(yōu)良在于只需占用極少的數(shù)據(jù)存儲(chǔ)空間,使得數(shù)據(jù)傳輸更為簡易。
yuv中,“Y”暗示明亮度,亦便是灰階值;而“U”和“V”暗示的則是色度,色度的功效是記錄圖像色彩及飽和度。“亮度”是透過輸入信號(hào)來創(chuàng)立的,辦法是將信號(hào)的特定部分疊加到一塊。“色度”則定義了顏色的兩個(gè)方面─色調(diào)與飽和度,分別用Cr和Cb來暗示。其中,Cr反映了RGB輸入信號(hào)紅色部分與RGB信號(hào)亮度值之間的差異。而Cb反映的是RGB輸入信號(hào)藍(lán)色部分與RGB信號(hào)亮度值之間的差異。
采用yuv色彩空間的重要性是它的亮度信號(hào)y和色度信號(hào)u、v是分離的。倘若僅有y信號(hào)分量而無u、v分量,那樣這般暗示的圖像便是黑白灰度圖像。彩色電視采用yuv空間正是為了用亮度信號(hào)y處理彩色電視機(jī)與黑白電視機(jī)的兼容問題,使黑白電視機(jī)亦能接收彩色電視信號(hào)。
2.YUV采樣格式
重點(diǎn)的采樣格式有YCbCr:4:4:4、YCbCr:4:2:2、YCbCr:4:2:0、以及YCbCr:4:2:1,舉例說明中YCbCr:4:1:1為常用的采樣格式,其含義為:每一個(gè)點(diǎn)保留一個(gè)8bit的亮度值(亦便是Y值),每4個(gè)點(diǎn)保留一個(gè)Cr和Cb值,Cr和Cb像素點(diǎn)在肉眼中的感覺不會(huì)起太大的變化。因此,原來用RGB(R,G,B都是8bit unsigned)模型,即1個(gè)點(diǎn)需要24bits。如果按YCbCr:4:1:1采樣后,平均每一個(gè)點(diǎn)僅需要8+8/4+8/4=12bits。這般就把圖像的數(shù)據(jù)壓縮了一半。下面對這幾種格式做仔細(xì)介紹。
(1)YUV 4:4:4
YUV三個(gè)采樣數(shù)據(jù)完整存儲(chǔ),不存在任何數(shù)據(jù)損失與壓縮,當(dāng)然數(shù)據(jù)存儲(chǔ)體積不變,與格式相同。如下圖:
每一個(gè)交叉暗示一個(gè)Y值數(shù)據(jù),每一個(gè)圓圈暗示一個(gè)U值與V值數(shù)據(jù),圖中為每一個(gè)Y值對應(yīng)一個(gè)U值與V值,整體為一個(gè)像素點(diǎn),該像素點(diǎn)數(shù)據(jù)保留完整。
YUV 4:4:4圖像
交錯(cuò)格式存儲(chǔ)如下:
YUV數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式,每3個(gè)為一組,為方便32位計(jì)算機(jī)的按位直接讀取,一般在每組YUV值后會(huì)填充一個(gè)A值,使得每次讀取數(shù)值為32位,增多讀取速度。
YUV 4:4:4內(nèi)存存儲(chǔ)方式
(2)YUV 4:2:2
灰度值數(shù)據(jù)Y完整讀取,色度U與V僅保存本來的一半,取每行像素點(diǎn)的奇數(shù)位的UV值進(jìn)行保留。此處UV數(shù)據(jù)壓縮百分之五十,Y數(shù)據(jù)不變,壓縮比為1-(4+2+2)/(4+4+4)*100%=33.33%)。因像素點(diǎn)在屏幕表示后,圖像顏色的失真針對觀察者來講并不會(huì)影響圖像的質(zhì)量與觀賞度,因此能夠按此法進(jìn)行壓縮。如下圖所示:
YUV 4:2:2圖像
交錯(cuò)格式存儲(chǔ)如下:
YUV 4:2:2 內(nèi)存存儲(chǔ)方式
每一個(gè)交叉暗示一個(gè)Y值數(shù)據(jù),每一個(gè)圓圈暗示一個(gè)U值與V值數(shù)據(jù),圖中為每兩個(gè)Y值對應(yīng)一個(gè)U值與V值,整體為兩個(gè)像素點(diǎn),兩像素點(diǎn)共用一個(gè)相同的色度差,利用物體顏色在兩個(gè)像素的距離內(nèi)不會(huì)變化過大的原理,恰當(dāng)壓縮圖像數(shù)據(jù)。
為YUV數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式,每4個(gè)為一組,其中奇數(shù)位為Y值,偶數(shù)位為U值與V值,32位計(jì)算機(jī)在讀取時(shí)能夠一次恰好讀取一組YUV數(shù)據(jù),其中包含兩個(gè)Y值與其共用的一個(gè)U值與V值。
(3)YUV 4:1:1
灰度值數(shù)據(jù)Y依舊完整讀取,而色度U與V僅保存本來的四分之一,取每兩行像素點(diǎn)的左上位置的UV值進(jìn)行保留。此處數(shù)據(jù)壓縮百分之七十五,Y數(shù)據(jù)不變,壓縮比為1-(4+1+1)/(4+4+4)*100%=50%)。一樣利用因像素點(diǎn)在屏幕表示后,圖像顏色的失真針對觀察者來講并不會(huì)影響圖像的質(zhì)量與觀賞度,既然YUV4:2:2能夠橫向壓縮,因此YUV 4:1:1能夠增多縱向壓縮,達(dá)到更加高的壓縮比例,但需要付出數(shù)據(jù)較難處理的代價(jià)。如下圖所示:
每一個(gè)交叉暗示一個(gè)Y值數(shù)據(jù),每一個(gè)圓圈暗示一個(gè)U值與V值數(shù)據(jù),圖中為每四個(gè)Y值對應(yīng)一個(gè)U值與V值,整體為四個(gè)像素點(diǎn),四個(gè)像素點(diǎn)共用一個(gè)相同的色度差,一樣利用物體顏色在兩個(gè)像素的距離內(nèi)不會(huì)變化過大的原理,恰當(dāng)壓縮圖像數(shù)據(jù)。內(nèi)存擺列如下圖所示:
內(nèi)存存儲(chǔ)方式Y(jié)UV 4:1:1內(nèi)存存儲(chǔ)方式
上圖中,為YUV 4:1:1數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式,與YUV 4:4:4、YUV 4:2:2區(qū)別的是,雖然YUV 4:1:1壓縮比最大,需要存儲(chǔ)的數(shù)據(jù)最少,然則其存儲(chǔ)方式是最為繁雜的,需要運(yùn)用三個(gè)Buffer依次存取Y,U,V,三值,此存儲(chǔ)方式節(jié)約了存儲(chǔ)內(nèi)存空間與數(shù)據(jù)進(jìn)行傳送時(shí)的網(wǎng)絡(luò)傳輸帶寬,增多了編程人員對數(shù)據(jù)還原表示處理的難度。
確定圖像的存儲(chǔ)方式關(guān)系到數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式,當(dāng)進(jìn)行圖像合并時(shí),需要對內(nèi)存中的數(shù)據(jù)進(jìn)行修改,以達(dá)到合并圖像的效果,因此認(rèn)識(shí)圖像存儲(chǔ)方式至關(guān)重要。
重視:盡管上面列舉出了有些常用的格式,然則還是有非常多格式亦是有用到的,實(shí)質(zhì)遇到采集與編碼格式區(qū)別,或解碼與播放格式區(qū)別,就需要進(jìn)行格式轉(zhuǎn)換。理解清楚這些格式轉(zhuǎn)換就曉得怎么去轉(zhuǎn)換了,當(dāng)然倘若搞不清這種數(shù)據(jù)關(guān)系,亦有庫能夠用。
3.其它
如WebRTC庫中源碼針對圖像類的命名為I420,初步猜測為YUV4:2:0格式。但在interface文件I420videoframe.h中觀察創(chuàng)建圖像的辦法與其參數(shù):
int CreateFrame(int size_y,const uint8_t & buffer_y,int size_U,const uint8_t & buffer_U, int size_V,const uint8_t & buffer_V,int width,intheigth,int stride_y,int stride_u,int stride_v)推斷其實(shí)質(zhì)存儲(chǔ)方式為YUV4:1:1,由于參數(shù)中包括三個(gè)Buffer,分別為bufferY,bufferU以及bufferV,以及她們對應(yīng)的體積。
事實(shí)上,WebRTC做為視頻通話的研發(fā)庫,其思慮最優(yōu)先的必然是最大化壓縮數(shù)據(jù),減少需要網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù),減少視頻通話與現(xiàn)實(shí)中的延遲,在使得視頻通話順暢的基本上,再進(jìn)行畫質(zhì)的改善。因此呢WebRTC選取YUV4:1:1為恰當(dāng)選取,但此圖像格式處理的方式較為困難,后面文案再介紹下怎么轉(zhuǎn)換的算法。
4.總結(jié)
本文用一篇非常簡短的文案,再次講述了YUV格式和內(nèi)存擺列,后面有機(jī)會(huì)再繼續(xù)講講一些轉(zhuǎn)換算法和RGB格式。歡迎關(guān)注,保藏,轉(zhuǎn)發(fā),分享。
后期關(guān)于項(xiàng)目知識(shí),亦會(huì)更新在微X公眾號(hào)“記錄世界 from antonio”,歡迎關(guān)注