涂偉滬
蔡玲霞1
李學(xué)軍2
(1. 新疆哈密廣播電視大學(xué),新疆 哈密 839000;2. 四川大學(xué)錦城學(xué)院,四川 成都 611731)
由于圖像邊緣檢測具有非接觸、無損傷、精度高等特點,正逐漸被應(yīng)用于雞蛋裂紋檢測領(lǐng)域[1]。常用的圖像邊緣檢測工具有Sobel算子[2]、Laplacian算子[3]、Prewitt算子[4]和Canny算子[5]等,其中,Canny算子因具有檢測精度高、信噪比大、抗干擾能力強等優(yōu)勢,被廣泛應(yīng)用[6]。但是,Canny算子檢測結(jié)果受雙閾值、高斯函數(shù)濾波參數(shù)等影響較大,需反復(fù)調(diào)整參數(shù),計算時間長,自適應(yīng)魯棒性差[7]。
李浩然等[8]利用直方圖灰度局部方差對Canny算子閾值進行處理,一定程度提高了絕緣子裂紋檢測準確率;李世雄等[9]采用圖像梯度錨點對Canny算子進行優(yōu)化,提升了檢測邊緣連續(xù)性;胡克滿等[10]設(shè)計了具備不同參數(shù)的高斯濾波器,為不同檢測類型選取對應(yīng)濾波參數(shù)。上述研究改善了Canny算子偽邊緣過多的問題,但是算法時間復(fù)雜性需進一步研究。隨著群智能優(yōu)化技術(shù)的不斷發(fā)展,粒子群算法(PSO)、蟻群算法(AC)等智能算法被應(yīng)用于邊緣檢測問題,樊石等[11]采用混合蛙跳算法對Canny算子雙閾值進行優(yōu)化,謝昕等[12]采用果蠅優(yōu)化算法對傳統(tǒng)Canny算子進行改進,張健等[1]將粒子群算法應(yīng)用于裂紋圖像檢測等,都取得了良好的檢測效果,但智能優(yōu)化算法容易陷入局部極值、收斂精度不高等固有缺陷中,需進一步改進。文章擬提出一種采用改進蝗蟲算法(GOA)優(yōu)化Canny算子中雙閾值、高斯函數(shù)濾波參數(shù),自適應(yīng)獲取最優(yōu)參數(shù);設(shè)計改進的模糊C-均值算法(FCM)和自適應(yīng)極值逆向?qū)W習(xí)、編碼突變更新機制,以提升GOA全局收斂能力,并采用實例仿真驗證所提算法的有效性,以實現(xiàn)高精度雞蛋線形、網(wǎng)狀裂紋檢測。
GOA是一種新型智能優(yōu)化算法,其參考蝗蟲種群集體覓食行為,通過模擬種群間個體相互作用,實現(xiàn)對目標(biāo)位置搜索[13]。對于N維優(yōu)化問題,設(shè)定GOA種群內(nèi)有Q只蝗蟲,每個個體Xi=(xi1,…,xiN)(i=1,…,Q)代表問題一個解。t時刻,Xi(t)更新式為:
(1)
α=αmax-t(αmax-αmin)/Tmax,
(2)
(3)
式中:
α——更新參數(shù);
β——相互影響函數(shù);
f——吸引強度參數(shù);
l——吸引尺度參數(shù);
G(t)=(gi1,…,giN)——當(dāng)前種群最優(yōu)解;
由GOA個體更新過程可知,Xi學(xué)習(xí)對象不僅包括自身位置和種群最優(yōu)位置信息,還融合了其他所有個體之間的交互影響,具有很強的局部搜索能力,但是全局收斂能力不足[14]。當(dāng)種群最優(yōu)解在局部極值附近時,局部極值強大的吸引力導(dǎo)致算法容易陷入局部最優(yōu)。為提升GOA全局深度收斂能力,提出改進的GOA算法(IGOA):采用改進的模糊C-均值算法對蝗蟲種群進行自適應(yīng)聚類分析,據(jù)此對種群進行不同等級劃分,并分別為不同等級內(nèi)個體設(shè)計不同更新方式,以擴展算法深度搜索空間和全局尋優(yōu)能力。
(4)
隸屬度矩陣:
U=[μik]C×Q,
(5)
式中:
C——聚類個數(shù)。
FCM是目前應(yīng)用最為廣泛的聚類算法之一,但其處理離群點、非球形簇數(shù)據(jù)聚類問題效果不佳,文獻[15]采用高維映射函數(shù)Φ(x)替代傳統(tǒng)歐式距離度量,即:
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)——核函數(shù)內(nèi)積。
文獻[16]指出,若K(X,v)滿足Mercer條件,則不需要知道Φ(x)具體形式。
1.1.1 新距離度量函數(shù) 為進一步提升對離群點數(shù)據(jù)聚類效果,采用新的度量函數(shù)對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)
此時,聚類目標(biāo)函數(shù)為:
(9)
式中:
m——模糊加權(quán)指數(shù)。
對于式(9),令?J/?μik=0、?J/?vi=0,則:
(10)
此時,通過迭代計算式(10)即可完成聚類分析。
1.1.2 聚類有效性指標(biāo) 針對聚類個數(shù)C事先確定的缺陷,定義聚類有效性指標(biāo)WB(C):
(11)
式中:
nj——第j個分類樣本數(shù)量。
w(i,j)——類內(nèi)樣本之間距離;
b(i,j)——類間離散程度。
WB(C)取值越小,聚類結(jié)果越好。設(shè)置C在[Cmin,Cmax]范圍內(nèi)依次變化,WB(C)取最小值對應(yīng)的聚類個數(shù)即為最佳聚類個數(shù)Cbest。IFCM實現(xiàn)過程可以描述為:
參數(shù)初始化,聚類中心初始化,輸入相關(guān)變量。
forC=CmintoCmax
While (終止條件不滿足) do
{
根據(jù)式(9)計算J(U,V),根據(jù)式(10)計算新的U、V;
}
根據(jù)式(11)計算WB(C),更新聚類有效性指標(biāo)集合{WB(C)}C=1,…,C;
C←C+1
end for
輸出結(jié)果。
(12)
(13)
式中:
剩余個體組成蝗蟲子族群G2(t)。
1.2.1 自適應(yīng)極值逆向?qū)W習(xí) 選取G1(t)內(nèi)N(t)個個體,執(zhí)行極值逆向?qū)W習(xí)操作,即
Xi(t+1)=A+rand(0,1)×[B-Xi(t)]Xi(t)∈G1(t),
(14)
(15)
式中:
A、B——Xi(t)下邊界和上邊界;
Nmax、Nmin——N(t)取值范圍;
τ、ε——控制參數(shù)。
由式(14)、式(15)可知,進化初期種群個體差異性較大,G1(t)選取少量個體執(zhí)行逆向?qū)W習(xí),進化后期,種群進化區(qū)域停滯,選取較多個體進行逆向?qū)W習(xí),擴展搜索空間。
1.2.2 編碼突變 對G3(t)內(nèi)個體執(zhí)行編碼突變操作,即:
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)內(nèi)個體隨機選取不在同一類的個體執(zhí)行編碼突變操作,即快速學(xué)習(xí)種群內(nèi)優(yōu)秀個體信息,又考慮不同子族群的空間差異性,提升了算法收斂效率。
(17)
(18)
式中:
Nc——第c個分類樣本數(shù)。
由式(17)、式(18)可知,將傳統(tǒng)GOA個體間影響對象限制分類內(nèi),很大程度地避免了陷入局部極值。改進的蝗蟲優(yōu)化算法(IGOA)實現(xiàn)過程如圖1所示。
圖1 IGOA實現(xiàn)流程圖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)
式中:
σ——標(biāo)準差。
(2) 梯度方向和梯度幅值計算。對H(x,y)圖像進行梯度方向θ(x,y)和梯度幅值A(chǔ)(x,y)計算:
(21)
(22)
(3) 非極大值抑制。對A(x,y)進行非極大值抑制操作,若A(x,y)比θ(x,y)方向相鄰像素幅度值小,則A(x,y)歸零;若幅度值大,則點(x,y)為可能邊緣點。
(4) 閾值選取。設(shè)定高閾值TH、低閾值TL,若點(x,y)的A(x,y)≥TH,則該點為邊緣點;若A(x,y)≤TL,則該點不是邊緣點;若TL≤A(x,y)≤TH,則通過8領(lǐng)域像素判定法[12]確定是否為邊緣點。
Canny算子存在以下缺陷:① 過分依賴高斯平滑濾波處理器,σ設(shè)置尤為關(guān)鍵。σ取值越大,容易丟失邊緣信息,取值越小,容易檢測出虛假信息。②TH、TL需事先人為設(shè)定,需經(jīng)過大量試驗和經(jīng)驗值判定,往往存在較大誤差。
針對Canny算子固有缺陷,提出IGOA改進Canny算子(IGOA-Canny),定義最大類間方差目標(biāo)函數(shù),設(shè)計多類蝗蟲個體編碼,以實現(xiàn)最優(yōu)參數(shù)自適應(yīng)獲取。
2.2.1 目標(biāo)函數(shù) 采用目標(biāo)與背景之間的類間方差作為IGOA目標(biāo)函數(shù):
f[X(t)]=ω0(t)×ω1(t)×[λ0(t)-λ1(t)]2,
(23)
式中:
ω0(t)——A(x,y)≤TH的像素數(shù)量;
ω1(t)——A(x,y)>TH的像素數(shù)量;
λ0(t)——A(x,y)≤TH的像素平均灰度值;
λ1(t)——A(x,y)>TH的像素平均灰度值。
類間方差取值越大,區(qū)分目標(biāo)與背景的正確率越高。對于TL,參考文獻[18],設(shè)定TL=TH/2.5。
2.2.2 多類個體編碼 定義多類IGOA個體編碼,將高斯函數(shù)方差σ、高閾值TH、低閾值TL、聚類中心V等效為個體編碼,即:
(24)
根據(jù)IGOA個體編碼定義方式,將IGOA優(yōu)化Canny算子參數(shù)分為兩個部分:① 執(zhí)行IFCM操作對種群聚類分析,此時只對個體編碼V部分進行更新操作,蝗蟲個體執(zhí)行基本GOA更新,完成一定次數(shù)迭代后,得到種群聚類分析。② 執(zhí)行種群更新操作,此時只對個體編碼(σ,TH,TL)部分進行更新操作,個體根據(jù)所在等級位置,分別執(zhí)行自適應(yīng)極值逆向?qū)W習(xí)、編碼突變和分類內(nèi)交互影響更新,最終得到Canny算子最優(yōu)參數(shù)配置,最后采用改進的Canny算子對雞蛋裂紋進行檢查。
IGOA初始化復(fù)雜度為O(QN),每執(zhí)行一次IFCM操作復(fù)雜度為(Cmax-Cmin)tmaxO(QN),種群完成一次更新復(fù)雜度為O(QN),故IGOA計算復(fù)雜度為:
Tmax[O(QN)+(Cmax-Cmin)tmaxO(QN)]+O(QN)≈Tmax(Cmax-Cmin)tmaxO(QN),
(25)
式中:
tmax——最大迭代次數(shù)。
基于IGOA-Canny的雞蛋裂紋檢測實現(xiàn)過程如圖2所示。
圖2 基于IGOA-Canny的雞蛋裂紋檢測過程
表1 測試函數(shù)Table 1 Test functions
由表1和圖3可知,收斂精度上,對f1、f2、f3、f44個函數(shù),無論是收斂精度還是收斂成功率,IGOA均優(yōu)于其他3種算法,特別是對于復(fù)雜多極值、病態(tài)函數(shù)f3、f4,IGOA幾乎都能夠達到100%的成功率。運算效率上,IGOA能夠以較少的迭代次數(shù)實現(xiàn)全局最優(yōu)解求解,但是由于IGOA在每次迭代過程中疊加了模糊聚類操作,導(dǎo)致算法運算時間長于其他3種算法,可以采用并行計算以提高收斂效率。典型測試函數(shù)仿真結(jié)果表明,IGOA收斂精度更有優(yōu)勢。
圖3 函數(shù)收斂曲線Figure 3 Function convergence curve
為驗證文中所提檢測算法有效性,對雞蛋線形裂紋和網(wǎng)狀裂紋進行檢測,試驗選取100個大小不同、無明顯破損、有標(biāo)號的雞蛋作采樣檢測(經(jīng)仔細人工檢測線形裂紋雞蛋55個,網(wǎng)狀裂紋雞蛋45個)。選取基本Canny算子、文獻[5]提出的ACO-Canny算子,文獻[11]提出的SFLA-Canny算子和經(jīng)典的Prewitt算子進行對比試驗。采用文獻[12]提出的漏檢率作為評價指標(biāo),不同檢測算法對雞蛋線形、網(wǎng)狀裂紋典型案例檢測視覺效果見圖4、圖5,漏檢率和算法運算時間對比結(jié)果見表3。
圖4 雞蛋線狀裂紋檢測視覺效果圖Figure 4 Visual effect of egg linear crack detection
圖5 雞蛋網(wǎng)狀裂紋檢測視覺效果圖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可知,裂紋漏檢率方面,無論是對于線狀裂紋還是網(wǎng)狀裂紋,文中檢測算法、SFLA-Canny算子和SFLA-Canny算子都表現(xiàn)出了良好的檢測效果,且文中檢測算法的漏檢率更低,分別降低了約21.4%~31.2%,63.2%~69.7%,而基本Canny算子、Prewitt算子表現(xiàn)效果不理想,特別對于網(wǎng)狀裂紋檢測,漏檢率均超過了50%。算法運行時間方面,由于IGOA在每次迭代過程中都要執(zhí)行聚類分析操作,導(dǎo)致算法在運行時間上要慢于其他4種檢測算法,后期可采用并行計算技術(shù)提升運算效率。試驗結(jié)果表明,改進FCM的引入和重新定義種群等級、編碼類型和更新方式,提升了改進蝗蟲優(yōu)化算法的全局收斂性能,而采用改進蝗蟲優(yōu)化算法優(yōu)化參數(shù)配置的Canny算子,對雞蛋裂紋檢測具有更好的檢測結(jié)果。
提出了一種采用改進蝗蟲算法優(yōu)化Canny算子的雞蛋裂紋檢測方法。結(jié)果表明,通過設(shè)計改進模糊C-均值算法、重新定義蝗蟲種群等級、編碼類型和更新方式,以及自適應(yīng)獲取Canny算子最優(yōu)參數(shù),可實現(xiàn)對不同類型雞蛋裂紋的有效檢測,具有一定意義的推廣應(yīng)用價值。后續(xù)將重點圍繞提升檢測速度問題,研究采用并行運算技術(shù)以提高檢測時效性。