基于线激光三角测距法的鱼体测距研究

2024-02-21 07:38俞圣池李佳康熊鑫泉贺刘刚1何瑞麟
渔业现代化 2024年1期
关键词:鱼体测距轮廓

俞圣池,李佳康,熊鑫泉,贺刘刚1,,,何瑞麟,戴 阳 ,3

(1上海海洋大学信息学院,上海 201306;2 中国水产科学研究院东海水产研究所,农业农村部渔业遥感重点实验室 上海 200090;3 崂山实验室,山东 青岛 266237)

在养殖中,实时监控个体大小对于制定养殖方案、合理分配饲料、控制养殖密度等均具有十分关键的作用,并将对养殖企业的生产经营与品质控制产生重大影响[1]。鱼体尺寸测量的方式可分为接触测量和非接触测量。目前,养殖过程中采用接触测量比较多,需要将鱼捕捞后人工测量。这个过程不仅效率低,样本数量少,更影响了鱼群的生长[2]。为解决鱼体的非接触测量,目前主要有双目视觉[3]、声呐[4]、激光[5]等技术途径。其中,激光测量[6-10]技术不仅可以用于陆上物体测量,同样可以用于在水底作为一种主动视觉探测手段,其具有精度高、原理简单、成本低、易实现的特点。刘源等[11]基于线激光三角法实现了对圆孔尺寸的测量,通过对比分析确定HOUGH圆变换法在环规标准件的测量中的适用性,并取得了令人瞩目的试验结果,误差仅为2 μm。这为基于线激光三角测距法的精准测量提供了一个可行的方法,并丰富了测量工具的选择。另一方面李坤等[12]通过自行研制的 532 nm 强度调制激光源,在 3 m 长的水箱中搭建了激光水下探测系统,运用相位法的测距原理成功实现了水下激光测距,并有效抑制了散射和湍流的影响,这为基于线激光三角测距法在水下环境中的应用提供了有力的支持,但载波调制激光雷达成本高,且在3 m内测量误差高达12 cm。此外,解则晓等[13]设计了一种创新的水下双目测量系统,利用线结构光阵列提供视觉特征,通过推导水下双目光路折射模型,并引入改进的外极线匹配方法,成功获得特征点的三维坐标。这一系统在水下物体测量和三维形貌还原方面取得了显著成果,测量误差仅为0.3 mm。这为本研究提供了线激光作为特征点的启示,尤其在处理水下环境中的复杂问题上,但其测量过程参数多且复杂。浙江大学李艳君等[3]提出了一种基于立体视觉的动态鱼体尺寸测量方法,通过双目摄像头获取鱼体的三维信息,并运用掩膜卷积神经网络进行鱼体的检测与分割。这项研究不仅解决了传统鱼体测量中费时费力的问题,还推动了深度学习技术在渔业中的应用,但其根本基于双目系统,本研究将从单目的角度研究鱼体测量。综合而言,激光测距的精度高且应用相当广泛,测距与鱼体尺寸测量密不可分[14],通过对水下物体测距并结合相机的成像原理[15],即可得出鱼体表面的三维空间坐标,同时得出鱼体的尺寸信息。

本研究基于线激光三角测距法的测距原理并加以改进,开发了一种基于线激光三角测距法的鱼体测距系统,可为鱼体尺寸测量定位出物距提供更多的思路,为水产养殖发挥更大的作用。

1 材料与方法

1.1 试验材料与系统搭建

水下鱼体激光测距系统如图1所示,包括视频采集装置,图像处理程序。采集装置为固定于同一个支架上的两个水下网络摄像机,摄像头的分辨率像素为2 560×1 440,视频录制帧率为30 Hz。

图1 水下鱼体激光测距系统

通过网线POE供电与海康威视硬盘机相连接,硬盘机储存视频数据。上摄像头具有一定的倾斜角度,而下摄像头是水平固定的,增大了拍摄范围。最底端固定的是专门定制过的防水一字线激光器。刻有固定长度的矩形标定板。试验样本为黑鱼 1 条、小鲫鱼 3 条、大鲫鱼 2 条、鲈鱼 1 条。图像处理程序主要是进行数据采集、分析、计算、结果输出等功能。编写语言为Python,基于计算机视觉[16]开源库OpenCv获得激光轮廓结合算法分析得到激光线的重心坐标,运用Pytorch深度学习框架进行非线性回归训练得到重心在图像中的像素点位置与实际物距离的关系。

