APP下载

基于计算机视觉的游泳型鱼类摆尾频率提取方法

2019-11-13范继泽余心杰卢焕达

渔业现代化 2019年5期
关键词:鱼体曲率灰度

范继泽,刘 鹰,余心杰,胡 雨,卢焕达

(1 大连海洋大学海洋科技与环境学院,设施渔业教育部重点实验室,辽宁 大连 116023;2 浙江大学宁波理工学院,浙江 宁波 315000)

动物行为是基因、神经功能和环境相互作用的统一的生物学过程,行为数据不仅用于解释神经系统如何工作,还可以系统地将基因和环境结合在一起[1],例如躲避捕食、求偶。游泳行为是鱼类的基本行为[2],可通过鱼类游泳的特征反演鱼类的生理状态,如Ohlberger等[3]用摆尾频率和体重反演鱼类的活跃代谢率,Steinhausen等[4]过摆尾频率反演鱼类的游动速度和耗氧量。在游泳行为的诸多指标中,一分钟内摆尾次数(即摆尾频率)是最重要的指标之一,不仅被广泛用于指示鱼类压力[5-6],也是鱼型机器人和仿真模拟的一个重要参数[7-11]。因此,精确测定鱼类游泳行为中的摆尾频率具有重要的理论和实践意义。然而,在实际生产实践中,往往只能通过人工观测并计数的方法测定鱼类行为数据,费时费力[12-13]。近几年,鱼类行为的自动测量已成为研究热点[14-16]。其中,鱼类摆尾频率的自动测量取得了一些进展[17]。

鱼类摆尾频率的测量方法大致可分为3类:(1)基于加速度的测量方法。如Kawabe等[18]将加速度测量器安装在底栖型鱼类的背部,通过水流加速度的变化分析摆尾频率,但是背部的装置会影响鱼类游动,破坏鱼体周边的水流流场。(2)基于声学的测量方法。声学方法可以适应多种水质条件,可以在水体透明度不高的情况下使用,如Ross等[19-20]使用成像声呐分析野外洄游鱼类的长度和摆尾频,但是成像声呐在水体很小、水位很低的实验室环境内使用限制很大,且设备昂贵。(3) 基于计算机视觉测量的方法。利用计算机视觉技术对鱼类行为进行分析是一种自动、非入侵式、经济且有效的方法[16],如Terayama等[14]通过分析鱼类尾部特征点偏离身体自然状态中线的距离分析摆尾频率;Marques等[21]提取斑马鱼稚鱼体脊椎上的特征点,通过计算脊椎弯曲曲率,统计摆尾频率。然而在环境背景复杂多变的情况下,检测结果噪音抑制仍然是亟待解决的问题[7]。

本文将鱼类摆尾根据鱼体脊椎曲线的曲率划分为左右半拍,每个半拍是鱼体由放松至弯曲再回到放松的过程,通过检测半拍发生的次数,最后得到摆尾次数。针对前景提取中的噪音问题,提出一种消除细化算法结果中误差的方法,在特征点提取部分使用harris角点检测算法[22]提取二值图像细化后鱼体中线的特征点,其中两个特征点为头部和尾部标识,最后一个是脊椎曲线的harris角点,计算三个特征点构成的圆的曲率,用以表征鱼类摆尾状态。

1 材料和方法

1.1 试验材料

试验使用的大黄鱼(Larimichthyscrocea)由象山县港湾水产苗种有限公司提供,暂养3 d后进行试验。暂养期间水温控制在(24.0±1.0)℃,每2 d换水30%,每天吸底一次,正式试验前禁食24 h,溶氧保持在6.0 mg/L左右。

1.2 试验系统

试验使用的是直径120 cm白色半透明水桶和长宽高为50 cm、22 cm、40 cm蓝色封闭水槽。选择大黄鱼叉长为(9.2±0.8)cm。将试验鱼放置于水桶内适应30 min后进行试验。每一次录制视频8 h,试验持续7 d,白天采用自然光,晚上使用红外光。试验装置的顶部放置红外摄像头记录试验鱼的游泳行为。摄像头型号为海康威视高清摄像机(DS-2CD7A46F-IZS),摄像机安装在水桶正上方,距水面1.2 m;其采集图像为24 bit RGB 1080× 1920真彩图像,采集速率25帧/s。试验装置如图1所示。试验进行过程中用透光率50%遮光布将试验水槽四周围住,禁止在试验水槽周围活动,避免声音的干扰。每条鱼选择5个1 min视频片段,共35个,分别采用人工计数、程序计数方法采集鱼类游泳过程中的摆尾频率。

图1 试验系统

1.3 鱼类摆尾半拍定义

