APP下载

复杂光照下的船舶水尺图像二值化新方法

2021-03-12乔志凯陈世才蒙子昕史国友

中国航海 2021年4期
关键词:水尺二值字符

乔志凯, 陈世才, 蒙子昕, 史国友

(大连海事大学 航海学院, 辽宁 大连 116026)

船舶水尺位于艏、舯以及艉的左右两舷,共六处水尺标志。通过测量六面水尺可得到船舶吃水深度进而保障船舶的安全航行。船舶水尺有英制和公制两种,英制字符为罗马数字,单位in,字高和相邻两字符间隔为1 in;公制字符为阿拉伯数字,单位cm,字高和相邻两字符间隔为10 cm。除此之外,有些国家和地区的字符大小和间隔会有略微的改动。

目前,国际间的大宗货物的商品交易结算、进出口通关和海事索赔都需准确的水尺测量。传统的水尺测量工作大多依赖人工,水尺人工读数一般在靠港后才能进行,一方面起伏不平的大风浪会在船体留下弯曲的假水线;另一方面阳光透过水面会产生漫射和折射现象,在船体水尺区域形成大量的光照和阴影,这些都会影响人工读数的准确性。[1]随着科学技术的飞速发展,尤其是在人工智能领域,为提高水尺读数的准确性和科学性,越来越多的海事部门和船舶企业开始使用船舶水尺自动识别系统来测量船舶水尺。船舶水尺自动识别系统通常由水尺定位、水尺字符分割和水尺字符识别等3部分组成。[2]由于水尺字符分割和水尺字符识别都是基于水尺二值化进行的,所以船舶水尺二值化效果的好坏将直接影响整个系统的性能。目前,对于虚假水线造成的光照不均匀与光照折射和漫射形成的阴影问题,已有的船舶水尺自动识别系统大多采用比较传统的二值化处理方法,对此没有针对性的解决,处理效果也很不理想。[3]传统的二值化处理方法主要有以下两种:

图1 船舶水尺标志

1) 全局阈值法,这类方法是对图像整体灰度进行数理分析,然后根据平均灰度值、灰度最大类间方差和灰度方差或灰度均差确定全局阈值,最后对比每个像素点进行二值化赋值。[4]例如OTSU算法、迭代法和平均灰度法。

2) 局部阈值法,这类方法利用选择窗口遍历每一个像素点,通过分析窗口中心像素点周围邻域内的灰度变化,得到该像素点的局部阈值,小于阈值的像素点赋值为0,大于阈值的像素点赋值为255。例如Bernsen算法、Niblack算法等。

郭秀艳[5]提出在水尺图像上部3/4的部位,把水尺灰度图像分行处理,然后寻找每一行的最大灰度值进行求和平均,最后依据这个平均灰度值二值化处理,这种最大灰度平均处理后的全局阈值虽然降低噪声,但依然解决不了光照不均匀的问题;吴禹辰[6]对彩色水尺图像进行RGB(Red Green Blue)三通道的灰度图像处理分析,总结船体背景和水尺字符组合分割规律,然后进行二值化处理,这种方法对图像灰度直方图呈现明显双峰状态的图像表现效果好,但对于实际水况中细节复杂和光照不均匀的图像处理效果不佳;赵建蕾等[7]提出先采用高低帽增强字符对比度,再进行迭代分块处理图像,该算法对字符处理质量要求较高,并且不易选择合适的高低帽窗口;欧阳庆[8]提出先把原图进行同态滤波增强处理,再用Bernsen算法求出局部阈值二值化,该方法涉及同态滤波处理,但同态滤波器的截止频率不易确定,且经过同态滤波后还是不能解决阴影对目标造成的干扰。

