Bayer影象處理

pamxy發表於2013-06-04

轉自:http://www.cnblogs.com/lin1270/archive/2010/12/01/1893647.html

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為底哦.

做得更好一點的演算法, 可能根據提供的曝光等其它因素不同, 而將演算法進行調整, 這樣當一些意外

事件發生時, 產生的圖片也不會失真嚴重.

如有何疑問, 請致信: 414078791@qq.com

 

相關文章