1.2 光路原理及测距计算

在激光测距中常用的方法有飞行时间法[17]、相位测量法[18-20]、三角测距法[21]等。飞行时间法也叫直接测距法,即通过发射一束脉冲激光,测量激光从发射到接收所经过的时间,并根据光速计算出距离。这种方法适用于较远距离的测量,但需要考虑激光脉冲的展宽效应[22]。相位法是利用激光的光波相位变化来测量距离[23],在发射端,将发出的激光进行调制,使其成为一定频率的相位调制光,在接收端,通过检测光源发射的相位变化来计算距离。它可以精确地测量距离,具有高度的精确度,但需要复杂的装备。而三角法测距是利用激光发射点和接收点的几何关系计算距离[24],激光器向被测物体发射激光束,物体表面反射回来通过摄像头接收成像,根据相机的成像原理,如果标定物沿着激光束的方向发生位移时,则相机成像面上的像点也会发生相应位移,通过物像位移之间的关系可以计算出被测物上被激光照射的各点坐标,进而得到被测物到摄像头镜面的距离。相比于前面提到的飞行时间法和相位测量法,三角法测距方法精确度适中,实施简单,且不需要较为复杂的装备,成本低。因此本研究选用的测量方法为基于线激光的三角法测距。线激光三角法测距的光路原理[25]如图2所示。

图2 光路原理

一字线激光器发出的扇形光面与激光器和摄像头的连线BC垂直,激光器发出的光照射到物体上就是一条水平的亮线。

为方便计算,系统需要事先选择一个已知的基准距离S0(AB)作为定标基准。一般情况下,基准距离S0(AB)的选择取决于设定的测距量程中点,如量程50 cm到150 cm,则S0选择100 cm。一字线激光器的光线从A点射出,在基准面上形成亮线ML。激光器照射待测平面后,形成亮线NK。过基准点A的光线在待测平面上的投影点为E。接下来计算任一光线BM在该平面上的投影点N的位置。建议调整摄像头,使CCD成像面竖直放置且像素沿竖直和水平方向排布。取以竖直方向为x轴方向,以水平方向为y轴方向,以基准点A的像A1为原点的平面直角坐标系,在CCD上建立成像平面直角坐标系。这样,任意一点的坐标(x,y)可以方便地通过像素尺寸和像素数计算得出。在该图中,M、A、L、N、E、K在CCD上的成像坐标分别为M1、A1、L1、N1、E1、K1。

对于不过基点A的任一条光线,如图中的BM,其照射到后面的竖直平面上的N点,N在CCD上成像点为N1,下面通过已知量N1的坐标(xN1,yN1)、S0(AB)、h(BC)、焦距f计算S1(EA)、N点与摄像头镜面物距U(EC)、和YN(NE)获得N点的位置。

ΔNEC∽ΔN1E1C

(1)

在ΔECA中:

(2)

(3)

式(3)带入(1)得:

(4)

不难看出,在以B点为原点的过B点与LM平行的直线为Y轴,BA为X轴,BC为Z轴的空间坐标系中,N点的空间坐标XN=S0+S1,YN=NE,ZN=0。

同理,若N点位于B,M之间可计算出:

(5)

(6)

此时N点的空间坐标XN=S0-S1,YN=NE,ZN=0。

通过上述获得N点空间坐标的方法得出图像任意点的空间坐标,从而计算鱼体大小。

1.3 鱼体激光测距的系统定标和校准

根据上述推导公式,只需测量S0(AB)、h(BC)长度,结合镜头焦距f和N点在摄像头上的成像N1坐标,即可计算N点空间坐标。但实际系统中难免会产生误差,本系统主要误差包括以下几种:(1)系统装配误差,包括AB、BC长度及镜头焦距f测量不准确和发出的激光不与BC垂直所导致的误差;(2)因镜头畸变带来的成像与理想状态差异所致的测量误差;(3)因系统在水中工作,摄像头和激光器均安装在防水盒内,盒内部是空气介质,光线需穿过空气、玻璃和水三种介质,由于介质折射率不同和光线入射角度不同所致的非线性偏折误差[26],加上防水窗口质量及安装问题而导致的误差;(4)因摄像头成像亮度重心计算不准确所致的误差。综合以上误差构成了系统的整体误差,可通过对各种误差进行分析和矫正来解决,但这种处理方法烦琐、工作量大。本研究采用简单的回归分析法对系统进行定标和校准。

