王文中, 張樹生, 余隋懷
(1.西北工業大學 陜西省工業設計工程實驗室, 陜西 西安 710072; 2.陜西科技大學, 陜西 西安 710021)
圖像退化和圖像復原互為因果關系,由于各種外部和內部因素而導致圖像質量的降低,我們稱之為圖像退化,其為因;而改善圖像質量的數字圖像處理技術,我們稱之為圖像復原(image restoration),其為果。圖像復原通常是指應用計算機技術和數學理論,研究如何建立數學算法模型,把退化了的圖像還原成原始圖像,簡而言之,圖像復原過程就是退化的一個逆過程。圖像復原對于圖像分析、模式識別、特征元素提取等圖像的進一步研究意義重大,已廣泛用于科學研究、工程實踐和日常生活中。
圖像的老化,可以視為以下這樣的一個退化過程:退化函數的影響(致使圖片模糊,褪色等),疊加可加性噪聲的影響[1]。本文研究的圖像退化復原模型如圖1所示。

圖1 圖像退化復原模型
原始圖像f(x)經過一個算子或系統H作用后,和加性噪聲η(x)相疊加,形成退化后的圖像g(x),這一退化過程的表達式為:g(x,y)=H[f(x,y)]+η(x);H[*]在這里是指所有導致圖像退化外在原因的函數集合。f′(x,y)是經過復原函數矯正后獲得的復原圖像[2]。
粒子群算法是通過模擬鳥群覓食行為而發展起來的一種隨機搜索算法[3]。在此基礎上形成的粒子群優化算法,是以一個群體中個體與個體之間相互協作和共享信息從而尋找最優解來作為基本思路的。設定搜索空間是D維的,由m個粒子組成的一個種群,粒子的速度和位置就可以通過PSO公式來更新[4]。
PSO公式:
Vi=ωVi+c1r1(pbesti-xi)+c2r2(gbesti-xi);
xi=xi+Vi
c1,c2是學習因子或者加速系數,一般為正數,通常等于2;r1,r2取值范圍通常是[0,1]的隨機數。
BP(back propagation)神經網絡是一種按照誤差逆向傳播算法訓練的多層前饋神經網絡[5]。簡單的神經網絡由輸入層 、隱含層和輸出層組成,假設有a個訓練樣本,即有P個輸入輸出(Ip,Tp),p=1,2,…,a;輸入向量Ip=(ip1,…,ipm)T,目標輸出向量Tp=(tp1,…,tpn)T,最終輸出向量Op=(op1,…,opn)T;如圖2所示。

圖2 3層神經網絡拓撲圖


粒子群算法是一種全局優化的隨機搜索仿生算法,隱含并行性,根據個體的適配信息進行搜索,不受函數約束條件的限制,如連續性、可導性等。但是對高維復雜問題,往往會遇到早熟收斂和收斂性能差的問題,無法保證收斂到最優點,這時一般的優化方法是引進收斂因子K是用來保證函數的收斂性。
Vi=K[Vi+φ1r1(pbesti-xi)+φ2r2(gbesti-xi)]

