基于最大熵分割和区域生长的水岸线快速提取方法

2021-06-23 10:10刘秀峰庹先国刘婷婷
制造业自动化 2021年6期
关键词:实时性水面灰度

刘秀峰,庹先国,2,陆 景,刘婷婷

(1.西南科技大学 信息工程学院,绵阳 621010;2.四川轻化工大学,自贡 643000)

0 引言

随着机器视觉的发展,越来越多的研究人员尝试将视觉传感器应用到无人艇的环境感知系统中[1],利用视觉实现无人艇的目标检测与导航[2~4]。在不同的应用方向对图像区域的关注点常常不同,例如,水面目标检测则更加关注水面情况。在获取到水岸图像后,先进行水岸分割,提取出水岸线的位置,再做后续处理,将大大提高后续工作的效率,并且,水岸线的提取也有助于无人艇的导航与避障。

目前针对水岸线提取方法的研究主要分为以下几类:基于边缘检测与拟合的方法,如曾文静[5]等人提出的基于Canny边缘检测算子和Hough变换的水岸线提取方法,Kröhnert,M等人[6]提出的基于逻辑回归和样条多项式拟合的水岸线提取方法,此类方法对近似直线的水岸线提取取得了较好的拟合效果,且实时性较好,但不适用于不规则的水岸线提取;基于区域生长的方法,如郑又能[7]等人提出的基于区域生长算法的水岸线提取方法,通过构建最小二乘问题实现自动生长点选择,获得了较好的提取效果,但是区域生长算法属于迭代算法[8],其实时性较差;基于深度学习的方法,如L.Steccanella等人[9]提出的基于U-Net分割网络的水岸线检测方法,此类算法同样存在实时性较差的问题。

本文同样使用区域生长算法进行水岸线提取。为克服区域生长算法实时性差、鲁棒性低等问题,本文提出一种结合最大熵分割和区域生长的水岸图像水岸线提取方法。采用最大熵分割来获取初始生长区域,在此基础上使用区域生长法提取水岸线,将初始生长条件从单一像素变为生长区域,既能解决种子点自动选择的问题,又能加速区域生长过程,同时还可以增加算法的鲁棒性。

1 基于最大熵分割和区域生长的水岸线提取

基于区域生长算法提取水岸线的核心思想是,在水面区域确定初始生长点,制定生长规则并开始区域生长,提取最终生长区域的轮廓,从轮廓中提取水岸线。而传统的区域生长算法,初始生长条件为单一的像素,随着水面波纹及反光的增加,算法鲁棒性降低,且区域生长算法本身属于迭代算法,时间开销大,处理一张分辨率为640×400的水岸图像时间开销在130ms左右,无法满足无人艇实时性要求。利用最大熵分割能快速获取到水岸图像水面的大部分区域,但是无法将水面区域完全分割出来。因此本文采用最大熵分割与区域生长相结合的方式进行水岸线提取,利用最大熵分割解决区域生长时间消耗大的问题,也提升算法鲁棒性。

1.1 算法整体流程

首先将取得的水岸图像转化为Lab颜色空间图像和灰度图,对Lab颜色空间L分量进行最大熵分割得到二值图像,为消除过分割影响,对二值图像进行形态学腐蚀和膨胀相结合的操作以取得准确的感兴趣区域,即为初始生长区域,将初始生长区域载入生长堆栈并向外开始执行区域生长,通过提取区域生长得到的生长区域轮廓得到水面轮廓,去除图像边界上的点并保留最长线段即为检测到的水岸线。其完整的流程图如图1所示。

图1 水岸线提取算法流程图

1.2 基于最大熵分割的感兴趣区域提取

最大熵分割属于阈值分割法的一种,其思想是通过统计图像灰度直方图,计算两类像素的信息熵之和,找到图像最佳分割阈值,将图像分割为只包含前景像素和背景像素的二值化图像,且此时两类像素的信息熵最大[10]。