定标方案:将水下鱼体激光测距系统静止置于水箱中的一侧,取固定长度为1 m的矩形标定板水平置于水箱底部,开启摄像头和激光器并调整激光线角度与矩形标定板上的刻度线水平平行,使用卷尺测量矩形标定板到激光端面的距离,并拍摄这时激光照射在标定板上的成像,形成一条红色的亮线如图3所示。

图3 激光照射在标定板上的成像

由远及近的开始定标,为了能够采集更多的标定数据,过程中每间隔2 cm拍摄一张图片,在量程51 cm至147 cm中共拍摄了49张图片,并确保了测距的误差将会在2 cm内。

对定标过程中录制的视频利用Pot Player 播放器的连续帧采集功能获取截图[27],从中人工筛选出清晰可见的每间隔2 cm的标定板照片。对每张照片建立平面直角坐标系xoy,取图片的左上角为原点o,水平向右方向为y轴,竖直向下方向为x轴。根据采集的光线重心坐标与矩形标定板到激光端面的距离关系,可以得出光线的重心坐标在x轴上是随着矩形标定板距离激光端面的距离越近而越小的。由此可以根据已知水平激光直线距离与图像点坐标匹配分析得出其非线性回归的关系[28]。

试验中摄像头分辨率为2 560×1 480像素,在不影响回归精度的前提下,适当减少了采样点的数量[29],即采样点并不包括激光线上所有的点,而是每个采样点间有一定的间隔(10,20,30,…,100 cm),并且挑选图像清晰的点得出他们在竖直向下方向x轴的坐标,并选择坐标的中位数作为在此距离下x轴的坐标。其坐标单位为像素数,分别找到各个像点对应光点在实际中与激光端面的距离S即前面提到的N点的空间坐标XN,采用一元多项式回归模型:

S=anxn+an-1xn-1+,...,+a2x2+a1x+a0

(7)

拟合出S与像点坐标x的关系,至此完成系统的定标与校准。

1.4 工业摄像头的畸变矫正方法

所使用的相机为哈克思特HK90A高清水下网络摄像机,可以清晰拍摄水中物体影像。但拍摄的图像中会出现畸变,为保证图像尺寸和比例关系的真实性,在图像处理过程中需要先对这些畸变进行矫正。本研究选择张正友标定法[30-31],它是一种常用的相机标定方法,可以用来计算相机内参、畸变参数和外参等相机参数。当这些参数已知时,可以使用它们来矫正照片,使得照片中的图像符合实际物体的尺寸和比例关系。

使用张正友标定法矫正照片的方案如下:

(1)拍摄棋盘格照片:需要准备一张使用黑白格子组合起来的棋盘格,置于试验的水箱中,并在不同的角度和不同的距离下拍摄多张照片,确保照片中棋盘格占据不同比例的图案。

(2)提取角点:通过角点检测算法检测出每张图片中棋盘格的角点,利用这些角点可以得到对应的像素坐标。

(3)标定相机:使用检测到的角点和已知的棋盘格尺寸进行相机的标定,即通过张正友标定法来求解相机的内部参数矩阵和畸变参数。

(4)矫正照片:首先使用标定得到的相机参数来矫正棋盘格照片中的畸变,使得棋盘格的每个方格都恢复原始的大小和比例关系,确保矫正效果。再应用到本试验中的其他照片上,从而将照片中的物体大小和比例关系恢复到实际场景的大小和比例关系。

1.5 鱼体测距误差源分析与处理

在进行鱼体测距时最大的误差在于水下激光照射到鱼体表面发生的亮线展宽现象,激光照射到鱼体表面的成像不是一条细线,而是具有一定的宽度。这是由于反射光强导致的成像 CCD 饱和所致[32]。颜色较深的鱼体表面反射较弱,激光照射在鱼体表面将呈现出一条清晰可见宽度均匀的激光线条。而当激光照射在鱼体颜色较浅的鱼体表面上,反射光较强,导致成像展宽,激光轮廓的重心将很难准确地识别[33],此时会产生比较大的误差。为此本研究对鱼体表面激光的重心提取步骤如下:

