基于深度学习的指针式仪表倾斜校正方法——论文解读

这篇具有很好参考价值的文章主要介绍了基于深度学习的指针式仪表倾斜校正方法——论文解读。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

中文论文题目:基于深度学习的指针式仪表倾斜校正方法

英文论文题目:Tilt Correction Method of Pointer Meter Based on Deep Learning

周登科、杨颖、朱杰、王库.基于深度学习的指针式仪表倾斜校正方法[J].计算机辅助设计与图形学学报, 2020, 32(12):9.DOI:10.3724/SP.J.1089.2020.18288.

一、摘 要:

       针对仪表图像自动识别中倾斜仪表产生的读数误差,提出一种基于深度学习的圆形指针式仪表快速倾斜校正方法,可以实现仪表图像的倾斜校正和旋转校正,该方法利用卷积神经网络提取以表盘刻度数字为中心的关键点并采用最小二乘法对关键点进行椭圆拟合

        结合椭圆变换理论使用透视变换对仪表图像进行第 1 次倾斜校正,再根据一对关于仪表竖直中轴线对称的关键点计算仪表相对于水平方向的旋转角度,以拟合椭圆的几何中心为旋转中心旋转仪表图像实现第 2 次校正

        在变电站真实环境下采集图像数据,验证方法性能,实验结果表明,该方法相对于传统方法鲁棒性更好,校正有效率达到 100%,平均校正时间为0.45 s,满足实时校正需求,识别校正后的仪表图像读数的平均相对误差降低到 3.99%平均参考误差降低到 0.91%,充分显示该校正方法的有效性. 

        针对现有的指针式仪表倾斜校正方法不能同时实现仪表的倾斜校正和旋转校正,并且在校正过程中速度较慢、效果较差等问题,本文提出一种基于深度学习的指针式仪表倾斜校正方法。

二、算法检测流程

该方法分为 2 个部分:

        表盘关键点提取和仪表校正在仪表的关键点提取中,利用端到端的深度学习算法 YOLOv3 提取表盘上的以刻度数字为中心的关键点坐标。(可以网上找到仪表的图自己训练,目前没有找到作者公开的代码及数据)

关于关键点检测的方法网上资料很多,这里不做过多说明

例如下面的参考链接,提供了人脸关键点的训练方法以及检测流程

同时还提供了详细的代码和数据集

人脸与关键点检测:YOLO5Face实战_yolov5face_烧技湾的博客-CSDN博客

        仪表校正又分为倾斜校正和旋转校正,首先根据提取的关键点坐标计算透视变换矩阵,然后透视变换实现仪表的第 1 次倾斜校正:再根据图像上的一对以表盘竖直中轴线对称的关键点旋转图像实现仪表第 2 次旋转校正,图所示为本文仪表图像倾斜校正的框架图 。

基于深度学习的指针式仪表倾斜校正方法——论文解读,论文解读复现,机器视觉,深度学习,人工智能,仪表检测,指针识别,矫正

三、检测效果及验证

         最后,为了验证本文校正方法相对于传统仪表校正方法[12,13]具有更好的稳定性和有效性,选择 10 幅变电站真实环境下采集的倾斜仪表图像进行实验校正.校正后的图像效果如图 12 所示,校正效率和时间如表3所示:其中有效率的统计中认为校正后的图像相对于原图有较大的比例尺度改善且可用于仪表读数,则视为校正有效.如图 12所示,部分图像经过透视变换后相对于原图像发生更大的形变,则视为校正无效,如图 12b 所示后7 幅图像及图 12c 所示后 5 幅图像 .

基于深度学习的指针式仪表倾斜校正方法——论文解读,论文解读复现,机器视觉,深度学习,人工智能,仪表检测,指针识别,矫正

基于深度学习的指针式仪表倾斜校正方法——论文解读,论文解读复现,机器视觉,深度学习,人工智能,仪表检测,指针识别,矫正

四、结语

        指针式仪表图像的倾斜校正是仪表读数识别研究中的一项重要任务,针对传统的图像校正方法难以满足复杂环境中仪表的校正任务,本文提出一种基于深度学习的指针式仪表倾斜校正方法该方法通过深度卷积神经网络提取表盘上以刻度数字为中心的关键点,然后根据关键点信息同时实现了仪表图像的倾斜校正和旋转校正.实验结果表明,与传统校正方法相比,本文校正方法能够得到更好的仪表校正效果,识别校正后的仪表图像提高了读数的准确度.在变电站及工业环境中采集的仪表图像会出现各种各样的倾斜,通过本 文方法倾斜校正后再识别仪表图像,提高了读数准确度,具有实用价值。

