三、以 ”Color Filter Array Recovery Using a Threshold-based Variable number of gradient.”這份paper作為範本,完成Color interpolation。
Flow chart:
1. Using Color Filter Array:
Bayer pattern
因為我們要做的是補償的部份,但是我們並沒有經過CCD或者CMOS分色濾色片所跑出來的圖,所以我們必須自己先模擬經過分色濾色片後跑出來的圖:
我們的程式很簡單,當橫座標和直座標都是偶數或者橫坐標和直座標都是奇數時就留下這個像素的綠色値;當橫座標是偶數,直座標是奇數時,留下這個像素的藍色値;當橫座標是奇數,直座標是偶數時,留下這個像素的紅色値。如此一來整張圖就會只留下RGB三色的圖,結果如下:
左邊是原圖,右邊是仿冒經過分色濾色片的圖
將其放大可清楚看出一點一點分成RGB三色的pixel
2. Compute the gradient of the surrounding eight pixel:
接下來就是我們的重點,將這個圖還原。
首先,我們要算出每個點周圍8方向的gradient value,綠色點為一種算法,紅色和藍色的點為另外一種算法:
Gradient of G7:(參考左圖)
Gradient of R.B:(參考右圖)
3. Decide the Threshold:
再算出Threshold
G center: T=k1*Min+[k2*(Max-Min)]
R/B center: T=k1*Min+[k2*(Max+Min)]
(經驗值:k1=1.5,k2=0.5)
舉例來說:
以G為中心,其上方pixel為藍色,若周圍Gradien如下表
gra |
N |
E |
S |
W |
NE |
SE |
NW |
SW |
value |
279.5 |
340 |
242 |
404 |
174 |
369 |
485 |
94 |
則Threshold=k1Min+k2(Man-Min) =1.5*94+0.5(485-94)=336.5
以此Threshold來看,參考的方向為小於336.5的點,也就是N.S.NE.SW四個方像。
3.
4. Get The Table of average color component calculations:
|
G |
B |
R |
N |
(g2+g7)/2 |
(b1+b2+b3+b4)/4 |
r2 |
E |
(g7+g8)/2 |
b4 |
(r2+r3+r5+r6)/4 |
S |
(g12+g7)/2 |
(b3+b4+b5+b6)/2 |
r5 |
W |
(g6+g7)/2 |
b3 |
(r1+r2+r4+r5)/4 |
NE |
g5 |
(b2+b4)/2 |
(r2+r3)/2 |
SE |
g10 |
(b4+b6)/2 |
(r5+r6)/2 |
SW |
g9 |
(b3+b5)/2 |
(r4+r5)/2 |
NW |
g4 |
(b1+b3)/2 |
(r1+r2)/2 |
依據這個表格以及符合的方向求出Gsum、Bsum、Gsum
5. Find the missing color:
補上圖g7部分的藍色和紅色如下
b7= g7 + (Bsum –Gsum )/(number of corresponding directions)
r7= g7 + (Rsum - Gsum)/(number of corresponding directions)
g7=原本的g7顏色
以如此的流程圖,將每個pixel補滿,就可以把整張圖完整的補出缺乏的顏色