牛 彪 李海洋
(西安工程大學理學院 西安 710048)
圖像是一種重要的信息源,隨著科學技術的發(fā)展,越來越多高質量的圖片被社會所需要,因此圖像去噪是廣大研究工作者最為關心的問題。圖像去噪的基本思想為通過抑制噪聲,提高圖像質量從而來滿足對圖片更高層次的要求,針對該問題,國內外研究學者展開了一系列的研究,而基于圖像稀疏表示理論的方法一直被廣泛關注,如Donoho等[1]提出了著名的小波閾值方法;2001年Romberg等[2]在小波域下利用隱馬爾可夫模型達到了去噪的目的;Portilla[3]則通過建立一種高斯混合模型來實現(xiàn)去噪;06年Arthur等[4]提出了一種新的MGA方法:無下采樣Contourlet變換(NSCT),并通過Bayesian估計方法實現(xiàn)圖像去噪。這些方法都取得了初步的成效。
2006年 Elad等[5]提出了 K-SVD(K-singular value decomposition,K-SVD)字典學習算法,它的目的主要是通過固定當前字典進行稀疏編碼求解稀疏系數(shù),進一步根據稀疏系數(shù)對字典的原子進行更新,采用交替迭代的思想,從而訓練得到一個新的過完備字典(over complete-dictionary)。該字典是通過學習訓練得到的,若直接應用于圖像去噪,由于字典相干性較高,會導致學習字典中噪音原子和無噪原子相似度高,去噪后的圖像有噪音殘留或者圖像較平滑,并且K-SVD字典學習算法計算復雜度較高[6]。而相干性約束是過完備字典學習算法中不可忽視的一個重要因素。一般而言,字典的相干性和其稀疏編碼性能有緊密的關系,在相同的冗余度條件下,低相干性可加快稀疏編碼的速度,改善信號的重構性能[7]。此外,低相干性還有助于避免字典原子對訓練樣本的過擬合,避免字典中出現(xiàn)過于相似的原子對。
為降低字典的自相干性,Mailhe[8]提出非相干K-SVD(Incoherent K-SVD,INK-SVD)字典學習算法,在字典更新步驟中,對原子進行操作,如果發(fā)現(xiàn)某一對原子的相干性大于指定的相關性門限,則對兩個原子進行旋轉達到降低其相干性的目的,但是該算法在字典學習過程中相似的原子進行旋轉比較耗時,且其計算復雜度較高。Barchiesi等提出了迭代投影和旋轉的低相干性字典學習算法[9]與INK-SVD算法的思想類似,它是對整個字典而不是原子進行降低相干性和旋轉操作,但是該算法訓練得到的字典,其稀疏表示性能有所下降。2012年 Christian D.Sigg 等[10]在《Learning Dictionaries with Bounded Self-Coherence》一文中提出 IDL(Incoherent Dictionary Learning)的字典學習算法,但是該算法不能保證信號的稀疏表示性能,且需要計算矩陣的梯度。
本文在K-SVD算法極小化目標函數(shù)下,添加一項刻畫字典相干性的懲罰項以降低字典相干性,稱該方法為低字典相干性K-SVD算法。在給最大化所得的稀疏度的前提下盡可能有效地控制訓練字典的自相關性。具體而言,本文在IDL字典學習算法基礎上對K-SVD算法進行改進,采用對字典原子逐一更新的優(yōu)化目標,從最大化所得稀疏編碼到 逼 近 一 個 等 角 緊 框 架[11](Equiangular Tight Frame,ETF)的過程,這是一個對于給定原子數(shù)量基于實現(xiàn)最小相干性的字典過程。限制字典的相干性其優(yōu)勢在于更好地編碼支持恢復和改進的泛化性能,其中字典自相干的界限直接在原子更新步驟中執(zhí)行,通過改變拉格朗日乘子γ,進而實現(xiàn)代碼稀疏度最大化和字典相干性最小化的目標。
通過實驗對比發(fā)現(xiàn),低字典相干性K-SVD算法在一定程度上減少了算法迭代更新的時間,降低了原子的自相干性,從而使得圖像在去噪過程中可以更好地恢復重構。
在圖像去噪的相關研究中,基于字典學習可以提取樣本數(shù)據的內部結構特征的這一特點,通常采用該方法達到圖像去噪的目的。
字典學習最早是由 Olshausen(1996)[12]提出,發(fā)展至今該方法已經有了較為成熟的理論與較為豐富的實踐運用。字典學習也可簡單地稱其為稀疏編碼,字典學習較偏向于學習字典,從矩陣的角度來看,字典學習的基本過程為,通過給定樣本數(shù)據集X,其中X的每一列代表每個樣本,字典學習的主要目的是通過將樣本數(shù)據集X分解成如下形式的矩陣進行操作:
其中,D代表字典矩陣,D的每一列稱之為原子,C代表對應的系數(shù)矩陣,式(1)需同時滿足以下約束條件,即系數(shù)矩陣C要盡可能的稀疏,字典矩陣D的每一列即每一個原子是一個歸一化向量。
通過上述分析可知,字典學習的主要目的是極小化如下目標函數(shù):
其中,X∈RM×N為信號的樣本數(shù)據矩陣且滿足,M,N分別代表樣本數(shù)據的維數(shù)和個數(shù);D∈RM×K(M<K)為過完備字典矩陣且有,其中該矩陣的第k列dk稱為字典的原子;C∈RK×N為信號的稀疏表示系數(shù)矩陣且有,‖c‖代表的為稀疏系數(shù)矩陣中每一列i0的非零元素個數(shù),S表示為稀疏度。
綜合稀疏模型一直以來受到廣大研究學者的關注,基于這一模型的字典學習方法也是字典學習理論研究中相對成熟的部分,大多數(shù)求解式(2)的算法采用的都是系數(shù)更新和字典更新交替迭代優(yōu)化的方法。算法在系數(shù)更新部分沒有較大的差異,主要不同之處在于對字典的更新方式上,固定字典D更新稀疏系數(shù)矩陣X是常見的稀疏編碼問題。通俗的來說,任何一種稀疏編碼方法都可以用于系數(shù)更新,所以近些年來有越來越多的稀疏編碼方法被大家所提出,因此通過固定稀疏系數(shù)矩陣X進而更新字典D是研究字典學習算法較為關注的一個重點。
基于上述分析本文主要對K-SVD字典學習模型展開詳細的論述。K-SVD算法是Elad等提出的一種新的字典學習算法,該方法是根據K均值聚類發(fā)展而來的,因此可將其視為廣義的K均值算法。該算法主要分為稀疏分解和字典更新兩個部分,稀疏分解階段,首先得到訓練樣本的字典D,再通過OMP(Orthogonal Matching Pursuit)[13]算法求解稀疏表示,具體通過優(yōu)化如下函數(shù):
在此基礎上,采用SVD分解算法對字典進行更新。該算法主要是通過對字典的每一列進行更新,從而求得最優(yōu)字典的過程,字典更新階段,該算法主要通過如下目標函數(shù)進行描述:
其中,X為圖像信號所對應的矩陣,D為需要訓練的字典矩陣,C為字典矩陣D所對應的稀疏表示系數(shù)矩陣,dj和dk分別為字典矩陣D所對應的第j個和第k個列向量,cj和ck分別為稀疏系數(shù)矩陣所對應的第 j個和第k個行向量,E為對應的誤差矩陣。
K-SVD算法使非參數(shù)字典適應訓練數(shù)據,在算法的每次迭代中,這些原子被更新替換,若原子之間的相干性過高,則會導致替換原子與字典不一致的概率增大,因此這種策略并不能夠保證字典的自相干性低于一般的門限閾值。所以為了更好地解決這一問題,本文通過如下方式對字典學習算法進行改進,從而達到在稀疏度最大化前提下降低原子相干性這一目的。
假設給定訓練圖像 X∈RN×M包含M 個信號,IDL字典學習的實質是找到恰當?shù)那以又g相干性較小的字典D∈RM×K( )M?K 并使得每個信號xi可用字典D表示,其模型表示如下:
其中拉格朗日乘子γ用于控制最小化逼近誤差和最小化自相關性之間的權衡。式(5)中的第二部分懲罰項用于平衡原子之間的相干性。
第二項可寫為
由式(6)和式(7)可知,將式(5)對 D 求導,其梯度表示如下:
對式(5)的求解采用的是有限存貯擬牛頓法[12]LBFGS(Limited-memory BFGS)。
目前主流的字典學習算法,大都無法有效地降低字典的相干性,但字典的相干性對圖像去噪的效果又起著重要的作用。本文主要在K-SVD算法極小化目標函數(shù)下,添加一項刻畫字典相干性的懲罰項以降低字典相干性,稱該方法為低字典相干性K-SVD算法。
一般來說,通常采用互相關這一概念來刻畫矩陣列之間的相干性。互相關定義如下:矩陣A的互相關是A中不同列的歸一化內積的絕對值中的最大值[14],主要用于刻畫矩陣列之間的相關性,具體表達式如下:
其中,aj表示矩陣A的第 j列。
相干性約束是過完備字典學習算法中需要考慮的一個重要因素。正交字典的相干性為0,過完備字典由于原子數(shù)量大于信號維數(shù),原子之間的相干性大于0。一般來說,字典的冗余度越大其相干性也越大,字典的相干性對其稀疏編碼性能十分關鍵,在相同冗余度的前提下,低相干性可加快稀疏編碼速度,改善信號重構性能,另外低相干性還有助于避免字典原子對訓練樣本的過擬合,避免字典中出現(xiàn)過于相似的原子對。
對于一般過完備字典的相干性,可以證明其存在一定的范圍,即存在一個下界(Welch Bound)值,通過如下定理進行描述。
定理1 假設字典D∈RM×K且M<K,列向量歸一化,則字典D的相干性滿足:
當式(10)等式成立時,字典D的相干性達到最小,這樣越接近于正交基。所以,如何將字典的相干性逼近于其邊界值,就成為了稀疏信號恢復的關鍵。Tropp等[14]提出當且僅當字典D是等角緊框 架(Equiangular Tight Frame,ETF),且 滿 足K≤M(M+12)時式(10)中的等號成立,即。同時若D為ETF時,則D是行滿秩矩陣,且具有M個非零的奇異值,其值均為。等角度緊框架的具體定義如下:
定 義 1[15~16]假 設 D∈RM×K且 M<K ,,列向量歸一化,若滿足:
且
其中I是一個N×N的單位矩陣,K,M分別對應字典矩陣D的列數(shù)和行數(shù),即字典矩陣D的列向量構成一個等角緊框架,那么D或者D的列向量組成的集合稱為等角緊框架。
基于等角度緊框架具有最小相干性的這一特點,本文考慮通過逼近等角度緊框架(Equiangular Tight Frame,ETF)的方法,從而達到降低相干性的目的。
本文為了解決降低基于K-SVD算法下的字典自相干性問題,在K-SVD算法的極小化目標函數(shù)下,添加了一項有關字典D的自相干性懲罰項,具體表達形式如下:
其中,xi為圖像信號所對應第i個訓練樣本,即圖像塊內像素展開的列向量,X={x1,x2,…xi}∈RN×M,D∈RN×K為需要訓練的字典矩陣,ci是樣本xi所對應的稀疏表示系數(shù),λ,γ為拉格朗日乘子,用于控制重構誤差,極小化字典相干性與稀疏度之間的權衡。
基于改進K-SVD降低過完備字典原子相干性的算法流程
算法:改進K-SVD降低過完備字典原子相干性的算法。
2)初始化:
初始化字典:構造 D(0)∈Rn×m,可以使用隨機矩陣,或隨機選取m個樣本作為字典。然后對字典D(0)的列標準化。
3)迭代步驟:
(1)稀疏編碼階段:固定字典D,上式的稀疏編碼可重新定義如下,
(2)固定稀疏編碼系數(shù)矩陣C,則字典更新目標函數(shù)如下:
寫成矩陣形式,如下:
對目標任務中的D進行奇異值分解(svd),即D=UΣVT并簡化式子如下:
(3)字典更新:同理K-SVD算法,但是不在使用u1,v1更新字典,而是使用使得上式最小的ui,vi更新字典和稀疏系數(shù)矩陣。
4)輸出:得到訓練字典D。
為了驗證本文所改進的算法對字典原子相干性的影響,應用本文算法與K-SVD算法進行圖像去噪實驗對比分析。利用CPU為4GHz,內存為8GB的計算機,通過Matlab R2016a仿真實現(xiàn)。實驗圖像為512×512像素,圖像分塊為8×8,字典大小為64×256。
采用字典訓練時間、峰值信噪比(PSNR)和字典原子間的相干性作為衡量兩個算法性能評價標準 。 峰 值 信 噪 比 (PSNR):。其中MSE是原圖像與去噪后重建圖像之間的均方誤差。實驗圖像為512×512像素,圖像分塊為8×8,字典大小為64×256。下面列出了圖像的實驗結果對比。
為了驗證本文所采用的算法對字典相干性是否有所改進,將本文所改進的算法與K-SVD算法所構造的字典進行相干性對比分析。實驗中,初始字典D∈RN×K是隨機生成的,列向量歸一化的,每列向量中非零元素位置隨機分布,其值服從高斯分布。最小相干性邊界值μ=0.1085。則在不同的高斯噪聲標準差下由本文算法所訓練的字典的相干性與K-SVD算法的字典相干性表1所示。
表1 字典相干性對比分析
由圖1可知,在γ一定的情況下,本文所改進的K-SVD算法與傳統(tǒng)的K-SVD算法相比較,在噪音水平一致的條件下,由K-SVD算法訓練得到的字典,其相干性比本文算法訓練出的字典的相干性大,即本文算法的字典相干性明顯低于傳統(tǒng)的K-SVD算法。上述分析表明本文所改進的算法在降低字典相干性問題上具有較大的優(yōu)勢。
比較本文算法與傳統(tǒng)的K-SVD算法應用于圖像去噪,在噪音水平相同的條件下,進行比較去噪效果。下列是標準的Lena圖在σ=25的高斯白噪音的干擾下去噪的效果圖。
圖1 本文算法與K-SVD算法對Lena圖去噪對比
圖2 本文算法與K-SVD算法訓練的字典
圖3 本文算法與K-SVD算法對house圖去噪對比
圖4 本文算法與K-SVD算法訓練的字典
通過上述去噪實例的對比,可以看出在噪音水平相同的情況下,本文改進的算法有良好的去噪效果。
實驗中分別在高斯噪聲標準差σ=5,10,15,20,25不同噪音水平下進行圖像去噪測試。獲得峰值信噪比PSNR值和運行時間,其測試結果,如表2所示。
表2 兩種去噪方法對Lena圖像去噪后的峰值信噪比PSNR(dB)
表3 兩種去噪方法對house圖像去噪后的峰值信噪比PSNR(dB)
由上表的PSNR值,可以看出在相同的噪音水平下,兩種算法都可以有效地去除噪音,改進后的算法能夠更加有效地去除噪音,在不同標準差下本文算法還是有一定的優(yōu)勢。
下面給出lena圖像和house圖像在噪音水平分別為5,10,15,20,25時,運行30次實驗得到的平均時間。
表4 Lena圖像在不同噪音水平下兩種算法運行時間比較
表5 house圖像在不同噪音水平下兩種算法運行時間比較
實驗分析:通過表4、5可以看出,在噪音水平σ =5,10,15,20,25對比K-SVD算法,本文算法的運行速度有了較大程度的提高,
針對于K-SVD算法學習的字典有較高的相干性這一問題,本文提出了低字典相干性K-SVD算法。首先本文對K-SVD中的字典構造進行了改進,不在單一的選取以最大奇異值對應的特征向量去更新字典的列,而是對原有的模型增加刻畫字典相干性的約束項,在字典更新階段選取能使得模型極小化的特征向量去更新字典的列。這樣改進的方法有效地降低了字典的相干性,由于相同的冗余度下,低相干性可加快稀疏編碼速度,改善信號的重構性能,另外,低相干性有助于避免字典對訓練樣本的過擬合,即有效地避免字典出現(xiàn)過于相似的原子對。本文算法有效地降低了字典的相干性,使得圖像去噪效果更好。