天天看點

【圖像去噪】基于matlab回歸的非局部均值算法圖像去噪【含Matlab源碼 1898期】

一、非局部均值算法圖像去噪簡介

圖像在采集、傳輸和加工等過程中, 由于受外界環境影響, 存在一定的噪聲, 導緻圖像品質嚴重下降。圖像去噪作為圖像恢複的重要手段之一, 被廣泛應用到圖像處理領域。圖像中的噪聲問題, 可近似看成呈高斯分布的白噪聲, 進而去除高斯白噪聲成為了一個重要方向。為了進一步抑制噪聲, 為後續處理提供更為真實的資訊。諸多學者提出很多的模型及方法。本文利用非局部均值算法去除圖像中的噪聲問題, 通過圖像中的備援資訊進行權重平均, 将使像素點去噪後的灰階值用與 點的高斯鄰域相似的灰階值的平均代替, 增強了圖像去噪的效果。

1 非局部圖像去噪算法

1.1 非局部平均算法

假設噪聲信号為與圖像無關的高斯白噪聲, 噪聲模型為:

V(i)=X(i)+N(i)   (1)

其中, X (i) 表示未受噪聲污染的原始圖像;N (i) 表示均值為0, 方差為σ^2的白噪聲;N (i) 表示受污染的噪聲圖像。對于一幅給定的離散含噪圖像v={v (α) |α∈I}, 非局部平均的方法利用整幅圖像中所有像素灰階值權重平均來得到該點的灰階估計值, 即

NL​​v​​=∑β=1ω(α,β)v(β)   (2)

其中, 權值ω (α, β) 表示依賴于α與β之間的相似性, 并滿足條件:0≤ω (α, β) ≤1, ∑ω (α, β) =1。像素α與β的相似性由與之相對應的灰階值向量v (Nα) 與v (Nβ) 之間的相似性決定, Nk表示以像素k為中心的固定大小的方形領域, 如 v (Nk) 由領域Nk 内的灰階值組成的向量。圖1中的3個像素點α、β1與β2, 分别用小白點表示。以這3個像素為中心的方形領域分别Nα、Nβ1) 與Nβ2) , 白色方框表示, 由這3個方形領域内的灰階值組成的向量分别記為v (Nα ) , v (Nβ1) 和v (Nβ2) 。設α為目前待處理的像素, 則像素α與像素β1與β2的相似性由v (Nα ) 和v (Nβ1) 以及v (Nα ) 和v (Nβ2) 的相似性決定。顯然像素α與像素β1具有相似的領域, 與像素β2的領域差異較大, 是以對于像素α的去噪, 像素β1的貢獻要比像素β2的大些。

各領域之間的灰階值向量的相似性通過高斯權重的歐式距離來衡量, 即‖v (Nα ) -v (Nβ2) ‖22, α。其中, α>0表示高斯核函數的标準差。将歐式距離表示的權重ω (α, β) 定義為:

【圖像去噪】基于matlab回歸的非局部均值算法圖像去噪【含Matlab源碼 1898期】

其中, Z (α) 表示歸一化常數。

非局部平均的方法建立在對圖像反映領域相似性的權值進行計算的基礎之上, 圖像中每一個像素點的領域要與圖像中是以像素點的領域進行一一比較, 計算量非常大。對于一副大小為NxN的圖像, 領域大小為dxd, 則算法的複雜度為O (N4 d2) .

1.2 參數的選擇

在非均值算法中, 采用與噪聲标準差線性正比關系确定濾波參數h, 即h=10σ。研究分析得到h與噪聲方差σ2有近似線性正比關系, 且受到噪聲圖像方差的影響。是以, 在去噪過程中, 存在3個參數可以控制去噪效果, 分别是濾波參數h、領域視窗半徑Rsim以及非局部大小的搜尋視窗半徑Rwin。權值函數ω (i, j) 中的參數h控制了指函數的衰減來控制權值的大小進而控制平滑噪聲的程度。若參數h較小, 則幂函數的衰減效果比較顯著, 細節保留程度較高。一般情況下, 圖像中包含方差σ^2的白噪聲, 參數h的取值為10σ~15σ。領域視窗半徑Rsim用來比較兩個像素的相似程度的空間鄰域的半徑。本文選取的視窗大小半徑為2, 領域視窗大小為5×5。由于單個計算所有像素的權值的計算量比較大, 為了增加計算速度則應該确定一個鄰域來計算所有鄰域内像素的權重平均。在本文中的Rwin的取值為5, 即搜尋視窗大小為11×11。

1.3 評價名額

采用的峰值信噪PSNR為評價名額, 公式為:

【圖像去噪】基于matlab回歸的非局部均值算法圖像去噪【含Matlab源碼 1898期】

其中, O (i, j) 表示去噪後的圖像, K (i, j) 表示無噪聲的圖像。利用PSNR來綜合驗證算法的去噪效果, 若PSNR越大, 則算法的去噪效果越好。

二、部分源代碼

clc; clear all; close all force;

% clean image
img    = double(imread('ckb.jpg'));
[m, n] = size(img);

% add noise
sigma     =  40;
imgNoisy  =  img  +  sigma * randn(m,n);

% NLEM parameters
p  = 0.1;
S  = 10;
P  = 3;
h  = 10 * sigma;

% call NELM (or NLEM_kNN)
imgDenoised = NLPR(imgNoisy, h, P, S, p);


% show results
peak  = max(max(img));
PSNR0 = 10 * log10(m * n * peak^2 / sum(sum((imgNoisy - img).^2)) );
PSNR1 = 10 * log10(m * n * peak^2 / sum(sum((imgDenoised - img).^2)) );

figure('Units','normalized','Position',[0 0.5 1 0.5]);
colormap gray,
subplot(1,3,1), imagesc(img),
title('Original', 'FontSize', 10), axis('image', 'off');
subplot(1,3,2), imagesc(imgNoisy),
title([ 'Noisy, ', num2str(PSNR0, '%.2f'), 'dB'] , 'FontSize', 10),
axis('image', 'off');
subplot(1,3,3), imagesc(imgDenoised),
title([ 'NLEM filtered, ', num2str(PSNR1, '%.2f'), 'dB'] , 'FontSize', 10),
axis('image', 'off');      

三、運作結果

【圖像去噪】基于matlab回歸的非局部均值算法圖像去噪【含Matlab源碼 1898期】

四、matlab版本及參考文獻

繼續閱讀