五、拓展,基于SIFT特征的仪表倾斜校正方法(opencv python代码)

import numpy as np
import cv2
from matplotlib import pyplot as plt
#参考链接
#https://www.javaroad.cn/questions/347518#toolbar-title

# FIXME: doesn't work
def deskew():
    im_out = cv2.warpPerspective(img1, M, (img2.shape[1], img2.shape[0]))
    plt.imshow(im_out, 'gray')
    plt.show()


# resizing images to improve speed
factor = 0.4
img1 = cv2.resize(cv2.imread("./img/zheng2.png", 0), None, fx=factor, fy=factor, interpolation=cv2.INTER_CUBIC)
img2 = cv2.resize(cv2.imread("./img/xie2.png", 0), None, fx=factor, fy=factor, interpolation=cv2.INTER_CUBIC)

#有专利,SURF_create,SIFT_create可以直接跑
'''
1. 卸载已有安装opencv-python:

      pip uninstall opencv-python

2. 安装opencv-contrib-python  3.2版本以下:

      pip install opencv-contrib-python==3.4.2
也可以不降低版本号,进行编译,详细流程见链接
https://blog.csdn.net/m0_50736744/article/details/129351648

'''
surf = cv2.xfeatures2d.SIFT_create()
kp1, des1 = surf.detectAndCompute(img1, None)
kp2, des2 = surf.detectAndCompute(img2, None)

FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1, des2, k=2)

# store all the good matches as per Lowe's ratio test.
good = []
for m, n in matches:
    if m.distance < 0.7 * n.distance:
        good.append(m)

MIN_MATCH_COUNT = 10
if len(good) > MIN_MATCH_COUNT:
    src_pts = np.float32([kp1[m.queryIdx].pt for m in good
                          ]).reshape(-1, 1, 2)
    dst_pts = np.float32([kp2[m.trainIdx].pt for m in good
                          ]).reshape(-1, 1, 2)

    M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
    matchesMask = mask.ravel().tolist()
    h, w = img1.shape
    pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)
    dst = cv2.perspectiveTransform(pts, M)

    deskew()

    img2 = cv2.polylines(img2, [np.int32(dst)], True, 255, 3, cv2.LINE_AA)
else:
    print("Not  enough  matches are found   -   %d/%d" % (len(good), MIN_MATCH_COUNT))
    matchesMask = None

# show matching keypoints
draw_params = dict(matchColor=(0, 255, 0),  # draw  matches in  green   color
                   singlePointColor=None,
                   matchesMask=matchesMask,  # draw only    inliers
                   flags=2)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, good, None, **draw_params)
plt.imshow(img3, 'gray')
plt.show()

上面算法的效果图

基于深度学习的指针式仪表倾斜校正方法——论文解读,论文解读复现,机器视觉,深度学习,人工智能,仪表检测,指针识别,矫正

上面的代码及仪表图像数据,已经上传至资源,自行下载

https://download.csdn.net/download/sunnyrainflower/88221223

#参考链接
#https://www.javaroad.cn/questions/347518#toolbar-title

特别说明

#SURF_create有专利,直接运行报错,SIFT_create可以直接跑

使用SURF_create的方法如下

一、
1. 卸载已有安装opencv-python:

      pip uninstall opencv-python

2. 安装opencv-contrib-python  3.2版本以下:

      pip install opencv-contrib-python==3.4.2

二、
也可以不降低版本号,进行编译,详细流程见链接
https://blog.csdn.net/m0_50736744/article/details/129351648


/*----------------------------------------------------------------------------------
// 作    者:    大胡子大叔
// 版权声明: 未经同意请勿转载,里面有几张图来自网络,如果侵权请联系删除
----------------------------------------------------------------------------------*/ 文章来源地址https://www.toymoban.com/news/detail-652142.html

