Motion Adaptive vs. Motion Compensated

在做 3DNR 時,很多 paper 會一直提到 motion adaptive 或是 motion compensated,起初認為這兩個講的是同一件事情,因為都是先做 motion detection 後,再決定 compensation 的程度。但在最近研究 deinterlacing 時,發現其實兩者是不一樣的。

  • motion adaptive:是指 detect 出 motion region 後,結合 spatial filter 與 temporal filter 去做不同程度的補償。
  • motion compensated:是有真正的估測出 motion vector 後,再利用前後影像的資料作為修正依據( temporal filter )。

以下為 wiki 上的說明:

動態適應性去交錯(motion adaptive deinterlacing)

動態適應性去交錯方法是偵測影像中何處是動態的,以及何處是靜態的;在畫面中靜態的部份使用場間去交錯以得到垂直方向完整的解析度,而在動態的部份使用單一場去交錯以避免鋸齒以及鬼影的現象。使用這個方法偵測動態的演算法是相當重要的,不好的演算法也會導致一些偵測錯誤使得畫面中出現一些惱人的線條。使用動態適應性去交錯方法需要比較快速的硬體去計算動態偵測演算法,另外也需要一或多個場的緩衝記憶體,演算法使用越多的場來偵測動態將會越準確,但是相對的需要更好更昂貴的硬體。

動態補償去交錯(motion compensated deinterlacing)

動態補償去交錯方法根據鄰近的場使用動態估計(motion estimation)去預測鄰近的場之間畫面中物體的移動,藉由動態估計可以得到的畫面中每一個宏塊(macroblock)的動態向量(motion vector),然後使用前一個場以及動態向量可以重建出一個新的場,在將此兩個場合併完成去交錯。使用這個去交錯方法將會得到非常好的影像品質,因為這個去交錯方法作了非常複雜且精準的預測;但是動態估計需要非常大量的計算,且也需要非常大的緩衝記憶體去暫存每個方塊估計的結果,這使得使用動態補償去交錯方法的去交錯裝置非常的昂貴且速度緩慢,使得它目前無法應用在消費性產品以及有即時需求的顯示設備上。

 


 

reference : https://zh.wikipedia.org/wiki/%E5%8E%BB%E4%BA%A4%E9%8C%AF

Adaptive Spatial and Motion-compensated Temporal Noise Reduction

Adaptive Motion-compensated Temporal Noise Reduction裡,為了保護Motion Region的細節,Motion Region不會受到Temporal Noise Reduction影響,所以移動物體上的雜訊還是沒被消除,雖然可以確保motion region的細節不被改變,但在後端做壓縮的時候會增加壓縮頻寬,如果影像畫面中有很大的區域都是移動區塊的話,會對後端壓縮造成很大負擔,bit rate會急速上升。既然我們可以得到Motion Region了,我們就可以針對這些區域做2DNR(Spatial Filter),減少移動區塊裡的noise,而其他靜態場景依然用3DNR(Temporal Filter)做處理。
2D+3DNR[2D+3D Noise Reduction Block Diagram]
 

Spatial Filter : Adaptive Local Mean Filter

Adaptive local mean不像一般的Mean Filter每個相鄰的pixel weight都是一樣的,可以利用相鄰同channel的pixel和center pixel的intensity的絕對值差來決定weight的大小,與center pixel差異越小,則weight越大;反之,差異越大,weight越小。左下圖的Transfer Curve是intensity的絕對值差與weight值的對應關係,可以自訂IN0、IN1、OUT0和OUT1來決定curve的型態。
 
curve              \frac { 1 }{ \sum { { w }_{ i } } } \sum _{ i=0 }^{9}{ { w }_{ i }{ p }_{ i } }    
 
下圖為5x5的Bayer Pattern的mask,以紅色channel為例,中間為center pixel,周圍八個紅色極為相鄰的pixels。
未命名                                                                                                              [5x5 Mask in Bayer Pattern]

結果比較:3DNR可以看到喝水鳥頭部移動區域的noise被2DNR給抹平了。Adaptive local mean可以依據Noise Level來決定強度,避免過強的Spatial Filter使motion region細節模糊。

 

 

 