传统方法都不能很好地保留字符目标和消除复杂光照下的船体背景噪声。传统OTSU算法经常导致像素点强制二值化,造成细节目标丢失;Niblack算法对局部窗口中每个像素计算局部均值和方差,然后去确定局部阈值,会产生伪影现象且对光照不均问题处理效果和速度不如Bernsen算法;Bernsen算法处理复杂细节和光照不均匀问题效果较好,但会有大量的背景细节,导致图像二值化后产生目标断裂或伪影。1个阈值分割图像过于笼统,考虑使用2个阈值,所以采用OTSU和Bernsen两种算法相结合。

本文针对全局阈值法容易出现强制二值化的问题,提出分块OTSU思想避免灰度变化剧烈区域强制二值化,大大减少了处理时间;针对局部阈值法细节保留过于丰富,存在大量光照噪声点,提出一种高斯平滑滤波后Bernsen法的方法。通过调节相关参数能有效地减少光照阴影和船体铁锈等造成的噪声,同时能克服光照不均匀造成的目标伪影和字符断裂。

1 几种常见二值化算法分析

常见的二值化算法只对特定情况下的图像二值化效果较好。在处理不同类型或不同需求的图像时,需结合多种二值化算法处理,下面介绍几种比较常见的二值化算法。

1.1 OTSU算法

OTSU算法是一种自适应阈值二值化方法,又称大津法。[9]其核心思想是通过整体分析图像的灰度特性,计算整体像素点灰度的最大类间方差,即目标和背景分割概率的最大值,此时这个值就是OTSU阈值,最后把小于OTSU阈值的像素点赋值为0;大于OTSU阈值的像素点赋值为255。一般情况下,OTSU最优阈值为图像灰度直方图的双峰之间的最低点。

1) 对于一幅图像,设前景像素点占图像总像素点比例为w0,均值为u0;设背景像素点占图像总像素点比例为w1,均值为u1;则该图的灰度均值为

u=w0×u0+w1×u1

(1)

2) 建立灰度图像的最大类间方差目标函数为

g(t)=w0×(u0-u)2+w1×(u1-u)2

(2)

式(2)中:当g(t)最大时,图像背景和目标分离概率最大,分离效果最好,此时的t即为OTSU最佳阈值。

1.2 Bernsen算法

Bernsen算法是一种典型的局部阈值二值化算法,其在细节优化处理方面性能较强,能很好的保留有效目标。[10]其核心思想是用一个选择窗口遍历全图每个像素点,使其根据邻域的灰度变化决定当前像素点的阈值。

1) 设窗口的大小为(2w+1)×(2w+1);窗口的中心像素点为f(x,y);窗口在x方向的增量为l;窗口在y方向的增量为k;图像的Bernsen算法最优解为

(3)

2) 对f(x,y)的像素点进行比较,若当前灰度值大于T,则赋值为1;若当前灰度值小于T,则被赋值为0。最终得到的二值化图像为

(4)

1.3 Niblack算法

Niblack算法是一种结合局部标准差和局部均差提出来的局部阈值二值化算法。[11]对于某一像素点(i,j),设该点为局部窗口中心,局部窗口为b×b,则对此像素点的阈值T,Niblack算法的表达式为

T=m(i,j)+k×s(i,j)

(5)

式(5)中:T为该点的阈值;m(i,j)为以f(i,j)为中心点的窗口所有像素点的局部均差;s(i,j)为以f(i,j)为中心点的窗口所有像素点的局部标准差;k为关系调节系数(默认值为-0.2),k的取值对于Niblack的二值化效果起决定性作用。

1.4 各算法对比分析

常见的二值化算法对比见表1。

表1 常见的二值化算法对比

2 基于双阈值的船舶水尺二值化新方法

在船舶水尺图像上,不同位置的光照分布会随着船舶表面的状况和照明环境的不同而发生变化。在这种情况下,传统的二值化方法并不总能产生很好的结果。

2.1 二值化新方法的核心思想

为解决光照不均匀的问题,特别是光照阴影,提出一种基于双阈值的船舶水尺二值化新方法,其主要包括用图像分块优化OTSU算法、选择高斯滤波优化Bernsen算法和运用双阈值二值化。

