登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 毕业论文 > 电子信息类 > 电子科学与技术 > 正文

基于Hough变换的指针式水表识别系统设计与实现毕业论文

 2020-02-17 11:02  

摘 要

随着我国城市化进程的不断加速,人们对居住环境的要求也日益增加,随着越来越多的摩天大楼拔地而起以及城市居住人口的增多,但居民用水的统计方式依旧是传统的指针式水表。本工作原理简单性能可靠的机械结构,在庞大的基数下反而面临人工抄表方式的低效率、成本高以及影响居民生活等弊端,因此自动抄表系统开始进入众多从业工作者的视线。本文从水表基本结构入手,结合指针式仪表处理方法,对指针式水表的自动识别进行了一系列研究,并运用计算机编程语言Python辅助OpenCV视觉库的方法实现了指针式水表在Windows环境下的自动识别。

本系统的核心基于OpenCV视觉库内自带的Hough算法,并运用Python语言对之进行调用。在图像处理过程中,需要对图像进行预处理、掩膜算法筛选颜色、指针位置识别以及指针角度识别,进而确定指针式水表的读数。

关键词:指针式水表,Hough变换,OpenCV视觉库,Python语言

Abstract

With the acceleration of urbanization in China, people's requirements for living environment are also increasing. While more and more skyscrapers rise and the increase of urban residential population, the statistical method of residential water use is still the traditional pointer water meter. The mechanical structure with simple working principle and reliable performance is faced with the drawbacks of low efficiency, high cost and affecting the lives of residents under the huge base number. Therefore, automatic meter reading system has begun to enter the eyes of many practitioners. Starting with the basic structure of water meter and the method of pointer instrument processing, this paper makes a series of research on the automatic recognition of pointer water meter, and realizes the automatic recognition of pointer water meter in Windows environment by using the method of computer programming language Python assisted OpenCV visual library.

The core of the system is based on the Hough algorithm in OpenCV visual library, which is called by Python language. In the process of image processing, it is necessary to pre-process the image, screen the color of the mask algorithm, identify the position of the pointer and the angle of the pointer, and then determine the reading of the pointer water meter.

Keywords: Pointer water meter , Hough Transform , OpenCV Vision Library, Python Language

目录

摘要 I

Abstract II

第一章绪论 1

1.1课题研究背景与意义 1

1.2课题国内外发展现状 1

1.3课题分析 2

1.4本文研究内容及结构 2

第二章总体方案设计 4

2.1系统需求分析 4

2.2系统总体方案设计 4

2.3开发语言及算法概述 5

2.3.1 Python语言概述 5

2.3.2 OpenCV视觉库概述 6

2.4本章小结 7

第三章开发工具的选择及开发环境的搭建 8

3.1 Anaconda3概述 8

3.2 PyCharm概述 9

3.3开发环境的搭建 9

3.4本章小结 10

第四章Hough变换的基本原理 11

4.1Hough变换直线检测 11

4.2 Hough变换圆检测 13

4.3本章小结 14

第五章图像识别 15

5.1图像大小调整 15

5.2确定指针位置 16

5.2.1色彩转换 16

5.2.2高斯模糊滤波 18

5.2.3 掩膜及二值化 19

5.3读数识别 21

5.3.1 计算梯度强度和方向 21

5.3.2 非极大值抑制 22

5.3.3双阈值检测 22

5.3.4抑制孤立低阈值点 22

5.4本章小结 23

第六章总结与展望 24

6.1工作总结 24

6.2课题展望 24

参考文献 25

致谢 26

第一章绪论

1.1课题研究背景与意义

中国国土面积排名世界第三,更是有不少淡水河流横亘东西南北,中国淡水总量可以说十分可观,但是在巨大的人口基数下,淡水资源的平均分配导致中国人均淡水占有量极少,导致中国成为世界淡水资源最为匮乏的国家之一。而随着近年来城市化脚步的不断加快,越来越多的人选择进入城市居住,如何在人口密集的城市区域合理的规划水资源的分配并按使用量分配成为当下人们不得不解决的问题。

水表,是测量水流量的仪器,最早起源于英国,在人口基数庞大的城市,为了细化每家每户的用水费用,水表起到至关重要的作用。然而在解决了最基本的计数问题后,随之而来的问题是如何去收集这些数据。面临这个问题,相关部门不得不将居民区进行分块管理、分区合作,不同区域由不同人员负责,以人工统计的方式实现每户用水量的统计,就是我们耳熟能详的“抄表”。随之而来的却是全新的问题。由于工作量的巨大,为了节省人工成本,不得不将人工抄表的频率下降,进而导致了效率低下以及人工抄表失误的问题。

