參考鏈接:
1.凹凸思 https://www.zhihu.com/people/jiao-tao-52
2.紙上淺談 https://glumes.com/post/ffmpeg/understand-yuv-format/
1.名詞解釋
- 光通量(Φ):指人眼所能感覺到的輻射功率,它等于單位時間內某一波段的輻射能量和該波段的相對視見率的乘積。單位:流明。
- 發光強度(光強):在給定方向上(該方向上的輻射強度為(1/683)瓦特/球面度))的單位立體角發出的光通量.單位:坎德拉.
- 亮度(輝度Lv):指發光體光強與人眼所“見到”的光源面積之比,定義為該光源單位的亮度,即單位投影面積上的發光強度.單位:坎德拉/平方米(cd/m2)
- 感光度(ISO):是衡量底片對于光的靈敏程度的量.
a. 膠片相機的感光度:是膠片對光線的化學反應速度,也是制造膠片行業中感光速度的標準。
b. 數碼相機的感光度:是一種類似于膠卷感光度的一種指標,實際上,數碼相機的ISO是通過調整感光元件的靈敏度或者合并感光點來實現的,也就是說是通過提升感光器件的光線敏感度或者合并幾個相鄰的感光點來達到提升ISO的目的。(簡單的說:感光度就是傳感器的對光的敏感程度。)感光度越高,對光的敏感度越高,曝光值也會越高。
c. 感光度的參數和表述:感光度一般使用前綴ISO+參數的方式來表述感光度的數值如:感光度 100可以寫成ISO100
d. 感光度常用的數值:ISO50、 ISO100 、ISO 200、ISO400、ISO800、ISO1600、ISO3200、ISO6400 (在光圈快門相同的情況下,感光度每增加一倍,曝光量便會增加一倍。)
- 曝光量
①AV是孔徑值:
AV = 2 * log2 (F number) ,F number是鏡頭的光圈F值,如F5.6,F值就是5.6。
②TV是時間值:
TV = - log2 (exposure time) ,exposure time是曝光時間單位是秒sec。
③BV是被攝景物的亮度:
BV =log2(B/0.3K) , B是景物亮度單位是Cd/cm2。
LV=BV+5。
④SV是感光材料的感光度值:
SV = log2(0.3S), ISO100的S值就是100.
⑤EV是曝光量:
則曝光公式為:
2. 3A(AWB,AE,AF)
2.1 AE(Auto Exposure)自動曝光
2.1.1 AE算法思想和曝光量公式
(1)AE的基本概念:Auto Exposure即自動曝光,是相機根據外界光線的強弱自動調整曝光量和增益,防止曝光過度或者不足的一種機制。
可見,AE的輸入為當前影像的亮度值Y,輸出為sensor的曝光時間和增益,isp增益和鏡頭光圈(如果鏡頭光圈可調)。當AE algorithm得到當前幀的亮度后,便會與target Y做比較,然后計算出下一次需要調整的參數,以便讓影像的亮度越來越接近target Y,如下所示(target并非一個固定值,而是一個range)。
(2)影響曝光的因素:
AE算法的要求是“快,準,穩”。即要很快的能收斂到target附近,而且亮度要準確,收斂過程要平滑,收斂完成后要穩定。
影響AE算法的因素:圖片亮度的統計,AE target,AE table,收斂速度控制。
實際操作中調節的因素有:
- 調節曝光時間;
- 調節光圈大小;
- 調節Sensor的ISO感光度
(3)AE控制模塊:
(4)調節曝光的方法步驟和算法:
A.讀入現在設定值所得到的亮度值;
B.經過AE weight table后得到我們想要計算的亮度;
C.將得到的計算值,趨近我們的期望值(如:135);
D.計算出一組新的設定值;
E.重復以上動作,直到亮度值在我們的期望值收斂范圍內(Example : 131~139)。
(5)曝光時間的控制:
因為Sensor本身并沒有時間的概念,它是通過pixel clock數和pixel clock的頻率來表示sensor曝光時間的。為了得到簡便的表達方式,就用曝光行數表示曝光時間了。曝光行數=pixel clock數/每條line的pixel數。 只需要知道sensor的pixel clock頻率和每行的pixel數(有效pixel+dummy pixel),便可以計算出任何曝光時間,sensor需要曝光多少行。
(6)sensor曝光過程:
? 如下圖過程可見,曝光是逐個像素從上往下進行的,當讀到圖中紅色塊時就說上面的五行已經曝光完成了,也說明sensor的曝光時間是5條lines。
(7) AE table:
不同的曝光時間和ISO組合方式,表和圖示如下:
(8)AE 收斂
et是曝光時間;agc指sensor的感光度sensorgain即sensor的ISO值;iris是光圈值的大小。
收斂的概念就是無限趨近。
(9)AE中的問題:flicker,過曝、曝光不足、AE peak、AE震蕩等。
Flicker:
現象:圖像因為sensor曝光時間不是光源頻率的整數倍導致圖像上出現Banding即明暗相間的條紋。
產生原因:
曝光時間小于1/100秒,且曝光時間處于波峰時,圖片亮度比較亮
曝光時間小于1/100秒,且曝光時間處于波谷時,圖片亮度比較暗
從能量的角度看,就是當sensor逐像素吸收外界能量成像時,外界能量有時大有時小,像素就有的亮有的暗。因此產生flicker現象。
解決辦法:
- 所以只有曝光時間=光源周期的整數倍的時候,保證每個像素吸收的光能是穩定的。
才可以避免flicker。國內市電,50HZ.
AE Peaking:AE的峰值,圖像亮度平穩時,突然出現亮度高的畫面。
AE震蕩:圖像亮度忽明忽暗。
2.1.2 測光模式
①平均測光,取畫面亮度均值作為曝光依據,畫面主體、背景亮度差異大時,容易造成曝光過度或者曝光不足的現象。
②中央點測光(Spot Metering),僅測量中央很小范圍內景物的亮度作為自動曝光依據,
③多點測光(Multi-Spot Metering):簡單理解為點測光+記憶裝置,拍攝時使被攝體中不同的部位,先后位于取景視場中心進行點測光,照相機內的電子線路將每次的結果記憶下來,并按各點的平均值進行曝光。可兼顧畫面不同部分的亮度,精度高,操作麻煩。多點測光適合于拍攝風景、人像等靜止不動的物體,不適合拍攝動體
④中央重點測光,是平均測光與點測光方式的折衷形式,中央部分亮度權重較高,邊緣權重較低 能同時兼顧被攝主體和四周景物的亮度,因此對被攝主體的測光精度較高,尤其適合于拍攝帶風景的人物照片。但對于亮度不均勻或反差太大的場合,容易造成曝光過度或者曝光不足的現象。
⑤局部測光:佳能首創,中央重點加權平均測光和點測光方式的折中,測光區域較點測光大。
⑥分區式測光(Multi-Pattern Metering),又稱多幅面測光、多模式測光或區域分割式測光,主要原理是將畫面分成幾個區,先測取每個區的亮度,然后經過綜合計算,從而決定每個區域的測光加權比重,給出一個能兼顧各區的曝光值。從理論上講,分區式測光方式都具有自動逆光補償能力。
2.2 AF(Auto Focus) 自動對焦
2.2.1 光學原理
? 透鏡成像:成像點不一定落在焦平面上面,需要通過調整鏡頭,使成像點落在焦平面上面,使sensor清晰成像,這個過程就是聚焦過程。
2.2.2 AF 基本方法
(1)Lens-motion-type AF移動鏡頭:根據圖像的清晰度(一般為邊緣信息)或者物距信息,通過AF算法判斷對焦情況,從而計算鏡頭的移動方向和大小,然后驅動電路使鏡頭移動來改變聚焦位置。
(2)Lens-modification-type AF改變焦距:通過liquid lens或者solid-state electro-optical devices這些可變焦的器件來改變鏡頭的焦長。
(3)Extended depth of field AF (EDOF)全焦技術:通過光學和數字信號處理技術集合,對光學信息編碼,再用計算機信息處理技術解碼,使得景深得到擴展,從而實現無運動部件的AF功能。
(4)手機攝像頭多使用AF是VCM驅動鏡頭前后移動的方案。通過給線圈通電流,在永磁體的作用下,使鏡頭前后移動,同時前后兩個彈簧片控制移動位置。
2.2.3 攝像頭中AF系統示意圖
這里的AF算法的信息基礎有被動式和主動式兩類。
采用對比度法,手機攝像頭的AF系統架構圖如下:
2.2.4 AF 算法流程
2.2.5 AF算法中信息收集方法
- 基于鏡頭與被攝目標之間距離測量的測距方法。
A、三角測量法:由電路控制可動反光鏡的轉動,當透射光影和反射光影的重合時可以計算距離。
B、紅外線測距法:由照相機主動發射紅外線作為測距光源,并用紅外發光二極管的轉動代替可動反光鏡的轉動。需要一個獲得當前照片對比度的設備來量測
- 超聲波測距法:該方法是根據超聲波在攝像機和被攝物之間傳播的時間進行測距的
- 激光測距法:
- 基于調焦屏上成像清晰的聚焦檢測方法。
A、對比度法 :手機上通過獲得照片的Focus Value (Edge)來判斷當前位置的清晰度,通過檢測影像的輪廓邊緣實現自動調焦的。
B、相位法PDAF。該方法是通過檢測像的偏移量實現自動調焦的。
2.2.6 AF算法中圖像清晰度評價方法
(1)常用的圖像清晰度評價方法:
A、圖像統計:
- 灰度熵法(靈敏度不高) ;
pi是圖像中灰度值為i的像素出現的概率,L為灰度級總數
- 灰度方差法 – SMD filter ;
- 直方圖法。
B、圖像邊緣檢測:
- Laplacian算子(中心算子);
- Sobel算子(highpass filter) (有一個水平方向算子,一個垂直方向算子,取最大值);
- Robert算子(一個左上右下對角線算子,一個右上左下對角線算子) ;
- Prewitt算子(有一個水平方向算子,一個垂直方向算子,取最大值)
C、空間域特征 :tenengrad filter(能量梯度函數)。
(2)函數舉例
能量梯度函數:
Laplace算子:
模數偏差總和SMD(sum-modulus-difference)算 子:
2.2.7 AF算法中找最佳對焦點的方法
- 曲線擬合
(1)測得局部最大值peak點(FV):計算當前Step對應的FV值,判斷當前FV值是不是在此前連續記錄的四個step點FV值中的最大值,是最大值的話,就再判斷它是否大于next Step點的FV值。用此方法判斷極大值點,若有噪聲造成step-FV曲線的微小波動,則通過各波動區域的極大值點對比,以最大值作為局部的MAX點。
(2)擬合曲線獲取最佳對焦位置:因為step并不連續,測得Peak點的可能并不是真正最佳的對焦點,此時可通過poly fit曲線擬合的方法來找peak點。對于step-FV曲線采用
y=a*x^2+b*x+c
? 就可以近似擬合,采用max point點和前、后相鄰兩個點,共三個點采用最小二乘法擬合拋物線。將拋物線的頂點最為最佳對焦點,反饋給VCM控制電路來驅動Lens移動到最佳對焦位置。
-
AF Table
根據不同距離處物體在sensor上成像的邊緣信息即FV(Focus Value)值,繪制多條step-FV曲線。圖中虛線表示每個物距處,圖像認為清晰時可接受的最小FV值,虛線以上FV對應景深范圍內物體成像信息。
根據上圖繪制對應的step-DOF(Depth Of Field)曲線
-
連續對焦
連續對焦:連續對焦中并不是找到焦點就停止,而是根據場景的變化不停的找最佳對焦位置,這樣就需要判斷鏡頭移動方向,這里也是主要使用爬山算法。
不同顏色格式對焦
2.3 AWB(Auto White Balance) 自動白平衡
2.3.1 什么是AWB
不同色溫環境下,通過ISP的算法調整,抵消色溫引起的偏色,使得拍出來的成像效果接近人眼視覺習慣.
2.3.2 為什么要做AWB
因為camera和人眼存在差異.
- 對人眼,是主觀的,本質上白色的物體,不同色溫,反射光線顏色是不一樣的,但是經過我們的視覺系統的校正后還是白色的.
- 對于camera,是客觀的,不同色溫,反射光線顏色不一致,直接成像就會出現和人眼不一樣的效果,也就是色偏.所以需要AWB,這個AWB就是類似于經過我們的視覺系統校正.
2.3.3 AWB算法有那些
1.最大亮度法
2.灰度世界法
3.色域界限法
4.圖框區域分割法
5.光源預測法
6.完美反射法
7.動態閾值法
8.模糊邏輯法
2.4 ISP(Image Signal Process)
通常的ISP data patch:
(1)BLC(Black Level Correction)/ Black Level Compensate (OBC) :黑電平校正。所謂黑電平就是在DNP下,將曝光時間和增益都調到最小時拍攝圖片的亮度值,理想情況下應該是0,但是實際中因為sensor暗電流作用,全黑像素值大于0。(這一個值,在后面可能會受到AWBGain,CCM,Gamma的影響)。
(2)DPC/BPD(Defect Pixel Correction/Bad Pixel Detect):壞點校正/壞點檢測。相機中成像壞點一般是白色或者黑色的點,和周圍像素點的差異明顯。
(3)FPN(Fix Pattern Noise):固定模式噪聲。由于CMOS每個感光二極體旁都搭配一個ADC 放大器,如果以百萬像素計,那么就需要百萬個以上的 ADC 放大器,但是每個像素結構中的光電二極管的尺寸、摻雜濃度、生產過程中的沾污以及MOS場效應管的參數的偏差等都會造成像素輸出信號的變化。對于給定的單個像素它是固定的。通常消除固定模式噪聲采用“雙采樣降噪”方法,這是CMOS 感光器件特有的一種降噪方式。在光線較暗的環境下使用時,畫面會有明顯的噪聲,這時通過對景物進行兩次不同曝光率和敏感度的采樣,然后將兩次采樣的結果進行綜合處理,就可以有效解決低照度下的圖像噪聲問題。
(4)LSC(Lens Shading Correction)/Color Shading :陰影校正。Lens Shading是由于鏡片從邊緣到中心對入射光線的反射程度不同,造成拍攝均勻亮度的畫面,圖像從中心到邊緣亮度不均勻逐漸變暗。Color Shading是由于Lens從中心到邊緣,其R、G、B變暗的速率不一樣,總體表現就是Gb/Gr像素值差異較大,兩個像素之間有細微紋理。找出shading的distribution,然后用最小的模型來建模將其導入
Correction原理:
找到中心點后,以中心點為原心,向周圍以圓為單位補Gain,離中心點越遠,補的越大
(5)Flare offset:光學上稱Flare也叫stray light,耀斑補償。鏡片的表面反射或鏡筒、反光鏡組的內面所引起的反射光,到達底面后造成畫面整體或一部份產生了霧蒙,降低了圖像的鮮銳度。鏡片的鍍膜及內面防反射處理的加強,固然可以大幅度地減少光斑,但被攝體的狀況并不相同,不可能完全消除。
(6)AE(Auto Exposure):自動曝光。
(7)AF(Auto Focus):自動對焦。
(8)AWB(Auto White Balance ):自動白平衡。解決環境光不同色溫導致整幅圖片偏色的情況。
(9)DM(Demosaicing/Color Filter Array Interpolation/CFA插值):CMOS Sensor出來的RawData是Bayer格式的圖像,每個像素只有一個通道的信息。DM是將Bayer格式的圖像恢復成每個像素用RGB三通道表示的方式。DM的主要依據是圖像在平滑的局部區域,各分量的ratio是相等的。插值算法的好壞會影響圖片的細節,如摩爾紋。
(10)CCM(Color Correction Matrix/ DSC color calibration):顏色校正矩陣。拍攝color checker24色板,將相機拍攝圖片值與色板標準值之間進行對比(RGB顏色空間),得出一組能將拍攝值校正到最接近標準值的3x3矩陣。通過這個矩陣對所有相機拍攝的圖片進行顏色校正。
(11)NR(Noise Reduction/Denoise):去噪。采用特定的LPF(Low Pass Filter)對圖片進行濾波,濾除圖像的噪聲成分,而Bilateral filtering即雙邊濾波器,它是一種保護邊緣的平滑濾波器,這樣既可以濾除噪聲,edge又可以保留下來。
(12)EE(Edge Enhancement/Edge Sharpening):銳化,邊緣增強。通過濾波器獲取圖像的高頻分量,按照一定的比例將高頻部分和原圖進行加權求和獲取銳化后的圖像。
(13)DRC/HDR(Dynamic Range Compression/ High-Dynamic Range):寬動態。高動態圖像的拍攝出來的結果通常會有,亮部太亮,暗部太暗的問題。DRC是調整圖像暗部亮度使之變亮,調整亮部亮度使之變暗,而且保持圖像的對比度。
(14)PCA/VDE:Hue,Saturation,Contrast,Brightness調試。單獨針對Hue,Saturation,Contrast,Brightness各圖像分量進行調節。
(15)Histogram:直方圖均衡化。重新分布圖片的亮度。使圖片的亮度分布更加均勻。
(16)FlashLight Control:閃光燈控制
(17)Cross talk:Optical cross-talk是當主光線進光角度過大,導致光線不能有效地進入本像素的Microlens內,而是進入相鄰像素單元或其他無效區域內的現象。
Electric cross-talk:相鄰單元之間的光生少數載流子通過襯底擴散和漏電相互影響造成相鄰單元的現象。
上述原因導致結果都是圖像在對角線上相鄰兩個像素的Gr和Gb value差異較大而產生不平滑的紋理狀。
(18)Gradation Control(GDC):可能是對圖像數據精度進行的操作
(19)Scaler:對圖像進行縮放,縮放的過程中采樣和插值直接影響圖像的細節質量。
(20)Adaptive tone scale:(這個沒有辦法處理多種場景)進來的影像,根據histogram,可以調節,讓其明暗亮度的曲線比較好看。因此,它最重要的就是histogram equalization,其關鍵是在哪個domain去做。目前我們的做法應該是在L*做histogram,但只做edge的histogram,這樣就ok了。
(21)Dynamic Range Compression:就是把暗的地方變亮一些,亮的地方變暗一些。AE的主要目的是避免亮度飽和的pixels,其余exposure的pixel可以通過DRC校準回來。
(22)gamma:所謂伽瑪校正就是對圖像的伽瑪曲線進行編輯,以對圖像進行非線性色調編輯的方法,檢出圖像信號中的深色部分和淺色部分,并使兩者比例增大,從而提高圖像對比度效果。計算機繪圖領域慣以此屏幕輸出電壓與對應亮度的轉換關系曲線,稱為伽瑪曲線(Gamma Curve)。
3. 色彩模型
3.1 色彩模型,色彩空間,色域
色彩模型就是用一定規則來描述(排列)顏色的方法
在一個色彩模型下可以有不同的色彩空間,它們根據排列的條件的不同會有不同的色域(所能表示色彩的范圍)和含義,色彩模型只有具體到一種色彩空間上才有實用性。
色域只是指某個對象能表示色彩范圍,而不同色彩空間的色域大多是根據色彩空間設計者的具體需求和應用場景,人為決定的。
比如某顯示器能顯示的色彩范圍是 xxx ,就可以設計一個剛好包含包含這個范圍的色彩空間。比如用于數字電影的 ACES 系統的色域完全包括并超出了人類可見色域:
? 色彩空間和色彩模型是容易混淆的概念,色彩模型是把色彩按規則排列的模型,而色彩空間是其在一定條件下排列的結果,在一個色彩模型下可以有不同的色彩空間,它們根據排列的條件的不同會有不同的色域(所能表示色彩的范圍)和含義,色彩模型只有具體到一種色彩空間上才有實用性。Adobe RGB、sRGB、Apple RGB 就是同在 RGB 色彩模型下的不同色彩空間。
3.2 常見色彩模型
1.RGB
2.YUV,YCbCr,YIQ
? YUV 是一種目的為把顏色的視覺亮度分離來建立的色彩空間,Y (Luminance) 代表顏色的視覺亮度,U、V 則是剩余的色彩分量。
? 與 HSB、HSL 的亮度或明度不同,視覺亮度代表的是顏色在人實際感受的亮度,之所以不同是因為不同色相的顏色的視覺亮度是不同的,比如純綠色和純藍色,HSB 和 HSL 的模型里他們的亮度是一致的,但是在人眼中純綠色明顯要亮很多。
? 一般的 YUV 模型中紅綠藍的視覺亮度比是:0.299:0.587:0.114
? YUV 模型是在 1938 年法國工程師 Georges Valensi 為彩色電視制定的模型,為的是在彩色電視信號傳輸中用 Y 視覺亮度通道能與黑白電視共用一個信號通道,達到既向下兼容黑白電視信號,又節約信號帶寬的目的。
**YCbCr** 通常被當做 YUV 的另一種形式,相比 YUV, Cb 和 Cr 通道分別更向紅、藍偏移,而且通常進行壓縮。YCbCr 常用在圖像壓縮領域,JPEG 圖片內部的色彩空間就使用 YCbCr 模型。
? YIQ 是另一種視覺亮度拆分模型,與 YUV 很相似,是 NTSC 彩色電視的標準,國內不太常見,因為國內用的是 PAL 標準,PAL 標準使用的是 YUV。
3.CMY,CMYK
? 印刷色彩模式。C是青色Cyan、M是品紅色Magenta、Y是黃色 Yellow,而K是Black最后一個字母。印刷色大多是根據這CMY三種顏色的油墨按照不同比例調出的。
? CMY 是與 RGB 相對應的顏色,青、洋紅、黃分別是紅、綠、藍的補色,也就是說顏色中青色成分越多代表紅色成分越少,洋紅、黃與藍、綠也是這個關系,CMY 實際上相相當于在 RGB 都為 100% 的基礎上減少顏色,比如 20%的 C 相當于 100% – 20% 的藍。這就是根據反射光的減色原理制度的模型,用于顏料。
? 在現實中由于顏料的純度達不到理想的純度,所以用 CMY 混合無色彩的灰、黑是很困難的,所以就增加了一個專門的黑色通道:K,(之所以不用 B (Black)來表示黑是為了不與藍色(Bule)混淆),印刷界使用的色彩模型就 CMYK,所以它又被稱為 印刷四分色模型。
4.HSB/HSV,HSL
HSB 與 HSL 是很相似的 2 個色彩空間,都是把色相與飽和度、亮度分離,不同的是 HSB 和 HSL 對亮度、飽和度拆分不同, HSB 的 B 明度(Brightness)是從黑色到色相顏色,而 HSL 的 L 亮度(Lightness)是從最暗到色相顏色再到白色,這意味著 HSL 取最大亮度時不管飽和度和色相如何都是白色,而 HSB 最大明度時是色相顏色,要達到白色還需要飽和度最小。
也就是說 HSB 的飽和度代表顏色遠離白的程度,明度代表顏色遠離黑的程度。而 HSL 的飽和度是顏色遠離灰色的程度,亮度則代表了顏色在最暗到最亮之間的位置。
HSB 和 HSL 那種更方便一直是一場爭論,PhotoShop 中拾色器使用的是 HSL 模型,而“色相\飽和度”命令用的是 HSB 模型,在 W3C 制定的網頁標準中支持了 HSL 。
另外,HSL 實際上視覺亮度分布也很不均勻(同亮度值的顏色看起來實際亮度可能相差很大),所以有 HUSL 等對 HSL 改進的模型,它們視覺亮度分布更加均衡,對人類選擇色彩更加直觀(同亮度值顏色看起來亮度更加相等),不過由于計算更加復雜,并沒有被廣泛使用。
- HWB
- photaYCC
- Lab
3.3 色彩空間
RGB模型色彩空間:
sRGB
Adobe RGB
Apple RGB
Prophoto RGB
ScRGB
CMYK模型色彩空間
Japan color 2001coated
US web coated(SWOP)
.......
4. 圖像格式及轉換
4.1 常見圖像格式
4.2 RGB,YUV顏色編碼
4.2.1 RGB顏色編碼
? RGB 三個字母分別代表了 紅(Red)、綠(Green)、藍(Blue),這三種顏色稱為 三原色,將它們以不同的比例相加,可以產生多種多樣的顏色。
? 在圖像顯示中,一張 1280 * 720 大小的圖片,就代表著它有 1280 * 720 個像素點。其中每一個像素點的顏色顯示都采用 RGB 編碼方法,將 RGB 分別取不同的值,就會展示不同的顏色。
? RGB 圖像中,每個像素點都有紅、綠、藍三個原色,其中每種原色都占用 8 bit,也就是一個字節,那么一個像素點也就占用 24 bit,也就是三個字節。一張 1280 * 720 大小的圖片,就占用 1280 * 720 * 3 / 1024 / 1024 = 2.63 MB 存儲空間。
4.2.2 YUV 顏色編碼
? YUV 顏色編碼采用的是 明亮度 和 色度 來指定像素的顏色。其中,Y 表示明亮度(Luminance、Luma),而 U 和 V 表示色度(Chrominance、Chroma)。而色度又定義了顏色的兩個方面:色調和飽和度。使用 YUV 顏色編碼表示一幅圖像,它應該下面這樣的:
? 和 RGB 表示圖像類似,每個像素點都包含 Y、U、V 分量。但是它的 Y 和 UV 分量是可以分離的,如果沒有 UV 分量一樣可以顯示完整的圖像,只不過是黑白的。
? 對于 YUV 圖像來說,并不是每個像素點都需要包含了 Y、U、V 三個分量,根據不同的采樣格式,可以每個 Y 分量都對應自己的 UV 分量,也可以幾個 Y 分量共用 UV 分量。
4.3 RGB 到YUV轉換
? 對于圖像顯示器來說,它是通過 RGB 模型來顯示圖像的,而在傳輸圖像數據時又是使用 YUV 模型,這是因為 YUV 模型可以節省帶寬。因此就需要采集圖像時將 RGB 模型轉換到 YUV 模型,顯示時再將 YUV 模型轉換為 RGB 模型。
? RGB 到 YUV 的轉換,就是將圖像所有像素點的 R、G、B 分量轉換到 Y、U、V 分量。
有如下公式進行轉換:
? 此時的轉換結束后,每個像素點都有完整的 Y、U、V 分量。而之前提到 Y 和 UV 分量是可以分離的,接下來通過不同的采樣方式,可以將圖像的 Y、U、V 分量重新組合。
4.4 YUV采樣格式
YUV 圖像的主流采樣方式有如下三種:
- YUV 4:4:4 采樣
- YUV 4:2:2 采樣
- YUV 4:2:0 采樣
4.4.1 YUV 4:4:4采樣
? YUV 4:4:4 采樣,意味著 Y、U、V 三個分量的采樣比例相同,因此在生成的圖像里,每個像素的三個分量信息完整,都是 8 bit,也就是一個字節。
如下圖所示:
其中,Y 分量用叉表示,UV 分量用圓圈表示。
舉個例子 :
假如圖像像素為:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采樣的碼流為:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
最后映射出的像素點依舊為 [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
可以看到這種采樣方式的圖像和 RGB 顏色模型的圖像大小是一樣,并沒有達到節省帶寬的目的,當將 RGB 圖像轉換為 YUV 圖像時,也是先轉換為 YUV 4:4:4 采樣的圖像。
4.4.2 YUV 4:2:2采樣
YUV 4:2:2 采樣,意味著 UV 分量是 Y 分量采樣的一半,Y 分量和 UV 分量按照 2 : 1 的比例采樣。如果水平方向有 10 個像素點,那么采樣了 10 個 Y 分量,而只采樣了 5 個 UV 分量。
如下圖所示:
其中,Y 分量用叉表示,UV 分量用圓圈表示。
舉個例子 :
假如圖像像素為:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采樣的碼流為:Y0 U0 Y1 V1 Y2 U2 Y3 V3
其中,每采樣過一個像素點,都會采樣其 Y 分量,而 U、V 分量就會間隔一個采集一個。
最后映射出的像素點為 [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]
采樣的碼流映射為像素點,還是要滿足每個像素點有 Y、U、V 三個分量。但是可以看到,第一和第二像素點公用了 U0、V1 分量,第三和第四個像素點公用了 U2、V3 分量,這樣就節省了圖像空間。
一張 1280 * 720 大小的圖片,在 YUV 4:2:2 采樣時的大小為:
(1280 * 720 * 8 + 1280 * 720 * 0.5 * 8 * 2)/ 8 / 1024 / 1024 = 1.76 MB 。
可以看到 YUV 4:2:2 采樣的圖像比 RGB 模型圖像節省了三分之一的存儲空間,在傳輸時占用的帶寬也會隨之減少。
4.4.3 YUV 4:2:0采樣
? YUV 4:2:0 采樣,并不是指只采樣 U 分量而不采樣 V 分量。而是指,在每一行掃描時,只掃描一種色度分量(U 或者 V),和 Y 分量按照 2 : 1 的方式采樣。比如,第一行掃描時,YU 按照 2 : 1 的方式采樣,那么第二行掃描時,YV 分量按照 2:1 的方式采樣。對于每個色度分量來說,它的水平方向和豎直方向的采樣和 Y 分量相比都是 2:1 。
如下圖所示:
其中,Y 分量用叉表示,UV 分量用圓圈表示。
假設第一行掃描了 U 分量,第二行掃描了 V 分量,那么需要掃描兩行才能夠組成完整的 UV 分量
舉個例子 :
假設圖像像素為:
[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3]
[Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
那么采樣的碼流為:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8
其中,每采樣過一個像素點,都會采樣其 Y 分量,而 U、V 分量就會間隔一行按照 2 : 1 進行采樣。
最后映射出的像素點為:
[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]
[Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]
從映射出的像素點中可以看到,四個 Y 分量是共用了一套 UV 分量,而且是按照 2*2 的小方格的形式分布的,相比 YUV 4:2:2 采樣中兩個 Y 分量共用一套 UV 分量,這樣更能夠節省空間。
一張 1280 * 720 大小的圖片,在 YUV 4:2:0 采樣時的大小為:
(1280 * 720 * 8 + 1280 * 720 * 0.25 * 8 * 2)/ 8 / 1024 / 1024 = 1.32 MB 。
可以看到 YUV 4:2:0 采樣的圖像比 RGB 模型圖像節省了一半的存儲空間,因此它也是比較主流的采樣方式。
4.5 YUV存儲格式
YUV 的存儲格式,有兩種:
- planar 平面格式
- 指先連續存儲所有像素點的 Y 分量,然后存儲 U 分量,最后是 V 分量。
- packed 打包模式
- 指每個像素點的 Y、U、V 分量是連續交替存儲的。
根據采樣方式和存儲格式的不同,就有了多種 YUV 格式。這些格式主要是基于 YUV 4:2:2 和 YUV 4:2:0 采樣。
常見的基于 YUV 4:2:2 采樣的格式如下表:
YUV 4:2:2 采樣 |
---|
YUYV 格式 |
UYVY 格式 |
YUV 422P 格式 |
常見的基于 YUV 4:2:0 采樣的格式如下表:
YUV 4:2:0 采樣 | YUV 4:2:0 采樣 | |
---|---|---|
YUV 420P 類型 | YV12 格式 | YU12 格式 |
YUV 420SP 類型 | NV12 格式 | NV21 格式 |
更多的 YUV 格式信息參考這里:YUV pixel formats
4.5.1 基于YUV 4:2:2采樣的格式
YUV 4:2:2 采樣規定了 Y 和 UV 分量按照 2: 1 的比例采樣,兩個 Y 分量公用一組 UV 分量。
1.YUYV格式
YUYV 格式是采用打包格式進行存儲的,指每個像素點都采用 Y 分量,但是每隔一個像素采樣它的 UV 分量,排列順序如下:
Y0 UO Y1 V0 Y2 U2 Y3 V2
Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量….
2.UYVY格式
UYVY 格式也是采用打包格式進行存儲,它的順序和 YUYV 相反,先采用 U 分量再采樣 Y 分量,排列順序如下:
U0 Y0 V0 Y1 U2 Y2 V2 Y3
Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量….
根據 UV 和 Y 的順序還有其他格式,比如,YVYU 格式,VYUY 格式等等,原理大致一樣了。
3.YUV 422P格式
? YUV 422P 格式,又叫做 I422,采用的是平面格式進行存儲,先存儲所有的 Y 分量,再存儲所有的 U 分量,再存儲所有的 V 分量。
4.5.2 基于YUV 4:2:0 采樣的格式
1.分類
基于 YUV 4:2:0 采樣的格式主要有 YUV 420P 和 YUV 420SP 兩種類型,每個類型又對應其他具體格式。
- YUV 420P 類型
- YU12 格式
- YV12 格式
- YUV 420SP 類型
- NV12 格式
- NV21 格式
YUV 420P 和 YUV 420SP 都是基于 Planar 平面模式 進行存儲的,先存儲所有的 Y 分量后, YUV420P 類型就會先存儲所有的 U 分量或者 V 分量,而 YUV420SP 則是按照 UV 或者 VU 的交替順序進行存儲了,具體查看看下圖:
YUV420SP 的格式:
YUV420P 的格式:
2.YU12 和 YV12 格式
YU12 和 YV12 格式都屬于 YUV 420P 類型,即先存儲 Y 分量,再存儲 U、V 分量,區別在于:YU12 是先 Y 再 U 后 V,而 YV12 是先 Y 再 V 后 U 。
YV 12 的存儲格式如下圖所示:
YU 12 又稱作 I420 格式,它的存儲格式就是把 V 和 U 反過來了。
3.NV12 和 NV21 格式
NV12 和 NV21 格式都屬于 YUV420SP 類型。它也是先存儲了 Y 分量,但接下來并不是再存儲所有的 U 或者 V 分量,而是把 UV 分量交替連續存儲。
NV12 是 IOS 中有的模式,它的存儲順序是先存 Y 分量,再 UV 進行交替存儲。
NV21 是 安卓 中有的模式,它的存儲順序是先存 Y 分量,在 VU 交替存儲。