1) 将原始水尺图像分成m×n个块,然后计算每一个子块的OTSU阈值,最后通过滑动窗口对每个中心子块进行OTSU阈值算数平均值计算。每个子块都有各自的OTSU阈值,这样可最大程度地联系整体和部分,避免因强制二值化带来的水尺图像大面积目标丢失。

图像被分为若干子块,粗线虚线框为滑动窗口,见图2。由图2可知:当滑动窗口大于3×3时,二值化结果效果提升不明显,运算成本也会大幅增加,因此,新算法滑动窗口选择为3×3。滑动窗口的中心为中心子块,中心子块的周围有8个相邻子块,中心子块的OTSU阈值是中心子块和周边8个相邻子块OTSU阈值的算术平均值。

图2 图像分块示意

2) 改进的Bernsen算法:对各个子块分别进行传统Bernsen二值化处理和经高斯平滑滤波后Bernsen二值化处理,最后通过线性比例结合这两个局部阈值得到一个新的局部阈值。这样的处理可很好地去除不均匀的光照阴影。

3) 结合全局阈值和局部阈值对各像素点逐个二值化。

2.2 二值化新方法的算法过程

将水尺图像进行灰度化处理,把其分成m×n个块。假设每个块的中心点是f(x,y),大小为(2w+1)×(2w+1),k和l为窗口的参数。二值化新方法的算法流程见图3。

图3 二值化新方法的算法流程

1) 计算当前中心子块的OTSU阈值T1(x,y)为中心子块和周边8个相邻子块OTSU阈值的算术平均值。由于OTSU算法经常导致像素点强制二值化,造成细节目标丢失。A可取10%~20%,由于水尺图像存在大量噪声,新方法取20%。故T1(x,y)应满足:

(6)

式(6)中:hist[i]为原图灰度直方图;A为图像像素点的总数。

2) 根据Bernsen算法计算f(x,y)的阈值T2(x,y)为

(7)

式(7)中:k和l为窗口的参数。

3) 建立一个高斯滤波器。

s=(2w+1)×(2w+1)

(8)

(9)

式(9)中:σ为高斯分布的标准差[13],σ越小,图像的平滑效果越不明显;反之,σ越大,对图像的平滑效果越明显。

(10)

(11)

α∈(0,1);β∈(0,1)

式(11)中:α为调整带高斯滤波器的Bernsen算法与传统Bernsen算法之间平衡的参数,α∈(0,1),当α为0时,该算法为Bernsen算法,当α为1时,该算法为带高斯滤波器的Bernsen算法;β为灵敏度调节参数,当图像灰度值和阈值的差异过大时,经常会出现错误结果。为解决这个问题,可将阈值乘以常数β来降低Bernsen算法的灵敏度,根据试验经验,一般β值取为0.9,可获得最佳结果。

6) 利用全局阈值和局部阈值逐点二值化,得到各点的像素b(x,y),有

(12)

式(12)中:γ∈(0.20,0.40),一般取γ=0.25。

如果(1-γ)×T1≤f(x,y)≤(1+γ)×T1

(13)

7) 应用中值滤波[14]去除噪声。

3 试验结果及分析

3.1 试验结果

测试图片是由大连港口监视设备所拍摄的船舶视频流中截取的水尺图像。部分试验结果见图4~图8。约在早上十点正常光照下截取的船舶水尺图像如图4所示;处于正常光照但有树叶阴影的水尺图像如图5所示;拍摄于中午暴晒环境下的高亮度水尺图像如图6所示;拍摄于傍晚的光照较暗的水尺图像如图7所示;不同光照下的新方法部分试验过程如图8所示。

图4 正常光照下的二值化算法对比

图5 不均匀光照下的二值化算法对比

图6 光照充足下的二值化算法对比

图7 光照不足下的二值化算法对比

图8 不同光照下的新方法部分试验过程图

取Niblack算法的关系调节系数k=-0.2