在这样的环境下,需要一种成本相对低廉的方法实现指针式水表的自动读取识别。摄像头的引入可以在不改变原有水表结构的情况下,实现水表图像的获取,随后只需将获取的图像传输至后台并由相应的算法实现读数的识别即可。不仅如此,摄像头还有安装简单的特点,这样不仅可以减少操作人员人工成本,同样也可以为后期的设备维护带来极大的便利。本文所的指针式水表识别系统,运用OpenCV视觉库提供的Python接口,实现水表指针的图像处理从而得出水表读数。

1.2课题国内外发展现状

在仪器仪表盘读数自动识别这方面,国内外均在早期展开过一系列研究。现阶段来看,更为成熟的识别技术主要运用在数字式仪表的数字识别中,而指针式仪表读数的自动识别依旧在不断发展。国外关于指针式仪表识别的研究展开较早,Robert Sablantning 等人在1994年通过分割图片与Hough变换算法对指针水表等读数分布均匀的原型表盘进行过读数识别,其研究结果显著,可以凭借指针的角度计算得到仪表读数,然而却面临计算量大以及消耗时间过长的缺陷;在1995年,位于韩国的Kyong-Ho Kim 等人[2]也进行了相应的研究,他们通过对仪表盘进行恰当的分割并进行区域划分,再将图像投影到坐标轴方向,来进行指针角度的识别[1];2000年位于里斯本大学的F.Correa Alegria 等人以图像做差的方式得到指针区域,并将位于仪表盘边缘的刻度线校正为直线,随后通过Hough直线检测得到读数。

最近几年,国内同样也有一批研究人员展开了这份方面的相关研究,与此同时,诸如电子科技大学、武汉理工大学等高校也开始对仪表自动识别展开了深入研究。于华北电力大学,孙凤杰、郭凤顺等人提出了一种更方便运用于实际的指针角度识别的方法,同心圆环搜索法,该方法计算简单、时效性好、误差小,在诸多仪表设备指针的识别中起到至关重要的作用;北京邮电大学,曲仁军、徐珍珍等人通过分析特定环境下指针式仪表设备的特点,通过Hough变换和多分辨率处理技术实现了指针的高精度识别;西北工业大学,张旭斌、赵晓蓓等人专门针对航空机载气压高度表,提出了以Hough变换实现的自动识别算法,同时采用了中轴变换的方法实现指针的单像素处理,在保证较快的判断速度的同时确保了识别的高精度。

1.3课题分析

水表多数安装在光照较暗的环境下,如用摄像头直接进行图像采集会产生图像不够清晰以至无法识别的情况,但若安装闪光灯,又需要面临玻璃反光等不利因素。这两个原因,导致每次获取的图像质量参差不齐。

在摄像头安装过程中,若想要确保摄像头与水表垂直正对需要操作人员付出极大的精力,这样不免在增加人工费用的同时降低了安装效率。所以为了考虑到安装设备时所产生的角度偏移,需要再后期算法设计中对已产生的角度偏移进行补足。

指针式水表不同于其他指针式仪表,存在多个指针,在识别过程中需要注意回转中心的准确检测以及最主要的数量级的对应关系,二者其一出现些许差错都会直接导致读数无法识别甚至是误读。

1.4本文研究内容及结构

本文的主要内容,是在前人研究结论及结果的基础上,运用Python语言结合OpenCV视觉库中的Hough变换算法实现指针式水表的识别。

Python语言是一种面对对象的解释型语言,OpenCV视觉库是由一系列C语言函数和少量C 类构成的图像处理算法,并且提供了Pthon语言的接口。在整个研究过程中,需要掌握Python语言的基本语法并且学会Python语言的基本运用,与此同时在Python环境下导入OpenCV视觉库后,系统会提供许多基于OpenCV的专门用于图像识别的独有函数。随着设计的不断推进,需要时刻学习OpenCV视觉库提供的函数,并且判断哪些函数对于本设计是必要的、哪些函数可以有效提高程序的效率及准确性。Python是一种高级语言,在运用高级语言编程的时候,应优先考虑如何用最少的语句实现功能,在程序设计中,需要随着整体进度的不断推进,不断对代码及算法进行优化,在力所能及的条件下达到软件算法的最优解。与此同时,在软件程序设计中采取边调试边修改边推进的原则,并且在最后程序整体设计完成后,再次进行调试与修改,从而做到开发过程的相对顺利。