BP算法簡單、計算量小、并行性強,是目前最成熟的神經網絡算法。但凡事皆有利弊,BP神經網絡也不例外。總的來說,BP神經網絡存在以下缺點:BP神經網絡求解時很容易陷入局部極小值而得不到全局最優值。
針對易陷入局部極小值缺點,一般采用下列方法對BP算法進行改進:
1) 選取合適的初始權值以及修正權值,訓練是從某一起始點沿誤差函數的斜面逐漸達到誤差最小值,初始值一旦確定,就注定了網絡收斂的方向,所以選擇合適的初始值就顯得特別重要,只有通過多次隨機訓練最后選擇效果最好的那個初始值;或借用退火思想調整E,允許E按照一定概率上升以增加跳出局部極小的可能;或彈性調整權值變化方向和大小,以改進誤差函數。
2) 增加動量項:主要思想在于讓第n次迭代時的權值的更新部分依賴于第n-1次的權值。即公式:Δwji(n)=η·δj·xji+αΔwji,動量因子 一般選取0.1~0.8。引入動量項一方面在一定程度上起到加大搜索步長,能加速算法收斂。另一方面可以降低網絡對誤差曲面局部調節的敏感性,從而有效地抑制了網絡陷入局部最小值。
3)改變網絡結構:網絡結構優化的關鍵在于隱含層數與隱含節點數目,隱含節點過多,正面效應很容易提高精度,負面效應會造成網絡結構龐大,性能下降。按照實驗的數據統計,隱含層一般取20~40效果較好[7]。
4)采用自適應調節學習率:對學習率(或步長)的改進。修正量大小受學習率控制,學習率的大小對收斂速度和訓練結構影響很大。步長小訓練收斂穩定,但時間長、速度慢;反之,步長大可以加速收斂但容易導致震蕩或發散;所以采用自適應調節學習率顯得特別重要。
PSO-BP優化算法模型一方面用BP算法對各個訓練樣本的誤差進行反傳,并以輔助原始圖像作為參考,共同修正BP算法的權值和閾值;另一方面又通過正向粒子群算法,尋找個體極值和全局的最優值,再進行解碼并更新BP算法的權值和閾值。PSO-BP優化算法從尋找初始權值到對PSO算法進行優化,同時也對隱含層的網絡結構進行優化。通過調整輸入節點與隱含層節點的聯接強度和隱含層節點與輸出節點的聯接強度以及閾值,使誤差沿梯度方向下降,經過反復學習訓練,最終得到最小誤差相對應的網絡權值和閾值。
為避開飽和區,提高訓練速度和靈敏性,要求輸入數據的值在0~1之間,所以先要對數據進行歸一化處理,通常的做法是將要復原圖像的初始灰度值統一除以255,這樣輸入數據就由[0,255]轉換到了[0,1]。
一個群體規模為m的網絡,構造優化PSO-BP算法模型,從而得到誤差最小的最佳PSO-BP網絡結構。采用3×3(像素)窗口在退化圖像上滑動取樣,其PSO-BP優化訓練流程圖,如圖3所示。
該算法的學習過程包括“PSO信息的正向傳播”和“BP誤差的反向傳播”2個過程。實際輸出與期望輸出的差即是誤差,PSO-BP優化模型就是通過對各層神經元權閾值的不斷修正,讓誤差函數沿梯度方向下降。這種PSO-BP優化算法使得總的誤差一直減少,最終達到誤差平方和小于目標誤差ΣBP的目的[8]。

圖3 PSO-BP優化訓練流程圖
我們在MATLAT平臺中基于PSO-BP優化算法進行編程,語言采用MATLAB中兼容度最高的C++,部分代碼截圖如圖4所示,經大量樣本案例實驗數據證實,可以達到該算法預期效果。
#include
#define LAYER 3 ∥3層神經網絡
#define NUM 10 ∥每層的最多節點數
#defineA30.0
#defineB10.0 ∥A和B是S型函數的參數
#define ITERS 1 000 ∥最大訓練次數
#define ETA-W 0.003 5 ∥權值調整率
#define ETA-B 0.001 ∥閥值調整率
#define ERROR 0.002 ∥單個樣本允許的誤差
#define ACCU 0.005 ∥每次迭代允許的誤差
#define Type double
#define Vector std∷vector
struct Data
Vector
Vector
};
class BP{
public:
void GetData(const Vector);
void Train( );
Vector
private:
void InitNetWork( ); ∥初始化網絡
void GetNums( ); ∥獲取輸入、輸出和隱含層節點數
void ForwardTransfer(); ∥正向傳播子過程
void ReverseTransfer(int); ∥逆向傳播子過程
void CalcDelta(int); ∥計算w和b的調整量
void UpdateNetwork(); ∥更新權值和閥值
Type GetError(int); ∥計算單個樣本的誤差
Type GetAccu( ); ∥計算所有樣本的精度
Type Sigmoid(const Type); ∥計算Sigmoid的值
圖4 PSO-BP優化算法在MATLAB平臺程序實現
1)本文提出的PSO-BP優化算法在網絡權值調整過程中,既考慮了由基本BP算法各個訓練樣本的誤差反傳進行的權值修正,又考慮訓練完1遍后,通過跟蹤個體網絡歷史最佳權值和群體網絡歷史最佳權值來更新權值,因而不同于傳統的PSO-BP向前傳播算法。
2)本算法模型采用優選網絡結構有2大特點:①對不同的網絡結構,都通過構造群體規模為m的不同初始權值和閾值的網絡,并采用PSO-BP算法進行優化,從中優選得到誤差最小的BP網絡為最佳的網絡結構,該方法也兼顧了初始權值和閾值的優選。②隱含層按照實驗大數據最優結果為模板,收斂速度快,精度高,不受模型結構的影響。PSO-BP優化算法與BP算法和傳統PSO-BP算法的訓練結果相比,具有更小的訓練誤差和檢驗誤差,在一定程度上提高了學習能力和泛化能力。
3)采用原始圖像對PSO-BP優化算法進行直觀校正,讓復原圖像盡量趨近于原始圖像。然后再將經過反復修正的最優化模式用于其他失真圖像復原上,可以更加精準的對圖像進行復原。
粒子群的規模本次實驗設定為20,PSO-BP優化算法采用3×3(像素)的九宮格窗口來滑動提取退化圖像,由此獲得輸入樣本。把退化圖像的某一點及其周圍8個點的灰度值作為一個樣本輸入,把相應原始圖像該點的灰度值作為目標輸出。在BP算法反向訓練權值時,采用梯度下降動量和自適應學習算法,其中變換函數采用的是Sigmoid型函數,均方誤差目標設定為0.000 1。結果如圖5所示:

