基于OpenCV的仿生机器鱼视觉系统的分析与研究
2022-08-17陈鹏慧张楠珂
陈鹏慧,张楠珂
(湖南信息职业技术学院,湖南长沙,410200)
1 仿生机器鱼视觉研究关键问题
仿生机器鱼外型通常都类似于某种鱼类,其自身所带的感知系统来分析所处的水中环境。感知系统由摄像头、声呐、红外、激光等其中的一个或多个组成。通过摄像头或相机可以有效地存储视频和图片数据,然后进行后续的分析与处理。但是水中视觉的处理中也会存在很多问题,如水对光线的吸收、水下光线的折射、水下光线的散射,及水的波动等都会影响水中图像的采集效果等。以下两个是水中采集图像中存在较为普遍的问题:一是水下采集到的图像会退化严重,对比度会降低;二是摄像头视角不是正对着物体和水波的影响,使得水下采集到的图像会发生几何形变,也称畸变。在本文中,我们也针对水下仿生机器鱼视觉系统采集图像的这两个主要问题来进行处理与分析,也就是所说的水下图像预处理。
2 水下图像退化分析与处理
水下图像退化的主要原因是仿生机器鱼的移动造成水波引起的退化、水下光线的折射或摄像头不聚焦引起的对比度的降低等,因此需要进行图像的增强,这也是水下机器人图像预处理和一般的图像处理不一样的地方[3]。在OpenCV中图像增强的主要方法有4种:基于直方图均衡的图像增强、基于拉普拉斯算子的图像增强、基于对数Log变换的图像增强、基于伽马变换的图像增强。
这里我们就采用直方图均衡的图像增强,该算法是目前比较常用的水下图像图像增强算法之一。传统的直方图均衡HE算法(Histogram Equalization)有以下的问题:部分区域对比度增强太大后成为了噪点;另有一些区域因为调整后变得更暗或者更亮,丢失了细节。OpenCV中提供了改进的对比度有限的自适应直方图均衡CLAHE(Contrast Limited Adaptive Histogram Equalization)算法,可以直接调用实现。CLAHE算法改良了CLAHE算法加入了对比度限制避免了HE算法的问题,可以应于水下图像增强中。我们在实验中直接调用CLAHE算法来实现图像增强。
3 水下图像畸变分析与处理
水下图像畸变的主要原因是摄像头视角不是正对着物体而发生的几何形变,以及水中的水波纹对视像头采集的图像影响。为了后续机器鱼识别不同形状的物体,需要对拍摄到的图像进行识别与矫正。
在OpenCV中的处理图像畸变主要是两种方法:仿射变换和透视变换。仿射变换是基于2*3矩阵进行的变化,是二维坐标到二维坐标之间的线性变换。仿射变换参数少,有利于问题的解决。它的缺点是所产生的表示并不能适应视角间所有的关系。由视角微小的变化导致的失真就是仿射,所以在有些环境下,仿射变换也够用了。
透视变换时基于3x3矩阵的变换,这种变换当作一个三维平面被一个特定观察者感知的计算方法,观察者也许不是垂直观测该平面。仿射变换可以将矩形转换成平行四边形。它可以将矩形的边压扁但必须保持边是平行的,也可以将矩形旋转或者按比例变化。透视变换提供了更大的灵活性,一个透视变换可以将矩形转变成梯形。当然,因为平行四边形也是梯形,所以仿射变换是透视变换的子集。我们选用的时仿射变换来完成图像的几何畸变矫正处理。通过两步完成:获取仿射映射矩阵getAffineTransform或getRotationMatrix2D、然后进行仿射变换warpAffine。
4 几何形状检测的分析与处理
考虑到仿生机器鱼执行水下任务时,水下环境中会人为放置很多设备,有些设备的几何形状是固定的,就可以通过几何形状的检测将这些设备识别出来,因此在这里也进行图像几何形状检测的分析与处理。
Opencv中的几何形状的检测就是检测轮廓,将这些点具有同样的颜色点连起来形成几何形状。在Opencv中可以采用霍夫变换(Hough Transform)来检测图像中的几何形状如直线、圆形及其他简单形状等。使用霍夫变换获取几何形状之前,我们要先对图像进行边缘检测,得到边缘二值图像后才能进行霍夫变换。在Opencv中进行边缘检测可以用Canny算法来实现,得到二值图像。霍夫变换是二值图像中找到直线一个比较快速的方法。需要使用的函数有:cvCanny、HoughLines、HoughCircles。我们会使用cvCanny函数进行边缘检测、使用HoughLines 函数来检测直线,使用HoughCircles函数来检测圆形。
5 水下仿生机器鱼硬件和软件平台
5.1 仿生机器鱼硬件
在本文中,我们选用的仿生机器鱼是SmartTuna的创新版。该仿生机器鱼创新平台 SmartTuna 产品是深圳乐智机器人有限公司联合北京大学智能控制实验室共同研发的一款多用途机器人科研竞赛教学平台。仿生机器鱼创新平台的机械动力部分应用仿生学技术模拟鱼类的游动方式,使机器鱼在水下游动时动作连续、自由灵活。由于平台具有较高的拓展性,通过简单的结构和功能舱体组合,即可完成多方面的任务。图1为SmartTuna未进行改进时的实物图。
图1 SmartTuna 实物图
该仿生机器鱼由:摆动推进机构、主控部分与摄像头等硬件共同组成。利用红外传感器和摄像头两种主要视觉传感设备来帮助仿生机器鱼在特定的水池实验环境中完成石油管道巡检任务。
5.2 软件平台
IAR Embedded Workbench for Atmel AVR 集成开发环境、uCOS-II用于仿生机器鱼的基本处理、visual studio2017、OpenCV用于仿生机器鱼摄像头的图像采集与处理。仿生机器鱼控制程序的编写以C语言为主。
图2 仿生机器鱼的硬件基本组成图
5.3 实验环境
水池模拟水下石油管道的环境。水池的长宽深度为3000mm×2000mm×300mm,水池的颜色为深蓝色,水池内放置三根白色管道,管道直径为110mm,并在管道的一些部位贴上黑色的直径为50mm圆形贴纸,模拟石油管道出现漏油的情形。
图3 实验水池环境
6 实验过程
6.1 实验任务
仿生机器鱼放置在水池中的任何一个地方,仿生机器鱼都要能够顺利的把所有漏油点找出来,并在找到漏油点的地方发出警报声。
6.2 实现思路
为了更高效的查找到漏油点,我们在仿生机器鱼的底部加入了多个防水的红外光电传感器,以便在石油管道上快速检测漏油点。如图4所示,仿生机器鱼的头部有2个红外光电传感器、鱼身中间部位安装了4个红外光电传感器。这个安装的宽度与布局与石油管道的宽度有关。
图4 实验所用仿生机器鱼的底部示意图
我们将任务分成两个主要部分,第一个部分是机器鱼查找到石油管道;二是机器鱼沿着石油管道前进并在管道上找到漏油点。具体实施时,考虑到机器鱼的硬件处理能力等因素,完成第一个部分主要通过机器鱼摄像头的采集前方水域的图像与处理来实现。完成第二个部分主要通过多个红外传感器采集机器鱼下方水域信号及处理来实现。
完成第一部分任务时,考虑到实验中黑色漏油点、白色管道、蓝色水池,包含了黑、白、蓝三个主要的颜色。摄像头输出的颜色格式为RGB格式。在RGB色彩空间,不同的光照情况会影响到颜色的识别,光照较强时,图像色彩对比度变高,颜色识别效果好;当光照较弱时,图像色彩偏黑,会将其他颜色识别为黑色。而HSV色彩空间则不一样,H为颜色的色调,S为颜色的饱和度,V为颜色的明度,光照不强时,影响的是图像中像素点颜色的明度,与色调、饱和度没有关系,因此可以使用HSV来减少光照对图像颜色识别的影响。为了更好的识别漏油点,实验处理时会将图像RGB转换成HSV。
完成第二部分任务时,机器鱼有一个调整姿态确保其沿着管道运动的过程。机器鱼沿着石油管道前进的直行姿态是:仿生机器鱼头部的两个红外传感器获的宽度大于石油管道的宽度,调整红外传感器的阈值使得读取到蓝色水池里水的颜色为黑色信号,仿生机器鱼腹部红外传感器在石油管道上的获取的是白色信号。一旦出现传感器采集到的信号值与直行姿态不一致,则要分析机器鱼的身体的偏离情况,再综合上一时刻机器鱼的姿态,共同分析得到机器鱼的当前需要如何运动才能保证机器鱼沿着石油管道前进。
6.3 实验步骤
通过实验任务和实现思路的分析,具体的实现步骤如下:
(1)仿生机器鱼任意的放在水池中,利用仿生机器鱼的摄像头按一定的频率去获取水池中的图像,并将图像上传到计算机中。
(2)同时将采集的图像先将RGB色彩空间转换为HSV色彩空间,然后利用Opencv中的cvtColor()函数检测是否有一定数量的白色像素点。
(3)如果有一定的白色像素点,则利用图像处理中的图像增强和仿射变换的操作,来进行图像的预处理通过。
(4)几何检测查找直线区域,判断是否为石油管道。
(5)查找到石油管道后,机器鱼游运动至机器鱼底部检测到白色信号。这里机器鱼已经位于石油管道上方,再调整机器鱼姿态,确保机器鱼在石油管道上。
(6)然后继续不断检测红外传感器上的信号,调整仿生机器鱼的姿态,机器鱼在白色管道一直前进的基础上。机器鱼底部的传感器若检测到了黑色。
(7)为了验证这个是漏油点而不是误检测,此时将多个周期采集到黑色信号作为查找到漏油点的依据,并发出警报。
(8)最后,仿生机器鱼判断自身检测到了几次石油漏油点,少于8次可以重新开始一轮检测过程。
6.4 实验结果
在实验室蓝色水池底部的白色水管表面,我们随机布置了8个黑色圆形区域作为漏油点,以十次实验次数为单位做记录,最近一次记录仿生机器鱼检测到漏油点的比率为73.75%。
在实验过程中,我们仿生机器鱼上安装的红外传感器的宽度、HSV色域中的参数阈值、边缘检测算子等都在不断的调整,调整后让检测到漏油点的整体比率有所上升。该仿生机器鱼硬件和控制程序参加了2018年的中国机器人大赛水中机器人石油管道检测项目,只获得三等奖,由此可见需要我们进一步的算法的改进和参数的调整等处理。
表1 实验检测到的漏油点个数