涂偉滬
蔡玲霞1
李學軍2
(1. 新疆哈密廣播電視大學,新疆 哈密 839000;2. 四川大學錦城學院,四川 成都 611731)
由于圖像邊緣檢測具有非接觸、無損傷、精度高等特點,正逐漸被應用于雞蛋裂紋檢測領域[1]。常用的圖像邊緣檢測工具有Sobel算子[2]、Laplacian算子[3]、Prewitt算子[4]和Canny算子[5]等,其中,Canny算子因具有檢測精度高、信噪比大、抗干擾能力強等優勢,被廣泛應用[6]。但是,Canny算子檢測結果受雙閾值、高斯函數濾波參數等影響較大,需反復調整參數,計算時間長,自適應魯棒性差[7]。
李浩然等[8]利用直方圖灰度局部方差對Canny算子閾值進行處理,一定程度提高了絕緣子裂紋檢測準確率;李世雄等[9]采用圖像梯度錨點對Canny算子進行優化,提升了檢測邊緣連續性;胡克滿等[10]設計了具備不同參數的高斯濾波器,為不同檢測類型選取對應濾波參數。上述研究改善了Canny算子偽邊緣過多的問題,但是算法時間復雜性需進一步研究。隨著群智能優化技術的不斷發展,粒子群算法(PSO)、蟻群算法(AC)等智能算法被應用于邊緣檢測問題,樊石等[11]采用混合蛙跳算法對Canny算子雙閾值進行優化,謝昕等[12]采用果蠅優化算法對傳統Canny算子進行改進,張健等[1]將粒子群算法應用于裂紋圖像檢測等,都取得了良好的檢測效果,但智能優化算法容易陷入局部極值、收斂精度不高等固有缺陷中,需進一步改進。文章擬提出一種采用改進蝗蟲算法(GOA)優化Canny算子中雙閾值、高斯函數濾波參數,自適應獲取最優參數;設計改進的模糊C-均值算法(FCM)和自適應極值逆向學習、編碼突變更新機制,以提升GOA全局收斂能力,并采用實例仿真驗證所提算法的有效性,以實現高精度雞蛋線形、網狀裂紋檢測。
GOA是一種新型智能優化算法,其參考蝗蟲種群集體覓食行為,通過模擬種群間個體相互作用,實現對目標位置搜索[13]。對于N維優化問題,設定GOA種群內有Q只蝗蟲,每個個體Xi=(xi1,…,xiN)(i=1,…,Q)代表問題一個解。t時刻,Xi(t)更新式為:
(1)
α=αmax-t(αmax-αmin)/Tmax,
(2)
(3)
式中:
α——更新參數;
β——相互影響函數;
f——吸引強度參數;
l——吸引尺度參數;
G(t)=(gi1,…,giN)——當前種群最優解;

由GOA個體更新過程可知,Xi學習對象不僅包括自身位置和種群最優位置信息,還融合了其他所有個體之間的交互影響,具有很強的局部搜索能力,但是全局收斂能力不足[14]。當種群最優解在局部極值附近時,局部極值強大的吸引力導致算法容易陷入局部最優。為提升GOA全局深度收斂能力,提出改進的GOA算法(IGOA):采用改進的模糊C-均值算法對蝗蟲種群進行自適應聚類分析,據此對種群進行不同等級劃分,并分別為不同等級內個體設計不同更新方式,以擴展算法深度搜索空間和全局尋優能力。
(4)
隸屬度矩陣:
U=[μik]C×Q,
(5)
式中:
C——聚類個數。
FCM是目前應用最為廣泛的聚類算法之一,但其處理離群點、非球形簇數據聚類問題效果不佳,文獻[15]采用高維映射函數Φ(x)替代傳統歐式距離度量,即:
D(Xk,vi)=‖Φ(Xk)-Φ(vi)‖2=ΦT(Xk)Φ(Xk)-ΦT(Xk)Φ(vi)-Φ(Xk)ΦT(vi)+ΦT(vi)Φ(vi)=K(Xk,Xk)-2K(Xk,vi)+K(vi,vi),
(6)
式中:
K(X,v)=ΦT(X)Φ(v)——核函數內積。
文獻[16]指出,若K(X,v)滿足Mercer條件,則不需要知道Φ(x)具體形式。
1.1.1 新距離度量函數 為進一步提升對離群點數據聚類效果,采用新的度量函數對Xk到vi的距離進行重新度量,即:
D′(Xk,vi)=K(Xk,Xk)d(Xk,Xk)-2K(Xk,vi)d(Xk,vi)+K(vi,vi)d(vi,vi),
(7)
(8)
此時,聚類目標函數為:
(9)
式中:
m——模糊加權指數。
對于式(9),令?J/?μik=0、?J/?vi=0,則:

