Kalman Filter

Kalman Filter是訊號處理裡很常見的濾波器,特別針對是會有雜訊干擾或偏移誤差的感測器做濾波。
主要有兩個步驟:

未命名

以下是簡單的測試程式: 

double P = 10; // estimate covariance
double R = 1000; // covariance of observation noise
double Q = 1; // covariance of process noise
double kg; // Kalman gain
double estimate = Input[0], measure;
Output[0] = Input[0];
for (int i = 1 ; i < 80 ; i ++)
{
// predict
measure = Input[i];
P = P + Q;
// update
kg = P / (P + R);
estimate = estimate + kg * (measure - estimate);
P = (1 - kg) * P;
Output[i] = estimate;
}

當我改變coveriance noise(Q)值時,可以決定我要濾波的程度,Q越大濾波程度越強

map2[Q=2]

map[Q=15]

map2[Q=1000]

Kalman Filter是個簡單好用的濾波器,但想要依照所需,動態調整濾波程度,這又是另一回事了,因為要分辨是signal還是noise這就是個永遠也解不開的難題。

 

Optical Illusion - Mach bands

test2

上圖是兩張不同灰階值(左邊灰階值是100和右邊灰階值180)做 alpha blending,結果顯示出在左邊混合交接處有明顯的黑色線條,而右邊混合交接處有白色線條。當初以為是自己程式寫錯...但丟到 Photoshop 裡看 pixel 的變化,結果並沒有 pulse 出現阿!!!難道是我的眼睛花了?
經過 google 大神的查證,這是一種叫馬赫帶效應( Mach Band Effect ),是指視覺的主觀感受在亮度有明顯變化的地方會出現不真實的明亮或黑暗的條紋,馬赫帶效應是人類視覺錯覺( Vision Illusion )造成的結果。馬赫帶效應是由一名奧地利物理學家 Ernst Mach 發現的一種明暗對比的現象,指的是人類眼睛在明暗對比交接處,亮處更亮,暗處更案的現象。

Mach Band

他是一種人類眼睛主觀的邊緣對比效應,增加亮度變化的對比強度一種視覺效果。右上方的曲線為A~D水平切線的像素值變化,右下方的曲線為人類感官所感測的數值變化。

 

color chart

此圖為一般常見的灰階測試圖,主要是用來測試影像的對比度,每個方塊裡的灰階值都相同,但在方塊與方塊的交接處會產生亮部更亮暗部更暗的現象,這種現象就叫 Mach Band Effect。

 

test3
為了修正人類眼睛所產生的視覺錯覺,當我們把 alpha blending 的灰階變化曲線平滑後,黑白色線條就不見了,嘿嘿!看到了吧~
有時候我們眼睛認為是正確的,不一定是對的;眼睛認為是不對的,也不一定真的是錯的喔。

 

 

  

Radius Distortion Correction

Lens Distortion(鏡頭扭曲),顧名思義就是會影響畫面中物體的真實形狀,該方的不方,該圓的不圓....等,影響最深的就是會使照片中的建築物邊線不垂直,畫面中的水平線不水平。而Lens distortion基本有兩種型式,桶狀變形(barrel distortion)和枕狀變形(pincushion distortion)。

distortion          

             None                               Barrel                         Pincushion

桶狀變形:通常發生在廣角鏡頭上或者是魚眼鏡頭(fisheye camera),影像邊緣會有膨脹現象發生。例如:在拍團體照時,由於需要拍攝視角較廣的影像,通常會拉到廣角端拍攝,所以這時候就盡量往中間靠吧,不然廣角邊緣變形可能會讓你看起來又肥又胖。枕狀變形:則是常發生在望遠鏡頭上,效果是影像會向中心內凹的現象發生,但我用Nikon 70-300mm時,在300mm端枕狀變形並不明顯,可能要更長焦段的鏡頭比較容易看出。

為了解決光學鏡頭所帶來的缺陷,解決方法不外乎就是提升光學鏡頭材料或變更設計,但這類修正方法即費工又花錢;最簡易的方法就是,用後端軟體修正,而最簡單且最常用的修正distortion是下列公式,三階多項式扭曲修正模型

{ r }_{ d }={ r }_{ u }+{ k }_{ r }{ r }_{ u }^{ 3 }

{r}_{u}:undistortion radius,{r}_{d}:distortion radius。當{k}_{r} > 0for barrel distortion,{k}_{r} < 0for pincushion distortion。

這裡的r不一定要是距離影像中心的半徑值(radius),也可以分別針對x軸或y軸做修正。

