這是在碩一上的自動光學檢測這門課的做了一個期末專案,目的是要檢測出排列好在桌上的圓管缺陷,看否有凹陷、突起的情況發生,藉由光學檢測的形式標記 NG 品出來,本專案的程式也有公開在[GitHub](https://github.com/ming0071/112-1_AOI-final-project)提供有興趣的人參考。 專案方法是由工業相機對金屬圓管取像之後,再由 C++ 結合 OpenCV 函式庫進行後續的影像處理,本篇文章主要針對軟體上影像處理的過程進行說明。 以下是專案中的圓管的實際照片示例:  程式流程圖:  ## 圖片預處理 第一步讀取經由工業相機拍攝之後的照片,後續經由中值濾波、二值化、開運算等基本影像處理後,接著提取出最外輪廓去除(即最大面積輪廓),得到僅保留內圓輪廓的效果,確保後續的霍夫測圓可以只抓取內圓的特徵做後續的影像辨識。 由下圖比較可以發現去除最外輪廓之後可以得到更好的結果。  ## 以極座標轉換做輪廓檢測 一開始先是由霍夫轉換得到每個圓的圓心座標、半徑,對其結果進行上到下、左而右的排序,確保每次經由霍夫計算後得到的圓是固定的順序,接下來就可以對每個圓抓取 ROI 並開始極座標輪廓檢測的過程。 1. 極座標轉換 2. 均值濾波,以(3,501)的濾波核進行濾波,得到假想的完美圓,即沒有缺陷 3. 差值計算,以極座標轉換和假想圓做差值計算,這樣得到的結果就會是缺陷的特徵 4. 缺陷特徵二值化 5. 缺陷特徵輪廓抓取 6. 反極座標轉換  而缺陷的判定就可以藉由計算每個圓內缺陷區域內的像素面積而得,當大於設定的閥值即為 NG、小於設定的閥值即為 OK ## 實時的讀取影片進行辨識 當改以非照片形式做缺陷辨識時需要改變先前的判定邏輯,因為以照片為輸入做霍夫測圓而得到的影像光影是固定的,不太會有什麼變化產生,但是改以影片作為輸入時,每幀影像的光影都有些微的差別,而這些細微的差別就使的每次霍夫檢測的圓心、半徑特徵有所變化,讓極座標的過程不穩定,會使判定的結果不斷地閃爍,而不是穩定的輸出。 而影片新的缺陷辨識邏輯大致與圖片相同,每幀影像依舊是以缺陷區域內的像素面積為參數,看他使否大於設定的閥值判定 NG 與否,當判定 NG 一次時,就會給該圓的結果減 1;反之, OK 則加 1,這樣的一次過程就是算一次的投票。 而每幀都會經過一次這樣的投票過程 ,依據這樣的結果決定顯示該圓是 NG 或是 OK,避免了輸出結果閃爍的可能性,當經過多次的運算之後會使的輸出結果穩定,就算過程中出現少數的失誤判斷也不會影響結果的顯示。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up