鄒智敏 劉偉


摘 要:為了提高生產效率,使學生了解計算機視覺,跟上人工智能的時代發展步伐,文中設計實現一種基于計算機視覺的車床零件自動檢測。車床零件自動檢測涉及的主要算法包括圖像特征點檢測算法FAST,ORB;特征點描述算法BRIEF,ORB;特征點匹配算法BruteForceMatcher等。具體實現包括OpenCV,OpenCVSharp視覺庫,Visual Studio中使用NuGet庫程序包管理器安裝OpenCVSharp視覺庫,以及C#程序的具體實現等。實踐表明,結合校辦工廠、車床零件加工課程,一方面提升了生產效率,另一方讓學生了解了計算機視覺原理,掌握了計算機視覺初步開發。
關鍵詞:圖像特征點;特征點描述;特征點匹配;OpenCVSharp;NuGet;ORB
中圖分類號:TP391.4文獻標識碼:A文章編號:2095-1302(2020)02-00-03
0 引 言
我校屬于中等職業技術學校,下設校辦車間,承接車床零件批量生產,主要是為了培養學生的職業技能。為了提升生產效率,同時讓學生了解計算機視覺,跟上人工智能的時代發展方向,實現了基于計算機視覺的車床零件自動檢測。本文基于2019年中等職業學校教學能力比賽的“滑動軸承零件的批量生產”項目,該項目獲得省一等獎。
1 實現原理
1.1 計算機圖像的存儲與處理
計算機中的圖像實質上就是一個二維數字矩陣,如圖1所示。該矩陣的行數就是圖像的垂直像素數,列數就是圖像的水平像素數,矩陣中的一個數字就代表圖像對應位置的一個像素。對計算機圖像的處理實際上就是對矩陣的運算。
使用數碼相機或手機拍攝的圖像一般是彩色圖像,1個像素用3個字節表示,分別代表紅(r)、綠(g)、藍(b)三色的值。在提取圖像特征點之前要將彩色圖像裝換成灰度圖像,灰度圖像1個像素用1個字節表示[1],其值為0.299r+0.587g+0.114b。
1.2 圖像特征點提取
車床零件自動檢測實際就是目標零件圖像與模板零件圖像的匹配,圖像匹配之前首先需要提取圖像特征點。本文使用2011年由Ethan Rublee等人提出的ORB(Oriented FAST and Rotated BRIEF)算法[2]。ORB提取特征點算法是2006年
由Edward Rosten和Tom Drummond 提出的FAST(Features from Accelerated Segment Test)算法的改進版本[3]。
FAST算法定義特征點為:如果某個像素點和它周圍鄰域足夠多的像素點處于不同區域,那么這個像素點就是特征點。對于灰度圖像,如果該點的灰度值與其周圍足夠多的像素點的灰度值不同,那么這個像素點就是一個特征點[4]。算法計算步驟如下。
(1)從圖片中選取一個坐標點,獲取該點的像素值,并判定該點是否為特征點。
(2)選取以坐標點為圓心,半徑等于3的Bresenham圓(一個計算圓的軌跡的離散算法,得到整數級的圓的軌跡點),這個圓上有16個點,如圖2所示。
(3)選取一個閾值,假設為t,并假設這16個點中,有n個連續的像素點,他們的亮度值與中心點的像素值的差大于或者小于t,那么這個點就是一個特征點。n的取值一般取值12或者9,實驗證明9可以取得更好的效果。
FAST算法的優點是計算速度快,缺點是當圖片中的噪點較多時,會產生較多的錯誤特征點,健壯性并不好,而且FAST特征點沒有方向信息,這樣就會失去旋轉不變性。ORB提取特征點算法就是對FAST算法進行改進,首先它使用Harris角點和尺度金字塔變換算法選取最好的特征點,然后使用中心與角度計算算法使其具有旋轉不變性[5]。
1.3 圖像特征點描述
圖像的特征點被提取之后需要要對特征點進行描述,以便匹配。ORB特征點描述算法是2010年由Michael Calonder等人提出的BRIEF(Binary Robust Independent Elementary Features)算法的改進版本[6]。
BRIEF是一種對已檢測到的特征點進行描述的算法,它是一種二進制編碼的描述子,在圖像匹配時使用BRIEF能極大的提升匹配速度[7]。算法計算步驟如下:
(1)以特征點P為中心,取一個S×S大小的鄰域(一般S=31),并做高斯平滑;
(2)在這個鄰域內以同樣的標準選取N對點(一般N=256),對于每一對點比較它們灰度值的大小,如果前者小于后者賦值1,否則賦值0;
(3)最后把步驟(2)得到的N個二進制碼串組成一個N維向量即可。
BRIEF算法的優點是計算速度快,耗費內存少,缺點是對噪聲敏感和不具備旋轉不變性。ORB算法中使用像素塊灰度和比較取代像素點灰度比較解決噪聲敏感問題,另外ORB算法根據角度參數提取BRIEF描述子以及貪心算法解決旋轉不變性問題[5]。
1.4 圖像特征點描述匹配
生成目標圖像和模板圖像的特征點描述后,就需要進行特征點描述匹配。本文使用BruteForceMatcher算法,該算法對兩幀圖像中每一個特征點與所有的特征點測量描述子的距離,然后排序,取距離最小的一個作為匹配點。描述子距離使用漢明算法,表明了兩個特征之間的相似程度。兩個等長字符串之間的漢明距離是兩個字符串對應位置的不同字符的個數[8]。例如,1011101 與 1001001 之間的漢明距離是2。
2 程序實現
2.1 安裝OpenCVSharp
系統使用OpenCVSharp實現。OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux,Windows和Mac OS操作系統上。OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。它輕量級而且高效,實現了圖像處理和計算機視覺方面的很多通用算法。
OpenCVSharp是OpenCV的C#版本,它的特點有:
(1)直接封裝了OpenCV方法,降低了學習的難度;
(2)大部分繼承了IDisposable接口,方便使用using語句;
(3)可以直接調用原始風格的OpenCV方法;
(4)可以將圖像對象直接轉換成GDI使用的Bitmap。
OpenCVSharp的網址是https://github.com/shimat/opencvsharp。OpenCVSharp在VS中的環境配置是使用NuGet(庫程序包管理器)。Nuget是.NET中開源包管理工具,可以讓開發人員簡單地合并第三方的組件庫,能更方便地把一些DLL和文件添加到項目中,而不需要從文件中復制。當需要分享開發的工具或是庫,需要建立一個Nuget package,然后把這個package放到Nuget的站點。如果想要使用別人已經開發好的工具或是庫,只需要從站點獲得這個package,并且安裝到自己的Visual Studio項目或是解決方案里。
本文使用Visual Studio 2019平臺開發,如圖3所示。通過【工具】【NuGet包管理器】【管理解決方案的NuGet程序包】菜單項,打開NuGet管理界面,如圖4所示。在搜索框中輸入“OpenCVSharp”,選擇搜索結果中的“OpenCvSharp3-AnyCPU”,在右側NuGet包信息界面中勾選當前解決方案,點擊“安裝”按鈕即可[9]。
2.2 實現代碼
程序實現代碼及注釋如下所示:
3 結 語
本文結合校辦工廠,模具課程實現了基于計算機視覺的車床零件自動檢測程序,提升了車間自動化程度,同時讓學生了解了計算機視覺原理,并能初步進行開發。起初學生覺得計算機視覺與自己無關,是遙不可及,神秘莫測的,只有大學生、研究生才能勝任。現在學生們覺得計算機視覺變得容易理解,并可以自己動手實現,增強了學生的自信心,專業技能以及解決問題的能力。
圖5 圖像匹配效果圖
參 考 文 獻
[1]楊薇.基于VC++的彩色圖像轉灰度圖像[J]. 保山學院學報,2014,33(2):30-32.
[2]佚名.ORB算法介紹[EB/OL]. [2018-02-13]. https://docs.opencv.org/3.4.1/d1/d89/tutorial_py_orb.html.
[3]佚名. FAST算法介紹[EB/OL]. [2018-02-13]. https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_fast/py_fast.html.
[4]高晶,陳莉,蘭小艷,等.基于FAST特征點提取的圖像拼接算法[J]. 西北大學學報(自然科學版),2016,46(3):9-11.
[5]陳玉. 一種改進的ORB算法在圖像匹配中的應用[J]. 微型機與應用,2017,36(16):37-40.
[6]佚名. BRIEF算法介紹[EB/OL]. [2018-02-18]. https://docs.opencv. org/3.0-beta/doc/py_tutorials/py_feature2d/py_brief/py_brief.html.
[7]杜輝.基于改進BRIEF算法的物流編碼識別技術[J]. 物流技術,2015(7):261-264.
[8]林崧,劉曉芬,姚志強.一種基于漢明碼的數字水印算法[J]. 福建師范大學學報(自然科學版),2004(4):24-27.
[9]佚名.安裝管理開源包[EB/OL]. [2018-05-12]. https://docs.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio.
[10]廖春萍.基于OpenCV的人臉識別系統[J].東莞理工學院學報,2017,24(3):33-38.