仪表识别方法汇总

仪表自动识别方法汇总

进入实验室,接到的第一个任务,老师让查一些仪表识别的解决方案,搜集了三天相关的博客和论文,自认为比较好的四个方法,自己总结了一下:

数字仪表示数读取

方法一:基于OpenCV和LSSVM的数字仪表读数自动识别

步骤概括:

  1. 数字仪表图像预处理
    ①采集图像
    ②仪表图像倾斜校正(Canny边缘检测与Hough变换相结合的倾斜校正方法)
    ③图像的形体学处理(腐蚀、膨胀,简化图像数据,除去不相干结构)
    ④图像二值化(将图像分割为背景和目标两部分,Otsu算法)
  2. 图像特征提取
    ①特征分析(形状、颜色和亮度)
    ②定位分割(基于连通域的方法进行定位分割/ 投影法)
    ③数字特征提取
  3. 读数识别(模式匹配法、基于人工神经网络法、穿线法、最小二乘支持向量机(LSSVM)算法)

方法二:openCV仪表数字识别

步骤概括:
1.自动定位数字区域(需要一张有数据的图片,一张仪表关闭时没有数据的图片;仪表数字和背景的区别是数据会在短时间内变化,这样在差分二值图中未变化的背景区域就会被滤除)
2.如果是多行数据,对数据进行按行分割(投影法)
3.照片因为拍摄角度,数字可能发生倾斜,此时进行倾斜矫正(hough变换)
4.数字分隔提取,将每行数字单独分割出来一个一个识别
①腐蚀操作,去除杂点
②膨胀,保证一个数字的数码管都是相连的
③使用openCV的函数cvFindContours查找各个数字边缘
④分别建立各个轮廓的轮廓矩
⑤将每个矩形切割出来,并单独存为一个图像

博客链接:https://blog.csdn.net/ZhtSunday/article/details/51931772

指针仪表示数读取

方法一:基于深度学习的指针仪表示数识别

步骤概括:

  1. 应用深度学习的Faster-RCNN算法从摄像头采集的图像中迅速定位仪表区域,并且去除图像的干扰信息
    ①传统表盘提取常用算法:
    Hough变换(计算量大,抗干扰能力不强,效率较低)
    区域生长分隔算法(需要手动选择种子点和判断停止条件)
    ②Faster-RCNN算法选用Caffe作为算法框架,C++为基础语言
  2. 找到表盘后,
    ①通过灰度化(加权平均法)和二值化(将灰度变成仅有0和255,选择合适的阈值,区域自适应法)
    ②标记出表盘刻度线和指针的连通域(四连通方式)
  3. 找表盘中心圆的圆心,根据连通域提取指针并细化
    ①提取指针(差影法、Hough变换检测直线、最小二乘法)
    ②指针细化,找指针的骨架(最小二乘法拟合)
  4. 对刻度线和表盘数字进行分割,利用基于深度学习的卷积神经网络LeNet-5识别表盘刻度值,结合刻度线的处理和刻度值的确定,计算出分度值

方法二:使用openCV进行指针仪表数值读取

方案:模板匹配+k-means+直线拟合
步骤概括:
1.模板匹配是openCV自带算法,可以根据一个模板图到目标图上寻找对应位置(两次匹配,提高精度)
2.k-means算法对图像进行二值化
3.旋转拟合直线法,假设一条直线从右边0度位置顺时针绕中心旋转当其转到指针指向的位置时重合的最多,此时记录角度,根据角度计算刻度值

博客链接:https://blog.csdn.net/a1053904672/article/details/88759335

你可能感兴趣的:(仪表识别方法汇总)