{ x }_{ d }={ x }_{ u }\left( 1+{ k }_{ x }{ r }_{ u }^{ 2 } \right)

{ y }_{ d }={ y }_{ u }\left( 1+{ k }_{ y }{ r }_{ u }^{ 2 } \right)

►EXAMPLE

01_in   02_in

圖分別為 barrel distortion影像與 pincushion distortion影像,

藉由三階扭曲修正模型,帶入修正,得到的結果如下圖。

barrel parameters: { k }_{ x }=1.1e-06{ k }_{ y }=1e-07

pincushion parameters: { k }_{ x }=-1.6e-06{ k }_{ y }=-1e-07

01_in

                 Barrel Distortion Correction

02_out

               Pincushion Distortion Correction

Real Case : 

02     DistortionCorrection_1

基本上,三階方程式已經能處理大多數相機所產生的扭曲變形。但如果是不規則變型,像是wave或moustache(八字鬍)的扭曲,如下圖所示。(靠近影像中心是桶狀變形,靠近影像邊緣是枕狀變形),則需要用到五階多項式來修正。

{ r }_{ d }={ r }_{ u }+{ k }_{ 1 }{ r }_{ u }^{ 3 }+{ k }_{ 2 }{ r }_{ u }^{ 5 } (for wave/moustache distortion)

moustache distortion

至於魚眼修正....又是另一個topic了!需要Calibration Pattern輔助做修正。

 

 


information from: 

A Real-time FPGA Implementation of a Barrel Distortion Correction Algorithm with Bilinear Interpolation.(2003)

http://en.wikipedia.org/wiki/Distortion_%28optics%29

image formhttp://camera-wiki.org/wiki/Lens

Multi-band Blending

Multi-Band Blending把影像分為高頻影像(Laplacian Image)與低頻影像(Gaussian Image)。
執行步驟如下所示:
1. 將兩張Alignment相鄰的影像取出疊合的部分:subA、subB。
2. 對subA與subB做Gaussian blur,產生GA,GB。
3. 利用downsampling方式建立GA與GB的Gaussian Pyramid。(PS.Gaussian Pyramid 的G0是原圖未blur的影像)
4. 對GA與GB兩個pyramid經由EXPANDSUBTRACT得到Laplacian Pyramid,LA與LB。

{ L }_{ n }={ G }_{ n }-EXPAND\left( { G }_{ n-1 } \right)

Laplacian Pyramid [Laplacian Pyramid]
multiband pyramid2 
              [Mulitband Pyramid] 
5. 建構Laplacian Pyramid LS,讓LS的左半邊保留LA的Laplacian,讓LS右半邊保留LB的Laplacian。 
6. Pyramid Reconstruction。有了LS與GS後,再依照Pyramid的關係倒回疊加成原圖大小影像

{ G }_{ n }={ L }_{ n }+EXPAND\left( { G }_{ n-1 }+{ L }_{ n-1 } \right)

 Pyramid Reconstruction 7.
Reconstruction Process,從最底層疊加上來,每一層Expand上去後, 疊加Laplacian Image,再Expand上去一層,直到第0層為止 Pyramid Reconstruction [Reconstruction Illustration] 8. 下圖為用9層Multi-band Blending的結果 orapple [Pyramind Reconstruction Result]


結果比較 :
這裡以水果圖來做實驗,分別是apple,orange和guave。
一般paper只有apple和orange,guave是我自己上網找的,
因為影像差異比較大,所以比較好區分兩種演算法的效果。
Source:
01 022 02

1. apple + guava
BlendingResult RESULT_Gaussian15x15, pyramid2layers Blending region_AllImage
[LEFT:Alpha Blending; RIGHT:Multi-Band Blending]

2. apple + orange
Linear BlendingResult RESULT_Gaussian5x5, pyramid2layers Blending region_AllImage 
[LEFT:Alpha Blending; RIGHT:Multi-Band Blending]

由結果圖可見,Multi-Band Blending能保留該圖的細節,
而且影像中的疊合部分所產生的模糊變少了。若要更細步探討Multi-Band效果的話,
疊合區域大小、Pyramid layer數和Gaussian size都會影響到整體影像的呈現。  

 

reference :

http://cs.haifa.ac.il/hagit/courses/CP/Lectures/CP07_StitchingX4.pdf

Computer Vision:Algorithms and Applications (Richard Szeliski)

images from : http://pages.cs.wisc.edu/~csverma/CS766_09/ImageMosaic/imagemosaic.html