获取到的水岸图像通常为RGB图像,而RGB图像中R,G,B三个颜色分量高度相关,不适宜直接进行图像分割,Lab颜色空间常用作图像分割的颜色空间[11],其中L分量为亮度分量,保留图像的细节信息,并且能很好的表征水岸图像的亮度特征。因此本文首先将RGB颜色空间图像转为Lab颜色空间以提取初始生长区域,转换后L分量的取值范围为[0,100]。

转换后首先统计L分量图像的灰度直方图,得到图像每级灰度的像素量ni,以及像素总数N,则每级像素的概率分布为pi。其中N、pi表达式如下:

然后开始搜索0到100级灰度图中的每一级灰度t,以t为分割阈值。计算其分割后的背景熵EB和前景熵EF,计算公式如下:

其中pB(i)为背景像素灰度级i的概率分布,pF(k)为前景像素灰度级k的概率分布,其表达式为:

则图像的后验熵之和为:

取图像后验熵和E最大的时对应的阈值t作为分隔阈值,对图像进行阈值分割得到二值图像。二值化后的图像前景像素为高亮度区域,一般包含天空区域和水面区域中的天空倒影部分。图2为两幅典型水岸图像的最大熵分割结果:

图2 最大熵分割

可以看出,如图2所示,样本1取得了良好的分割效果,而样本2由于水岸图像岸体倒影不明显,最大熵分割后某些部分存在过分割,导致部分前景像素弥散到水岸线以上的岸体区域。针对此类问题,本文采用形态学操作中腐蚀和膨胀相结合的方法,首先对最大熵分割的结果采用6×6的结构元素进行腐蚀运算,腐蚀后二值化图像中因过分割断裂开来的水岸线附近区域重新闭合,且分割后水面区域的边界向中心收缩,同时水面噪点增大。因此,在此基础上再进行一次膨胀运算,以消除腐蚀后水面噪点增大的影响,同时为了避免最大熵分割后水岸轮廓过于靠近水岸线对后续生长造成影响,膨胀运算采用的结构元素应小于腐蚀运算的结构元素,在本文中采用4×4的结构元素。对图2(d)进行形态学操作后结果如图3(a)所示:

图3 样本2初始生长区域提取

此时,使用文献[12]提出的边界追踪算法,对操作后的结果进行轮廓提取,保留面积最大的两个区域,通过计算两个区域内像素Y坐标之和找出和最大的区域即为水面区域,提取出该轮廓区域,即为初始生长区域,如图3(b)所示。

1.3 基于改进区域生长的水岸线提取

区域生长其主要思想是利用图像像素间的邻接性和连续性,根据事先制定的规则,合并具有相似性的像素构成一个集合区域达到分割的目的[13],其一般包含三点,初始生长种子点的确定、生长规则和终止规则制定。

传统区域生长法仅从单一的生长点开始生长,通过该方法提取水岸线无法满足无人艇水岸线提取的实时性要求。而最大熵分割后提取出的水面区域已经包含水面的大部分区域,因此,本文将最大熵分割后提取得到的感兴趣区域作为初始生长条件,载入区域生长的生长点堆栈中,将初始生长区域中轮廓线上的点标记为待生长点,轮廓线以内的点标记为已生长点,在灰度图像上,采用8邻域区域生长的方式开始向外进行区域生长,其中生长准则制定如下:

其中Th为生长阈值,Dk为第i个种子点像素的灰度值与其第k个未生长邻域像素的灰度值之差的绝对值,即:

RGB图像转为灰度图像公式为:

由于上诉公式涉及到浮点运算,为了加快转换,本文采取整数移位法加速灰度图转换,将公式中的参数提高128倍并用去尾法去掉小数部分后得到新的参数,将R、G、B值带入计算后通过移位运算右移7位得到最终结果,优化后的转换公式如下:

由前面分析可知,图像信息熵可以很好地表征图像特征差异情况,其在图像处理领域已有较为成熟的应用[14]。通过对水岸图像进行大量实验发现,将最大熵分割中前景像素图像熵乘以一个经验系数a作为区域生长阈值可以取得较好的结果,因此生长阈值Th取值如下:

针对不同的水岸环境可调整系数a获得精确的分割效果,在本文中,a取值为1.5,对上诉样本2用本文所述方法进行区域生长后得到的结果如图4所示。

