时间:2024-07-28
陈金水
(河海大学 计算机与信息学院,江苏 南京 210098)
传统的水位量测有 2 种方式,一种是安装水尺,人工目测读数,这种方法耗时耗力,特别是在环境恶劣情况下,会对量测人员的安全构成威胁;另一种方式是利用传感器自动采集表征水位的模拟量,然后转换成水位数据。水位传感器主要有浮子机械(光电)编码式、压力式、雷达式、超声波式等传感器,这些传感器各有优点,但缺点也非常明显,例如浮子机械(光电)编码式可靠、便宜,适合各种情况使用,但是,需要建造测井房,造价高;压力式传感器受水质变化的影响,要经常检查并调整率定系数;超声波水位传感器置于明渠之上,外界干挠多,常带来所测水位漂移的现象。
本文在试验研究的基础上,利用 CCD 摄像机获取水尺视频,然后从视频流中实时提取水尺图像,通过边缘检测、灰度拉伸、二值化等一系列处理后,获得目标特征图像:刻度线,再运用 Hough变换,识别出刻度线条数,从而计算出水位值。这个过程除了利用摄像机获取视频外,主要通过软件实现,因此精度高、环境要求低,具有应用前景。
从水尺图像中获取水位数据,首先需要经过视频流截取、彩色图像到灰度图像的转换、刻度区提取、刻度图像二值化、去噪及刻度线细化等一系列预处理。
一般摄像机拍摄到的视频流都是 AVI(Audio Video Interleaved)格式。利用微软 MSDN(Microsoft Developer Network)提供的 AVI 处理函数,可以从视频流中截取图像。为了避免非常态干扰,保证测量精度,1 次可以提取多帧图像,处理后,取其平均值作为某一时刻的水位测量值。
如果用彩色摄像机获取视频,应先将彩色图像转换成灰度图像以方便后续的处理。以 256 色的彩色图像为例,灰度转换可利用以下公式[1]:
式中:R,G,B 对应的是红,绿,蓝 3 种颜色的亮度值。
灰度化的结果如图1 所示。
对图像的逻辑操作主要以像素为对象,对 2 幅或多幅图像进行“与”和“或”操作。例如,1 个任意的二进制数与全 1 的二进制数进行“与”操作,结果保留原来的二进制数;如果与全 0 的二进制数进行“与”操作,结果为全 0。同样,1 个任意的二进制数与全 1 的二进制数进行“或”操作,结果为全 1;如果与全 0 的二进制数进行“或”操作,则结果保留原来的二进制数。“与”和“或”操作通常作为模版,通过操作可以从 1 幅图像中提取出子图像。在“与”和“或”图像模版中,二进制码 1 表示白色,0 表示黑色[2]。
图1 含有水尺的灰度图像
因拍摄水尺的摄像机固定不动,故水尺在每帧图像中的位置不变。依据这个特定情况,就可以建立 1 个要提取区域的图像模版,大小正好包含刻度区域,如图2 a 所示。
灰度转换后得到的图像只有白或黑 2 种灰度,因此,水面与刻度的灰度是一样的。为了提取刻度区域,去除水面区域,必须扩大两者的灰度级差。可利用公式来扩大[3]:
式中:(x, x1) 为包含水面与刻度线灰度值的 1 个灰度区间,通过 x1和 x2值的设定,扩大水面与刻度线的灰度级差,如图2 b 所示。
二值化的目的是去除非目标图像,包括水面、背景等。对于 1 帧特定的图像,可以通过多次阈值试验分析后得出 1 个合适阈值。由于摄像机捕获的水尺图像受光照的影响,无法给定 1 个常量阈值对图像进行二值化,不过,可以利用全局门限处理得到 1 个较为合适的阈值。设门限 T 是最大与最小灰度的中间值,利用这个门限去除背景部分,留下对象本身,就可以通过对图像的分割,实现去留。具体做法是:灰度级 ≤ T 的像素均标记为黑色(0),灰度级> T 的像素均标记为白色(255)。
门限 T 的计算步骤如下:
1)选择 1 个 T 的初始值;
2)用 T 分割图像,生成 2 组像素,由所有灰度值> T 的像素组成区域 G1,所有灰度值 ≤ T 的像素组成区域 G2;
3)对区域 G1和 G2中的所有像素计算平均灰度值 µ1和 µ2;
4)计算新的门限值
5)重复步骤 2 到 4,直到逐次迭代所得的 T 值之差小于事先定义的参数。
经过二值化处理后就可以得到只有刻度线的图像,如图2 c 所示。
图2 水尺区域图像的灰度拉伸和二值化
水面及背景去除后,还可能留有一些与刻度线灰度值相当的干扰点,因此,还要进一步通过腐蚀去除这些干扰点,谓之去噪。因为水尺刻度线均为水平线,所以沿水平方向腐蚀即可。
腐蚀的过程如下:对二值图像中所有的黑点进行遍历,如果当前黑点的左右 2 个点都为黑色,那么保持不变;否则把当前黑点变为白点。
2 次腐蚀的结果如图3 a 和 3 b 所示。
图像所表征的核心意义是去除了“杂质”和次要因素后的图像“骨架”。“骨架”的获得过程通常称为图像“细化”。通过对“骨架”几何及拓扑性质的识别,可以获取其表征对象的信息。
在“细化”图像的过程中应满足以下 2 个条件:1)图像要按比例缩放;2)图像的连通性质应保持不变。
“细化”算法:设 1 幅图像中的 1 个 3×3 区域,共 9 个像素点,用 P1,…,P9标记,其中 P1位于中心,P2在 P1的正上方,P3,…,P9依次沿 P2的逆时针方向排列。
如果 P1= 1(即黑点),同时满足以下 4 个条件,则删除 P1(P1= 0):
1)2≤ NZ(P1)≤ 6;
2)Z0(P1)= 1;
3) P2· P4· P8= 0 或者 Z0(P1)≠ 1
4) P2· P4· P6= 0 或者 Z0(P4)≠ 1;
式中:NZ(P1)表示以 P1为中心的 8 个点的和;Z0(P1)表示以 P1为中心的 8 个点,从正上方的点开始,按逆时针方向顺序进行排列,相邻 2 个点出现 0,1(白,黑)的总次数。
图3 水尺刻度腐蚀和细化的结果
对图像中的每个点重复上述步骤,直到所有的点都不可删除为止。水尺刻度细化的结果如图3 c 所示。
Hough变换[4]的基本思想是利用点、线的对偶性,将笛卡儿坐标空间的直线变换为极坐标空间中的点。图4 a 中的直线是笛卡儿坐标系中的 1 条直线,如果用 ρ 代表直线距原点的法线距离,用 θ 表示法线与 x 轴的夹角,则经过 Hough变换后可用如下参数方程表示该直线:ρ = xcos θ + ysin θ。
该直线在极坐标系中就是图4 b 所示的点(ρ,θ)。笛卡儿坐标系中通过公共点的 1 簇直线(图4 c),映射到极坐标系中则是 1 个点集,这些点集构成 1 条曲线,正好是正弦曲线(图4 d)。
在笛卡儿坐标系中共直线的点(如图4 e 中的(x1, y1),(x2, y2),(x3, y3),3 点共线)映射到极坐标系中就是共点的 1 簇曲线(图4 f )。在图4 f 中还可以看到这 3 条曲线有 2 个交点,这 2 个交点所对应的横坐标值即法向角的度数相差 180°,对应到笛卡儿坐标系中就是同一条直线。如果令直线的法向角的取值范围为:0≤ θ < π ,其交点就只有 1 个。显然,Hough变换在不同的线和点之间建立了对应关系。
图4 Hough变换
由分析可知,Hough变换就是将(x, y)平面中的所有直线变换成(ρ, θ)平面的 1 簇曲线。统计变换域(ρ, θ)中这 1 簇曲线经过最多次的点,该点对应的就是 1 条直线。图5 为 2 条直线 y = 3,y = 5,θ细分为 1°时的变换域(ρ,θ)的曲线图。
图5 变换域(ρ, θ)的曲线图
图5 中,θ = π /2 附近有 2 个点对应的直线累加值最高(该值就是其在(x, y)平面中所对应直线上的像素点的个数)。因此,可以认定,这 2 个点对应(x, y)平面中的的 2 条直线。在实际应用中,根据水尺中刻度线的长度,定义其像素点个数作为判定条件,以简化算法。例如,定义(ρ, θ)域中的点对应的直线累加值大于 50 时,认为该点对应 2 条刻度线。但是,试验发现由于曲线间的互相干扰及参数ρ,θ 值对直线检测性能的影响,变换域(ρ, θ)中的一些点,尤其是累加值最高处的其他点对应的累加值也很高,也会被误认为对应 1 条直线,这样很容易造成同一条直线被重复计算。
因此,必须对 Hough变换做实用性改进。具体做法是先找到变换域(ρ, θ)中 1 个满足条件的点(例如,其对应的直线累加值大于50),然后将该点及其附近点对应的累加值清零,以避免重复计算。
算法思想:首先找出变换域(ρ, θ)中对应直线累加值最大的点,该点就对应于(x, y)域中最长的1 条直线,在原图像中将该直线删除。对剩下的直线再进行 Hough 变化,继续寻找变换域(ρ, θ)中对应直线累加值最大的点,再将该点对应于(x, y)域中的直线删除。依此过程,直至变换域(ρ, θ)中的点对应的直线累加值都小于设定值(如 50)时,就认为已经没有要识别的刻度线了,这时统计出被删除的直线条数,即可获取水位值。
算法描述如下:
1) 从原图像的(x, y)平面中找出 1 个黑点;
2)对通过(1)找到的黑点的直线利用 Hough变换在(ρ, θ)平面绘制正弦曲线,每绘制 1 条正弦曲线,累加器加 1;
3)在(ρ, θ)平面中寻找累加器最大值(如50)对应的点,如果找到,则该点就对应(x, y)平面的 1 条直线(刻度线),假设用 n 表示刻度线的条数,这时 n + 1,否则执行(5);
4) 将找出的直线从原图像中删除,然后回到(1);
5)计算 n 的值,将该值乘以刻度单位即得出水面以上水尺的长度,水尺总长度(已知)与水面以上水尺长度的差即要量测的水位数据。
本文研究的从水尺图像中获取水位数据的方法,也可以用来获取闸位数据,并且精度高(只受摄像机分辨率的影响),费用低,不需要太多的辅助设施。当然,这种水位获取方式在实用化过程中还有一些问题需要妥善处理。例如,现场可能会因雨、雾、阴天、夜晚等情况,导致光照不足,获取的水尺图像清晰度低,难以识别,这时,必须在现场安装照明设施以提高图像的清晰度。本文对刻度线的识别算法只适合水尺表面有轻度污染的情况,对严重污染还需要研究专门的识别方法或辅以人工清理。另外,针对实际应用中对水位数据采集实时性的不同要求,还存在个现场数字转换还是远程数字转换的问题。现场数字转换因现场不可能配置高性能的计算机,所以需要研究更高效的算法;远程数字转换对算法效率要求较低,但要远程传输视频或图像,因此需要配置高速、宽带的通信链路。
[1]何斌,马文予,王运坚,等. Visual C++ 数字图像处理[M]. 北京:人民邮电出版社,2004: 4-7.
[2]冈萨雷斯. 数字图像处理[M]. 2 版. 北京:电子工业出版社,2005: 18-20.
[3]马涛,余春暄. 数字图像处理在指针式指示表读数识别中的应用[J]. 微计算机信息,2004, 20 (7): 50-51.
[4]胡方明,彭国华. Hough变换空间中基于直线的模板匹配[J]. 计算机工程,2011, 37 (10): 140-142.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!