基于图像语义分割的船舶水线检测
2022-06-14张永忠
吕 悦,张永忠
(北京城市学院,北京 顺义区 101399)
1 引言
如今,语义分割是数字图像识别的关键技术之一。作为数字图像识别的中心问题,对于在不同场景中识别不同的事物更加重要,因为在现实生活中,越来越多人们无法探索到的地方需要用到电子设备,在应用场景图像中识别或推理出相关的语义。例如VR视觉,汽车的自动驾驶功能,人与机器的交互等。
船舶水尺已经在各种大型轮船上存在,并且也是重要的安全指标,如果能够精确地获取吃水数据、能够及时的检测船舶的安全状态以及调整船舶,就可以有效的提高安全性,并且减少人力资源的消耗,同时,在各种散装货物的重量测量中,通过船舶水尺进行测量的数不胜数。因为通过船舶水尺计重的方法拥有着便捷与效率高的的特点,使用此方法可以简单并快速的知道船舶装载货物的吨数。可见船舶水尺测量货物重量的方法已经是散装货物计重的常用方法,并且通过计算结果可以衍生出对商品进行售卖的结算、船只的载重、货物运费计算的依据.
目前如果要检测船舶吃水线,主要依靠的是有经验的船员、商检人员等拥有相关专业经验的人员通过目测进行获取数值。并且为了获得较为准确的数值,观察人员需要通过多次的查看通过取平均值才能获得较为准确的数值。这种通过人的双目测量获得船舶吃水线数值的方式常常带有较大的主观性与局限性。其次由于现实状况的限制,例如由于观测角度或者恶劣天气的问题,导致水尺读数读取较为困难,往往会存在较大误差,导致观测精度往往没有那么精确,如果利用机器去检测可以节省大量的人力资源并增加一定安全性。
为替代人工,实现自动检测,本文研究了基于图像语义分割的船舶水线检测方法,采用python作为仿真环境,利用图像处理技术对船舶水尺处水位线的识别工作,能够克服由于人工目测出现的问题,能够有效地检测出水尺处水线的位置,并对之后的数据处理提供了可能,降低了系统的复杂性,并提高了水尺检测的安全性和准确率。
为了提高检测的准确率,本文提出了在原有的方法上进行改进,相对于对于传统方法减小了对船体缝合线的错误识别,将部分划痕识别为水线的错误率减小,或者是将部分船体错误识别为水面的情况进行解决。实验结果证明,该方法在不耗费大量的前提数据上进行有效的识别,并保持一定的正确率。
2 总体结构设计
2.1 开发环境
系统软件运行在Windows平台上,Windows操作系统能够使系统的运转更明了,同时能够使操作简单。系统程序使用编程语言python来进行能够更加清楚地观察水线检测的过程与结果。
2.2 系统结构设计
船舶水线检测系统组成如图1所示。包含图像预处理,水线检测,为了方便水尺计算建立水线轴三部分。水线检测包括对水体和船体提的分割以及优化。水线建轴包括对水线的提取以及建立坐标轴。
图1 总体结构设计图
3 图像预处理
为了更简便的识别,将水尺图像由三通道彩色图像通过python脚本转换为灰度图像,灰度图像相较于彩色图像,在进行边缘检测时较为方便,速度会更快,计算量会更少,然后对图像进行二值化处理,因为只需要识别水体与船体,所以图像上像素点的灰度值范围变为0与255之间,将分割后的图片转换成用灰度值组成的矩阵。所识别的灰度值等于或者大于自行指定数值的像素识别为水体,识别灰度值小于自行指定数值则识别为背景[7],如图2。
图2 图像灰度化
4 船与水面的分割
本文采用Deeplab模型架构,Deeplab是一种卷积神经网络的架构。deeplab相对于FCN来说,虽然依旧采用了FCN网络获取分数图,但是对VGG网络进行了一些修改。在得到分数图的方法上,deeplab要比FCN方法的效果好了一些。Deeplab网络将VGG网络中池化层中第四层与第五层的步长由2改为了1,并且增加了一个填充的步骤。这样的改动,使得VGG网络总步长由原来的32变成8,所以在输入图像后得到的分数图的效果要比FCN网络的效果好了很多[2]。
通过实验后发现,Deeplab模型实验效果优于U-net模型的实验效果,Deeplab能够将水面与船体清楚地识别并分割出来,而U-net只能够将图像大概的分割出来,Deeplab分割效果更好能够清楚的识别出水体,提取的边缘更加连续与平滑,如图3所示,但是在训练过程中所需要的时间更长; U-net训练速度很快,但是识别效果并不好,如图4所示。
图3 Deeplab分割效果
图4 U-net分割效果
5 图像语义分割优化
在进行水体分割后,会有一些错误分割对之后的识别有一定的影响,添加识别约束来进行水线提取的准确率。
图像中出了水体和船体,在识别中可能会将部分船体或者是部分背景识别为水体,为了消除这些减小这些错误是被识别,在检测中加入图像识别约束,因为水体应为图像中除背景外最大的一块面积,将分割后所有识别为水体的区域进行面积计算,并将其进行比较,保留面积最大的区域作为水体区域,并将其输出。
图5 单连通域约束
6 基于边缘检测的水线提取
由于船舶水线经常是曲折线条偶尔会有直线线条,本文通过边缘检测进行水线的提取,利用像素灰度的突然变化来寻找图像的边缘,当获取分割出的水面区域后,对水面区域进行边缘检测 保留水面区域的边缘,上边缘即为水线。本文采用Canny算子进行水线提取
6.1 Canny检测
1)图像灰度处理
对分割后的图像进行灰度处理,将RGB格式的彩图的3个通道进行加权平均,方法为
Gray=(R+G+B)/3
(1)
在进行识别时能够有效的减少识别时间,并便于后续优化的添加。
2)噪声影响处理
处理时噪声会对边缘检测效果产生误差,所以为了减少误差,减少噪声数量,实现较为光滑的图像,使用高斯滤波器与图像进行卷积。
离散的高斯卷积核H: (2k+1)×(2k+1)维,元素计算方法
(2)
高斯卷积核大小对最终的识别结果会产生不同程度的影响。如果卷积核尺寸选择的略大,检测时对噪声的敏感度也会比较小,但是对于边缘检测出现的误差率也会略微增大。所以要寻找一个较为适合的大小。
3)像素点的梯度强度与方向计算
图像的边缘有指向各个方向的的,所以Canny算子沿X轴和Y轴以及对角线四个方向进行梯度的计算,本文使用Sobel算子进行梯度的计算,因为相对于Prewitt算子等其它几种边缘检测算子,Sobel算子检测出来的边缘亮度较为鲜艳,线条更加清楚,更加易于观看。
4)非极大值抑制
水线检测只能存在一个精确的显示,所以要进行非极大值抑制,将除局部区域最大值外的梯度值抑制,将水线图像中的每一个像素梯度值与正负梯度方向上的像素进行比较,如果所选取的像素梯度值比其两个方向上的像素大,则保留此像素:反之则将像素值抑制[6]。
5)双阈值检测
在对图像进行抑制之后,识别出的边缘能够更加接近真实的水线。然而,水线周边还存在着部分由于噪声引起的错误边缘,双阈值检测就是为了消除这些错误识别,若是水线周边存在低于低阈值的像素就进行舍弃或删除,保留高于高阈值的像素。是水线更加的精确。
Canny算子检测结果如图6。
图6 Canny算子检测结果
由检测结果可知,Canny算子检测性较高,相对于传统的Sobel检测算子,更不容易受到噪声的影响,能够识别到较为不明显的边缘,在进行检测时若是强弱边缘相连接时,能够将弱边缘显示出来。并且对图像的细节也能很好的检测,对于水面没有波浪,并且水线呈现一条线时,位于X轴方向识别的水线效果更加准确。在需要高精度的识别时使用会有较好的效果。
6.2 建立水线轴
由于图像中除水线外还会有类似船体分割线或划痕之类并不需要的线,这些干扰线都会使检测出现伪边缘,并为了对后续的吃水值的计算的准确性,所以需要对图像进行添加约束的直线检测。当水线检测之后,按照实际情况进行约束的添加:
1)一般靠岸船舶水线起伏不会非常大,通常在正负20°,若边缘检测出超过设定数值,会删除此次霍夫直线检测结果。
2)水线通常为图像中延水平方向上最长的,将检测出的水线进行比较进行只保留最长的一根线。
3)有的水线在中间部分起伏比较大时,可能会检测出中断断续续的水线,这时将这些片段的的水线进行连接,作出一条拟水线。
通过霍夫直线检测后,保留直线作为坐标系的X轴,如图7所示。
图7 水线建轴
7 实验分析
为了验证本文的有效性,进行相应的实验。随机选择船体水尺处的图像输入到训练后的模型中进行检测,识别后输出图像如图8所示。
图8 实验结果
从实验结果来看,训练后的模型能够有效的识别出水线的位置并将其进行单独的显示,并且能够排除在13M字符处出现的船体缝合线的干扰,拥有一定的准确率。
分别采用传统检测方法与本文方法进行船舶的水线检测。
表1 不同方法的检测结果
随机选择船体水尺处的图像输入到训练好的模型中进行检测,从实验结果来看,训练后的模型能够有效的识别出水线的位置并将其进行单独的显示,并且能够排出一定的干扰项,从而较少识别错误的发生。相较于传统的水线检测,本文水线检测准确率要优于传统的检测。说明本文系统可以更加准确地检测出水线。
8 结论
本文实现了一种通过图像视觉获取船舶水线的方法,应用计算机代替人工对水线的识别,为后续的吃水值计算提供了可能性,并且相较于人工水线识别,计算机是被降低了人工检测时的误差,增加了安全性与准确性,实验结果表明,使用图像识别技术能够识别出水线位置,并有一定的准确率,能够满足实际应用需求。实验的不足之处在于:虽然在小规模的测试集上验证了该方法的有效性,但缺乏大规模的实验验证,水线提取的精度有待进一步提高。