reference :

temporal noise reduction of bayer matrixed video data(2002)

patent::Spatio-temporal video noise reduction system(Stmicroelectronics ,2006)

Motion-contour Compensated in 3D Noise Reduction

在上一篇Adaptive Motion-compensated Temporal Noise Reduction有提到,Motion Detector採用Block-Based,得以確保得到的Motion region不會受到random noise的影響而找錯區域。但在motion的邊緣上的Block會涵蓋到不是motion的地方(靜態區域),因此邊緣就容易3DNR產生殘影。

3DNR在Different Image裡可以看到Motion contour的Different值都不大,所以在與Base Frame做Blending時容易會有殘影出現。

未命名以圖為例,天花板上的紅色輪廓就是motion-contour沒有被detect到,所產生的殘影。


Motion-contour Detection contour將Stable Level Image做Edge Detection(ex. Sobel Operator),偵測出移動物體的輪廓。疊加回去Stable Level影像裡做為3DNR Algorithm裡的Weight大小的依據,即可減少移動區域的殘影。

Sobel Operator : 

\begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix}\quad \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix}


結果比較。喝水鳥頭部隨著時間移動,motion-contour無法被偵測到而留下一圈一圈的頭型輪廓,但經過motion-contour compensation後,紅色輪廓就消失了。

contour[Result Compare]

 

 

 


reference : Motion Compensated Noise Reduction. Brian Guenter

Adaptive Motion-compensated Temporal Noise Reduction

Motion-compensation就是detect出motion region出來,不做3DNR以避免出現殘影。為了確保影像裡的motion region不會被3DNR給抹掉,所以在式子裡的w會依據{ Image }_{ i }{ Base }_{ i-1 }的pixel差值來決定。差值越大,Base的blending weight值就要越小。為了確保計算motion region時不會被random noise給干擾,在計算差值時,基本上不會用點對點相減,而是用Block-Based的Motion Detector來減少random nosie造成的干擾。

{ Base }_{ i }=({ w }_{ i })*{ Base }_{ i-1 }+(1-{ w }_{ i })*{ Image }_{ i }

{ Diff }_{ i }(x,y)={ abs(CurrentFrame }_{ i }(x,y)-{ BaseFrame }_{ i-1 }(x,y))

 

3DNR[Calculate the Different in Bayer Pattern.]

之後再把Different轉換成Stable Level做為3DNR Algorithm裡的Weight(或上面式子裡w)大小的依據,如此一來,可以避免motion region不會被3DNR給抹除。Stable Level影像裡越白的地方就是motion region。

3DNR                                           [Transfer Different to Stable Level]

結果如下所示(下圖是經過demosaic之後的影像,這裡的3DNR是做在Bayer Pattern裡),喝水鳥的頭因為隨著時間在移動,被detect為motion region不會被3DNR給抹除,而其他靜態的場景依然能保有3DNR過後較好的影像品質。3DNR[Result Compare]

 

 


reference : 

Adaptive motion compensated filtering of noisy image sequences(1993)

Motion-compensated temporal filtering and motion vector coding using biorthogonal filters(2005)

Temporal Noise Reduction(3DNR)

3DNR優勢就是在於他是時間軸上的雜訊抑制,可以累積之前所有視頻裡的影像做雜訊抑制的參考來源且不會使讓影像細節模糊,如果是Spatial Domain(2DNR)的話,就只能參考單張影像的內容來做雜訊抑制,那影像的細節就容易被抹除掉。3DNR最能有效的去除 Random noise 和 Image flicker,減少視頻裡像素的不自然跳動,但對於影像裡Bad Pixel或Fixed Pattern Noise這類的雜訊就無法有效消除。

未命名                                                           [Image Sequences]

general equation:

{ Base }_{ i }=({ w }_{ i })*{ Base }_{ i-1 }+(1-{ w }_{ i })*{ Image }_{ i }

i為影像序列,Base為累積的frame buffer,是3DNR影像參考的依據,Image為目前的影像,藉由w的改變,來調整3DNR程度。


