1. 程式人生 > >Bayer圖像處理

Bayer圖像處理

方式 不同 拍照 調整 yuv 上下 我們 像素 精度

  Bayer是相機內部的原始圖片, 一般後綴名為.raw. 很多軟件都可以查看, 比如PS。我們相機拍照下來存儲在存儲卡上的.jpeg或其它格式的圖片, 都是從.raw格式轉化過來的。.raw格式

內部的存儲方式有多種, 但不管如何, 都是前兩行的排列不同. 其格式可能如下:

        G R G R G R G R

        B G B G B G B G

        G R G R G R G R

        B G B G B G B G

橫為2的倍數, 豎為4的倍數, 它們構成了分辨率. 如, 上面則代表了 8 * 4 分辨率的Bayer圖.

  我們要知道的是, G = 2 * R 及 G = 2 * B, 即綠色值為紅色值或藍色值的兩倍, 因為人眼對綠色更敏感, 所以綠色的分量更重.

  下面說一下從bayer轉換成rgb圖的算法, RGB圖, 即為三色圖, 一個像素點就由RGB三種顏色構成的混合色, 而bayer圖一個像素就只有一個顏色, 或R或G或B. 因為bayer一個像素點只有

一種顏色, 需要借助這個像素點周圍的顏色對它進行插值(填充)另外的兩種顏色, 它本身的顏色就不用插了. 一般的算法是:

  對於插入R和B,

Rx = ( R1 + R2 ) / 2; 或-------------取上邊和下邊的平均值, 或是左邊和右邊的平均值

Rx = ( R1 + R2 + R3 + R4 ) / 4;----取四個邊的平均值

  B同理. 如:

        G B G

        R G R

        G B G

對於中間的G, 它缺少 R和B, 用上下和左右的平均值進行求值.

對於

        B G B

        G R G

        B G B

  這個圖呢, 中間點R, 缺少G和B, G暫時沒討論, 那麽 B, 就是從R的四個B角進行求平均值.

==============================================

  如果插入G, 稍有些復雜.

  不過一般的算法與R和B一樣, 復雜的算法, 其復雜程度也提升一倍, 不過精度更高, 如果對於視頻監測系統來說, 精度相對來說不必要求太高, 用R或B的解法即可. 下面說復雜的:

對於圖:

          R1

         G1

        R4 G4 R G2 R2

         G3

         R3

對於中間點R, 它需要插入G和B, B不討論, 主要討論G, 它周圍有四個點G1, G2, G3, G4.

( G1 + G3 ) / 2--------------如果 |R1-R3| < |R2-R4|

    G(R) = ( G2 + G4 ) / 2-------------如果 |R1-R3| > |R2-R4|

( G1 + G2 + G3 + G4 ) / 4--如果 |R1-R3| = |R2-R4|

如果周圍出現的像素點顏色為B, 就應該比較|B1-B3|與|B2-B4|的值.

====================================================

    還有關於將RGB格式轉換為YUV格式的算法, 這裏不想討論了.

這裏要註意的是, bayer每個像素的值是8位的. 但是有的相機的bayer格式卻有10位, 12位,14位以及16位的, 那麽如何將這些高於8位的數據轉換為8位數據呢?. 拿12位數據來說, 有的人是取高8位或是低8位, 那麽

這樣就會出現一個問題, 這張圖像會有一個斜度, 不是偏亮就是偏暗, 或是出現其它亂七八糟的問題, 顏色問題總是不能令人滿意. 這個時候就要去較正它, 無疑是浪費了時間.另一種算法是使用log映射, 據老外說, 這種轉

換法具有較高的精度. 拿12位來說, 一般轉換算法:

            f(in) = 2 ^ ( log(in) * 8 / 12 )

轉換圖為:

            |8 .

            | .

            | .

            |_______________________12

  因為log256 = 8, log4096 = 12, 對了log是以2為底哦.

做得更好一點的算法, 可能根據提供的曝光等其它因素不同, 而將算法進行調整, 這樣當一些意外事件發生時, 產生的圖片也不會失真嚴重.

Bayer圖像處理