天天看點

MATLAB圖像處理_Bayer圖像處理 & RGB Bayer Color分析 Bayer圖像處理

Bayer圖像處理

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

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

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

如有何疑問, 請緻信: [email protected]

連結:http://www.cnblogs.com/lin1270/archive/2010/12/01/1893647.html

RGB Bayer Color分析

Bayer色彩濾波陣列
MATLAB圖像處理_Bayer圖像處理 &amp; RGB Bayer Color分析 Bayer圖像處理

拜耳色彩濾波陣列(Bayer Color Filter Array,CFA)是非常有名的彩色圖檔的數字采集格式。色彩濾波器的模式如上圖所示,由一半的G,1/4的R,1/4的B組成。

拜耳色彩濾波器的模式、序列、濾波器有很多種,但最常見的模式是由Kodak提出的2*2模式。

MATLAB圖像處理_Bayer圖像處理 &amp; RGB Bayer Color分析 Bayer圖像處理

當Image Sensor往外逐行輸出資料時,像素的序列為GRGRGR.../BGBGBG...(順序RGB)。這樣陣列的Sensor設計,使得RGB傳感器減少到了全色傳感器的1/3,如下所示。

MATLAB圖像處理_Bayer圖像處理 &amp; RGB Bayer Color分析 Bayer圖像處理

圖像傳感器的結構如下所示,每一個感光像素之間都有金屬隔離層,光纖通過顯微鏡頭,在色彩濾波器過濾之後,投射到相應的漏洞式矽的感光元件上。

MATLAB圖像處理_Bayer圖像處理 &amp; RGB Bayer Color分析 Bayer圖像處理
白平衡調節(White Balance)

色彩傳感器并不能像人眼那樣直接感應圖像,是以為了保證最終圖像的真實性,必須經過一些白平衡處理以及色彩校正等算法來修正圖像。

原始像素的第一步處理操作就是白平衡調節。一個白色物體每通道的白平衡都應該是相同的,即R=G=B。通過白色物體的采集以及直方圖分析,擁有最進階别白平衡的通道被作為目标通道,而其他兩個通道通過增益達到比對,如下:R'=aG'=bB'。同時,随着光源的不同,白平衡也應該相應的調節。

Bayer插值補償算法(Bayer Interpolation)

1) 插值紅藍算法實作

每一個像素僅僅包括了光譜的一部分,必須通過插值來實作每個像素的RGB值。為了從Bayer格式得到每個像素的RGB格式,我們需要通過插值填補缺失的2個色彩。插值的方法有很多(包括領域、線性、3*3等),速度與品質權衡,最好的線性插值補償算法。其中算法如下:

R和B通過線性領域插值,但這有四種不同的分布,如下圖所示:

MATLAB圖像處理_Bayer圖像處理 &amp; RGB Bayer Color分析 Bayer圖像處理

             (a)                                  (b)

MATLAB圖像處理_Bayer圖像處理 &amp; RGB Bayer Color分析 Bayer圖像處理

           (c)                                     (d)

在(a)與(b)中,R和B分别取領域的平均值。

2) 插值綠算法實作

在(c)與(d)中,取領域的4個B或R的均值作為中間像素的B值。

MATLAB圖像處理_Bayer圖像處理 &amp; RGB Bayer Color分析 Bayer圖像處理

(e)   (f)

由于人眼對綠光反應最敏感,對紫光和紅光則反應較弱,是以為了達到更好的畫質,需要對G特殊照顧。在上述(c)與(d)中,擴充開來就是上圖的(e)與(f)中間像素G的取值,者也有一定的算法要求,不同的算法效果上會有差異。經過相關的研究,(e)中間像素G值的算法如下:

MATLAB圖像處理_Bayer圖像處理 &amp; RGB Bayer Color分析 Bayer圖像處理

(f)中間像素G值的算法如下:

MATLAB圖像處理_Bayer圖像處理 &amp; RGB Bayer Color分析 Bayer圖像處理

CMOS攝像頭這部分轉換是在内部用ADC或者ISP完成的,生産商為了降低成本必然會使得圖像失真。當然用外部處理器來實作轉換,如果處理器的速度足夠NB,能夠勝任像素的操作,用上面的算法來進行轉換,皆大歡喜。不過上述算法将直接成倍提高了算法的複雜度,速度上将會有所限制。是以為了速度的提成,可以直接通過來4領域G取均值來中間像素的G值,将會降低一倍的速率,而在性能上差之甚微,算法如下:

MATLAB圖像處理_Bayer圖像處理 &amp; RGB Bayer Color分析 Bayer圖像處理

如果能夠通過損失圖像的額品質,來達到更快的速度,還可以取G1、G2的均值來實作,但是這樣的做法會導緻邊沿以及跳變部分的失真。

連結:http://blog.chinaaet.com/detail/32398