(1)载入清晰可见激光照射鱼体表面的图片。

(2)提取二值图像:本试验所采用的激光为波长638 nm的红色激光,首先需要使用图像处理算法提取图像的绿色通道,此时红色激光轮廓更加明显,进一步使用cv2.threshold函对图像进行阈值分割,得到红色激光轮廓的二值图像。如图4所示。

图4 激光轮廓识别图

(3)缩小轮廓区域:对于步骤(2)得到的二值图像有红色激光线条的轮廓也有散射激光形成的亮斑,需逐步缩小激光线条的轮廓大小。首先对步骤(2)提取出的轮廓提取亮度通道v_channel,计算出每个小轮廓的平均亮度,并以图像平均亮度为阈值,筛选出平均亮度大于图像平均亮度的小轮廓,并过滤去面积小于50个像素面积的小轮廓,去除了具有明显干扰的小斑点。再对轮廓进行最小二乘法拟合,计算出轮廓特征直线的参数,然后根据点到直线的距离公式计算出轮廓中所有点到拟合出的直线的距离,并计算出平均距离。最后去除点到直线的距离大于平均距离的像素点,剩余的像素点构成新的轮廓。如图4识别出的激光亮线所示,此时的轮廓用绿线标记。

(4)基于亮度分布计算激光线条的重心:首先遍历激光轮廓的每个像素点坐标计算出轮廓的每一列像素的上下界值以确定j和n。再按列计算每列的重心坐标l,每列内的像素数值即为亮度gj,列内像素纵坐标为lj,然后利用重心公式(8)计算加权平均数以得到每列的重心坐标l。

(8)

如图4计算的亮线重心所示此时计算得出的重心包含了鱼体身上的多个重心以及未照射在鱼体上的亮线重心,可将非鱼体身上亮线的重心坐标设为阈值仅保留鱼体上的亮线重心。

综上所述,本研究的基于线激光三角法的鱼体测距系统的整体架构如图5所示。

图5 鱼体测距整体架构

2 结果与分析

2.1 图像矫正前后对比

首先根据水下拍摄的各种角度和不同距离的张正友标定板照片进行照片的畸变校正,获得本次试验所使用的两个工业摄像头的相机内参和畸变参数。将获得的相机内参和畸变参数代入到需要矫正的照片中,使照片中的鱼体和线激光线条的大小和关系都恢复到实际场景的大小和比例关系。矫正前后的结果如图6所示。

图6 图像矫正前后对比

2.2 激光距离与像素坐标的关系拟合

将矫正后每间隔 2 cm的标定板照片进行提取对应距离下的激光亮线的坐标,使用多项式非线性回归分析并拟合出距离与像素坐标的曲线系数。多项式回归的本质是将一个低维空间里的数据集通过非线性变换映射到一个高维空间中,从而给线性回归提供更丰富的特征信息。因此,本研究在训练集中,通过多项式函数对自变量进行转换,将低维映射到高维,然后对新的自变量和因变量拟合线性模型。通过sklearn.preprocessing中的Polynomial Features来实现这一操作,激光亮斑的像素坐标与距离正相关。激光测距曲线如图7所示。

图7 激光测距曲线图

为提高激光测距精度,需要确定一元多项式的最优阶数[33]。为此本研究选择了多次迭代多项式回归模型,可以通过增大多项式的阶数来实现。在每次迭代中,将上一次得到的模型作为初始模型,使用更高阶数的多项式回归模型拟合数据,并更新模型参数。重复进行多次迭代,可以得到不同阶数的多项式回归模型,还在每次迭代后可视化了模型拟合结果。不同阶数的拟合结果如图8所示。

图8 不同阶数的拟合结果

通过比较不同阶数下的预测结果,可以判断模型在数据上是否出现欠拟合或过拟合现象。从而找到适合我们的多项式阶数。从图 8 来看,3 阶到 5 阶的拟合结果接近,6阶7阶在近距离下的拟合结果不佳,具有明显误差。不同阶数时的具体误差分析,如表1所示。

表1 不同阶数的误差分析

从表1中的数据可以看出当多项式阶数为5时,平均误差和方差最低,平均误差仅有5.654 mm,故本研究选择一元五阶多项式(9)来预测激光距离。

S=a5x5+a4x4+a3x3+a2x2+a1x+a0

