目录
前言
课题背景和意义
实现技术思路
一、机械式电表读数图像分析
二、局部阈值修正 Canny边缘检测算法
三、电表读数图像二值化
实现效果图样例
最后
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于机器视觉的复杂环境下图像二值化方法- OpenCV
课题背景和意义
机械式仪表具有结构简单 、 维护方便 、 抗电磁干扰能力强、 精度高等 优势 , 在特定环境中仍具有一定的应用价值, 基于图像识别机械式仪表读数被广泛研究 , 图像二值化是其中的关键环节。 近年来机械式电表正逐步被电子式电表及智能电表取代, 但目前我国仍有大量用户使用机械式电表。 考虑到安装位置光照环境 、 转盘材质及形状 、 面板及透明外壳遮挡等因素, 机械式电表读数图像往往易受光照不均、 反光等因素影响 , 传统的二值化方法无法取得理想的二值化效果。 针对光照不均等复杂环境下的图像二值化, 提出了一种对图像按单列使用经典 Otsu 算法 , 并根据光照强度的自适应微调阈值的二值化方法。利用小波分解获得物体表面光照的近似分布进而消除光照不均的影响, 并用 Otsu 算法进行二值化 。利用一种结合 Canny 算子的图像二值化方法 , 综合考虑了边缘信息和灰度信息, 通过边缘附近种子点在高阈值二值化图像中的填充和低阈值图像对其的修补实现二值化。 上述方法针对光照不均、 低对比度图像在特定的研究对象中取得了较之传统方法更好的效果, 但仍无法适用于受光照 、 反光等因素叠加影响的电表图像二值化。
实现技术思路
一、机械式电表读数图像分析
电表读数图像二值化是基于图像识别读取机械式电表读数的关键步 骤。 电表读数图像具有前景与背景对比强烈、 白色的数字读数前景像素占比较低 、 背景区域占比较高等特点, 一般情况下具备上述特点的图像二值化问题较好解决。 然而 , 受电表外壳 、 计数器字轮形状 、 光照条件等因素影响, 经 ROI 提取后得到的电表读数图像往往不够理想。 较为典型的电表读数图像如图:

固定阈值法是根据图像灰度的直方图分布进行阈值选取,对灰度直方图呈现较典型的双峰分布的图像二值化效果较好。上图所示的典型电表读数原始图像对应的灰度直方图分布下图:
二、局部阈值修正 Canny边缘检测算法
全局双阈值的选取
Canny 边缘检测算法是一种基于图像梯度计算的边缘检测算法, 现有的 Canny 边缘检测阈值选取包括全局阈值选取方法和局部动态阈值选取方法 。 在全局阈值选取方法中, 阈值选取不当易造成边缘丢失 、 出现假边缘等现象 。
OpenCV ( opensourcecomputervisionlibrary ) 是一个
由一系列 C 函数和少量 C++ 类构成的开源跨平台计算机视觉库, 提供了丰富的图像处理及模式识别函数接口 。 OpenCV 的 Canny 函数实现了全局双阈值 Canny 边缘检测算法, 其采用 Sobel 算子 计算 图 像 梯 度, 图 像 I ( x , y )的梯度幅值为:

全局阈值选取过高,易丢失真实边缘;选取过低,则易受反光、转盘轮廓等因素影响而产生虚假边缘。 Sobel 矩阵的直方图分布如图所示。

局部阈值修正及算法步骤
仅通过全局双阈值进行边缘检测无法完全抑制虚假边缘。对此问题,本文采用局部阈值对全局双阈值 Canny算子的检测结果进行进一步修正,以得到正确的边缘检测
结果 , 算法流程如下 :
1 ) 调整电表读数灰度图像 I 的大小 , 将图像高度统一 为100 像素 , 运用高斯函数平滑图像 ;
2 ) 全局双阈值边缘检测 : 采用公式 ( 2 ) 中的高阈值及其对应的低阈值使用 Canny 算子对图 I 进行边缘检测 , 得到边缘图像E ;
3 ) 局部动态阈值修正 : 边缘图像 E 中的边缘点 ( i , j ) 的梯度幅值为M ( i , j ), 在以该点为中心的 21 × 21 邻域中的梯度幅值最大值为 M max , 若 M ( i , j ) < 0.3 M max , 则将该边缘点剔除;
4 ) 剔除边缘图像 E 中的细小边缘
三、电表读数图像二值化
图像二值化是数字图像处理中的重要环节 , 经典的图像二值化方法包括全局阈值法、局部阈值法和动态阈值法等。
以获取准确的电表
读数图像边缘为前提 , 结合全局阈值二值化方法与局部自适应阈值二值化方法实现电表读数图像二值化, 具体步骤
如下 :
1 ) 使用 cvtColor 函数对电表读数图像进行灰度化 ;
2 ) 对电表读数灰度图像 I 采用本文提出的边缘检测算法进行边缘检测, 得到边缘图像 E ;
3 ) 采用 AdaptiveThreshold 函数对电表读数灰度图像I进行局部自适应二值化 , 以像素点为中心的邻域块大小设置为51 , 局部阈值采用邻域块的高斯加权和 , 得 到 二 值化图像abI ;
4 ) 采用 Threshold 函数对电表读数灰度图像 I 进行全局阈值二值化, 阈值为平均灰度的 0.9 倍 , 得到二值化图像tbI;
5 ) 对于图像 abI 中的前景点 ( i , j ), 若在图像 tbI 中的对应位置不是前景点, 则将该点从二值化图像 abI 的前景点中剔除, 得到初步二值化图像 sbI ;
6 ) 对于二值化图像 sbI 中的前景点 ( i , j ), 统计边缘图像E 中以其对应位置为中心的 23×23 邻域中的边缘点个数, 若边缘点个数小于 12 , 则将该点从前景点中剔除 ;
7 ) 剔除二值化 图 像 sbI 中连通面积小于 55 像素 的 细小前景连通区域。
实现效果图样例
图 所示为全局双阈值 Canny 算子的检测结果:
图 所示为局部阈值修正 Canny 边缘检测算法的检测结果:
我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。
毕设帮助,疑难解答,欢迎打扰!
最后
所有评论(0)