图4 水岸轮廓提取

图4(a)为区域生长结果,图4(b)白色线条为对生长结果进行轮廓提取的结果,将轮廓中图像边缘的像素点去掉后保留最长的一条线段即为水岸线,如图4(c)白色线条所示。

2 实验验证及误差分析

2.1 定性分析

为了验证本方法的有效性和鲁棒性,本文选用三组不同场景下拍摄的水岸图像样本进行水岸线提取实验,以验证本文所提方法。三组样本每组20张,共60张,分辨率均为640×400,每组中具有代表性的水岸图像样本如下,第1组水岸图像采集自人工湖面,水岸轮廓较为复杂,倒影区域明显,第2组水岸图像采集自狭窄的河道,图像中并未拍摄到天空区域,同样水面区域倒影明显,水岸轮廓为两条相交的曲线构成,第3组水岸图像采集自临近傍晚光照较暗时刻的江面,其图像亮度值低,水岸线近似直线。实验操作平台为Intel(R)Core(TM)i7-4790 CPU@3.60GHz,内存为8G。操作系统为Ubuntu16.04,算法基于C++实现,采用OpenCV开源图像处理库。

实验结果如图5~图7所示,其中编号a为水岸线提取样本原图,编号b为最大熵分割后获得的初始生长区域,编号c为执行区域生长后的结果,编号d为提取结果,白色线条为提取到的水岸线(为增强视觉效果,将线宽设置为5像素)。从结果中可以看出,针对三种不同的水岸环境图像,本文所提方法均能完成水岸线提取,且第1、3组的提取结果与实际水岸线重合度较高,而第2组由于水岸线附近的岸体上生长的青苔与水岸线颜色过于相似,致使提取结果与实际情况存在一定的偏差。

图5 第1组实验结果

图6 第2组实验结果

图7 第3组实验结果

2.2 定量分析

本文采用偏移误差RMSE对本文所提算法的准确度进行定量评价,其表征了本文所提算法提取的水岸线与实际水岸线的偏移量,RMSE值越小说明误差越小[15],其计算公式为:

其中A为实际提取到的水岸线按照均匀采样n次得到的像素采样矩阵,B为人工提取到的水岸线上,对A矩阵上各点搜索曼哈顿距离最近的像素坐标生成的像素矩阵,曼哈顿距离Di定义为:

本文中,n取200,RMSE向上取整,单位为像素。同时为了验证本文所提方法的实时性,采用传统区域生长算法进行对比,其生长阈值设定与本文相同,而初始生长点采用人工方式确定,实验同时统计了两种算法下三组样本水岸线提取的平均耗时,单位为毫秒,其结果统计如下:

从表1中可以看出,本文所提算法偏移误差在3到9像素之间,而在用时方面,本文平均最大耗时仅为42ms,大大低于传统区域生长算法,满足无人艇水岸线提取实时性的要求。

表1 水岸线提取实验统计结果

3 结语

本文提出一种基于最大熵分割与区域生长相结合的水岸线提取方法,利用最大熵分割算法分割迅速的优点,解决传统区域生长算法在时间复杂度上较大,难以满足实时分割的问题。并通过对最大熵分割后的二值图像进行膨胀与腐蚀相结合的形态学操作,保证最大熵分割后有效获得水面初始生长区域。而从初始生长区域开始区域生长,大幅度提高区域生长效率的同时也增加了算法的鲁棒性。实验结果表明,该方法能保证良好的水岸线提取精度,并且在此基础上加速区域生长,时间开销平均仅为传统区域生长算法的1/4,具有良好的实时性。

猜你喜欢
实时性水面灰度
采用改进导重法的拓扑结构灰度单元过滤技术
水黾是怎样浮在水面的
创造足以乱真的水面反光
基于最大加权投影求解的彩色图像灰度化对比度保留算法
航空电子AFDX与AVB传输实时性抗干扰对比
计算机控制系统实时性的提高策略
争夺水面光伏
基于灰度线性建模的亚像素图像抖动量计算
一块水面
一种车载Profibus总线系统的实时性分析