在以往进行的研究中,一般采用水下手电筒加透明塑料圆柱作为光信标,并在圆柱的内壁上涂以白色硅胶以散射平行光[1]。使用这种单一光信标就能够从图像中提取出摄像机距光信标的三轴距离信息。然而,这种光信标难以提取目标的艏向信息,无法获得6自由度信息。
对此,我们做出了改进,如图9-1所示。改进后的光信标具有4个球状发光体,保证在摄像机中成像形状的三维各向同性。光信标能够发出波长为400~500 nm的蓝绿光,此波长范围内的可见光在水下环境中的吸收率和散射率最小[2]。发光体呈“X”形布置,为后面通过求解P4P问题获取目标位姿提供基础。通过3D打印制造了光信标固定架,确保光信标与航行器之间紧密相连。具体设计如图9-1所示。
图9-1 改进的基于矩形目标约束的光信标阵列实物图
摄像机采集到的原始图像需要进行预处理才能为后续的算法所用。本书中,对原始图像进行的预处理操作包括色彩空间转换、形态学操作和边缘提取。
RGB色彩空间由红绿蓝三原色的亮度作为基向量而定义,在OpenCV中,其值为0—255。HSV色彩空间由色调(hue)、饱和度(saturation)、明度(value)三个量。色调表示颜色在色环上的位置,饱和度表示颜色的鲜艳程度,亮度表示颜色的鲜亮程度,两种颜色空间如图9-2所示。由于水下环境中可见光的散射现象,光信标的亮度在一定距离之外会快速衰减。反映在RGB色彩空间中,表现为三个通道的值均发生了变化。此外,环境光的明暗也会影响光信标在摄像机视野中的颜色明暗。因此,我们将摄像机采集到的图像从RGB色彩空间转换为HSV色彩空间,并在色调方面严格过滤,同时增加明度信息的接受范围,尽可能地获取目标的信息。
图9-2 RGB色彩空间和HSV色彩空间
设一个颜色在RGB色彩空间的向量表示为(r,g,b),并令:
那么,该颜色的色调h可以表示为:
饱和度s表示为:
明度v可以表示为:
实验中所拍摄的图片和转换后的HSV三通道图像如图9-3所示。可以看出,能够根据色域通道的值对四个光信标的颜色进行区分。辅以亮度和对比度通道,进行阈值划分后就能够初步过滤明显的伪光信标(如AR Marker区域和晕影)。
图9-3 HSV通道分离结果
经过色彩空间变换和初筛过滤后,得到的是单通道的阈值图。在阈值图中,可能会存在细小的未被滤除的噪声和目标中心的空洞。可以通过开操作和闭操作去除,其基础是膨胀和腐蚀。
膨胀指的是局部求最大值,这会使图像中的高亮区域逐渐增长,可以用作连接原本分离的连通域。对于图像矩阵Am×n=(ai,j),指定一个核Bp×q=(bi,j),与A做图形卷积,即计算B所覆盖区域的像素点的最大值,并把这个最大值赋值给参考点的指定像素。膨胀的数学表达式如下:
腐蚀指的是局部求最小值,这会使图像中低亮度区域增加,可以用于去除高亮度的噪点。对于上述A和B,腐蚀的数学表达式如下:
开操作即先腐蚀后膨胀,用于消除小的高亮区域,平滑较大高亮区域的边缘。闭操作指的是先膨胀后腐蚀,主要用于排除细小孔洞。采用直径为3的圆形,对阈值图中的高亮部分进行开操作,一方面去除光斑之间的粘连,另一方面能够使高亮部分的外形向圆形靠拢,为后续的算法提供方便。
如图9-4所示,在实验中,影响对光信标阵列的识别的因素主要有:
图9-4 光信标在水下的成像效果
①水—空气界面的全反射造成的光信标阵列虚像;
②AR Marker区域照明光线所引起的漫反射;
③其他环境光造成的随机亮斑。
针对这些干扰,我们提出了一种基于光信标阵列的统计特征的识别算法,能够在水池实验的光环境下准确识别研究中所设计的光信标阵列。
首先,使用Satoshi所提出的边缘提取算法[3]在预处理的二值化图像中寻找边缘。由于光信标内部识别存在未被形态学弥补的黑斑,因此忽略嵌套的边缘,只提取最外侧的边缘,每个边缘都使用边缘点集进行描述。设一次预处理后寻找到的边缘的集合为A,对于其中第k个边缘点集Bk={(xi,yi)|i=1,…,n}∈A,其面积Sk为:
由于噪声和小亮点的存在,我们需要对边缘围成的连通域的面积进行阈值限定:只接受连通域面积大于等于1的边缘点集。如果剩余的点不足3个,则认为未能完全识别,算法结束。否则,对接受的每一个边缘点集Bk使用最小二乘法拟合圆。设待拟合的圆的标准方程为:
则拟合圆的半径为R,圆心为(xc,yc),令:
则得到公式(9-8)的另一个形式:
令:(www.daowen.com)
并设:
进而得到xc、yc、R的最小二乘估计值:
为了描述边缘点集与拟合圆的匹配程度,定义边缘点集Bk的不拟合度fk为点集到拟合圆的圆心距离的方差:
显然,不拟合度fk≥0。fk越大,则Bk与圆的拟合程度越差。当fk=0时,Bk中所有点都在所拟合的圆上。
为了描述边缘点集的完整程度,定义边缘点集Bk的不完整度wk为点集的中心坐标与拟合圆圆心坐标的距离与拟合圆的半径之比:
显然,不完整度wk≥0。wk越大,则Bk在圆上的分布越不完整。当wk=0时,Bk中所有点关于某条拟合圆的直径对称。
此外,定义点集Bk的整体亮度vk为Bk所包围连通域的平均亮度:
式中 vq,p——点(q,p)的亮度;
n——Bk围成的连通域内点的个数。
上面定义的三个特征,即点集关于拟合圆的不拟合度fk、不完整度wk、点集的整体亮度vk,再加上点集的拟合圆的半径Rk,组成了点集的四个特征。这四个特征可以视为一个4维欧几里得空间中的一个点的坐标。即在4维欧几里得空间R 4中,定义边缘点集Bk的特征点为
我们可以合理地假设,所设计的光信标阵列在环境中具有最强烈的特征,那么接下来需要找出特征最好的若干连通域。首先,对不拟合度和不完整度做阈值限定:当其中一个特征大于某个值,则从候选点集集合中删除对应的点集。然后为了统一尺度,将每个点集的特征点归一化,得到:
式中 m——剩余的候选点集的个数。
经过处理后的所有特征均小于等于1,并且每个特征之和都为1。
将点集的数量占点集集合的总体点数之比作为权重,计算加权平均特征:
式中 nk——Bk的边缘点的个数。
计算每个特征点到加权平均特征点的欧几里得距离lk,有:
对所有点集的特征点到加权平均特征点的欧几里得距离求标准差:
删除距离最远的特征点对应的点集,并迭代计算式(9-17)~式(9-20),直到式(9-21)的结果小于某个阈值。如果剩余连通域数量小于4个,则认为未找到足够的光信标。剩下的候选连通域集合可以认为是光信标和它的较大水面反射的集合。为了消除水面倒影的影响,在剩下的点集的集合中取拟合圆圆心Y坐标最小的四个点集,作为真实的光信标阵列图像。
最后,根据四个点集中的平均色调,确定绿色的特征连通域,设绿色连通域的拟合圆圆心为Og=(xg,yg),三个蓝色连通域的拟合圆圆心坐标为Ob1=(xb1,yb1)、Ob2=(xb2,yb2)、Ob3=(xb3,yb3),则其构成的四边形的几何中心Ol坐标(xo,yo)为:
从Ol出发到Og、Ob1、Ob2、Ob3的向量表示为:
令:
的夹角γ1,可通过公式(9-22)计算得到:
同理可得的所成角所成角γ3。按照大小排序,对应的连通域即为按照顺时针排列。
光信标阵列识别算法流程如图9-5所示。
图9-5 基于特征的光信标阵列识别算法
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。