本文结构如下:

第一章,绪论。阐述本课题的研究背景及其研究意义,同时对国内外指针式仪表识别的现状进行分析,在前人基础及结论上,对该课题提出自己的分析思路,最后对文章的主要内容和结构进行简单说明。

第二章,总体方案设计。在研究背景及意义的基础上,提出自己对于该系统功能的分析,并根据分析提出可行的方案设计。根据方案设计选择开发软件,对所选择的开发软件进行简单介绍。

第三章,开发软件及开发环境的搭建。介绍为完成本设计所需的开发软件及本设计代码运行所需要的环境。

第四章,对Hough变换的由来进行简单的概述,同时介绍了Hough变换在直线检测以及圆检测中的运用,并对二者的原理进行简单的阐述。

第五章,主体章节。介绍程序设计总体结构并按照结构细化每小节,以图像处理的顺序入手,分别介绍了最初的图像大小调节、指针图像识别及最后的读数识别。在这个过程中最重要的是,在对图像进行色彩空间转换后需要通过高斯滤波,并在掩膜的遮罩的基础下,进行Canny边缘检测算法,从而得到最终的指针读数。

第六章,工作总结及展望。主要对本次毕业设计进行经验上的总结,并对指针式水表识别领域提出一点自己微不足道的见解,最后对未来该行业的变化提出一个可能。

第二章总体方案设计

本章通过分析系统需求进而明确设计的目标,并提出在后续设计中该如何达成相应目标。

2.1系统需求分析

该系统主要受益对象为水表抄表员及住户,主要针对的问题是人工抄表效率低下、可能存在的人为误读数以及用户端设备的操作简易性,故而该系统需要在提升抄表效率的同时拥有一定准确性,并在学习成本及维护成本上更多的方便住户。根据上述要求提出以下两点:

对于抄表员,该系统的设计初衷是使抄表员免去挨家挨户跋涉的劳累,使抄表员从数据的收集者转换为数据的筛查管理者,故而可在住户端提供摄像头以实现水表图象数据的收集。当图像数据得以上传到后台后,需要一可修改的操作程序实现图像数据的识别,抄表员的主要任务在于程序代码的优化以及数据的二次确认以避免出错。

对于安装水表的住户,该系统使住户受益的主要方面是可以使住户免于抄表员周期性上门抄表的打扰,故而系统的住户端在免除这份干扰的同时不能给住户添加额外的烦恼。用摄像头采集图像数据,而图像处理程序在后台的方式可以大大降低住户的学习成本,同时摄像头对于住户来说也有一个更低的维护成本。

2.2系统总体方案设计

根据上述分析,可以确定该系统主要由两部分组成,其结构如图2.1所示。

图2.1 系统结构图

总体来说,指针式水表自动识别系统的主要环节在于图像识别。对于图像识别,OpenCV视觉库早在1991年便已面试,并在后续不断的运用中不断发展,其算法得以不断优化改进,该库可在Windows系统上运行,并且由于其主要基于C语言的原因具有轻量级及高效的特点。在执行OpenCV视觉库自带算法方面,选择以Python语言为载体,不仅因为OpenCV视觉库提供了Python语言的接口,同时Python语言本身的简洁性及以用性也是主要因素。图像识别部分均可有Python语言配合OpenCV视觉库完成,其内建的各种用于图像识别的Hough变换算法足够应对本设计的要求。

本设计主要依赖于Python语言,而鉴于Python语言的开源性、易读性,本设计的核心部分具有很强的可维护性及可扩展性,对于后期的调试修改以及添加新功能提供了可能。

2.3开发语言及算法概述

2.3.1 Python语言概述

Python,是一种面向对象的解释型计算机程序设计语言,于1989年被发明,此后第二年,Python的第一个公开发行版得以面世。Python是一种高级语言,同时其灵活度和可扩展性十分可观。Python最主要的特点是其语法相当简洁,在易读性方面具有十足的优势,其中Python语言的最大特点是以缩进的形式明确规定语句与语句之间的关系[3]。同时,Python更是一种交互式语言,在运行过程中可以与程序相互作用。

