1. 程式人生 > >入門視訊採集與處理(學會分析YUV資料)

入門視訊採集與處理(學會分析YUV資料)

做視訊採集與處理,自然少不了要學會分析YUV資料。因為從採集的角度來說,一般的視訊採集晶片輸出的碼流一般都是YUV資料流的形式,而從視訊處理(例如H.264、MPEG視訊編解碼)的角度來說,也是在原始YUV碼流進行編碼和解析,所以,瞭解如何分析YUV資料流對於做視訊領域的人而言,至關重要。本文就是根據我的學習和了解,簡單地介紹如何分析YUV資料流。 YUV,分為三個分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定畫素的顏色。 與我們熟知的RGB類似,YUV也是一種顏色編碼方法,主要用於電視系統以及模擬視訊領域,它將亮度資訊(Y)與色彩資訊(UV)分離,沒有UV資訊一樣可以顯示完整的影象,只不過是黑白的,這樣的設計很好地解決了彩色電視機與黑白電視的相容問題。並且,YUV不像RGB那樣要求三個獨立的視訊訊號同時傳輸,所以用YUV方式傳送佔用極少的頻寬。 好了,言歸正傳,談談如何分析YUV碼流吧。YUV碼流有多種不同的格式,要分析YUV碼流,就必須搞清楚你面對的到底是哪一種格式,並且必須搞清楚這種格式的YUV取樣和分佈情況。下面我將介紹幾種常用的YUV碼流格式,供大家參考。1. 取樣方式 YUV碼流的儲存格式其實與其取樣的方式密切相關,主流的取樣方式有三種,YUV4:4:4,YUV4:2:2,YUV4:2:0,關於其詳細原理,可以通過網上其它文章瞭解,這裡我想強調的是如何根據其取樣格式來從碼流中還原每個畫素點的YUV值,因為只有正確地還原了每個畫素點的YUV值,才能通過YUV與RGB的轉換公式提取出每個畫素點的RGB值,然後顯示出來。 用三個圖來直觀地表示採集的方式吧,以黑點表示取樣該畫素點的Y分量,以空心圓圈表示採用該畫素點的UV分量。 先記住下面這段話,以後提取每個畫素的YUV分量會用到。YUV 4:4:4取樣,每一個Y對應一組UV分量。 YUV 4:2:2取樣,每兩個Y共用一組UV分量。 YUV 4:2:0取樣,每四個Y共用一組UV分量。 2. 儲存方式 下面我用圖的形式給出常見的YUV碼流的儲存方式,並在儲存方式後面附有取樣每個畫素點的YUV資料的方法,其中,Cb、Cr的含義等同於U、V。(1) YUVY 格式 (屬於YUV422) YUYV為YUV422取樣的儲存格式中的一種,相鄰的兩個Y共用其相鄰的兩個Cb、Cr,分析,對於畫素點Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00,其他的畫素點的YUV取值依次類推。(2) UYVY 格式 (屬於YUV422) UYVY格式也是YUV422取樣的儲存格式中的一種,只不過與YUYV不同的是UV的排列順序不一樣而已,還原其每個畫素點的YUV值的方法與上面一樣。(3) YUV422P(屬於YUV422) YUV422P也屬於YUV422的一種,它是一種Plane模式,即打包模式,並不是將YUV資料交錯儲存,而是先存放所有的Y分量,然後儲存所有的U(Cb)分量,最後儲存所有的V(Cr)分量,如上圖所示。其每一個畫素點的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即兩個Y共用一個UV。比如,對於畫素點Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00。(4)YV12,YU12格式(屬於YUV420) YU12和YV12屬於YUV420格式,也是一種Plane模式,將Y、U、V分量分別打包,依次儲存。其每一個畫素點的YUV資料提取遵循YUV420格式的提取方式,即4個Y分量共用一組UV。注意,上圖中,Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他依次類推。(5)NV12、NV21(屬於YUV420) NV12和NV21屬於YUV420格式,是一種two-plane模式,即Y和UV分為兩個Plane,但是UV(CbCr)為交錯儲存,而不是分為三個plane。其提取方式與上一種類似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb003. 總結 幾種常見的YUV碼流格式就簡單地列在上面了,大家在處理YUV碼流前,先了解清楚自己的碼流到底屬於哪一種,然後對應進行處理。 最後,再回答一個疑問,即分析清楚YUV碼流格式了,我們可以做什麼?最常用的一點就是,提取出所有的Y分量,然後利用vc或者matlab把你採集的影象的灰度值(Y分量)顯示處理,這樣你就可以很快地知道你採集的影象是否有問題了。後面我將繼續寫一些文章講述如何提取、轉換、顯示這些YUV原始碼流,有興趣可以繼續關注,歡迎留言討論。