根据鱼体脊椎曲线的曲率,将鱼类摆尾划分为左右半拍,每个半拍是鱼体由放松至弯曲再回到放松的过程(图2)。

图2 半拍定义

1.4 摆尾频率提取

为了对鱼类的摆尾次数进行人工统计,每秒截取五帧,对300幅质量较好的图片其进行标记。算法首先利用均值背景建模生成没有鱼类的背景图片,然后通过背景减法提取出前景目标鱼体,再把前景图形细化处理,消除细化算法不完美导致的分叉,提取鱼体首尾和脊椎曲线上的特征点,最后计算曲率,得到摆尾次数。算法流程如图3所示。

图3 摆尾次数统计算法流程图

1.4.1 前景提取

利用数学建模的方法建立一幅背景图像帧与当前图像帧的数学关系,将两帧图像对应像素点的灰度值进行相减,并取其绝对值,得到差分图。

Dn=|fn(x,y)-B(x,y)|

(1)

式中:Dn为前景提取的结果;fn(x,y)为当前图像帧;B(x,y)为背景图像帧。

逐个对像素点进行二值化处理,得到二值化图像Rn。其中,灰度值255的点即为前景(运动目标)点,灰度值为0的点即为背景点。

(2)

式中:Rn为二值化图像;Dn为前景提取的结果;T为图像亮度阈值。对图像Rn进行连通性分析,选取一个前景像素点作为种子,然后根据连通区域的两个基本条件(像素值相同、位置相邻)将与种子相邻的前景像素合并到同一个像素集合中,最后得到的该像素集合则为一个连通区域。取最大连通域,得到含有完整运动目标的图像。

1.4.2 图像细化

得到前景图像的掩模,使用二值图像细化算法[23],提取鱼体的中线。细化结果是原曲线的中心线,本文使用基于索引表的二值图像细化算法,根据边缘点的八连通域情况查找索引表,以确定该边缘点是否能够被删除。

1.4.3 分叉消除

背景减法得到的图像是很细致的,鱼的尾鳍、胸鳍也会被提取。使用二值图像细化的结果会因为算法连通性的要求出现分支,对后来的特征点检测和曲率计算造成很大的影响。细化后图像使用3×3的值全为1的算子进行卷积(图4),若卷积结果为2,则在图中是线的端点,若值为3则是点在直线上,若值为4则是分叉的三叉节点,从端点开始遍历细线上的像素点,若小于固定阈值,则删除相应游程,得到无分叉的鱼体中线。

图4 细化后图像的三种图像结构

1.4.4 特征点检测

算法基本思想是使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前、后两种情况和窗口中像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化,则该窗口中存在特征点。当窗口向[u,v]方向移动时,那么滑动前、后对应的窗口中的像素点灰度变化描述如下:

(3)

式中:E(u,v)是灰度变化描述函数;x,y是窗口内所对应的像素坐标位置;(u,v)分别是窗口的偏移量;w(x,y)是窗口权重函数。

将w(x,y)函数设定为以窗口中心为原点的二元正态分布。如果窗口中心点是特征点时,移动前、后该点的灰度变化应该最为剧烈,所以该点权重系数设定较大,而离窗口中心(特征点)较远的点,这些点的权重系数可以设定较小,以示该点对灰度变化贡献较小,则使用二元高斯函数来表示窗口函数,最终得到:

(4)

式中:E(u,v)是灰度变化描述函数;w(w,y)为权重窗口;I(x,y)图像灰度值;Ix,Iy分别为x,y方向的导数;u,v分别为x,y方向的偏移量。

求出(4)中矩阵特征值记为λx、λy。通过判断特征值的情况可以区分出这三种特征点的类型,转角点:在水平、竖直两个方向上变化均较大的点,即λx、λy都较大;直线上的点:仅在水平或竖直方向变化较大的点,即λx和λy只有其一较大;平滑区域:在水平、竖直方向的变化量均较小的点,即λx、λy都较小。图5为特征点检测算法的结果。

1.4.5 曲率计算和半拍统计

在鱼体中线(图6圆中不规则实线)上提取三个特征点,如图6中A、B、C三点,计算三点构成的圆的曲率,用以表征鱼体的弯曲程度,使用余弦定理求角BAC的角度,化为正弦后带入下图公式:

(5)

式中:A为角BAC的角度;a为角BAC的对边;R是圆的半径。

图5 特征点提取的结果

图6 曲率计算

每当鱼体中线由直线变弯曲再变回直线,记为一个半拍,表现在曲率序列上则是峰的形状,通过计算鱼体曲率变化的序列,使用1×5的均值滤波器时间序列上平滑原始尾部曲率,滤除由于跟踪噪声引起的小波动。统计最大值大于阈值峰的数量,即可得到鱼类摆尾的半拍数量,图像的时间尺度是0.125 s,统计得到的摆尾数目与总时间相除,得到最终的摆尾频率。