Python具有以下优点:

  • 简单:Python最鲜明的特征就是其易读性,这样在开发过程中,开发者可以更加专注于解决问题而非纠结语言语法。
  • 迅速:基于C语言的Python本身和第三方库文件,使得Python的运行速度迅速。
  • 解释性:通常在编程中,会有一个将编程语言编译为机器语言的过程,这样在运行时不需翻译,直接执行便可。但Python语言因其解释型并不需要编译,内在解释器(Interpreter)会直接逐行解释然后逐行运行。这样使得Python语言更加简单并且在移植方面更加便捷。
  • 面向对象: Python既能面向过程编程也能面向对象编程。面向过程时,程序之内由函数层层构建,最终达成功能。面向对象时,程序之内由数据和功能相结合的对象,互相作用相互牵连而构成。
  • 丰富的库: Python除了自身功能强大的标准库外,还有许多高质量的第三方库,如在本设计中需要用到的OpenCV视觉库。

在诸多便利性的同时,Python语言也包含些许缺点,比如对比C语言运行速度会稍慢,同时由于其用缩进来区分语句关系的独特语法有可能会给开发者带来诸多问题。

Python诞生后,不久后便发行了Python2版本,并在后续许多年的使用和完善中,Python的功能逐步得到完善并日益壮大,随后其增长速度趋于稳定,大约每2年会进行一次版本的更新。但是由于其开发时间过早,Python2语言并不支持Unicode编码,而且在Python2语言中存在对于字符串数据类型的争议。因而在2008年,Python3.0横空出世,虽说在最开始它的运行十分不稳定,但随着其几个月一次的更新,也慢慢被广大开发者所接受。

本次设计采用的程序语法便是基于Python3.7版本。

2.3.2 OpenCV视觉库概述

OpenCV(Open source Computer Vision Library)开放源代码计算机视觉库,是用于计算机图像识别的函数库。在该视觉库的编写过程中,采用了C语言和少量的C 语言,可以运用在Windows、Linux和Mac OS的系统上[4]。在编写过程中,考虑到OpenCV设计的初衷是实时性的解决一些图像识别问题,开发者对其代码进行了大量的调试优化,故而拥有很高的运行效率。同时,因为OpenCV由C语言编写而成并且基于C语言优化,其在多核CPU电脑上运行会取得更高的速度。计算机图像识别技术运用于许多领域,故而OpenCV视觉库可以运用于许多领域,包括但不限于安防、用户界面、机器视觉。另一方面,在许多深度学习模型中需要运用到OpenCV视觉库中的函数,所以库中通常会包含一些机器学习的方法。

OpenCV可分为5个部分[5]:图像处理和视觉算法(CV)、机器学习库(ML)、图像和视频输入/输出库(HighGUI)、基本结构和算法,XML支持,绘图函数(CXCORE)以及CVAUx模块,其中前四个模块结构如图1.1所示。

图1.1 OpenCV结构图

2.4本章小结

本章从系统要求入手,从抄表员和住户两个角度分析该系统的具体要求,并明确方案设计的目标,随后根据分析结果确定总体的方案设计,即用Python语言配合OpenCV视觉库完成绝大部分操作。随后对Python语言进行简单的介绍,分析其优点与缺点并随后对Python2和Python3进行对比,进而确定使用Python3语法逻辑。最后对OpenCV视觉库的来源和结构进行了简单的介绍。

第三章开发工具的选择及开发环境的搭建

当开发者在进行程序开发的时候,集成开发环境[6](Integrated Development Environment)在其中起到至关重要的作用,它包含许多工具,诸如代码编辑器、调试器、编译器等。集成开发环境将在开发过程中所用到的大多数工具集成在一个应用程序中,当开发者需要某部分的功能时,只需要在同一应用下调用即可,使开发效率有了显著性的提高。例如耳熟能详的微软的Visual Studio系列。这类程序可以单独运行,同时也可以与其他应用程序协同工作。

在本设计安装软件和搭建编程环境的步骤中,需要用到Python3.x版本,而Python通常会自带一个功能简洁的集成开发环境Python IDLE。开发者可以利用它方便的创建、运行、测试和调试Python程序。然而Python语言自带的集成开发环境虽然可以满足程序开发的基本需求,但是其缺少必要的分析功能及调试功能,故而大多数开发者在进行Python程序开发设计的过程中会选用PyCharm软件。

以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。

相关图片展示:

您需要先支付 50元 才能查看全部内容!立即支付

微信号:bishe985

Copyright © 2010-2022 毕业论文网 站点地图