双指针仪表盘读数(一)

本文介绍了作者在表盘识别项目中的思考与实践,包括尝试使用hog+svm及霍夫直线检测,因指针形状导致效果不佳。后采用霍夫圆形检测优化,并通过首次识别的圆形定位后续检测区域,降低性能消耗。对比了模板匹配、hog+svm等方案,最终确定了最优策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章节内容:拿到项目的思考以及表盘识别    

 我基本上把优快云上所有的关于指针读数文章以及下载都看过了,有需求或者疑问的同学可以来交流,资源也可以免费给了,最后的识别效果就如上一篇的图片所示,运行程序占用的资源经过优化之后特别小,GPU可有可无。回头写个论文弄个专利应该挺轻松的。

开发语言:python3.0+

调用包:

1.sys                 用于退出程序:sys.exit()
2.time                用于计算时间,还用于matplotlib画图的计时
3. win32api           用于监测按钮  win32api.GetKeyState(27)
4. cv2                主要调用,大部分处理都需要opencv,版本为3.4
5. imutils            主要用于计算中心点坐标
6. matplotlib         画图
7. numpy              数学
8. PIL                主要用于转化arry数组为图像

具体版本见下表,懒得一一对应了,自己找一下吧

说一下刚拿到需求的思路以及后来否定的过程:

拿到的需求:一个表盘,识别速度以及信号,表盘为圆形

 

想法:hog+svm训练模型,实时追踪表盘位置,霍夫直线识别直线,以角度识别对应的速度

实践:hog+svm的速度可以,但是霍夫直线检测效果特别差

原因: 因为表盘使用的指针是一个椭圆形指针,前端有一小节指针,识别效果不理想,

应对办法:使用opencv图像处理对表盘进行二值化之后,使用细化算法(Image Thinning)和之前看的腐蚀膨胀差不多,看了都可以很快理解,但是加上细化算法之后识别效果还是很差,此路不通,换方案。

 

由于中间厂家换了一种表盘,使用的hog+svm寻找表盘就不可以用了,换为霍夫圆形检测(hough cirlce Transform),调参是一门大学问,可以根据自己需求进行调参。

circles = cv2.HoughCircles(
        binary, cv2.HOUGH_GRADIENT, 2, 1000, param1=100, param2=100, minRadius=10, maxRadius=5000)

      但是有一个问题,一直进行霍夫检测圆对于计算机的性能要求特别高,时间复杂度空间复杂度大,对于处理视频而言效率达不到,这里我想到了一个解决办法,使用第一次识别出来的圆形对图像进行切割,后续视频中所有的圆形全部按照这个切割区域进行识别,大大降低了设备性能损耗。摄像机位置后期固定,此方案为多种方案对比下最好的方案。

对比方案:1.优快云某博文方案:模板匹配法

                2.自己之前的方案:hog+svm

                3.视频每一帧都进行霍夫圆形检测方案

                4.优快云某下载方案:忘了啥方案反正我这边做的效果都没上述对比效果好。

本章写到这里吧,工作原因,改天继续

### 使用Halcon实现指针式仪表盘读数识别 对于指针式仪表盘读数识别,可以采用图像处理技术来定位并分析指针的位置。Halton提供了强大的工具集用于此类任务。 #### 图像预处理 为了提高后续操作的成功率,在开始之前通常会对输入图片做定的预处理工作。这可能涉及到灰度化、去噪等步骤[^1]。 ```cpp // 将彩色图转换成灰度图 convert_image_to_gray(Image, GrayImage); ``` #### 定位刻度区域 通过形态学变换找到表盘轮廓,并据此裁剪出感兴趣区(ROI)。接着利用边缘检测算法勾勒出内部结构特征以便于下步骤中寻找指针位置。 ```cpp // 寻找闭合边界作为候选对象 connection.RegionClosing -> select_shape.SelectObj -> smallest_rectangle2.SmallestRectangle2; ``` #### 提取指针信息 基于上述得到的结果进步细化搜索范围直至锁定目标——即实际指向当前数值的那个部分;此过程往往借助霍夫直线变换完成,它能有效地从二值化后的图形里筛选出最有可能代表‘箭头’形状的组线条集合。 ```cpp // 应用霍夫变换查找疑似指针线段 hough_line_trans(EdgeImage, HoughImage, 'standard', 0.8, 50, pi/90, 70); threshold(HoughImage, Regions, 100, 255); // 设定阈值过滤弱响应 ``` #### 计算角度映射关系 旦确定了具体哪条线对应着真正的指示器,则可通过计算其相对于初始零点的角度差值进而推导出所对应的物理量大小。这里假设已知满刻度对应的最大转角θ_max以及最小可分辨单位Δθ,则最终输出结果N由下述公式给出: \[ N=\frac{\theta}{\Delta \theta}+\text {offset } \] 其中θ表示测量到的实际偏离角,而offset则取决于起始参考位置的选择.
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值