(9)

2.3 鱼体测距计算结果分析

针对鱼体测距本研究通过标定所拟合得到的激光距离与图像像素点坐标的非线性回归公式计算出鱼体与激光器的距离。对鱼体身上的激光轮廓重心识别部分结果如图9所示。

图9 鱼体重心识别结果

图10 鱼体表面激光相邻列重心坐标关系图

由图9可见激光散射所识别出的线激光轮廓并不连续,但在鱼体表面上的激光均能识别出部分轮廓,对识别出的轮廓计算每列的重心,并将重心在图像中以蓝色圆点标记出来。这些重心的像素坐标都可以进行测距,得出鱼体的不同部位的距离。通过分析图9D鱼体相邻列的重心坐标大小关系如图 10 所示。

X为列数,Y为对应列的重心坐标,以像素为单位。总共的列数为 351 列,识别出的最大值为314,最小值295,可见差值最大为19个像素,通过分析得出 91.7%的相邻列重心坐标差值在5像素内。由上图可见重心坐标往增大趋势,反映了鱼体由前往后变远的趋势。

由于鱼在水下环境中不断游动将很难测出实际的鱼体距离,故本研究采用标定板在水下不同的位置来验证鱼体测距系统预测的准确性。利用前面提到的(9)式来计算激光端面到标定板的距离,根据标定所拍图像得出了上摄像头的一元五次多项式回归的系数,a5=1.542 972 25×10-14,a4=4.547 337 69×10-11,a3=3.520 692 02×10-8,a2=2.486 386 20×10-5,a1=5.362 824 03×10-2,a0=49.966 213 855。确定回归系数后,将被测物的图像上的激光轮廓重心坐标代入(9)式即可计算出距离,验证测量精度,见表2。从表2可以看出,随机选取的56~92 cm内的80%预测结果的误差都在7.000 mm内,最大的误差是12.920 mm也都满足了本研究标定时最大2 cm误差的要求,胡波等[34]提出的基于图像的水下三点激光测距方法在2.33 m内的测量误差高达35 cm,李坤等[12]提出的强度调制532 nm激光水下测距方法在 3 m内误差为 12 cm,本试验在量程0.5~1.5 m量程内平均误差仅为0.56 cm,能够满足水下目标较近距离的测量精度要求,且成本低并简化了测距所需参数,仅需识别水下目标物体重心坐标,代入定标拟合的一元多项式即可计算距离。综上所述,本研究提出的一元多项式回归模型是能够准确地预测水下测距的。

表2 激光测距预测误差分析

3 结论

针对传统的线激光三角法测距原理以及相机成像原理进行深入研究,设计了一种基于线激光三角测距法的鱼体测距系统。通过激光亮线照射在被测物身上,为被测物测距提供了大量的特征点,多次标定,简化了测距需要的参数,仅需像素坐标即可预测距离,使得测距更加简易,并将其应用于鱼体测距上,为鱼体测量中的非接触动态鱼体尺寸测量提供更多的思路,而不局限于使用双目摄像头获得鱼体三维信息。同时在对图像提取像素点坐标前,通过张正友标定法获得了本试验摄像头的相机内参和畸变参数,进而将图片恢复到了一个与实际场景的大小和比例关系相当的水平。识别出了鱼体表面的激光亮线,并实现了一种基于亮度分布的重心识别法,计算出了鱼体表面激光重心。提取矩形标定板的光斑重心坐标信息与距离的回归关系,拟合了多个不同阶数一元多项式,并分析得到一元五阶多项式的平均误差最低,仅为5.654 mm。最后随机分析了不同距离下的预测距离的误差情况,得出结果均满足标定时所设定的2 cm内,将其应用鱼体尺寸测量具有良好的精度,本研究下一步将结合深度学习模型实现动态鱼体尺寸测量和种类分析。

猜你喜欢
鱼体测距轮廓
轴流泵内鱼体的运动行为与撞击损伤分析
淡水鱼水平往复振动头尾定向输送方法
OPENCV轮廓识别研究与实践
淡水鱼腹背定向装置设计及试验
类星体的精准测距
基于实时轮廓误差估算的数控系统轮廓控制
浅谈超声波测距
在线学习机制下的Snake轮廓跟踪
基于PSOC超声测距系统设计
相对差分单项测距△DOR