梁钊董,熊兴国,徐东坡,陆明洲*,沈明霞,张婉平,童奇烈
(1.南京农业大学人工智能学院,江苏 南京 210031;2.中国水产科学研究院淡水渔业研究中心,江苏 无锡 214128;3.杭州市渔政渔港渔船监督管理总站,浙江 杭州 310008)
中国是淡水鱼养殖和消费大国,水产养殖是国民经济收入的重要来源之一,不同品种及大小的淡水鱼具有不同的市场及营养价值[1]。目前,业内对淡水鱼的分级一般以鱼体长、厚及体重为依据,使用滚筒筛、分级槽及组合输送带等方式实现机械分级,该方式会给鱼体带来一定程度的损伤[2]。近年来,研究人员尝试利用机器视觉技术自动测量鱼体尺寸参数,并针对不同种类的淡水鱼建立基于体尺测量值的体重估算模型[3]。淡水鱼种类的准确识别是提升这些模型的鱼体重估算精度的前提,而淡水鱼分类是深加工前的必要工序之一。当前,对淡水鱼分类仍然主要依靠人工作业完成,该方式作业强度大、耗费时间长且分类结果易受主观判断影响。
随着机器视觉技术在农业领域的广泛应用,研究人员开始将机器视觉应用于淡水鱼种类的自动识别。White等[4]提取7种比目鱼图像的形状和颜色特征并构建分类器,实现比目鱼的自动分类,分类精度达到99.8%。Alsmadi等[5]在鱼体图像上手工定位锚点,基于锚点提取刻画鱼体形状特征,构建基于BP神经网络的鱼分类器,识别正确率为84%。Hu等[6]截取淡水鱼图像局部皮肤块并提取其颜色、纹理等特征,利用多分类支持向量机识别6种淡水鱼,识别精度最高的是基于Bior 4.4小波的HSV颜色空间纹理特征,识别率达到96.3%。吴一全等[7]基于Krawtchouk矩和灰度共生矩阵,利用蜂群优化多核最小二乘支持向量机对鳊、鳙、鲫、青、草鱼5种鱼进行种类识别,识别精度超过83.33%。涂兵等[8]提取鲫鱼、草鱼、鳊鱼和鲤鱼图像的背部轮廓,提出1种基于鱼体背部轮廓相关系数的淡水鱼种类识别方法,该方法的平均识别精度达到95%。谢忠红等[9]以4种常见的淡水鱼(鲫鱼、鳜鱼、鳊鱼和白鱼)为研究对象,提出1种基于鱼背和鱼肚形纹理、颜色特征及鱼体、鱼尾形状特征的多特征融合淡水鱼种类识别方法,在辅助光源和晴天自然光条件下,对4种鱼的识别正确率均超过98%。
现有的利用机器视觉技术构建的淡水鱼分类器可识别的淡水鱼种类较少,鱼体大小单一,有些研究的鱼体图像数据集是在实验室环境下获取,距离实际生产应用还有一定的距离。本文利用自行搭建的图像采集装置在淡水鱼捕捞现场采集淡水鱼图像,采用鱼体形状及纹理特征构建淡水鱼分类识别模型,实现对14种淡水鱼的自动分类。
搭建的鱼体图像采集装置如图1所示。该装置由鱼体传送模块、图像自动采集模块及控制模块3部分组成。
图1 图像采集装置Fig.1 Image acquisition device
鱼体传送模块主要包括调速电机、传送带和型材支架。图像自动采集模块由暗箱(60 cm×60 cm×80 cm)、工业相机(MindVision MV-EM E200C)、工业镜头(AFT-1614MP)、相机支架和2个矩形补光灯(24 W)构成。控制模块为一体化工业控制计算机(崇畅科技),配有Intel CoreTMi5处理器、4 GB内存、128 GB SSD储存容量及Windows 10操作系统,采用VS2013和OpenCV设计人机交互界面、传送带运动及相机采集图像控制软件。将鱼体及1个标识鱼体编号的二维码放置在黑色托盘上,传送带将托盘、鱼体及二维码送入暗箱,完成图像采集。
2020年1月11日至15日在浙江省杭州市萧山区湘湖现场打捞淡水鱼并利用图像采集装置采集鱼体图像。2名实验操作人员分别站立于暗箱鱼体出口的两端,一端操作员负责将淡水鱼放置在传送带上,调速电机驱动传送带将鱼体送入暗箱,相机完成图像采集并将图像数据存入工控机;另一端操作员负责将图像采集完成的鱼体取下传送带。鱼体图像采集结束后,从工控机中读取所有图像并转存到PC机中形成鱼体图像数据集,共获取14类淡水鱼约6 300张图像。其中,鱼体尺寸覆盖范围较广,最长、最短、最宽和最窄的鱼体尺寸分别为412、99、106和18 mm。
观察图像数据集中淡水鱼图像外观特征发现,14种淡水鱼在颜色特征上只有背部灰黑而腹部银白和鱼体银白2类,因此,颜色未被选用为分类器的输入特征。在鳞片方面,不同种类淡水鱼的鳞片密集程度、大小、厚薄等外观特征各异,主要表现在鱼体纹理具有明显差异,因此,将纹理特征作为淡水鱼分类器的输入特征之一。在形状特征方面,鱼体全身形状(如梭形、椭圆形、刀片形等)与鱼体轮廓拟合椭圆的长短轴比、鱼体长宽比等参数相关,鱼体胖瘦程度与去尾鱼体拟合椭圆长短轴比及去尾鱼体长宽比相关,背、腹部是否隆起及隆起部位与去尾鱼体占空比和似圆度相关,尾部的宽细、长短、叉形等与鱼尾占空比及似圆度相关。因此,将鱼体、去尾鱼体及鱼尾部分的体尺参数作为鱼品种分类器的输入特征。另外,考虑到图像数据集中各鱼体大小、摆放角度、在图像中的位置各异,引入具有平移、尺度及旋转不变性的Hu不变矩刻画鱼体形状特征。
鱼体前景图像分割用于将鱼体前景区域从背景图像中分离出来,从而便于后续的鱼体形状和纹理参数提取。前景图像分割主要由图像预处理、鱼体自模板匹配2个步骤构成。
1.3.1 鱼体图像预处理本文采用的预处理操作包括灰度化、直方图均衡化、二值化及形态学处理。首先,使用平均值法对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列像素的红色、绿色和蓝色分量值。以鱼体图像数据集中随机选择的一幅图像为例(图2-a),利用平均值法获得灰度图(图2-b)。由于暗箱中亮度较低,灰度图像中大部分像素的灰度值在0~50,这使得鱼体和背景传送带之间的区分度低,采用直方图均衡化的方法可以使灰度图(图2-c)像素均匀分布在0~255。其次,针对直方图均衡化后的灰度图采用大津法(OTSU)[10]进行二值化处理,结果如图2-d所示。最后,利用直径为8像素的圆作为结构元素,对二值图像执行开运算以去除零散的前景小区域,结果如图2-e所示,记该开运算后的二值图为BWori。
图2 鱼体图像预处理Fig.2 Fish image preprocessing
1.3.2 鱼体自模板匹配需要分割的前景鱼体区域是BWori中的连通区域之一,传统的多模板匹配算法需要针对所有种类鱼体图像建立专属模板[11],而且一旦待分类鱼的品种增加,就需要更新模板库。本文提出1种自模板匹配方法,用于匹配的模板来自待处理图像,在无需专门模板库的前提下,高效分割鱼体前景区域。
自模板匹配方法主要包含3个步骤:候选搜索连通区域提取、候选模板提取以及匹配度计算。统计鱼体图像数据集中最小尺寸鱼体生成的BWori中鱼体连通区域的像素数为960,设定最小连通区域像素数阈值(Tharea)为600。对BWori提取像素数大于Tharea的连通区域作为候选搜索连通区域,记为ImgRegioncandi,图2-e对应的ImgRegioncandi如图3-a所示。
图3 鱼体自模板匹配Fig.3 Fish body self-template matchingS1:非连通域;S2、S5:传送带反光形成的连通域;S3、S7:暗箱漏光形成的连通域;S4:鱼体连通域;S6:LED读数屏连通域。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中,不同的候选搜索连通区域用不同的标号及颜色标识,S2、S5区域对应于图2-a中的传送带。记候选搜索连通区域为S={S1,S2,…,Sm},其中,m为候选搜索连通区域的数量。暗箱的引入使得图像数据集中所有图像中托盘上下的传送带区域颜色特征比较稳定,统计图像数据集中所有图像暗箱内传送带区域的RGB像素值范围(记为RangeBK)为[0,0,0]—[20,70,50]。连通域S6为图2-a中的电子秤的蓝色LED读数屏,统计图像数据集中LED读数屏的HSV值范围(记为RangeBE)为[100,150,43]—[255,255,255]。分别利用RangeBK和RangeBE提取图2-a中的黑色和蓝色掩膜图像并分别记为maskBK及maskBE,然后利用式(1)获取去除黑色、蓝色掩膜区域后的图像(记为Img_candi_temple),该图像中的连通区域即为候选模板。
Img_candi_temple=(BWori&(~maskBK))&(~maskBE)
(1)
式(1)中的运算符&及~分别对二值图像数值矩阵做逻辑与及非运算。针对图2-a所示原始图像执行式(1)后获取候选模板图像如图3-b所示,提取其中的连通区域并形成候选模板集合T={T1,T2,…,Tn},其中:n为候选模板的数量。逐个提取候选模板Ti(i∈[1,n])并计算Ti和所有候选搜索连通域Sj(j∈[1,m])的匹配度,形成维度为n×m的匹配度矩阵M,M的最大值对应的候选搜索连通区域即为鱼体区域掩膜。利用自模板匹配方法获取图2-a对应的鱼体区域掩膜如图3-c所示。将该鱼体区域掩膜与图2-a中的原始图像做与运算,即可分割得到如图3-d所示的鱼体前景图像。
1.4.1 鱼体形状特征提取本文提取鱼体全身及尾部形态特征来描述不同品种淡水鱼的外形差异,需要提取的体尺参数包括:鱼体长(L)、体宽(W)、鱼尾长(D)、鱼体前景面积(S)、鱼体轮廓拟合椭圆长短轴长度等,基于上述体尺参数,计算鱼体占空比、似圆度、Hu不变矩等指标。
1)体尺参数提取:体尺参数提取的第1步是对鱼体前景二值图做水平校正。首先针对鱼体前景二值图做基于最小二乘法的直线拟合,然后计算拟合直线的斜率及倾斜角,最后以鱼体前景二值图中心点为旋转中心,旋转前景二值图倾斜角的角度,完成水平校正。以图2-a原图为例,其鱼体前景二值图的拟合直线如图4-a所示,水平校正后的结果如图4-b所示。
图4 鱼体体尺参数提取Fig.4 Extraction of fish body size parameters
统计鱼体前景区域像素数,即为鱼体面积(Swhole)。提取鱼体前景区域最小外接矩形的长和宽,即为鱼体长(Lwhole)和鱼体宽(Wwhole)。利用基于最小二乘的椭圆拟合算法拟合鱼体前景区域椭圆,并分别记椭圆长、短轴长为awhole和bwhole。使用Suzuki等[12]方法提取水平校正后的鱼体图像轮廓,结果如图4-c蓝色轮廓所示。按列扫描鱼体轮廓得到鱼体背腹距离散点图,将散点图拟合成高阶曲线,得到如图4-c中的黄色曲线。定位拟合曲线上的极小值点(图4-c黄色曲线上的红色点),该极值点对应的垂直于鱼体主轴线(图4-c蓝色鱼体轮廓中的红色直线)的垂线即为鱼身和鱼尾的分界线,利用分界线将鱼体分为去尾鱼体(图4-d)和鱼尾(图4-e)。
统计去尾鱼体像素数量及去尾鱼体轮廓像素数量,即为去尾鱼体面积(Sbody)及去尾鱼体周长(Cbody),利用最小外接矩形和拟合椭圆分别提取去尾鱼体长(Lbody)、去尾鱼体宽(Wbody)、去尾鱼体拟合椭圆长轴长(abody)和短轴长(bbody)。统计鱼尾区域及轮廓像素数量,即为鱼尾面积(Stail)和鱼尾周长(Ctail),鱼尾最小外接矩形长即为鱼尾长(Ltail)。基于上述体尺参数,分别利用式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)
基于正规化中心距ηpq,计算得到7个Hu不变矩特征值(Φ1、Φ2、…、Φ7)[13]。综合基于体尺参数的9个形状特征描述算子以及7个Hu不变矩特征值,得到用于淡水鱼分类的16维形状特征向量。
1.4.2 鱼体表面纹理特征提取淡水鱼的鳞片在大小、形状、光滑程度上存在差异,这些差异可用鱼体鳞片纹理特征描述[14-15]。自动选取鱼体质心周围1块100像素×50像素的矩形区域内的纹理作为淡水鱼分类识别的特征之一。由于鱼鳞兼具边缘特征和灰度差异特征,因此,选用基于规范化的灰度-梯度共生矩阵(gray level-gradient co-occurrence matrix,GLGCM)[16]提取鱼体鱼鳞纹理特征。记图3-d所示的鱼体前景灰度图像为f(M,N),M和N分别为灰度图像对应的二维矩阵的行数和列数。通过以下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):统计归一化灰度矩阵和梯度矩阵中同时使F(k,l)=i(i∈[1,Nf])和G(k,l)=j(j∈[1,Ng])的像点对数,该对数即为灰度梯度共生矩阵的元素值H(i,j),利用式(5)获取归一化后的GLGCM。
H′(i,j)=H(i,j)/(M×N),i∈[1,Nf],j∈[1,Ng]
(5)
最后,利用表1所示的公式提取鱼体鱼鳞的15个纹理参数。
表1 基于灰度梯度共生矩阵的15个纹理参数提取方法Table 1 Formula for gray level-gradient co-occurrence matrix based texture parameters extraction
采用主成分分析(PCA)[17]对1.4节部分提取的31维特征(16个形状及15个纹理特征)进行降维,在保持方差贡献最大的特征前提下,减少特征集维数,降低分类器计算量。利用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维特征参数的累积贡献率均高于85%,可以认为PCA得到的前5维特征包含了整体特征的主要信息。因此,可以将原来31维特征降到5维,作为淡水鱼分类模型的输入进行淡水鱼种类识别。
从图像数据集中分别为14类淡水鱼随机选择图像100张作为鱼体分割算法测试图像集,利用1.3节提出的基于自模板匹配的鱼体分割算法及传统的多模板匹配算法处理测试集图像并对比分割正确率。在传统的多模板匹配算法中,分别从14种淡水鱼各取1张图像并以最小外接矩形框选图像中的鱼体部分,为各类淡水鱼分别创建1个鱼体匹配模板,利用获得的14个模板构建多模板匹配所需的模板库。从模板库中依次选择模板以滑动窗口方式遍历待匹配图像,在各个遍历位置旋转、缩放模板并计算模板与待匹配图像之间的相关系数,选择相关系数最大值对应的匹配结果作为分割结果。利用2种分割方法处理1 400张淡水鱼图像,其分割前景鱼体的正确率对比结果如表2所示。
表2 自模板匹配正确率Table 2 Correct rate of self template matching
统计表2数据得到,多模板匹配算法和自模板匹配算法对于测试图像集中各前景鱼体分割综合正确率分别为79.14%和99.79%,这表明,自模板匹配算法能够在不建立匹配模板库的前提下,取得更高的鱼体前景区域分割正确率。
除灰度-梯度共生矩阵外,常用的图像纹理特征提取方法还包括局部二值模式(local binary pattern,LBP)[19]和Gabor滤波[20]等。针对2.1节正确分割前景鱼体区域的图像,将鱼体质心周围100像素×50像素的矩形区域分为8个不重叠图像块。使用等价旋转不变LBP算法[19]为每个图像块提取9个灰度直方图特征进行串联组合,得到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数据表明,基于GLGCM+形状特征的随机森林分类模型综合性能最优。为验证分类特征降维是否会影响淡水鱼种类识别的准确率,将测试集的未降维的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)本文利用自行搭建的图像自动采集装置在渔场基地采集淡水鱼图像,对鱼体摆放角度、方向不进行限定。在此图像数据集上研发的鱼体形状、纹理特征提取算法以及淡水鱼分类识别模型实用性较高;
2)提出了一种自模板匹配算法,在不需要额外构建鱼体模板库的前提下,以99.79%的平均正确率提取鱼体前景区域;
3)从鱼体全身、去尾鱼体及尾部3个尺度提取鱼体形状特征共16个描述算子,分别与灰度-梯度共生矩阵、局部二值模式和Gabor纹理特征构建淡水鱼分类特征向量,并比较不同纹理+形状特征在不同分类器上的淡水鱼识别性能。结果表明,基于灰度-梯度共生矩阵纹理+形状特征的31维特征向量的随机森林模型可以100%正确识别14种淡水鱼。为提升分类器计算速度,使用主成分分析法将31维灰度-梯度共生矩阵纹理+形状特征筛选为5维最佳特征,筛选后的特征对14种淡水鱼的分类整体正确率达到99.52%。表明,筛选后的灰度-梯度共生矩阵纹理+形状特征能以较低的计算量,获得理想的淡水鱼分类正确率。
需要指出的是,本文提出的自模板匹配算法综合利用了连通区域像素数及图像颜色空间阈值确定候选搜索连通区域和候选模板,算法对图像采集环境的稳定性具有一定的要求。如果调整鱼体图像采集装置的设计(如相机与传送带的距离、传送带颜色等),则需要根据新的图像数据集调整自模板匹配算法所需的连通区域像素数及图像颜色空间阈值。另外,本文建立的淡水鱼分类模型接近100%的识别精度是使用与训练集同属的图像数据集中30%的图像测试获得,也就是说模型已经学习了测试图像中的所有14种的淡水鱼形状及纹理特征。如果使用包含这14种以外的淡水鱼图像来测试模型,模型分类精度必然会有所下降。因此,后期模型实际使用之前,需要针对需要分类识别的所有的淡水鱼种类采集一定数量的图像,训练模型学习其GLGCM+形状特征,进而确保模型的高效和实用。