设新方法算法的参数组为

para=[α,β,γ,w]

(14)

图4的参数组为

para=[0.7,0.9,0.25,3]

(15)

图5的参数组为

para=[0.6,0.9,0.30,3]

(16)

图6的参数组为

para=[0.6,0.9,0.25,2]

(17)

图7的参数组为

para=[0.5,0.9,0.25,2]

(18)

3.2 试验分析

3.2.1对比样例分析

为证明新方法算法的有效性,挑选4种不同光照环境下的船舶水尺图像(即光照正常、光照不均匀、光照充足和光照不足),然后分别对这4种船舶水尺图像进行OTSU算法、Niblack算法、Bernsen算法和新方法算法二值化处理。其中:OTSU算法属于全局阈值算法;Niblack算法和Bernsen算法属于局部阈值算法;新方法算法属于全局+局部的双阈值算法。

由图4b~图7b可知:对于在不同光照下的船舶水尺图像,OTSU算法整体处理效果较差。水尺字符和船板背景能很好的分离如图7b所示;两种大块的船体背景或大量的阴影会对OTSU阈值的选取造成干扰,从而错误分离目标和背景。通常对于细节较多的图像,全局阈值法二值化效果较差,因此考虑用局部阈值法进行试验。局部阈值法会根据每个像素点邻域灰度变化分别进行处理,从而把这种局部细节变化精确地表现出来。[15]

由图4c~图7c可知:Niblack算法对区域性的目标细节保留较好,但对光照阴影的消除效果较差,字符区域能够比较准确的分割出来,但无法克服光照阴影造成的影响如图4c和图5c所示;光照过足和不足时Niblack算法二值化效果也较差,具体表现为字符区域不够清晰,周围孤立噪声点多如图6c和图7c所示;光照反射过亮和虚假水线区域存在大面积的虚假目标。总体来说,Niblack算法比OTSU算法能更好地识别水尺字符,保留更多的字符信息,但在消除光照阴影方面效果一般。

由图4d~图7d可知:Bernsen算法能完整地分割字符,但带来了周围背景细节的影响,造成大量的虚假目标和字符尾影,Bernsen算法会把船体凹凸面强化为虚假目标如图4d和图6d所示;光线较暗以及暗红色的船体颜色造成对比度下降,从而形成大量的船体环状虚假目标和伪影如图7d所示;正确分离出了水尺字符和刻度,显著地消除了树叶阴影,但存在大量小颗粒状的噪声点,水尺字符边缘和周围的噪声形成尾影如图5d所示。

由图4e~图7e可知:新方法算法对于复杂光照条件下的水尺图像二值化效果好,通过调节参数可解决光影、光照过量以及光照不足等问题。克服船体凹凸面引起的局部光照不均,水尺字符清晰且细节保留完好如图4e所示;消除树叶阴影如图5e所示,被遮盖字符44、46和50也能精确地分割出来如图5d所示;分割字符周围没有成片伪影出现,船体周围大量的噪声点也大量消除,水尺字符清晰明亮如图6e和图7e所示。

由图4~图8可知:分块OTSU算法比OTSU算法保留更多字符,能消除树影,适应不同光照条件;然后对原图灰度图像进行高斯滤波处理,能消除大量的噪声,为后续的Bernsen局部细节处理做好准备;最后结合两者得到最终的二值化图像。

为验证上述结论准确性,选取50张不同的水尺图像进行二值化算法对比,得出其识别率(即90%以上目标像素点成功识别)和算法运行时间,见表2。由表2可知:对在复杂光照条件下,OTSU算法识别率低,耗时少;Niblack算法和Bernsen算法识别率较高,耗时高,时效性差;新方法算法识别率高,耗时较少,时效性好。

表2 4种二值化算法的识别率和耗时

3.2.2新方法参数分析