未命名

這裡是一個簡單例子,上圖為連續高雜訊影像(60 frames)裡其中一張影像,我將這連續影像做3DNR,上面式子裡的w設為0.9,表示每張新進來的影像都對Base貢獻10%的成分,在下圖可看到3DNR的效果有多強烈,內部細節的小字都能清楚辨別出來。

未命名[Raw Image][3DNR Result]

基本上,這樣的設計可以使影像有效的去除random noise,但由於test images是靜態的,如果今天有動態物體出現在畫面中的話,會有很嚴重的殘影出現。下面的影片可以看到,基本上在前幾個frame,noise就已經完全收斂了,是很強大的雜訊抑制方法,所以若能區分出移動物體的話,3DNR的效果會比2DNR來的好很多。

 


reference :

temporal noise reduction of bayer matrixed video data(2002)

Adaptive motion compensated filtering of noisy image sequences(1993)

Noise Reduction and Bayer Pattern Introduction

Noise

雜訊(Noise)是指所有數位訊號(音訊、影像及視訊等)訊號經過傳送或產生的過程中產生的任何不自然結果。

以數位相機再曝光過程中產生的Noise可分為Fixed Pattern Noise、Random Noise和Banding Noise。Random Noise是最難處理的,沒有固定的形態,會隨著影像做波動變化,容易受到ISO值設定影響。未命名                                             [Digital Camera Noise]

若是要分析Noise本身組合成分的話,可分為Chroma Noise和Luminance Noise。在一般雜訊抑制軟體裡,會轉換色彩空間(color space)從RGB到YUV上,分別對Chroma Noise和Luminance Noise做訊號處理。

未命名2                                                                                     [Noise Elements]

下圖為noise在不同亮度下的影響,在不同亮度下我們感知到的noise強度都不一樣,可以看到在亮部的區域幾乎感知不到nosie的存在,是由於訊號(signal)較大的情況下就不容易受到雜訊波動所影響;但在暗部的地方由於訊號(signal)強度相較於亮部較弱的關係,感測到的noise比較強烈,所以在做雜訊抑制上會通常會專注於在暗步的處理。

未命名3                      [Noise in Different Bright]

 

目前有兩種類型的雜訊抑制(Noise Reduction)技術廣泛用於影像視訊上,分別是2D雜訊抑制和3D雜訊抑制。2DNR是在spatial domain上的雜訊抑制,分析影像視訊的個別訊框,用演算法識別,分析出細節與雜訊,然後修正掉雜訊,得到較好的影像品質,但細節與雜訊本來就是無法百分之百被切割的,所以容易有判斷錯誤的情況發生,使得影像變得模糊;3DNR則是在time domain上的雜訊抑制,分析連續影像視訊的差異來抑制random noise,使影像較為平穩且提高影像品質。一般來說,3DNR的雜訊抑制效果比2DNR來的好,但致命缺點是畫面中如果有移動物體,會使得移動物體變得模糊有殘影(Ghost)的現象發生。


Bayer Pattern

有些抑制雜訊演算法會在Bayer Pattern上面實現,是為了讓noise在前端就已經被修正掉,而不會影響ISP後面其他function的 performance。Bayer Pattern是一種顏色濾光陣列(Color Filter Array),由於CCD或CMOS感測器裡的感光二極體不能分辨不同波長的光源,因此我們需要一個色彩濾光陣列,篩選出紅色、綠色以及藍色,然而最常見的CFA就是Bayer Pattern或叫GRGB Filter,如下圖所示,紅色25%,綠色50%,藍色25%,人類眼睛對綠色的敏感度是遠高於其他顏色的,所以綠色所佔的面積較大。如果今天要還原回真實顏色的話,就要利用相鄰的pixel去做解馬賽克(Demosaic)演算法,在每個pixel位置內插出另外兩個channel的顏色,例如A pixel感測顏色是紅色,就要內插出藍色與綠色。

Bayer Pattern


reference : http://www.cambridgeincolour.com/tutorials/

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這就是個永遠也解不開的難題。