到了这里,关于基于深度学习的指针式仪表倾斜校正方法——论文解读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv8+PyQt+OpenCV实现数字式仪表读数和指针式仪表读数识别(二)

    章(一)内容为不同种类仪表识别和数字式仪表读数识别,这一章介绍 两种指针式仪表读数识别方法 ,一种为 非360度指针式仪表 ,一种为 360度指针式仪表 。效果如下所示。 指针式仪表识别效果 360度指针式仪表识别效果  数字式仪表识别效果 数字式仪表和指针式仪表检测视

    2024年03月18日
    浏览(93)
  • 一个指针式的时钟,12小时内时针和分针重复多少次,分别是什么时间

    之前看过一个鸡汤,说中国学生和国外学生,老师提出这个问题,仅是问重合多少次。中国学生拿出笔闷头算,国外学生直接拿出表直接调时间………… 但是这个问题如果是重合的具体时间如何用C语言算 结果 重复时间 小时: 1  分钟 5  重复时间 小时: 1  分钟 6  重复时间

    2024年02月10日
    浏览(72)
  • 计算机视觉——基于傅里叶幅度谱文档倾斜度检测与校正

    在计算机视觉领域,处理文档数据时,OCR算法的性能往往会受到文档的倾斜度影响。如果文档在输入到模型之前没有经过恰当的校正,模型就无法期待模型能够提供准确的预测结果,或者模型预测的精度会降低。例如,在信息提取系统中,如果向OCR模型提供了倾斜的图像,模

    2024年04月10日
    浏览(40)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果 一、简单介绍 二、简单图像倾斜校正处理效果实现原理 三、简单图像倾斜校正处理效果案例实现简单步骤 四、注意事项 Python是一种跨平台的计算机程序设计语言。是一种面向对

    2024年04月13日
    浏览(69)
  • MATLAB图像倾斜校正算法实现:图像倾斜角检测及校正

    在本文中,随着多媒体技术的不断发展,数码相机,高清拍照手机等多媒体设备己经在人们的生活中占据了越来越重要的地位 ( 点击文末“阅读原文”获取完整 代码数据 ) 。 通过采用图像处理技术,可以将数码设备采 集到的文字、图片等信息转化成其他信息形势输出,例

    2024年02月04日
    浏览(84)
  • 倾斜矫正:用Python和OpenCV实现图像倾斜校正

    图像倾斜是在图像获取或扫描过程中常见的问题,它可能会导致图像失真、文字难以识别或其他应用中的问题。在本文中,我们将使用Python编程语言和OpenCV库来实现图像倾斜校正。 首先,我们需要安装OpenCV库。可以使用以下命令在Python环境中安装它: 安装完成后,我们可以

    2024年02月03日
    浏览(76)
  • python 图片倾斜校正

    进行图片校正是将拍照倾斜的图片恢复水平状态,大致思路为: 用canny算子检测出图像中的边缘轮廓线; 用霍夫线变换检测出图像中的所有直线; 筛选出接近水平方向上的直线,求出他们偏移角度的平均值; 根据倾斜角旋转矫正; 输出图片。 这里设计到几个知识点: can

    2024年02月04日
    浏览(35)
  • 在Photoshop中如何校正倾斜的图片

    在Photoshop中如何校正倾斜的图片呢?今天就教大家如何操作。 将需要操作的图片拉到PS软件中,自动形成项目。 点击上方“滤镜”中的“镜头校正”。 进入“镜头校正”窗口,点击左侧的“拉直工具”。文章源自设计学徒自学网-http://www.sx1c.com/34847.html 在倾斜的图片底部画一

    2024年02月05日
    浏览(35)
  • Python+OpenCV库实现对倾斜图片的校正

    前言 一、设计思路 二、编程步骤 三、代码实现 四、测试结果 总结         本实验旨在利用OpenCV库实现对倾斜图片的校正,并通过鼠标交互方式选择图片的边界点,以便进行透视变换和图像裁剪,代码简洁,适合初学者参考学习。         首先,我们需要读取一张倾

    2024年02月21日
    浏览(39)
  • Qt(C++)绘制指针仪表盘显示当前温度

    当前文章要实现的功能: 使用Qt绘制一个仪表盘,用来显示当前的温度,绘制刻度、绘制数字、绘制温度指针。仪表盘全程使用QPainter进行绘制,QPainter是Qt框架中非常重要的一个类,绘制功能的实现离不开它。如果想要使用Qt进行高质量的绘图或UI设计,必须掌握QPainter的使用

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包