梁釗董,熊興國,徐東坡,陸明洲*,沈明霞,張婉平,童奇烈
(1.南京農業(yè)大學人工智能學院,江蘇 南京 210031;2.中國水產(chǎn)科學研究院淡水漁業(yè)研究中心,江蘇 無錫 214128;3.杭州市漁政漁港漁船監(jiān)督管理總站,浙江 杭州 310008)
中國是淡水魚養(yǎng)殖和消費大國,水產(chǎn)養(yǎng)殖是國民經(jīng)濟收入的重要來源之一,不同品種及大小的淡水魚具有不同的市場及營養(yǎng)價值[1]。目前,業(yè)內對淡水魚的分級一般以魚體長、厚及體重為依據(jù),使用滾筒篩、分級槽及組合輸送帶等方式實現(xiàn)機械分級,該方式會給魚體帶來一定程度的損傷[2]。近年來,研究人員嘗試利用機器視覺技術自動測量魚體尺寸參數(shù),并針對不同種類的淡水魚建立基于體尺測量值的體重估算模型[3]。淡水魚種類的準確識別是提升這些模型的魚體重估算精度的前提,而淡水魚分類是深加工前的必要工序之一。當前,對淡水魚分類仍然主要依靠人工作業(yè)完成,該方式作業(yè)強度大、耗費時間長且分類結果易受主觀判斷影響。
隨著機器視覺技術在農業(yè)領域的廣泛應用,研究人員開始將機器視覺應用于淡水魚種類的自動識別。White等[4]提取7種比目魚圖像的形狀和顏色特征并構建分類器,實現(xiàn)比目魚的自動分類,分類精度達到99.8%。Alsmadi等[5]在魚體圖像上手工定位錨點,基于錨點提取刻畫魚體形狀特征,構建基于BP神經(jīng)網(wǎng)絡的魚分類器,識別正確率為84%。Hu等[6]截取淡水魚圖像局部皮膚塊并提取其顏色、紋理等特征,利用多分類支持向量機識別6種淡水魚,識別精度最高的是基于Bior 4.4小波的HSV顏色空間紋理特征,識別率達到96.3%。吳一全等[7]基于Krawtchouk矩和灰度共生矩陣,利用蜂群優(yōu)化多核最小二乘支持向量機對鳊、鳙、鯽、青、草魚5種魚進行種類識別,識別精度超過83.33%。涂兵等[8]提取鯽魚、草魚、鳊魚和鯉魚圖像的背部輪廓,提出1種基于魚體背部輪廓相關系數(shù)的淡水魚種類識別方法,該方法的平均識別精度達到95%。謝忠紅等[9]以4種常見的淡水魚(鯽魚、鱖魚、鳊魚和白魚)為研究對象,提出1種基于魚背和魚肚形紋理、顏色特征及魚體、魚尾形狀特征的多特征融合淡水魚種類識別方法,在輔助光源和晴天自然光條件下,對4種魚的識別正確率均超過98%。
現(xiàn)有的利用機器視覺技術構建的淡水魚分類器可識別的淡水魚種類較少,魚體大小單一,有些研究的魚體圖像數(shù)據(jù)集是在實驗室環(huán)境下獲取,距離實際生產(chǎn)應用還有一定的距離。本文利用自行搭建的圖像采集裝置在淡水魚捕撈現(xiàn)場采集淡水魚圖像,采用魚體形狀及紋理特征構建淡水魚分類識別模型,實現(xiàn)對14種淡水魚的自動分類。
搭建的魚體圖像采集裝置如圖1所示。該裝置由魚體傳送模塊、圖像自動采集模塊及控制模塊3部分組成。
圖1 圖像采集裝置Fig.1 Image acquisition device
魚體傳送模塊主要包括調速電機、傳送帶和型材支架。圖像自動采集模塊由暗箱(60 cm×60 cm×80 cm)、工業(yè)相機(MindVision MV-EM E200C)、工業(yè)鏡頭(AFT-1614MP)、相機支架和2個矩形補光燈(24 W)構成。控制模塊為一體化工業(yè)控制計算機(崇暢科技),配有Intel CoreTMi5處理器、4 GB內存、128 GB SSD儲存容量及Windows 10操作系統(tǒng),采用VS2013和OpenCV設計人機交互界面、傳送帶運動及相機采集圖像控制軟件。將魚體及1個標識魚體編號的二維碼放置在黑色托盤上,傳送帶將托盤、魚體及二維碼送入暗箱,完成圖像采集。
2020年1月11日至15日在浙江省杭州市蕭山區(qū)湘湖現(xiàn)場打撈淡水魚并利用圖像采集裝置采集魚體圖像。2名實驗操作人員分別站立于暗箱魚體出口的兩端,一端操作員負責將淡水魚放置在傳送帶上,調速電機驅動傳送帶將魚體送入暗箱,相機完成圖像采集并將圖像數(shù)據(jù)存入工控機;另一端操作員負責將圖像采集完成的魚體取下傳送帶。魚體圖像采集結束后,從工控機中讀取所有圖像并轉存到PC機中形成魚體圖像數(shù)據(jù)集,共獲取14類淡水魚約6 300張圖像。其中,魚體尺寸覆蓋范圍較廣,最長、最短、最寬和最窄的魚體尺寸分別為412、99、106和18 mm。
觀察圖像數(shù)據(jù)集中淡水魚圖像外觀特征發(fā)現(xiàn),14種淡水魚在顏色特征上只有背部灰黑而腹部銀白和魚體銀白2類,因此,顏色未被選用為分類器的輸入特征。在鱗片方面,不同種類淡水魚的鱗片密集程度、大小、厚薄等外觀特征各異,主要表現(xiàn)在魚體紋理具有明顯差異,因此,將紋理特征作為淡水魚分類器的輸入特征之一。在形狀特征方面,魚體全身形狀(如梭形、橢圓形、刀片形等)與魚體輪廓擬合橢圓的長短軸比、魚體長寬比等參數(shù)相關,魚體胖瘦程度與去尾魚體擬合橢圓長短軸比及去尾魚體長寬比相關,背、腹部是否隆起及隆起部位與去尾魚體占空比和似圓度相關,尾部的寬細、長短、叉形等與魚尾占空比及似圓度相關。因此,將魚體、去尾魚體及魚尾部分的體尺參數(shù)作為魚品種分類器的輸入特征。另外,考慮到圖像數(shù)據(jù)集中各魚體大小、擺放角度、在圖像中的位置各異,引入具有平移、尺度及旋轉不變性的Hu不變矩刻畫魚體形狀特征。
魚體前景圖像分割用于將魚體前景區(qū)域從背景圖像中分離出來,從而便于后續(xù)的魚體形狀和紋理參數(shù)提取。前景圖像分割主要由圖像預處理、魚體自模板匹配2個步驟構成。
1.3.1 魚體圖像預處理本文采用的預處理操作包括灰度化、直方圖均衡化、二值化及形態(tài)學處理。首先,使用平均值法對RGB圖像進行灰度化處理,其計算公式為f(i,j)=(R(i,j)+G(i,j)+B(i,j))/3。其中:f(i,j)為灰度圖中位于第i行、第j列的像素灰度值;R(i,j)、G(i,j)、B(i,j)分別為RGB圖像中第i行、第j列像素的紅色、綠色和藍色分量值。以魚體圖像數(shù)據(jù)集中隨機選擇的一幅圖像為例(圖2-a),利用平均值法獲得灰度圖(圖2-b)。由于暗箱中亮度較低,灰度圖像中大部分像素的灰度值在0~50,這使得魚體和背景傳送帶之間的區(qū)分度低,采用直方圖均衡化的方法可以使灰度圖(圖2-c)像素均勻分布在0~255。其次,針對直方圖均衡化后的灰度圖采用大津法(OTSU)[10]進行二值化處理,結果如圖2-d所示。最后,利用直徑為8像素的圓作為結構元素,對二值圖像執(zhí)行開運算以去除零散的前景小區(qū)域,結果如圖2-e所示,記該開運算后的二值圖為BWori。
圖2 魚體圖像預處理Fig.2 Fish image preprocessing
1.3.2 魚體自模板匹配需要分割的前景魚體區(qū)域是BWori中的連通區(qū)域之一,傳統(tǒng)的多模板匹配算法需要針對所有種類魚體圖像建立專屬模板[11],而且一旦待分類魚的品種增加,就需要更新模板庫。本文提出1種自模板匹配方法,用于匹配的模板來自待處理圖像,在無需專門模板庫的前提下,高效分割魚體前景區(qū)域。
自模板匹配方法主要包含3個步驟:候選搜索連通區(qū)域提取、候選模板提取以及匹配度計算。統(tǒng)計魚體圖像數(shù)據(jù)集中最小尺寸魚體生成的BWori中魚體連通區(qū)域的像素數(shù)為960,設定最小連通區(qū)域像素數(shù)閾值(Tharea)為600。對BWori提取像素數(shù)大于Tharea的連通區(qū)域作為候選搜索連通區(qū)域,記為ImgRegioncandi,圖2-e對應的ImgRegioncandi如圖3-a所示。
圖3 魚體自模板匹配Fig.3 Fish body self-template matchingS1:非連通域;S2、S5:傳送帶反光形成的連通域;S3、S7:暗箱漏光形成的連通域;S4:魚體連通域;S6:LED讀數(shù)屏連通域。S1:The unconnected region;S2,S5:The connected domain formed by the reflection of the conveyor belt;S3,S7:The connected domain formed by the light leakage of the obscura;S4:The connected domain of fish body;S6:The connected domain of LED screen.
圖3-a中,不同的候選搜索連通區(qū)域用不同的標號及顏色標識,S2、S5區(qū)域對應于圖2-a中的傳送帶。記候選搜索連通區(qū)域為S={S1,S2,…,Sm},其中,m為候選搜索連通區(qū)域的數(shù)量。暗箱的引入使得圖像數(shù)據(jù)集中所有圖像中托盤上下的傳送帶區(qū)域顏色特征比較穩(wěn)定,統(tǒng)計圖像數(shù)據(jù)集中所有圖像暗箱內傳送帶區(qū)域的RGB像素值范圍(記為RangeBK)為[0,0,0]—[20,70,50]。連通域S6為圖2-a中的電子秤的藍色LED讀數(shù)屏,統(tǒng)計圖像數(shù)據(jù)集中LED讀數(shù)屏的HSV值范圍(記為RangeBE)為[100,150,43]—[255,255,255]。分別利用RangeBK和RangeBE提取圖2-a中的黑色和藍色掩膜圖像并分別記為maskBK及maskBE,然后利用式(1)獲取去除黑色、藍色掩膜區(qū)域后的圖像(記為Img_candi_temple),該圖像中的連通區(qū)域即為候選模板。
Img_candi_temple=(BWori&(~maskBK))&(~maskBE)
(1)
式(1)中的運算符&及~分別對二值圖像數(shù)值矩陣做邏輯與及非運算。針對圖2-a所示原始圖像執(zhí)行式(1)后獲取候選模板圖像如圖3-b所示,提取其中的連通區(qū)域并形成候選模板集合T={T1,T2,…,Tn},其中:n為候選模板的數(shù)量。逐個提取候選模板Ti(i∈[1,n])并計算Ti和所有候選搜索連通域Sj(j∈[1,m])的匹配度,形成維度為n×m的匹配度矩陣M,M的最大值對應的候選搜索連通區(qū)域即為魚體區(qū)域掩膜。利用自模板匹配方法獲取圖2-a對應的魚體區(qū)域掩膜如圖3-c所示。將該魚體區(qū)域掩膜與圖2-a中的原始圖像做與運算,即可分割得到如圖3-d所示的魚體前景圖像。
1.4.1 魚體形狀特征提取本文提取魚體全身及尾部形態(tài)特征來描述不同品種淡水魚的外形差異,需要提取的體尺參數(shù)包括:魚體長(L)、體寬(W)、魚尾長(D)、魚體前景面積(S)、魚體輪廓擬合橢圓長短軸長度等,基于上述體尺參數(shù),計算魚體占空比、似圓度、Hu不變矩等指標。
1)體尺參數(shù)提取:體尺參數(shù)提取的第1步是對魚體前景二值圖做水平校正。首先針對魚體前景二值圖做基于最小二乘法的直線擬合,然后計算擬合直線的斜率及傾斜角,最后以魚體前景二值圖中心點為旋轉中心,旋轉前景二值圖傾斜角的角度,完成水平校正。以圖2-a原圖為例,其魚體前景二值圖的擬合直線如圖4-a所示,水平校正后的結果如圖4-b所示。
圖4 魚體體尺參數(shù)提取Fig.4 Extraction of fish body size parameters
統(tǒng)計魚體前景區(qū)域像素數(shù),即為魚體面積(Swhole)。提取魚體前景區(qū)域最小外接矩形的長和寬,即為魚體長(Lwhole)和魚體寬(Wwhole)。利用基于最小二乘的橢圓擬合算法擬合魚體前景區(qū)域橢圓,并分別記橢圓長、短軸長為awhole和bwhole。使用Suzuki等[12]方法提取水平校正后的魚體圖像輪廓,結果如圖4-c藍色輪廓所示。按列掃描魚體輪廓得到魚體背腹距離散點圖,將散點圖擬合成高階曲線,得到如圖4-c中的黃色曲線。定位擬合曲線上的極小值點(圖4-c黃色曲線上的紅色點),該極值點對應的垂直于魚體主軸線(圖4-c藍色魚體輪廓中的紅色直線)的垂線即為魚身和魚尾的分界線,利用分界線將魚體分為去尾魚體(圖4-d)和魚尾(圖4-e)。
統(tǒng)計去尾魚體像素數(shù)量及去尾魚體輪廓像素數(shù)量,即為去尾魚體面積(Sbody)及去尾魚體周長(Cbody),利用最小外接矩形和擬合橢圓分別提取去尾魚體長(Lbody)、去尾魚體寬(Wbody)、去尾魚體擬合橢圓長軸長(abody)和短軸長(bbody)。統(tǒng)計魚尾區(qū)域及輪廓像素數(shù)量,即為魚尾面積(Stail)和魚尾周長(Ctail),魚尾最小外接矩形長即為魚尾長(Ltail)。基于上述體尺參數(shù),分別利用式awhole/bwhole、Lwhole/Wwhole及Swhole/(Lwhole×Wwhole)計算魚體擬合橢圓長短軸比(k1,whole)、魚體長寬比(k2,whole)及魚體占空比(k3,whole)。分別利用式abody/bbody、Lbody/Wbody、Sbody/(Lbody×Wbody)及4π×Sbody/(Cbody×Cbody)計算去尾魚體擬合橢圓長短軸比(k1,body)、去尾魚體長寬比(k2,body)、去尾魚體占空比(k3,body)及去尾魚體似圓度(ebody)。利用Ltail/Lwhole及4π×Stail/(Ctail×Ctail)計算魚尾占魚體長度比(k4)及魚尾似圓度(etail)。
(2)
基于正規(guī)化中心距ηpq,計算得到7個Hu不變矩特征值(Φ1、Φ2、…、Φ7)[13]。綜合基于體尺參數(shù)的9個形狀特征描述算子以及7個Hu不變矩特征值,得到用于淡水魚分類的16維形狀特征向量。
1.4.2 魚體表面紋理特征提取淡水魚的鱗片在大小、形狀、光滑程度上存在差異,這些差異可用魚體鱗片紋理特征描述[14-15]。自動選取魚體質心周圍1塊100像素×50像素的矩形區(qū)域內的紋理作為淡水魚分類識別的特征之一。由于魚鱗兼具邊緣特征和灰度差異特征,因此,選用基于規(guī)范化的灰度-梯度共生矩陣(gray level-gradient co-occurrence matrix,GLGCM)[16]提取魚體魚鱗紋理特征。記圖3-d所示的魚體前景灰度圖像為f(M,N),M和N分別為灰度圖像對應的二維矩陣的行數(shù)和列數(shù)。通過以下3個步驟計算其GLGCM。
gx=f(k+1,l-1)+2f(k+1,l)+f(k+1,l+1)-f(k-1,l-1)-2f(k-1,l)-f(k-1,l+1)
(3)
gy=f(k-1,l+1)+2f(k,l+1)+f(k+1,l+1)-f(k-1,l+1)-2f(k,l-1)-f(k+1,l-1)
(4)
式中:k=1,2,…,M;l=1,2,…,N。利用公式G(k,l)=INT(g(k,l)×Ng/gmax)+1,計算得到歸一化的梯度矩陣。其中:INT為取整運算;gmax是g(M,N)中最大的梯度值;Ng是將梯度值歸一化后期望的最大值,本文Ng取值為16。
2):利用式F(k,l)=INT(f(k,l)×Nf/fmax)+1,計算f(M,N)的歸一化灰度矩陣。其中:fmax是f(M,N)中的最大灰度值;Nf是將灰度值歸一化后期望的最大值,本文取Nf為16。
3):統(tǒng)計歸一化灰度矩陣和梯度矩陣中同時使F(k,l)=i(i∈[1,Nf])和G(k,l)=j(j∈[1,Ng])的像點對數(shù),該對數(shù)即為灰度梯度共生矩陣的元素值H(i,j),利用式(5)獲取歸一化后的GLGCM。
H′(i,j)=H(i,j)/(M×N),i∈[1,Nf],j∈[1,Ng]
(5)
最后,利用表1所示的公式提取魚體魚鱗的15個紋理參數(shù)。
表1 基于灰度梯度共生矩陣的15個紋理參數(shù)提取方法Table 1 Formula for gray level-gradient co-occurrence matrix based texture parameters extraction
采用主成分分析(PCA)[17]對1.4節(jié)部分提取的31維特征(16個形狀及15個紋理特征)進行降維,在保持方差貢獻最大的特征前提下,減少特征集維數(shù),降低分類器計算量。利用PCA降維魚體圖像31維特征后獲取的新正交特征的累積貢獻率[18]如圖5所示。
圖5 魚體特征的主成分分析Fig.5 Principle component analysis of fish body characteristics柱狀圖的高度表示各特征的貢獻占比,折線圖表示所有特征的累積貢獻率,水平黑色點劃線表示85%的累積貢獻率。The height of each column represents the contribution ratio of each individual feature,and each line chart represents the cumulative contribution rate of each feature,the black horizontal dot-dash line represents the cumulative contribution rate of 85%.
圖5顯示:每個類別的前5維特征參數(shù)的累積貢獻率均高于85%,可以認為PCA得到的前5維特征包含了整體特征的主要信息。因此,可以將原來31維特征降到5維,作為淡水魚分類模型的輸入進行淡水魚種類識別。
從圖像數(shù)據(jù)集中分別為14類淡水魚隨機選擇圖像100張作為魚體分割算法測試圖像集,利用1.3節(jié)提出的基于自模板匹配的魚體分割算法及傳統(tǒng)的多模板匹配算法處理測試集圖像并對比分割正確率。在傳統(tǒng)的多模板匹配算法中,分別從14種淡水魚各取1張圖像并以最小外接矩形框選圖像中的魚體部分,為各類淡水魚分別創(chuàng)建1個魚體匹配模板,利用獲得的14個模板構建多模板匹配所需的模板庫。從模板庫中依次選擇模板以滑動窗口方式遍歷待匹配圖像,在各個遍歷位置旋轉、縮放模板并計算模板與待匹配圖像之間的相關系數(shù),選擇相關系數(shù)最大值對應的匹配結果作為分割結果。利用2種分割方法處理1 400張淡水魚圖像,其分割前景魚體的正確率對比結果如表2所示。
表2 自模板匹配正確率Table 2 Correct rate of self template matching
統(tǒng)計表2數(shù)據(jù)得到,多模板匹配算法和自模板匹配算法對于測試圖像集中各前景魚體分割綜合正確率分別為79.14%和99.79%,這表明,自模板匹配算法能夠在不建立匹配模板庫的前提下,取得更高的魚體前景區(qū)域分割正確率。
除灰度-梯度共生矩陣外,常用的圖像紋理特征提取方法還包括局部二值模式(local binary pattern,LBP)[19]和Gabor濾波[20]等。針對2.1節(jié)正確分割前景魚體區(qū)域的圖像,將魚體質心周圍100像素×50像素的矩形區(qū)域分為8個不重疊圖像塊。使用等價旋轉不變LBP算法[19]為每個圖像塊提取9個灰度直方圖特征進行串聯(lián)組合,得到72維LBP紋理特征。為每個圖像塊選擇4個尺度、4個方向組成16個Gabor濾波器,共得到144維Gabor紋理特征。利用PCA篩選LBP紋理+形狀特征(共88維)和Gabor紋理+形狀特征(共160維)中累積貢獻率超過85%的特征維度,獲取13維LBP紋理+形狀特征以及11維Gabor紋理+形狀特征。分別將GLGCM+形狀、LBP+形狀和Gabor+形狀特征集以7∶3的比例劃分為淡水魚分類識別訓練與測試特征樣本集。利用訓練樣本集分別訓練7種分類模型(樸素貝葉斯、K近鄰、線性回歸、隨機森林、決策樹、支持向量機、梯度提升決策樹),并用測試樣本集測試各分類模型性能,引入準確率(accuracy)、精度(precision)、召回率(recall)、微平均[21](micro-F1)、宏平均(macro-F1)來驗證模型的性能,結果如表3所示。
表3數(shù)據(jù)表明,基于GLGCM+形狀特征的隨機森林分類模型綜合性能最優(yōu)。為驗證分類特征降維是否會影響淡水魚種類識別的準確率,將測試集的未降維的31維GLGCM+形狀特征和降維后的5維GLGCM+形狀特征分別投入到隨機森林分類模型中,得到如圖6所示的降維前、后特征的分類混淆矩陣[22]。
表3 各特征向量集的分類模型性能評價Table 3 Evaluation index of each classification model
圖6表明,降維前基于GLGCM+形狀特征的隨機森林模型的分類準確率為100%;與此相比,降維后的特征獲得的分類正確率達到了99.52%。因此,特征降維操作可以在保證高識別正確率的前提下,降低淡水魚分類器的計算量。
圖6 用降維前、后特征獲得的分類混淆矩陣Fig.6 Confusion matrix obtained by random forest with using character vector
1)本文利用自行搭建的圖像自動采集裝置在漁場基地采集淡水魚圖像,對魚體擺放角度、方向不進行限定。在此圖像數(shù)據(jù)集上研發(fā)的魚體形狀、紋理特征提取算法以及淡水魚分類識別模型實用性較高;
2)提出了一種自模板匹配算法,在不需要額外構建魚體模板庫的前提下,以99.79%的平均正確率提取魚體前景區(qū)域;
3)從魚體全身、去尾魚體及尾部3個尺度提取魚體形狀特征共16個描述算子,分別與灰度-梯度共生矩陣、局部二值模式和Gabor紋理特征構建淡水魚分類特征向量,并比較不同紋理+形狀特征在不同分類器上的淡水魚識別性能。結果表明,基于灰度-梯度共生矩陣紋理+形狀特征的31維特征向量的隨機森林模型可以100%正確識別14種淡水魚。為提升分類器計算速度,使用主成分分析法將31維灰度-梯度共生矩陣紋理+形狀特征篩選為5維最佳特征,篩選后的特征對14種淡水魚的分類整體正確率達到99.52%。表明,篩選后的灰度-梯度共生矩陣紋理+形狀特征能以較低的計算量,獲得理想的淡水魚分類正確率。
需要指出的是,本文提出的自模板匹配算法綜合利用了連通區(qū)域像素數(shù)及圖像顏色空間閾值確定候選搜索連通區(qū)域和候選模板,算法對圖像采集環(huán)境的穩(wěn)定性具有一定的要求。如果調整魚體圖像采集裝置的設計(如相機與傳送帶的距離、傳送帶顏色等),則需要根據(jù)新的圖像數(shù)據(jù)集調整自模板匹配算法所需的連通區(qū)域像素數(shù)及圖像顏色空間閾值。另外,本文建立的淡水魚分類模型接近100%的識別精度是使用與訓練集同屬的圖像數(shù)據(jù)集中30%的圖像測試獲得,也就是說模型已經(jīng)學習了測試圖像中的所有14種的淡水魚形狀及紋理特征。如果使用包含這14種以外的淡水魚圖像來測試模型,模型分類精度必然會有所下降。因此,后期模型實際使用之前,需要針對需要分類識別的所有的淡水魚種類采集一定數(shù)量的圖像,訓練模型學習其GLGCM+形狀特征,進而確保模型的高效和實用。