(10)
此時,通過迭代計算式(10)即可完成聚類分析。
1.1.2 聚類有效性指標 針對聚類個數C事先確定的缺陷,定義聚類有效性指標WB(C):
(11)
式中:

nj——第j個分類樣本數量。
w(i,j)——類內樣本之間距離;
b(i,j)——類間離散程度。
WB(C)取值越小,聚類結果越好。設置C在[Cmin,Cmax]范圍內依次變化,WB(C)取最小值對應的聚類個數即為最佳聚類個數Cbest。IFCM實現過程可以描述為:
參數初始化,聚類中心初始化,輸入相關變量。
forC=CmintoCmax
While (終止條件不滿足) do
{
根據式(9)計算J(U,V),根據式(10)計算新的U、V;
}
根據式(11)計算WB(C),更新聚類有效性指標集合{WB(C)}C=1,…,C;
C←C+1
end for
輸出結果。

(12)
(13)
式中:

剩余個體組成蝗蟲子族群G2(t)。
1.2.1 自適應極值逆向學習 選取G1(t)內N(t)個個體,執行極值逆向學習操作,即
Xi(t+1)=A+rand(0,1)×[B-Xi(t)]Xi(t)∈G1(t),
(14)
(15)
式中:
A、B——Xi(t)下邊界和上邊界;
Nmax、Nmin——N(t)取值范圍;
τ、ε——控制參數。
由式(14)、式(15)可知,進化初期種群個體差異性較大,G1(t)選取少量個體執行逆向學習,進化后期,種群進化區域停滯,選取較多個體進行逆向學習,擴展搜索空間。
1.2.2 編碼突變 對G3(t)內個體執行編碼突變操作,即:
Xj(t+1)=0.5[1+rand(0,1)]Xi(t)+0.5[1-rand(0,1)]Xk(t),Xi(t)∈G1(t),Xk(t)∈G2(t),Xj(t)∈G3(t),
(16)
式中:
Xi(t)、Xj(t)、Xk(t)——3個個體隸屬不同分類。
由式(16)可知,G3(t)內個體隨機選取不在同一類的個體執行編碼突變操作,即快速學習種群內優秀個體信息,又考慮不同子族群的空間差異性,提升了算法收斂效率。

(17)
(18)
式中:
Nc——第c個分類樣本數。
由式(17)、式(18)可知,將傳統GOA個體間影響對象限制分類內,很大程度地避免了陷入局部極值。改進的蝗蟲優化算法(IGOA)實現過程如圖1所示。

圖1 IGOA實現流程圖Figure 1 IGOA implementation flow chart
Canny算子采用雙閾值,對噪聲抑制、邊緣連接具有良好的效果[17]。其圖像檢測步驟為:
(1) 高斯平滑濾波。對于原圖像I(x,y),采用高斯濾波器G(x,y)進行卷積處理,得到平滑后的圖像H(x,y):
H(x,y)=G(x,y)×I(x,y),
(19)
(20)
式中:
σ——標準差。
(2) 梯度方向和梯度幅值計算。對H(x,y)圖像進行梯度方向θ(x,y)和梯度幅值A(x,y)計算:
(21)
(22)
(3) 非極大值抑制。對A(x,y)進行非極大值抑制操作,若A(x,y)比θ(x,y)方向相鄰像素幅度值小,則A(x,y)歸零;若幅度值大,則點(x,y)為可能邊緣點。
(4) 閾值選取。設定高閾值TH、低閾值TL,若點(x,y)的A(x,y)≥TH,則該點為邊緣點;若A(x,y)≤TL,則該點不是邊緣點;若TL≤A(x,y)≤TH,則通過8領域像素判定法[12]確定是否為邊緣點。
Canny算子存在以下缺陷:① 過分依賴高斯平滑濾波處理器,σ設置尤為關鍵。σ取值越大,容易丟失邊緣信息,取值越小,容易檢測出虛假信息。②TH、TL需事先人為設定,需經過大量試驗和經驗值判定,往往存在較大誤差。
針對Canny算子固有缺陷,提出IGOA改進Canny算子(IGOA-Canny),定義最大類間方差目標函數,設計多類蝗蟲個體編碼,以實現最優參數自適應獲取。
2.2.1 目標函數 采用目標與背景之間的類間方差作為IGOA目標函數:
f[X(t)]=ω0(t)×ω1(t)×[λ0(t)-λ1(t)]2,
(23)
式中:
ω0(t)——A(x,y)≤TH的像素數量;
ω1(t)——A(x,y)>TH的像素數量;
λ0(t)——A(x,y)≤TH的像素平均灰度值;
λ1(t)——A(x,y)>TH的像素平均灰度值。
類間方差取值越大,區分目標與背景的正確率越高。對于TL,參考文獻[18],設定TL=TH/2.5。
2.2.2 多類個體編碼 定義多類IGOA個體編碼,將高斯函數方差σ、高閾值TH、低閾值TL、聚類中心V等效為個體編碼,即:
(24)
根據IGOA個體編碼定義方式,將IGOA優化Canny算子參數分為兩個部分:① 執行IFCM操作對種群聚類分析,此時只對個體編碼V部分進行更新操作,蝗蟲個體執行基本GOA更新,完成一定次數迭代后,得到種群聚類分析。② 執行種群更新操作,此時只對個體編碼(σ,TH,TL)部分進行更新操作,個體根據所在等級位置,分別執行自適應極值逆向學習、編碼突變和分類內交互影響更新,最終得到Canny算子最優參數配置,最后采用改進的Canny算子對雞蛋裂紋進行檢查。
IGOA初始化復雜度為O(QN),每執行一次IFCM操作復雜度為(Cmax-Cmin)tmaxO(QN),種群完成一次更新復雜度為O(QN),故IGOA計算復雜度為:
Tmax[O(QN)+(Cmax-Cmin)tmaxO(QN)]+O(QN)≈Tmax(Cmax-Cmin)tmaxO(QN),
(25)
式中:
tmax——最大迭代次數。
基于IGOA-Canny的雞蛋裂紋檢測實現過程如圖2所示。

