作者:白楊楊
來源:公眾號@3D視覺工坊
鏈接: 缺陷檢測 | PCB AOI質量檢測之自動定位核選取算法
PCB產品AOI檢測,需要將模版與實際圖像對齊,因此需要定位功能。定位功能就需要選取定位核,定位核的提取方法分為手動和自動。基於人眼視覺特征對區域敏感度判斷的手動提取法存在很大的局限性,且當需要較多定位核時建模復雜,因此目前廣泛應用的是自動提取法。PCB由於高精度成像和高標准檢測需求,決定了一個料號可能需要幾百甚至上千個定位核,所以需要實現自動選取定位核的功能;檢測時料號是未知的,且切換比較頻繁,所以無法離線選取定位核,因此算法要求滿足實時性。
1 功能說明
自動定位核選取模塊主要功能如下:1)支持多個相互獨立的全功能型定位核選取圖1 全功能型定位核演示2)支持組合定位核的選取
圖2 組合型定位核演示3)支持單向(任意方向)定位核的選取
圖 3 單向定位核演示4)增加局部唯一性驗證,支持兩種不同的定位模式,NCC和Shape
2 算法設計
根據常見的定位算法的原理可知,選取定位核應選擇:1)梯度信息豐富的地方,並且該梯度信息在水平和垂直方向都有分量;2)在一定范圍內滿足唯一性。
圖 4 彩色圖及對應的梯度圖PCB產品的模板圖像一般由Gerber或ODB++文件解碼生成,因此自動選定位核的輸入圖像一般為二值圖,圖案由直線和弧形組成,其所對應梯度信息如下圖所示:
圖5 PCB二值圖及對應的梯度圖可見,適合選取定位核的位置如下圖所示:
圖6 可選為定位核的位置
2.1設計概要
在定位核的選取過程中,遵循的原則如下:
- 優先選擇滿足條件的全功能型定位核;
- 若無全功能型定位核,則篩選出滿足條件的組合定位核;
- 若無組合定位核,則篩選出單向定位核。
2.2 算法流程
2.2.1 圖像降采樣
圖像降采樣,即采樣點數減少。對於一幅N*M的圖像來說,如果降采樣系數為k,則即是在原圖中每行每列每隔k個點取一個點組成一幅圖像。采取降采樣的目的是為了降低處理時間。
2.2.2 提取亞像素輪廓XLD
降采樣后的圖像
亞像素輪廓圖XLD代表亞像素精度的邊緣輪廓和多邊形,並不是沿着像素與像素交界的地方,而是經過插值之后的位置。
2.2.3 獲得備選定位核
全功能型定位核
單方向定位核 實現流程:
- 將亞像素輪廓XLD轉為多邊形輪廓XLD(Ramer算法);
亞像素輪廓XLD
多邊形輪廓XLD
- 遍歷多邊形輪廓XLD,依次獲取多邊形輪廓對應的N個離散點、N-1個角度,並計算當前離散點即拐點對應的夾角Angle。這些離散點就是各個疑似定位核的中心點;
離散點即拐點圖示
- 通過拐點夾角Angle計算各自的正交值Orthogonality,超過設定的分值加入待選的全功能型定位核中,否則加入到單向定位核中,其中:
Orthogonality = abs(Angle-ORTHANGLE)/ ORTHANGLE。其中:ORTHANGLE = PI/2;
2.2.4 全功能型定位核選取
實現流程:
- 按照正交分值從大到小排序;
- 依次驗證唯一性(在一定范圍內進行模板匹配,判斷找到的數目是否為1),找到要求的數目即返回;
2.2.5 組合型定位核選取
若沒有找到符合條件的全功能型定位核,或找到的數目不夠,則選取滿足條件的組合型定位核。實現流程:
- 對剩余的定位核進行排序(全功能型定位核按照正交值從大到小排序,單向定位核按照水平、垂直、任意方向的類別依次排序);
- 找到所有符合組合型定位核條件的定位核組(兩個),滿足以下條件之一即可:
1 定位核組中至少有一個全功能型定位核;2 若均是單向定位核,則根據兩者的方向角度差計算正交分值,大於等於設定的正交值。
- 依次驗證唯一性(在一定范圍內進行模板匹配,判斷找到的數目是否為1),找到要求的數目即返回;
單向定位核判斷是否滿足組合條件的流程如下:Step1:單向定位核按照水平、垂直、任意方向的類別依次排序,類別相同則按照歸一化后的角度從小到大排序;Step2:去除相鄰角度相同的定位核(僅保留一個),得到不同方向的定位核組;Step3:遍歷定位核組,兩兩計算對應的夾角,篩選出滿足正交分值的定位核組對(兩個);Step4:按照每組對的正交分值進行排序;Step5:遍歷所有的組對,每組找到對應的所有的單向定位核,依次計算定位核的距離是否滿足最小值,若滿足直接返回,否則找到為止。
2.2.6 單向定位核選取
實現流程:單向定位核按照水平、垂直、任意方向的類別依次排序,返回第一個。
3 模塊輸出
可將模塊封裝成獨立的dll,接口函數如下:
類型 | 函數名 | 功能說明 |
參數設置 | SetSampleStep | 設置抽樣步長 |
SetOffset | 設置搜索范圍 | |
SetLocationRotate | 設置旋轉相關參數(驗證定位核局部唯一性) | |
SetKernelNum | 設置找到定位核的最大數目 | |
SetLocationSize | 設置定位核的尺寸 | |
SetMinScore | 設置找到定位核的最小分數 |
運行 | Execute | 執行定位核的搜索 |
結果 | GetMainKer | 獲得找到的定位核相關信息 |
參數界面如下所示:
本文僅做學術分享,如有侵權,請聯系刪文。