2 结果

使用绝对误差评估算法的准确性。绝对误差是测量值和真实值之间差的绝对值,手动跟踪鱼类并统计其摆尾次数,并将结果与本方法估计的结果进行比较。

2.1 系统误差

系统误差是与分析过程中某些固定的原因引起的一类误差,它具有重复性、单向性、可测性。即在相同的条件下,重复测定时会重复出现,使测定结果系统偏高或系统偏低,其数值大小也有一定的规律。本文提出的算法误差来源为前景提取中复杂的背景导致的鱼体不完整,相邻帧脊椎曲线上特征点的不匹配。当视频中的鱼类身体中线曲率为零时,测量的鱼类身体曲率会有小幅波动,所以需要设定一个阈值用于过滤系统误差。从数据集中选取300张曲率接近零的图片,使用本算法统计曲率大小,计算绝对误差。选择不在摆尾状态图片的原因是其身体曲率真实测量值是零,测量值可以直接转化为误差值,用时更短。算法计算曲率的系统误差在(0.001 4±0.000 62)。

2.2 阈值和正确率

算法使用鱼体脊椎方向中线的曲率周期变化来计算摆尾频率,每一次曲率由零到极大值再变为零的过程记为一次半拍。在统计过程中噪声引起的小波动影响算法的正确性,设定阈值过滤误差,即波峰数值小于阈值时不纳入统计,使用系统误差统计的均值加三倍标准差0.003和经验数值0.005分别统计结果(表1)。

表1 绝对误差统计

3 讨论

3.1 对比分析

分别利用摆尾频率统计算法和Terayama等[14]的算法在本数据集上做验证,结果如图7所示。基于距离的算法在数值较小时表现得更稳定,归一化后数据的标准差为0.021,而基于曲率算法的标准差0.055。基于曲率算法在鱼体弯曲时表现得更好,测量错误的情况更少,基于距离的算法错误点数为5个,而基于曲率算法的错误点数为3个。算法的目的是标记摆尾的次数,测量鱼体中线曲率较大的图像序列时波动剧烈会导致统计摆尾比实际值大,测量鱼体中线曲率较小的图像序列时会导致曲率参数候选区域变小。两种方法都需要完整的提取图像中鱼的轮廓,不完整图像会影响本文算法的特征点提取,也会影响鱼类轮廓的质心,影响距离测量。

图7 算法结果对比

3.2 误差传播

算法由很多步骤组成,任何一个步骤出现误差都会导致测量结果的偏差(表2),所以设计算法过程中需要不断查看中间结果,以确保最终结果的正确率。

表2 各步骤错误率

分析每个步骤的误差对最终结果的影响,对后续算法的分析和改进至关重要。前景提取的完整性是对算法结果影响最大的一种错误,轮廓不完整会导致细化结果出现分叉,而角点提取算法会优先提取线条端点,使基于特征点的曲率计算结果出现波动,导致摆尾次数统计结果偏大,后续算法很难弥补(图8)。胸鳍和尾鳍导致的细化结果分叉,也同样会导致结果偏大。半拍统计中,阈值的选取过大会导致摆尾幅度较小的摆动不纳入计算,使统计结果偏小;阈值选取过小会导致由误差导致的曲率波动被计入摆尾次数,导致统计结果偏大。

3.3 算法应用

使用算法统计白天和夜间鱼类摆尾次数,结果如图9所示,鱼类在白天单位时间的摆尾次数较多。使用单因素方差分析结果具有显著性差异(F=7.361,P<0.05)。

图8 误差传播

图9 不同时段摆尾次数统计

4 结论

提出一种基于计算机视觉的摆尾频率测量方法。摆尾频率不仅可以用于鱼类生理的无接触测量,也适用于水质污染的生物判别和生物预警。使用算法估算摆尾次数的正确率为91.7%,正确率达到使用要求。本研究的未来发展方向是使用更鲁棒的方法提取鱼类轮廓,如使用全卷积神经网络做图像的语义分割,将鱼类和背景完整分离;使用多目标跟踪方法测量鱼群中多条鱼的摆尾次数。

猜你喜欢

鱼体曲率灰度
采用改进导重法的拓扑结构灰度单元过滤技术
一类具有消失χ 曲率的(α,β)-度量∗
儿童青少年散瞳前后眼压及角膜曲率的变化
三维鱼体参数化建模
淡水鱼水平往复振动头尾定向输送方法
面向复杂曲率变化的智能车路径跟踪控制
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
淡水鱼腹背定向装置设计及试验
Arduino小车巡线程序的灰度阈值优化方案
鱼冷冻之前要去掉内脏