圖2 基于IGOA-Canny的雞蛋裂紋檢測過程


表1 測試函數Table 1 Test functions
由表1和圖3可知,收斂精度上,對f1、f2、f3、f44個函數,無論是收斂精度還是收斂成功率,IGOA均優于其他3種算法,特別是對于復雜多極值、病態函數f3、f4,IGOA幾乎都能夠達到100%的成功率。運算效率上,IGOA能夠以較少的迭代次數實現全局最優解求解,但是由于IGOA在每次迭代過程中疊加了模糊聚類操作,導致算法運算時間長于其他3種算法,可以采用并行計算以提高收斂效率。典型測試函數仿真結果表明,IGOA收斂精度更有優勢。

圖3 函數收斂曲線Figure 3 Function convergence curve
為驗證文中所提檢測算法有效性,對雞蛋線形裂紋和網狀裂紋進行檢測,試驗選取100個大小不同、無明顯破損、有標號的雞蛋作采樣檢測(經仔細人工檢測線形裂紋雞蛋55個,網狀裂紋雞蛋45個)。選取基本Canny算子、文獻[5]提出的ACO-Canny算子,文獻[11]提出的SFLA-Canny算子和經典的Prewitt算子進行對比試驗。采用文獻[12]提出的漏檢率作為評價指標,不同檢測算法對雞蛋線形、網狀裂紋典型案例檢測視覺效果見圖4、圖5,漏檢率和算法運算時間對比結果見表3。

圖4 雞蛋線狀裂紋檢測視覺效果圖Figure 4 Visual effect of egg linear crack detection

圖5 雞蛋網狀裂紋檢測視覺效果圖Figure 5 Visual effect diagram of egg mesh crack detection

表3 不同檢測算法裂紋漏檢率、運算時間對比Table 3 Comparison of crack missed detection rate and operation time of different detection algorithms
由圖4、圖5和表3可知,裂紋漏檢率方面,無論是對于線狀裂紋還是網狀裂紋,文中檢測算法、SFLA-Canny算子和SFLA-Canny算子都表現出了良好的檢測效果,且文中檢測算法的漏檢率更低,分別降低了約21.4%~31.2%,63.2%~69.7%,而基本Canny算子、Prewitt算子表現效果不理想,特別對于網狀裂紋檢測,漏檢率均超過了50%。算法運行時間方面,由于IGOA在每次迭代過程中都要執行聚類分析操作,導致算法在運行時間上要慢于其他4種檢測算法,后期可采用并行計算技術提升運算效率。試驗結果表明,改進FCM的引入和重新定義種群等級、編碼類型和更新方式,提升了改進蝗蟲優化算法的全局收斂性能,而采用改進蝗蟲優化算法優化參數配置的Canny算子,對雞蛋裂紋檢測具有更好的檢測結果。
提出了一種采用改進蝗蟲算法優化Canny算子的雞蛋裂紋檢測方法。結果表明,通過設計改進模糊C-均值算法、重新定義蝗蟲種群等級、編碼類型和更新方式,以及自適應獲取Canny算子最優參數,可實現對不同類型雞蛋裂紋的有效檢測,具有一定意義的推廣應用價值。后續將重點圍繞提升檢測速度問題,研究采用并行運算技術以提高檢測時效性。