新方法的参数有α、β和γ以及局部阈值窗口w,在不同光照条件下,调节参数会得到合适的二值化图像。在该算法中,α和w对处理结果有显著影响。不同k和l下的试验结果见图9。不同α参数下的处理结果见图10。

1)w:局部窗口大小。传统的Bernsen算法采用局部窗口的最小最大值作为检测阈值,k和l是w中的参数。一般图像分辨率越大,w值越大,但用w分块的数量一般大于25块。k:假设k为w的y轴方向变量,l为w的x轴方向变量。为显示原始阴影图像如图9b所示,显示5种不同k和l取值下的试验结果。当k和l的值较大时,Bernsen算法的计算非常耗时,并且阴影去除的有效性并不明显,如图9所示。k=0或l=0时,只是扫描方向不同,不会影响试验结果。新方法采用水平扫描,即k=0来实现二值化处理,字符阴影消除明显如图9d所示;l:当k=0时,窗口只由l决定。由图9d和9f可知:发现l的大小影响水尺字符的处理结果。如果l很小,字符可能会被移除,但可能会产生噪声。l的值通常是由字符宽度内的一个值来定义的,这样可获得良好的结果。例如,在图9中,字符“4”的最大宽度为14像素,最小宽度为4像素;因此,选择水尺字符平均宽度(9像素)作为l的值。

2)β:Bernsen算法对图像灰度值和阈值的差异比较敏感。当Bernsen算法的灵敏度为大时,经常会出现错误结果。为解决这个问题,可将阈值乘以常数β来降低Bernsen算法的灵敏度。根据试验经验,一般β值为0.9,可获得最佳结果。

3)α:调整传统Bernsen算法与带高斯滤波器的Bernsen算法之间平衡的参数。调整不同的α可不同程度地去除阴影,并成功地识别出水尺字符。高斯滤波器不会模糊字符的边缘,只是处理原始图像以获得新的边缘像素点。因此,高斯滤波器改善了Bernsen算法的消除光照阴影性能。传统Bernsen算法和高斯滤波Bernsen后的算法的结果,可看到经过高斯滤波去除了大量的阴影噪声点,水尺字符和船体板框取得很好的二值化效果,但是α过大,会造成部分字符目标的边缘丢失分别如图10b和图10c所示。经过大量试验,为获得最佳结果高斯滤波器的尺度σ设置为10,而α设置为0.5,如图10d所示。

4) 参数γ:γ取值为(0.20,0.40)。参数γ为表征窗口灰度值波动大小的参数值。γ控制所挑选出的区域整体亮度偏小和偏大的程度,γ越大,可控制的区域的整体灰度变化范围就越大,越有利于挑选出整体灰度波动大的区域,二值化后的图像细节信息相对减少,噪声点也减少,反之则增加。

4 结束语

复杂的光照变化经常影响船舶水尺图像二值化效果,降低船舶水尺识别系统的整体性能。为解决此情况下,船舶水尺图像二值化存在全局阈值法强制二值化和局部阈值法光照阴影无法去除的问题,提出一种基于双阈值的二值化新方法。新方法先对每个图像子块使用OTSU算法避免强制二值化造成的目标丢失,然后利用高斯滤波预处理后的Bernsen算法消除因光照不均产生的光照阴影,最后动态调节双阈值参数能适应不同类型的船舶水尺图像。试验结果表明:该方法能有效地消除光照阴影、屏蔽绝大部分背景噪声且保留更多的水尺字符细节。

猜你喜欢

水尺二值字符
浅析国内海洋渔船与海船载重线、水尺标志勘划的区别
支持CNN与LSTM的二值权重神经网络芯片
海运电厂船舶靠岸侧水尺图像采集实验研究*
字符代表几
一种USB接口字符液晶控制器设计
水尺标志放样及数控切割解决问题方案
HBM电子称与西门子S7-200系列PLC自由口通讯
基于二值形态学算子的轨道图像分割新算法
消失的殖民村庄和神秘字符
基于稀疏表示的二值图像超分辨率重建算法