中文論文題目:基于深度學(xué)習(xí)的指針式儀表傾斜校正方法
英文論文題目:Tilt Correction Method of Pointer Meter Based on Deep Learning
周登科、楊穎、朱杰、王庫.基于深度學(xué)習(xí)的指針式儀表傾斜校正方法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào), 2020, 32(12):9.DOI:10.3724/SP.J.1089.2020.18288.
一、摘 要:
? ? ? ?針對(duì)儀表圖像自動(dòng)識(shí)別中傾斜儀表產(chǎn)生的讀數(shù)誤差,提出一種基于深度學(xué)習(xí)的圓形指針式儀表快速傾斜校正方法,可以實(shí)現(xiàn)儀表圖像的傾斜校正和旋轉(zhuǎn)校正,該方法利用卷積神經(jīng)網(wǎng)絡(luò)提取以表盤刻度數(shù)字為中心的關(guān)鍵點(diǎn)并采用最小二乘法對(duì)關(guān)鍵點(diǎn)進(jìn)行橢圓擬合。
? ? ? ? 結(jié)合橢圓變換理論使用透視變換對(duì)儀表圖像進(jìn)行第 1 次傾斜校正,再根據(jù)一對(duì)關(guān)于儀表豎直中軸線對(duì)稱的關(guān)鍵點(diǎn)計(jì)算儀表相對(duì)于水平方向的旋轉(zhuǎn)角度,以擬合橢圓的幾何中心為旋轉(zhuǎn)中心旋轉(zhuǎn)儀表圖像實(shí)現(xiàn)第 2 次校正。
? ? ? ? 在變電站真實(shí)環(huán)境下采集圖像數(shù)據(jù),驗(yàn)證方法性能,實(shí)驗(yàn)結(jié)果表明,該方法相對(duì)于傳統(tǒng)方法魯棒性更好,校正有效率達(dá)到 100%,平均校正時(shí)間為0.45 s,滿足實(shí)時(shí)校正需求,識(shí)別校正后的儀表圖像讀數(shù)的平均相對(duì)誤差降低到 3.99%平均參考誤差降低到 0.91%,充分顯示該校正方法的有效性.?
? ? ? ? 針對(duì)現(xiàn)有的指針式儀表傾斜校正方法不能同時(shí)實(shí)現(xiàn)儀表的傾斜校正和旋轉(zhuǎn)校正,并且在校正過程中速度較慢、效果較差等問題,本文提出一種基于深度學(xué)習(xí)的指針式儀表傾斜校正方法。
二、算法檢測流程
該方法分為 2 個(gè)部分:
? ? ? ? 表盤關(guān)鍵點(diǎn)提取和儀表校正在儀表的關(guān)鍵點(diǎn)提取中,利用端到端的深度學(xué)習(xí)算法 YOLOv3 提取表盤上的以刻度數(shù)字為中心的關(guān)鍵點(diǎn)坐標(biāo)。(可以網(wǎng)上找到儀表的圖自己訓(xùn)練,目前沒有找到作者公開的代碼及數(shù)據(jù))
關(guān)于關(guān)鍵點(diǎn)檢測的方法網(wǎng)上資料很多,這里不做過多說明
例如下面的參考鏈接,提供了人臉關(guān)鍵點(diǎn)的訓(xùn)練方法以及檢測流程
同時(shí)還提供了詳細(xì)的代碼和數(shù)據(jù)集
人臉與關(guān)鍵點(diǎn)檢測:YOLO5Face實(shí)戰(zhàn)_yolov5face_燒技灣的博客-CSDN博客
? ? ? ? 儀表校正又分為傾斜校正和旋轉(zhuǎn)校正,首先根據(jù)提取的關(guān)鍵點(diǎn)坐標(biāo)計(jì)算透視變換矩陣,然后透視變換實(shí)現(xiàn)儀表的第 1 次傾斜校正:再根據(jù)圖像上的一對(duì)以表盤豎直中軸線對(duì)稱的關(guān)鍵點(diǎn)旋轉(zhuǎn)圖像實(shí)現(xiàn)儀表第 2 次旋轉(zhuǎn)校正,圖所示為本文儀表圖像傾斜校正的框架圖?。
三、檢測效果及驗(yàn)證
? ? ? ? ?最后,為了驗(yàn)證本文校正方法相對(duì)于傳統(tǒng)儀表校正方法[12,13]具有更好的穩(wěn)定性和有效性,選擇 10 幅變電站真實(shí)環(huán)境下采集的傾斜儀表圖像進(jìn)行實(shí)驗(yàn)校正.校正后的圖像效果如圖 12 所示,校正效率和時(shí)間如表3所示:其中有效率的統(tǒng)計(jì)中認(rèn)為校正后的圖像相對(duì)于原圖有較大的比例尺度改善且可用于儀表讀數(shù),則視為校正有效.如圖 12所示,部分圖像經(jīng)過透視變換后相對(duì)于原圖像發(fā)生更大的形變,則視為校正無效,如圖 12b 所示后7 幅圖像及圖 12c 所示后 5 幅圖像?.
四、結(jié)語
? ? ? ? 指針式儀表圖像的傾斜校正是儀表讀數(shù)識(shí)別研究中的一項(xiàng)重要任務(wù),針對(duì)傳統(tǒng)的圖像校正方法難以滿足復(fù)雜環(huán)境中儀表的校正任務(wù),本文提出一種基于深度學(xué)習(xí)的指針式儀表傾斜校正方法該方法通過深度卷積神經(jīng)網(wǎng)絡(luò)提取表盤上以刻度數(shù)字為中心的關(guān)鍵點(diǎn),然后根據(jù)關(guān)鍵點(diǎn)信息同時(shí)實(shí)現(xiàn)了儀表圖像的傾斜校正和旋轉(zhuǎn)校正.實(shí)驗(yàn)結(jié)果表明,與傳統(tǒng)校正方法相比,本文校正方法能夠得到更好的儀表校正效果,識(shí)別校正后的儀表圖像提高了讀數(shù)的準(zhǔn)確度.在變電站及工業(yè)環(huán)境中采集的儀表圖像會(huì)出現(xiàn)各種各樣的傾斜,通過本?文方法傾斜校正后再識(shí)別儀表圖像,提高了讀數(shù)準(zhǔn)確度,具有實(shí)用價(jià)值。
五、拓展,基于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
也可以不降低版本號(hào),進(jìn)行編譯,詳細(xì)流程見鏈接
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()
上面算法的效果圖
上面的代碼及儀表圖像數(shù)據(jù),已經(jīng)上傳至資源,自行下載
https://download.csdn.net/download/sunnyrainflower/88221223
#參考鏈接
#https://www.javaroad.cn/questions/347518#toolbar-title
特別說明
#SURF_create有專利,直接運(yùn)行報(bào)錯(cuò),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
二、
也可以不降低版本號(hào),進(jìn)行編譯,詳細(xì)流程見鏈接
https://blog.csdn.net/m0_50736744/article/details/129351648文章來源:http://www.zghlxwxcb.cn/news/detail-652142.html
/*----------------------------------------------------------------------------------
// 作 ? ?者: ? ?大胡子大叔
// 版權(quán)聲明: 未經(jīng)同意請(qǐng)勿轉(zhuǎn)載,里面有幾張圖來自網(wǎng)絡(luò),如果侵權(quán)請(qǐng)聯(lián)系刪除
----------------------------------------------------------------------------------*/?文章來源地址http://www.zghlxwxcb.cn/news/detail-652142.html
到了這里,關(guān)于基于深度學(xué)習(xí)的指針式儀表傾斜校正方法——論文解讀的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!