基于图像处理的轮船吃水线计重系统的研究与实现
2023-09-16熊璐康
熊璐康 余 晟
(1.中国直升机设计研究所,江西景德镇 333001;2.海装武汉局驻南昌地区军事代表室,江西南昌 333000)
0 引言
在现代化进程中,中国的国际地位越来越高,成为世界第二大经济体,海上进出口贸易增多,对于大型轮船的使用频率越来越高。轮船的吃水线是评价轮船载重的重要指标,吃水线计重是我国轮船运输行业运用最广泛的一种计重方式,我国大宗商品运输计重主要依靠吃水深度。在《进出口商品重量鉴定规程》中,根据轮船的浮力公式,记录轮船装载之后的吃水线数值。并依据轮船的图表,经必要的校正,查算轮船排水量,结合轮船压载水、淡水、燃油、船用物料及非货物的重量测算,以确定装载砂石重量的计重方法。该测量方法需要工作人员下到轮船的6 个吃水点,通过人眼目测的方法确定吃水线位置,并且要观察当时的水面情况,做好记录,然后查询轮船上的压载水密度及水位、淡水储量、燃油储量、污水量等数据参数,在对照排水量表、校正表、水油舱计量表、静水力曲线图表等参数对比表后计算出轮船的载重量[1]。
在人工观测的过程中,由于缺乏精密的测量仪器,轮船载重量的确定受人的主观因素影响比较明显。轮船计重的大小涉及多方利益,对于轮船方和地方及国家税务都是不公平的。由于各个采区的采砂监管水域广,涉及的轮船只比较多,调查取证困难,过度采砂对环境造成的伤害是不可逆的,因此轮船吃水线标定轮船载重是水尺计重领域的一个重点难点问题。提高吃水线计重的精准度、客观性,对保障吃水线测量人员的人身安全,加强环境保护,遏制违法采砂的行为有着重要意义。
1 吃水线检测
基于图像处理的轮船吃水深度检测归根结底是图像的目标检测,主要检测吃水线位置和吃水线位置所对应的字符的位置。图像的目标检测步骤,包括输入图片数据,灰度化、滤波、池化,边缘检测,吃水线粗定位,检测出吃水线。
使用阈值分割法对轮船吃水线图像进行处理。在图像分割中阈值分割法比较常用,主要是通过比较目标与背景的差异,通过设置不同的阈值把图像分为多个类型,从而实现目标与背景的分离。过程如图1 所示。
对于阈值分割:检测图像中每个像素点的像素值大小,判断其是否满足阈值要求,从而确定其属于目标区域还是其他区域,属于目标区域像素值置1,其他区域置0,得到一副二值图像。用数学表达式来表示,则可设原始图像f(x,y),T为阈值,阈值分割时则满足下式:
灰度直方图,是灰度图像中不同像素点个数的统计图,在图像分割和图像灰度变换等处理过程中起到重要的参考作用。从数学角度上看是一个与灰度值和该灰度值在图像中出现的次数的数学函数,令x表示灰度值(一般0 ≤x≤255),则f(x)表示当x为特定灰度时,一幅图像上灰度值为x的像素的数量,其中f(x)是一个离散的函数[2]。从图形上来说,灰度直方图就是一个平面图,横坐标表示不同的灰度级别,纵坐标表示具有各个灰度值或者灰度级别的像素在图像中出现的次数或者概率。
如图2 所示,得到图片经明度公式计算后的灰度图片直方图(依次为图像1、图像2、图像3 和图像4)。
图2 灰度直方图
阈值法是最常见的区域分割算法,轮船吃水线图像分为轮船的漆面区域和水面区域,图片中从轮船的漆面到水面之间会发生像素的突变,在绘制灰度直方图时,如图2图片会出现双峰现象,如图像1、图像3、图像4,(其中图像1 的三峰现象是由于漆面有黑色和红色导致的),基于图像固定阈值的图像分割方法对于灰度直方图为双峰的轮船吃水线图片吃水线检测效果最佳,取波谷的像素范围为固定阈值,能清楚地检测出轮船吃水线。之后再进行霍夫直线检测以确定吃水线在图片中的位置,对于图片,空间中的每一个像素点在图片中是有固定坐标位置的,确定图片中直线两个点(x1,y1),(x2,y2),根据公式k=(y1-y2)/(x1-y2),b=y1-kx1,得到y=kx+b,确定直线函数方程。实验结果如图3 所示。
图3 阈值分割与霍夫直线检测之后的照片
图3 所示的红线是经霍夫检测之后得到的直线,得到直线后程序会返回该直线首尾两点的坐标,通过坐标确定直线的函数表达式以确定吃水线在图片中的位置。结果如表1 所示。
表1 直线函数方程
2 字符检测
光学字符识别涉及检测图像上的文本内容,并将图像转换为计算机可以轻松理解的编码文本。扫描和分析包含文本的图像,以识别其中的字符。识别后,该字符将转换为机器编码的文本。
第一步字符目标检测:为了确定目标在图片中的位置,首先选择吃水线图像中的子图像块,然后通过目标检测识别算法检测图像中的子图像块,字符和子图像块的位置确定,在这些子图像块中,由字符识别算法返回的类别概率很高。所以需要单独训练一个字符识别模型,此模型可以检测图像识别框中的9,但模型只能确定图片中有9,无法确定其位置[3-6]。如图4 所示。
图4 字符目标检测
第二步字符定位:字符定位采用区域提议算法中的选择搜索,使用颜色相似度原理,为图像的每个通道计算25 箱直方图,将它们连接在一起,获得25×3=75 的最终描述符。任何两个区域的颜色相似性通过直方图相交距离来衡量。两个区域的颜色相似度基于直方图相交,可以计算为:
进行纹理相似度匹配之后,使用OpenCV 和Python实现选择性搜索,流程如图5 所示。
图5 选择性搜索流程图
首先输入图片的路径,使用选择性搜索算法,通常有两个选择“快速”和“质量”,大多数情况下选择快速方法。然后对图片执行“选择性搜索”,找到区域提议的数量,得到输出图像,对于输出图像,只需通过嵌套循环,以100 个块为单位循环区域建议(选择性搜索将生成几百到几千个建议;将它们“分组”,以便更好地进行可视化),提取由“选择性搜索”生成的每个区域提案周围的边界框坐标,并为每个区域提案绘制一个彩色矩形[7-8]。结果如图6 所示。
图6 选择性搜索结果
然后对边界框进行回归:给定预测的边界框坐标p=(px,py,pω,ph)(中心坐,标宽度,高度)及其对应的地面真实坐标g=(gx,gy,gω,gh),将回归器配置为了解两中心之间的尺度不变转换以及宽度和高度之间的对数尺度转换,将p作为输入。
其预测坐标示意图如图7 所示。
图7 预测的和真实的边界框之间的转换
应对这种变换的一个明显的好处是,所有边界框校正函数d i(p),i∈{x,y,ω,h},都可以取[ -∞,+∞]之间的任何值。他们的学习目标是:
标准回归模型可以通过使用正则化使SSE 损失最小化的方法来解决问题。
正则化项在这里很关键,R-CNN 通过交叉验证选择最佳的λ。还值得注意的是,并非所有预测的边界框都具有相应的真值框。例如,如果没有重叠,则运行边界框回归是没有意义的。在此,仅保留具有至少0.6 IoU 的真实框的预测框,以训练边界框回归模型。确定字符的边框坐标。
第三步字符识别:字符的边界框确定好了之后,使用区域提议CNN(R-CNN)进行对象检测,R-CNN 为深度前馈神经网络,其包括三层,输入层,隐藏层,和输出层。如图8 所示。
在前馈网络中,信息仅在前向方向上从输入层穿过隐藏层(如果存在),再到输出层。该网络中没有循环。前馈神经网络有时被模糊地称为多层感知器。第l层中的神经元数量n[l]用下式表示,l层中神经元的净输入、第l层中神经元的激活、第l层中神经元的权值分别可以用以下向量表示。
使用权重和输入矢量来计算第l层中的神经元激活,公式如下。
在前馈神经网络中,输入信号在前向方向上从输入层传入隐藏层(如果存在),再到输出层。该网络中没有反馈循环。前馈神经网络有时被模糊地称为多层感知器。过程如图9 所示。
图9 R-CNN神经网络处理数据流程
在R-CNN 中,每个边界框由图像分类器进行独立分类。有2000 个区域建议,图像分类器为每个区域,建议计算了一个特征图。由于检测速度的不理想,提出了一种称为Fast R-CNN 的方法,该方法大大加快了对象检测的速度。想法是为整个图像计算一个特征图,而不是为2000 个区域提案计算2000 个特征图。对于每个区域建议,感兴趣区域(RoI)合并层从特征图中提取固定长度的特征向量。然后将每个特征向量用于:将区域分为以下类别之一,如目标对象,背景和使用包围盒回归器提高原始包围盒的精度[9]。
3 数据处理
水尺字符在图片中呈一条直线数值排列,每个字符直接间隔为10cm 且每个字符的高度为10cm,在确定吃水线位置之后,可以确定字符下端与吃水线直接的位置距离。在图像中假定字符高度为L1,图片中吃水线距离水线最近的字符下端位置为L2,字符读数为L,则吃水线读数为X=L-0.1L2/L1。如图10 所示。
图10 吃水深度计算示意图
通过吃水线函数方程,和字符边框坐标可确定字符到吃水线的距离,取字符下边框中点,计算该点到吃水线直线函数方程的距离L2,通过Fast R-CNN 前馈神经网络训练SVHN 数据集,采用PyTorch 的深度学习框架。其中PyTorch 是针对使用GPU 和CPU 进行深度学习的优化张量库,可替代NumPy,并且可使用GPU 和其他加速器功能,自带自动微分库,对实现神经网络有很大作用。SVHN 数据集是用于开发机器学习和对象识别算法的真实图像数据集,包含所有的印刷体数字,且剪裁较小。本文用SVHN 数据集训练Fast R-CNN 前馈神经网络模型。使用具有6 个隐藏层的神经网络[10-13]。
激活Fast R-CNN 前馈神经网之后,模型针对分类和本地化的任务进行了损失的优化,总体损失函数为:
其中:
在将模型进行损失平滑之后,使用PyTorch 框架实现Fast R-CNN。首先训练10 个较低的学习效率结果,如图11 所示。
图11 初始训练结果
准确度大约为11%,准确度较低,这是随机初始化模型的期望结果,随着最优学习率速率范围的扩大,即采用非线性ReLU 函数,初始化模型之后首先采用非线性ReLU 函数激活神经网络,ReLU 是深度神经网络中非常流行的激活函数[14],其定义如下。
尽管它看起来像线性函数,但其确实是非线性函数,其图像和导数图像如图12 所示。
图12 ReLU图像与其导数图像
在添加非线性函数ReLUs 之后,以学习率1e-1 进行训练,进一步提高准确性。结果如图13 所示。
图13 最终训练结果
损失和准确度的变换如图14 所示,准确率为96%左右,损失下降到0.25 左右,满足准确率不低于95%的要求。
图14 准确度和损失曲线
输入第二部分中的四幅图像,确定吃水线位置之后,检测水尺字符数值,对比人工检测结果与系统识别结果如表2 所示,偏差率为0.3%左右。
表2 检测结果对比
4 结论
为解决在吃水线计重时人工观测的主观性问题,采用基于图像处理的轮船吃水线计量方法,采集吃水线位置水尺图像,通过固定阈值分割和霍夫直线检测的方法确定吃水在图像中的位置(吃水线的函数关系),基于R-CNN前馈神经网络并利用PyTorch 框架的深度学习算法,识别水尺字符,使字符的识别率达到了96%,最终确定轮船的吃水深度,偏差率仅0.3%左右,完全达到行业标准。