非局部平均(Non-local means)是一種影像降噪的演算法,相較於局部(local)的演算法(如高斯模糊、非等向性擴散)只使用各個目標像素附近的點來將影像平滑化來去除雜訊,非局部平均演算法則對各個目標像素周圍定義一個區塊,並且對整個影像的所有像素依照該像素周圍區塊的區塊與目標像素區塊的相似度賦予權重、進行平均,如此可以使經過處理的影像更為清晰,並且損失較少的細節。
相較於其他的影像降噪演算法,非局部平均在的方法雜訊(method noise,定義為影像及其降噪後的結果的差值)與白雜訊較為相似,而通常認為方法雜訊應與白雜訊盡可能相似,因此這是一個正向的結果。非局部平均也被延伸至其他應用如去交錯及影像內插等。
雜訊模型
如同其他影像降噪演算法,最簡單並且普遍的雜訊模型為在原始的圖片上加上白雜訊:
v(i) = u(i) + n(i)
其中u(i)為原始的圖片,n(i)為雜訊,在白雜訊的情況下為平均0標準差\sigma的i.i.d. 高斯函數,v(i)為所觀測到包含雜訊的圖片。
演算法
非局部平均的定義為:
NL_u(x)=\frac{1}{C(x)}\int_{\Omega}^{} f(d(B(x), B(y)))\ u(y)\ dy
其中u為要處理的圖片,\Omega為整張圖片的區域,B(x)為以x為中心的一個區塊
d(x,y)為x及y的歐幾里得距離:d(x,y) = |x-y|_2^2
f為一遞減函數,常見的如:f(x)=exp(-x^2/h^2)
C(x)為標準化的因子:C(x)=\int_\Omega f(d(B(x),B(y)))\ dy
此式可以解釋為圖上一點x經過降噪後的值為整張圖片上所有點的加權平均,其中每個點的權重為該點的附近區塊與x附近區塊的相似度(將兩個區塊各自的點以相同的排列視為一向量,計算歐幾里得距離),再經過一指數衰減的的函數(權重將落在(0,1]區間)。
相較於局部的演算法指考慮了每個點附近的點,非局部平均考慮了圖上所有的點,故稱為非局部。由於一張圖片中最相似的點不一定是距離近的點,反之亦然,故搜尋整張圖片上相似的點,利用週期性重複出現的部分如材質紋理或是伸長的邊緣等進行降噪可以得到更好的結果,但由於對每個點都要搜尋整張圖片上其他的點來比較相似度,故運算複雜度往往會比局部的演算法高。
實作
上述的式子所定義的演算法為連續的,無法在實際的數位影像中使用,在實際應用中離散化的版本為:
NL_u[i]=\frac{1}{C(i)}\sum_{j\in\Omega}w(i,j)u(j)
C(i)=\sum_{j\in\Omega}w(i,j)
其中w(i,j)為以i及j為中心的點的區塊的相似度,作為計算點i降噪後的值時點j的權重,常見的作法為計算以i及j為中心的正方形區塊的歐幾里得距離的平方,再經過一個指數遞減的函數,與前一節連續版本的例子相似,以彩色圖片為例,完整的式子如下:
w(i,j)=e^{-\frac{max(d^2(B(i,f),B(j,f))-2\sigma^2, 0)}{h^2}}
d^2(B(i,f),B(j,f))=\frac{1}{3(2f+1)^2}\sum_{m=1}^3\sum_{n\in B(0,f)}(u_m(i+n)-u_m(j+n))^2
B(i,f)為以點i為中心寬度為2f+1的正方形區域,即[i_x-f,i_x+f]\times[i_y-f,i_y+f]區間。
u的下標代表圖片每個像素值的三個分量(如RGB),黑白影像則無此項。
\sigma為雜訊的標準差,h為與\sigma相關的濾波器參數。
此權重函數可解釋為將區塊相似度大於某個程度(歐幾里得距離的平方小於等於2\sigma^2)的所有點都給予權重1,區塊相似度較小的點權重則由於指數遞減函數迅速的衰減。
區塊級實作
除了上述以像素為單位的實作外(pixelwise),還有一種以區塊為單位的實作(patchwise implementation):
對於一個以i為中心的(2f+1)\times(2f+1)區塊B(i,f),處理後的值
\hat{B}_m(i,f)=\frac{1}{C}\sum_{Q(j,f)\in B(i,r)} u_m(Q)w(B,Q)
其中w的算法與前一節的實作相同,B(i,r)以r的大小限制搜索區域以降低計算複雜度。
最後將這些值平均可得降噪後的圖片
NL_u[i]=\frac{1}{(2f+1)^2}\sum_{j\in B(i,f)}\hat{B}(j)
與前一節像素級的實作相比,由於最後一步集成的步驟降低了雜訊,PSNR較高,並且也減少了在邊緣附近震盪的雜訊,不過在保留圖片細節的方面則沒有明顯的進步。
參考來源
评论 (0)