水尺计重方法是船舶货物计重的常用方法,通常由人工观测进行测定。受到人视觉观测精度的限制,人工观测水尺的方法劳动强度大、效率低、误差大。因此,亟待提出一种轮船吃水线测定算法,实现轮船货物重量的精准测量。这些测量算法需要满足多个指标的要求,如自动化程度高、测量准确且快速等指标,因此需要利用多目标方法设计新算法。
研究人员先后提出基于压力传感器、激光水位、机器视觉的新型船舶水尺检测算法。孙国元等[1]提出了采用船体两侧的压力传感器减少波浪、轮船摇晃等环境因素对测量结果的不利影响。陈文炜等[2]搭建了船舶吃水线检测系统,根据激光测距仪测出的基准面和水面之间距离,获得轮船的吃水量。但是,由于船体外侧安装压力传感器,整体安装施工难度大;长时间工作在恶劣环境下,半导体硅片持续受压变形,容易发生零点漂移,设备维护量大。激光水位检测易受到水面漂浮物影响,测量精度和稳定性难以保证;其设备只能安装在轮船船体上,无法满足航道管理部门对快速离船吃水线检测的要求。
考虑到机器视觉算法不需要复杂的设备安装,对环境适应性好,周广程[3]根据水尺线字符的特点,利用HIS颜色空间信息,提出一种基于梯度幅度的启发式边缘提取算法。刘丹[4]针对彩色船体图像,采用欧氏距离作为相似性度量,提取吃水线。Tsujii等[5]在提取船体字符的基础上进行模板匹配。Ran等[6]结合Canny边缘检测和Hough变换,估计吃水线的位置。类似以上各种吃水线检测算法主要是通过固定相机采集吃水线所在区域图像,采用图像处理的方法实现船舶吃水线识别。此外,固定相机获取船舶外弦吃水线图像难度较大,也很难实现船舶吃水线区域的快速精准定位。
鉴于此,本文构建了基于无人机的视觉获取平台,通过其携带的高清摄像头,实现船舶水尺图像采集。采用融合水尺特性先验知识的轮廓统计筛选方法,提取先导知识;综合利用像素点在L×a×b颜色空间的信息,采用知识引导的K-means++聚类和分水岭算法,实现船舶吃水线区域的动态识别和吃水线测定。该算法克服了传统固定拍摄设备的布设和实施困难,通过机器视觉算法,实现了吃水线区域的实时识别,具有稳定的测定精度,满足吃水线测定的快速性要求。
无人机搭载的高清相机能够高效采集船舶吃水线区域图像,简化了固定相机的复杂布设,解决吃水线测定效率低和船舶外弦水线测定困难等问题。但是,无人机环绕轮船飞行,受到飞行航迹波动的影响,船舶吃水线区域在图像中的位置并不固定,需要动态标定;在吃水线上方约10 cm处存在海浪长期拍打船体形成的水迹线,干扰吃水值的准确读取;另外,不同曝光环境、水波纹等现象的存在,也影响到吃水线的精确识别。因此,基于知识的船舶吃水线动态识别算法中,如何在具有上述众多干扰的复杂场景下,准确定位到感兴趣的吃水线区域,是该类测定系统的核心难点问题,也是区别于固定相机测定系统的特有问题。
为解决上述问题,本文提出复杂场景下的船舶吃水线区域识别算法。针对动态变化的吃水线区域,采用统计方法筛选吃水线刻度轮廓,提取感兴趣的吃水线区域先导知识;针对水迹线的干扰,结合聚类与分水岭算法,完成吃水线的精确分割;通过颜色空间转化,避免不同曝光环境下,光照强度导致的吃水线区域误判;采用滤波算法,解决大量的水波纹对算法时间和识别精度的影响。
为获取完整的吃水线及其字符信息,需在整幅图像中定位到感兴趣的吃水线水平区域。本文给出一种融合水尺特性先验知识的轮廓统计筛选算法,实现快速的吃水线水平区域定位。如图1所示,在未进行预处理的整幅二值化图像中,存在大量水波纹,在轮廓查找中,将识别出过多的微小区域,增加算法计算代价和识别难度。本文首先对采集获得的船舶水尺图像进行滤波,由于mean-shift算法[7]在滤除细微干扰的同时,能够保留图像的主要边缘[8],既保留了重要的吃水线边缘信息,同时也可消除水尺图像中大量水波纹的干扰、有效减少水波纹对识别结果的不利影响。
图1 水波纹干扰
Figure 1 Interference of water ripples
对滤波后的水尺图像,根据邻域内的像素值,采用自适应阈值[9],得到二值化图像。记图像中每个像素点的值为Pi,则有Pi={0,1}。根据轮廓像素的连续性,进行轮廓查找和记数,并保存其坐标位置。整幅图像中轮廓数量记为s,当前一个轮廓闭合时,则有:
(1)
在水平方向上,将图像等距划分成n个区间,在保证准确划分字符区域前提下减少计算量。图像宽度记为w,根据各个轮廓的水平起始位置,将其划归到对应的区间内,则每个区间宽度满足假设xi(i=1,2,…,n)为每个区间的起始点坐标,则有:
(2)
根据n个区间的起止坐标范围,将每个轮廓按各自的坐标位置划归到所属的区间。每个区间所包含的轮廓组成集合A{si},i=1,2,…,n,如图2所示。
图2 图像水平区间划分(n=10)
Figure 2 Division of image horizontal interval(n=10)
船舶吃水线字符通常由上至下分布,并且分布紧凑。非字符区域识别出的轮廓通常包括船体锈迹轮廓和非船体背景轮廓。船体锈迹轮廓数量少,分布分散;非船体背景轮廓细节众多,背景轮廓数量远远多于字符轮廓,并且背景区域横跨多个水平区间。根据以上船体字符分布特征的先验知识,依据轮廓统计,对感兴趣区域的水平位置进行确定。记|A{si}|表示集合中的轮廓数量,j为目标区域序号,sj为识别出的目标区域所包含的轮廓数,sj-1和sj+1为其相邻的左、右2个区间轮廓数。设定相邻区间轮廓数之和的界限函数为α(n),与轮廓数n呈反比。在目标区域与相邻区间轮廓数相加满足界限函数时,包含轮廓数最大的区间,被认为是感兴趣的吃水线区域水平位置,即满足:
(3)
识别出整幅图像中感兴趣的吃水线水平区域后,需要在垂直方向上确定出吃水线位置,最终得到吃水线区域标定。相较于RGB颜色空间,作为感官均匀颜色模式的L×a×b颜色空间采用a和b分量描述颜色范围,包含更多颜色信息[10]。当采集图像的光照条件存在强弱变化时,可以舍弃L分量,仅考虑a和b分量,可以排除光照条件对图像识别结果的影响。因此,先将RGB图像转换为XYZ图像,再实现XYZ图像到L×a×b色彩空间的转换[11]。R、G、B为像素的3个颜色通道;a*、b*为L×a×b色彩空间2个通道,Xn、Yn、Zn为CIE标准照明体的三刺激值;f(t)为判断函数。
(4)
(5)
(6)
基于感兴趣吃水线区域水平位置,在L×a×b颜色空间中,从垂直方向上定位船体和水面交界处能够获得完整的吃水线区域。在船舶水尺图像中,船体表面和水面存在显著颜色差异。因此,采用K-means++聚类算法对二者颜色进行分类,设置聚类簇为2,迭代次数为T,从m个像素样本po(o=1,2,…,m),选取2个点作为初始聚类中心cq(t)(q=1,2,t=1,2,…,T)。传统K-means算法随机选取初始聚类中心,而K-means++算法[12]则要求初始聚类中心之间具有足够远的距离。由于船体和水面在图像上的相对位置固定,所以聚类中心的初始化是将图片中部最上点设为第1个聚类中心,代表船体颜色;第2个聚类中心在距第1个聚类中心相似度距离远的区域,即选择图片中部最下点,代表水面颜色。采用该选取方式,能够减少迭代次数,优化算法时间。随后,计算样本po到各聚类中心cq(t)的相似度距离D(po,cq(t)),并将样本划归到具有最小相似度距离的类别中:
D(po,cq(t))=‖po-cq(t)‖2。
(7)
根据类别Wq中包含的像素点更新其聚类中心:
(8)
反复迭代上述聚类过程,直到满足下述收敛条件:
|J(t+1)-J(t)|<ε;
(9)
(10)
式中:J(t)为目标函数;ε为设定阈值。
在计算出2个颜色区域的聚类中心后,在L×a×b颜色空间下,计算图像中所有m个像素点po到聚类中心cq的颜色距离D(po,cq),筛选出最大距离Dmax(po,cq),设置相关倍数∂∈(0,1),定义距离阈值Dθ,则有:
Dθ=∂Dmax(po,cq)。
(11)
当D(pi,cq)位于阈值区域内时,则确定pi作为该类别具有较强代表性的种子点,进行分水岭算法[13];否则,将pi从原来的类别中分离出来,视为空白点。通过计算各类别内样本到聚类中心的颜色距离,筛选出与聚类中心距离相近的颜色对象,作为该类别具有较强代表性的种子点,采用分水岭算法进行准确的吃水线分割。根据吃水线的识别,在垂直方向上保留完整的船体字符信息,结合水平方向上的预测区间,实现吃水线及相应字符位置的感兴趣区域识别。
无人机船舶水尺图像采集于某港口检验检疫局的轮船视频。本文所提吃水线区域识别算法在i5-4210CPU,4 G内存的笔记本电脑上通过Visual Studio Code编程实现。选取不同环境下采集图像验证算法的通用性,这些图像中包括水迹线、不同曝光程度,以及水波纹等多种干扰。
水平划分区间数目设置为n=5、10、13、15、20,其目的是分析不同水平划分区间数对识别效果和有效轮廓占比率的影响。表1和图3分别是不同区间数目下获得的区间中有效轮廓占比率和区间识别准确率。图3中每幅图像下分别是n=5、10、13、15、20时获得的感兴趣区域,当为15和20时,划分过于细致,包含的有效轮廓占比大,具有很高的轮廓利用率;但由于识别出的区域范围过小,受到相机拍摄角度的影响,当船体字符出现倾斜时会使字符信息不完整,识别准确度降低,甚至造成误识别。当n为5时,识别出的区域范围大,即使出现船体字符倾斜的情况,也能将全部信息包含其中;同时包含过多无效信息,有效轮廓占比小,会造成计算冗余。而当n为10和13时,能够有效解决以上两个问题,既有较高的有效轮廓占比,又能准确、完整获得吃水线信息。因此,为预防各种倾斜情况,确保算法适用性,通常选择10~13作为水平划分区间数n的取值范围。
表1 水线位置识别准确率与有效轮廓占比率
Table 1 Accuracy of waterline position recognition and ratio of effective contour
n有效轮廓占比率/%识别准确率/%542.581001058.971001364.541001571.94752075.9250
图3 不同水平区间数目下识别的吃水线水平区域
Figure 3 Waterline horizontal regions identification under different numbers of horizontal intervals
基于船舶吃水线水平区域图像,在垂直方向上对吃水线进行精确分割。由于水波纹以及水迹线等干扰的存在,传统的检测算法会出现无效识别或者误识别的情况。该部分实验采用Canny算子以及传统的K-means算法检测吃水线,针对水波纹和水迹线的影响与本文算法进行对比分析。
Canny算子检测出很多包含水波纹和水迹线的边缘信息,难以将吃水线从众多边缘中提取出来。同时,该方法识别出的吃水线也存在如图4(a)所示的间断情况,另外,传统的K-means算法将水迹线误识别成吃水线,如图4(b)所示,主要是因为水迹线导致水面与船体颜色边界混淆引起的误识别。本文结合轮船和水体的先验颜色知识,指导初始点选取,根据样本点的颜色和空间信息,筛选出与聚类中心距离相近的颜色对象,作为各自类别中具有较强代表性的种子点进行分水岭分割,对相近颜色的差异更敏感,能够有效避免水迹线的干扰,如图4(c)所示。显然,所提算法可以更为准确地识别吃水线位置。
图4 吃水线精确识别
Figure 4 Precise segmentation of waterline
为了探究本文算法在识别效果以及计算时间上的优势,将其与未滤波的传统阈值算法[9]进行对比。当水平划分区间数目n=10时,表2和表3分别是2种算法得到的轮廓数量和计算时间,图5表示了各场景下不同算法的轮廓情况对比以及在整幅图像中定位出吃水线区域的算法效果。
表2 各场景下不同算法的轮廓个数统计
Table 2 Contour statistics of different algorithms in scenes
区域场景1场景2场景3传统算法 本文算法传统算法 本文算法传统算法 本文算法s12651771832184s23814521115219s346104121494s412753101618341s578185944s630311571214s743718955263s842695144335s931510752503s1018877206820
表3 各场景下不同算法的计算时间统计
Table 3 Calculating time statistics of different algorithms in each scenes ms
场景1场景2场景3传统算法本文算法传统算法本文算法传统算法本文算法412810101913
分析表2和图5所示结果可以得到,与对原始图像进行轮廓查找相比,经过滤波处理的图像在整幅图像范围内轮廓数量明显减少,在算法计算时间上也有所减少。另外也可以看出滤波算法在轮廓信息不丰富的区域轮廓缩减不明显,但在图像的其他区域效果显著,能够最终在整幅图像中准确定位出吃水线区域。对于具有复杂港口背景以及更大水波纹面积的场景1,本文所提算法能滤除大部分水波纹干扰,根据轮廓分布特点和船体与水面颜色差异,可以在整幅图片范围中准确识别出感兴趣的吃水线区域。对于存在光照变化的场景2和场景3,不同曝光程度导致船体颜色变化明显,本文所提算法对相近颜色的差异更敏感,结合样本点的颜色和空间信息对吃水线进行分割,可以准确识别出吃水线区域。但光照变化的场景2和场景3不包括港口岸边的众多设施,作为干扰需要排除的轮廓较少,在轮廓缩减上与具有复杂背景下的船舶图片相比效果不明显,且算法计算时间缩短量少,但仍优于传统算法。
图5 船舶吃水线区域识别
Figure 5 Identification of ship waterline area
已有的水尺机器视觉检测算法主要依赖固定摄像头,通过拍摄水尺区域,实现对已知轮船水线区域的吃水线识别。但是,固定相机的布设和实施困难,且效率低下。采用无人机搭载相机航拍船舶图像,避免了布设复杂的固定相机,易于实际推广。但是,航拍图像中的船舶吃水线区域受到飞行轨迹的影响,存在位置波动。为此,给出一种融合水尺特性先验知识的轮廓统计筛选算法,用于定位整幅图像中的感兴趣吃水线水平区域。综合利用像素点的颜色和空间信息,在L×a×b颜色空间下,结合知识引导的K-means++聚类与分水岭算法,实现吃水线的精确分割,有效避免光照和水迹线的干扰,实现动态视频下船舶吃水线区域的快速识别。该算法能够较好适应港口的复杂航拍场景,具有较强的环境鲁棒性和识别快速性,为有效提高港口的自动化水平奠定了基础。在后续的工作中,基于识别的吃水线区域,将进一步研究水尺的精确计重算法。
[1] 孙国元,毛奇凰. 自动检测船舶吃水和稳性参数的方法探讨[J]. 中国航海, 2002,25 (2): 30-32.
[2] 陈文炜,俞汲,徐杰,等. 一种船舶吃水测量系统[J]. 中国造船, 2013, 54(1): 166-171.
[3] 周广程. 图象处理技术在船舶吃水自动检测系统中的应用[D]. 南京:南京理工大学, 2006: 28-41.
[4] 刘丹. 基于图像处理的散货船港航交重计量系统[D]. 大连:大连海事大学, 2012: 44-49.
[5] TSUJII T, YOSHIDA H, IIGUNI Y. Automatic draft reading based on image processing[J]. Optical engineering, 2016, 55(10): 1-9.
[6] RAN X, SHI C J, CHEN J B, et al. Draft line detection based on image processing for ship draft survey[C]//Proceedings of the 2011 2nd International Congress on Computer Applications and Computational Science. Berlin: Springer, 2012: 39-44.
[7] CHENG Y Z. Mean shift, mode seeking, and clustering[J]. IEEE transactions on pattern analysis and machine intelligence, 1995, 17(8): 790-799.
[8] 李光, 王朝英, 侯志强. 基于K均值聚类与区域合并的彩色图像分割算法[J]. 计算机应用, 2010, 30(2): 354-358.
[9] SUND T, EILERTSEN K. An algorithm for fast adaptive image binarization with applications in radiotherapy imaging[J]. IEEE transactions on medical imaging, 2003, 22(1): 22-28.
[10] 李冠林, 马占鸿, 黄冲, 等. 基于K_means硬聚类算法的葡萄病害彩色图像分割方法[J]. 农业工程学报, 2010, 26(增刊2): 32-37.
[11] 杨超, 刘本永. 基于Lab颜色空间纹理特征的图像前后景分离[J]. 激光与光电子学进展, 2019, 56(12): 59-64.
[12] XU Y J, QU W Y, LI Z Y, et al. Efficient k-means++ approximation with MapReduce[J]. IEEE Transactions on parallel and distributed systems, 2014, 25(12):3135-3144.
[13] VINCENT L, SOILLE P. Watersheds in digital spaces: an efficient algorithm based on immersion simulations[J]. IEEE transactions on pattern analysis and machine intelligence, 1991, 13(6): 583-598.