三、仪表读数识别算法的开发——1. 整体思路

仪表读数识别算法的开发——1. 整体思路

本专题导航,Click Me

文章目录

  • 仪表读数识别算法的开发——1. 整体思路
  • 前言
  • 一、目标是什么
  • 二、实现的思路
  • 总结

前言

前面两章内容已经完成了:

  1. 在树莓派和Ubuntu上配置Qt + OpenCV的交叉编译环境
  2. 各模块的基本实现

可以说是准备工作和硬件模块的驱动已经完成,地基已经打好了。接下来就进入到核心的图像识别算法部分,开始建楼。
这一节不介绍详细的算法实现,而是先看一下算法实现的整体思路(你也可以认为是“技术路线”)。

一、目标是什么

在解释算法实现之前,我们要先明确目标是什么,也就是要实现什么样的图像处理效果。
要做仪表读数识别,就是要在一张图片中,找到仪表的数字显示区域,然后把数字显示区域中的显示内容识别出来,最终得到一个与读数相同的字符串,像下面这张图这样。
三、仪表读数识别算法的开发——1. 整体思路_第1张图片

二、实现的思路

基于图像处理的仪表读数识别主要包括图像预处理、数字显示区域分割、图像阈值分割、字符分割与字符识别五个步骤。处理的过程大概是这样的。
三、仪表读数识别算法的开发——1. 整体思路_第2张图片
具体来说:

  1. 图像预处理
    图像预处理主要是对图像进行畸变校正、滤波、直方图均衡化、高低光修复等处理,以提高图像质量方便后续的图像分割与数字识别。
  2. 数字显示区域分割
    数字显示区域分割则是在已经检测到的仪表所在区域的基础上进行进一步分割,得到数码管或液晶屏的显示区域,其具体方法主要根据图像特点进行选择。
  3. 图像阈值分割
    图像阈值分割即图像二值化,其阈值可以是全局阈值也可以根据邻域计算局部阈值。
  4. 字符分割
    字符分割即在数字显示区域分割和图像阈值分割的基础上对每个字符进行分割。
  5. 字符识别
    对每个分割后的字符进行识别。

下面用表格直观、简要地给出每个步骤我所使用的方法,以及选择这个方法的原因。(由于图像预处理方法要根据获取到图像的质量确定,所以就不在表格中呈现了。)

步骤 现有方法 所用方法 选择原因
分割数字显示区域 利用图像的形状、颜色特征,基于边缘提取、筛选的传统图像处理方法;深度学习的方法。 传统的图像处理方法 用深度学习的方法跑网络、训练模型虽然方便,但其推理时间是我预期的2~3倍,树莓派的算力也确实有限,遂放弃;传统的方法所需要的处理时间能够完全满足我的需求,最后识别一张图片中3个仪表的数显内容可以控制在260ms以内。但是用传统的方法很难考虑到所有的情况,适配性欠佳,因此后期的现场调试就尤为重要。
图像二值化 全局阈值法(OTSU、三角法)和 局部阈值法 全局阈值法(三角法) 目前仅用全局阈值法就能够取得较好的效果,且现场光照条件较均匀稳定。
字符分割 投影法等 投影法 与手写字符不同,数码管显示的字符形状规则,但同时也具有笔画不连续的特点。针对这样的特点,投影法是是应用较多的一种方法。
字符识别 模板匹配法、穿线法、基于不变矩信息融合及神经网络分类器的方法、KNN算法、K-Means算法等 穿线法 数码管显示字符的一致性好,特点明确。

总结

今天的图片吃了可爱多。

你可能感兴趣的:(基于机器视觉的仪表读数识别系统,图像处理)