1.本发明涉及水表计量检测技术领域,特别涉及一种基于端点射线法的摄像直读水表识别方法。
背景技术:2.目前市场上的摄像直读水表多数采用“表端拍照——上传图像——云端识别”的方案。该方案需要上传完整图像,信息量大,消耗无线网络流量较大;云端识别受无线网络质量、传输速度的影响,会导致识别速度慢、时间长,识别效率低。还有少数采用表端识别方案的摄像直读水表,其识别方法基本为模板匹配或神经网络算法。模板匹配法需要采集大量训练样本组成模板库,识别时要对样本库遍历查询,计算量大、耗时较长、效率低下。神经网络的网络结构设计、选择和学习训练,都对硬件提出了较高要求,这不仅会增加水表的硬件成本,也不利于产品开发、迁移,适用性较差。
3.为此,本技术设计了一种基于端点射线法的摄像直读水表识别方法,以解决上述问题。
技术实现要素:4.本发明为了弥补现有技术中的不足,提供了一种基于端点射线法的摄像直读水表识别方法。
5.本发明是通过如下技术方案实现的:一种基于端点射线法的摄像直读水表识别方法,其特征在于,包括以下步骤:s1,通过摄像头采集水表表盘图像,将rgb格式的图像转换为灰度图;s2,对灰度图进行倾斜矫正,定位表盘数字矩形框,按照表盘数字位数,自左至右等比分割,获得单个数字;s3,对于单个数字的灰度图,进行灰度拉伸、clahe图像对比度均衡化,以实现图片自适应阈值二值化;s4,对二值化的单个数字进行y轴投影,计算空白区域相对于整个数字框的位置,以此判定数字是半字还是整字;s5,在x轴及y轴方向,计算等距平行射线与数字的交点,将交点分布特征与数字0
‑
9的特征进行比对验证,若一致则识别成功;若比对失败,则检测定位数字的端点,并以穿过两个端点的射线为基准,计算数字在射线单侧的分布规律,结合数字的端点及分布规律,进行比对验证,来获得正确的识别结果。
6.进一步地,为了更好的实现本发明,所述s1中,摄像头采集到的是rgb565格式的水表表盘图像,使用以下公式将其转换为灰度图:gray = 0.2126*r + 0.7152g + 0.0722*b上式中,gray为灰度值,r、g、b为三个颜色分量。
7.进一步地,为了更好的实现本发明,所述s2具体为,
s21,通过hough变换定位图片中最长的一条直线,计算该直线与水平线之间的夹角,若夹角不为0则判断图片是倾斜的,如果图像倾斜,则分别调用imagerotatebilinear方法、imagecoveredge方法进行倾斜矫正;s22,复制旋转后的灰度图,对复制图进行数字边框粗定位;s23,通过ostuthreshold方法、getinterestareabyshadow方法定位表盘数字矩形框,按照表盘数字位数,分割矩形框,获得单个数字;所述imagerotatebilinear方法为,根据图像中每一个像素点相对于图像中心点的坐标,通过计算倾斜角度的正余弦值进行旋转;若像素点是边界点,则旋转后,原位置空出来的点填充白色;所述imagecoveredge方法为,将边界点空余出来的白色点用背景色进行二次填充;所述ostuthreshold方法为大津阈值法;所述getinterestareabyshadow方法为,遍历图像每一个点,定位数字边框的4个顶点,并根据复制图的顶点位置在原图基础上进行裁剪。
8.进一步地,为了更好的实现本发明,所述s3中,根据单个数字进行灰度拉伸、clahe图像对比度均衡化,调用adaptivethreshold方法实现图像二值化,所述adaptivethreshold方法为自适应阈值二值化。
9.进一步地,为了更好的实现本发明,所述s4中,调用shadowy方法对数字进行y轴投影,计算投影值的累加和,分析连续分布区域,获得空白区域相对于整个数字框的位置,通过该位置确定是半字还是整字;所述shadowy方法为将图像自上而下进行扫描,统计连续空白点的长度。
10.进一步地,为了更好的实现本发明,所述s5中具体实现数字识别的步骤为,s51,调用pointinpolygon方法,在水平及竖直方向上,计算相等间距的三条平行射线与图像的交点,将交点分布特征与数字0
‑
9的特征进行比对验证,以获得正确的识别结果;s52,若s51识别失败,则调用minboxpoints方法,找到包围数字的最小外包矩形,定位数字的端点;调用htlines方法获取穿过两个端点的射线,计算射线单侧的分布规律;结合数字的端点及分布规律,进行比对验证,来获得正确的识别结果;所述pointinpolygon方法为,自上而下、自左而右扫描图像,对于水平射线而言,若某个点为黑色且其y坐标等于三条射线中的某一条,则该点为射线与图像的交点,竖直方向与此类似;所述minboxpoints方法为,自上而下、自左而右图像扫描,若某个黑色像素点右侧不再有黑色像素点,则该点为右侧端点,其余端点类似;所述htlines方法方法为,假如目标像素点为p(x,y),端点为p1(x1,y1)及p2(x1,x2),若(y1>y2且y>y2且y<y1且((y1
‑
y2)*x+(x2
‑
x1)*y+(x1*y2
‑
x2*y1))<0),则该点在线的左侧; 若(y1>y2且y>y2且y<y1且((y1
‑
y2)*x+(x2
‑
x1)*y+(x1*y2
‑
x2*y1))>0),则该点在线的右侧。
11.本发明的有益效果是:本发明采用的基于端点射线法的识别方法可以在表端实现数字识别,不需要大量
的样本库,不需要算法的学习训练或复杂的计算,可以快速识别水表读数,硬件成本低、效率高。
附图说明
12.图1为本发明的基于端点射线法的摄像直读水表识别方法的流程图;图2为本发明的水表表盘图像的灰度化图;图3为本发明的灰度图像的倾斜矫正、数字矩形框定位、数字分割的示意图;图4为本发明的灰度图像的二值化;图5为本发明的数字的平行射线交叉点分布图;图6为本发明的数字在端点射线一侧的分布规律图;图7为本发明的识别结果图。
具体实施方式
13.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
14.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
15.图1
‑
图7为本发明的一种具体实施例,如图1所示,该实施例为一种基于端点射线法的摄像直读水表的识别方法,具体包括以下步骤:如图2所示,将摄像头采集到的rgb565格式的水表表盘图像,转换为灰度图。转换公式为gray = 0.2126*r + 0.7152g + 0.0722*b,其中gray为灰度值,r、g、b为三个颜色分量。
16.如图3所示,通过hough变换计算图片中最长的一条直线与水平线之间的夹角,来判定灰度图像是否倾斜。如果图像倾斜,则调用imagerotatebilinear方法进行倾斜矫正。通过ostuthreshold、getinterestareabyshadow方法,定位表盘数字矩形框,按照表盘数字位数,分割矩形框,获得单个数字。
17.如图4所示,调用adaptivethreshold方法实现图像二值化。通过shadowy方法,对二值化的单个数字进行y轴投影,计算空白区域相对于整个数字框的位置,以此判定数字是半字还是整字。
18.如图5所示, 调用pointinpolygon方法,在水平及竖直方向上,计算相等间距的三条平行射线与数字的交点,将交点分布特征与数字0
‑
9的特征进行比对验证,以获得正确的识别结果。
19.如图6所示,可选的,调用minboxpoints方法,定位数字的端点。调用htlines方法获取穿过两个端点的射线,计算数字在射线单侧的分布规律。结合数字的端点及分布规律,进行比对验证,来获得正确的识别结果。
20.最后如图7所示,显示识别结果。
21.最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,本领域普通
技术人员对本发明的技术方案所做的其他修改或者等同替换,只要不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。