圖5 3種算法的收斂曲線圖比較
從圖5不難看出,使用PSO-BP優化算法的收斂速度要比BP算法和傳統PSO-BP算法快,復原效果也比其他2種都要好[9]。
表1為在給定3 000訓練次數,不同BP算法分別在均方誤差上的訓練效果比較。

表1 不同BP算法訓練結果比較
表1的訓練結果表明,采用傳統PSO-BP算法得到的均方誤差比BP算法減少89.88%,而優化PSO-BP算法得到的均方誤差比傳統PSO-BP算法減少69.23%,從數據對比研究可以得出,PSO-BP優化算法的收斂速度明顯優于其他2種算法。定量訓練證明,優化PSO-BP算法是一種比較好的圖像復原方法,特別是在圖像邊緣及紋理細節方面處理效果較好。
訓練樣本取某款無人機作為實驗對象,采用3×3九宮格窗口從要復原圖像上滑動提取樣本,分別得到相關輸入矩陣和輸出矩陣,代入用3種算法進行訓練,本次實驗平臺選擇MATLAB。樣本像素大小為128×128,復原效果如圖6所示:

圖6 某無人機圖像復原效果對比
圖6a)為原始圖像,6b)為高斯模糊后的圖像,6c)為用 BP算法復原的圖像,6d)為用傳統PSO-BP算法復原的圖像,6e)為PSO-BP優化算法復原的圖像。可以明顯看出傳統PSO-BP算法復原圖6d)的效果要好于BP算法復原的圖6c),而圖6d)和6e)兩圖復原效果進行對比,顯然是PSO-BP優化算法復原圖像6e)的效果更好一些。
訓練樣本取自某博物館具有代表性的唐代仕女圖像,由于時代久遠、保存手段限制等原因,圖像嚴重失真,采用3×3九宮格窗口從退化圖像上滑動提取樣本,代入用3種算法進行訓練,實驗平臺選擇MATLAB。樣本像素選擇大小為200×300,這個例子不同的是,按照上一例原始參考圖調整的取樣值來更新BP神經網絡的權閾值,復原效果如圖7所示:
圖7a)為唐代仕女的失真圖像,復原后的圖像圖6b)~d)復原效果對比是依次變好。可以看出:在引入上一例參考原始圖像進行微調校正的優化復原模式,用在仕女失真圖上,復原效果比其他模式更好也更精準[10]。

圖7 唐代仕女圖像復原效果對比
在本例的圖像復原過程中,一方面采用粒子群搜索全局最優解對BP神經網絡權閾值進行優化,并對BP算法自身進行優化;另一方面采用原始圖像對PSO-BP優化算法進行直觀校正,讓復原圖像盡量趨近于原始圖像, 實現圖像的最優化復原;最后再將這一最優化模式用于其他失真圖像復原上。實驗表明:反復利用粒子群優化BP網絡的權閾值,可以得到更優的樣本數據進行訓練,再參照原始圖像,對網絡參數進行動態調整,就能快速得到更小的均方誤差和,使復原圖像更加精準。總的來說,PSO-BP優化算法比其他2種算法在圖像復原上效果更好。