傳送門:請點選我
如果點選有誤:https://github.com/LeBron-Jian/ComputerVisionPractice
VisionPro有很多的範例和運算元,這裡再展示一個最新出的運算元Bead Inspect Tool。估計理解這個運算元需要有一定的基礎,但是使用的話其實到大可不必。我自己的筆記不會按照順序一一展示出來的,也許那個文章先OK,我會先release出來的。 其中大部分的圖片和步驟都是VisionPro的官方檔案,我這裡只是自己的學習筆記,不做任何商用。
首先,我會展示一下這個工具是幹什麼的,什麼場景使用。其次我會根據這個運算元的使用步驟學習一下這個運算元的原理。最後會展示一下VisionPro10.2版本這個運算元的頁面。
Bead inspect tool 允許你檢查任何長度和方向的統一路徑。經過訓練的bead inspect工具可以發現影象中的缺陷。其中珠子存在間隙,過度填充或其他缺陷。你可以使用bead路徑的預期位置和外觀來訓練bead inspect tool,然後使用經過訓練的工具來定位執行時影象中的缺陷。
比如:如下圖展示了一個檢查膠珠路徑的bead inspect tool。
上圖其實是在這個黑色的路徑裡面尋找缺陷,簡單的理解就是判斷這條路線的寬度,如果寬度超出設定的閾值,那麼就出來Ng了。這樣highlight出來就可以。而如果一些圖片不存在缺陷,則程式可以使用綠色突出顯示找到的珠子路徑,如下圖:
這樣說可能不是很好理解,我們將這個例子展開學習就方便理解了。下面學習一下Bead Inspect Tool的使用步驟。
為了在視覺應用中使用 Bead Inspect 工具,VisionPro 在 QuickBuild 實用程式中提供了 BeadInspectTool 程式設計介面和 Bead Inspect Edit Control 圖形化使用者介面。將 Bead Inspect 工具新增到您的視覺應用程式中需要執行以下步驟:
使用一個Bead inspect Tool檢查珠子的路徑,並在影象中查詢珠子存在間隙,過度填充或者其他缺陷。VisionPro的QuickBuild提供了Bead Inspect工具編輯控制元件,用於訓練和測試Bead Inspect Tool。下面我會按照使用bead inspect tool的步驟講一下其使用流程。
在使用要在執行時影象中檢查的特定珠子路徑的特徵來訓練bead inspect tool之前,該工具必須能夠準確找到範例影象中的路徑。使用「訓練」索引標籤在範例影象中找到珠子路徑,然後訓練該工具在允許時影象中找到它:
就是說,尋找的路徑就是我們要檢測的地方。
執行以下步驟來查詢bead路徑。
step1:為bead inspect tool 提供一個珠子路徑良好的圖片,並且將該影象傳遞給工具的訓練影象屬性。
step2:使用訓練影象上的起始圓屬性來定義感興趣的珠子和查詢珠子路徑的起始位置。
使用方法:找到並定義起始圓,使其僅包含被區別於背景畫素的特徵包圍的珠子路徑。
調整開始的圓可以拉取影象的大小,也可以手動優化,下圖是手動優化的介面(你可以調整圓心座標,也可以調整圓的半徑):
step3, 你可以讓該工具自動確定以下引數的最佳設定,或手動設定這些引數
如果使用這個工具,建議先使用自動調節,自己覺得不合適了,再手動優化。
下面是自動確定的引數值及其解釋:
下面是手動確定的引數及其解釋:
step4,使用bead inspect tool 查詢方法讓該工具檢測影象中與珠子路徑相對應的特徵。
Bead inspect Tool 使用不同的搜尋引數分析樣本影象,並嘗試生成一個或多個粗略路徑,以準確跟蹤樣本影象中的bead 路徑,根據影象中的特徵,一些粗略路徑可以更準確地反映珠子路徑,而另一些則不能:
所以我們通過為樣本選擇最佳粗略路徑,繼續訓練bead inspect tool的使用。這裡的粗略路徑就是我們後面要檢測缺陷的路徑。可以簡單的理解為路徑上有過於窄,或者過於寬的地方就是存在缺陷的地方。但是對於Good的資料中肯定不存在。
預設情況下使用find方法在範例影象中查詢珠子路徑後,珠子檢查工具會生成五個粗略珠子路徑的集合。如下圖所示:
通過檢視集合我們可以確定哪個粗略路徑與範例影象中的珠子最匹配。請注意,即使粗略路徑的最佳匹配也可能與某些區域中珠子路徑的實際位置有所不同。
下面我簡單對比兩條路線(我隨機選擇了第一條和第三條路徑):
當然上面區別也許不夠明顯,但是有些地方可能會找的不對,如下圖所示:
出現這種情況,Bead inspect tool允許修改粗珠子路徑,使其與範例影象的實際路徑緊密匹配。因為我們的目的就是檢測我們想要檢測的路徑,所以我們必須對其路徑修改,一般情況下,我們使用下面工具頁面來更改粗珠子路徑:
這是edit頁面,我們可以隨意拉動每個bead,也可以選擇合適的地方進行調整。
該介面使用點和線段來表示粗路徑:
該路徑具有靈活性,即可以開啟也可以關閉,具體取決於範例影象要檢測的東西,這也會影響路徑的編輯方式:
單擊點和線段以修改粗略路徑以遵循實際的珠子路徑:
點選訓練按鈕,(一旦您獲得與範例影象中的實際珠子路徑相匹配的粗略路徑,請單擊「訓練」。成功訓練後,Current.TrainImage 緩衝區會突出顯示該工具將在執行時影象中使用的找到的珠子路徑:)
訓練索引標籤支援以下引數,這些引數可以對工具用來定位珠子路徑的卡尺進行額外控制:
Bead Inspect 工具支援一組執行引數,這些引數允許執行時影象中的 Bead 路徑的外觀發生變化,但仍允許工具返回通過結果。
例如,設定對比度閾值以設定檢測珠子邊緣所需的最小對比度。 珠子路徑畫素低於此閾值的任何執行時影象都會導致工具返回一個或多個缺陷。
這些引數的解釋如下:
Bead inspect tool 允許忽略或修改bead路徑的不精確區域,否則可能導致錯誤缺陷。例如下圖突出顯示了應用程式在允許時對映中可以安全忽略的珠子路徑的一部分:
下圖顯示了訓練影象,其中相應的點範圍已除於考慮被遮蔽:
使用Bead inspect編輯控制元件或 MaskList 屬性生成珠路徑上的點列表,這些點在搜尋缺陷時會在執行時影象中被忽略。
Bead 缺陷路徑通常屬於以下類別:
下圖說明了Bead inspect tool 可以檢測到的缺陷型別:
這個頁面包含的引數我們上面都有介紹,主要通過這個頁面選擇自己要檢測的路徑,並且調整到合適的路線,最後通過設定bead的寬度和卡尺的距離然後訓練影象。因為我們要通過路徑上佈置的卡尺來比較測試影象的路徑是否存在缺陷。
這個頁面是執行引數頁面,主要是通過訓練的影象來驗證測試影象是否OK,正如我之前所說的,通過訓練影象佈置的卡尺來通過引數卡測試影象的缺陷。
這裡除了設定常見的引數,還有兩個選項,之前未提到的。一個是Copy Suggested Run Parameters。另一個是Setting Mask and Fill Edge Ranges。
當您訓練 Bead Inspect 工具時,它會生成一組候選執行引數,以查詢訓練影象中的 Bead 路徑。 單擊複製建議的執行引數以選擇要在編輯控制元件中使用的建議執行引數:
單擊「編輯遮罩」或「填充邊緣」開啟一個介面,允許您忽略或修改焊道路徑的不精確區域,否則可能會導致錯誤缺陷:
可以通過執行以下步驟來使用這個介面
1,選擇 Mask, Left Fill Edges, or Right Fill Edges 來選擇你想自己建立的那種區域
2,放大影象並雙擊你想要在mask或者邊緣填充範圍內的卡尺結果。卡尺會導致珠子路徑外觀發生變化,具體取決於你建立的範圍型別:
該介面還提供了一個控制元件,可讓您指定該範圍的第一個和最後一個卡尺結果:
3,這個介面也提供了選項去建立或擦拭掉一些連結從想要得到的範圍內。
4,建立完所需範圍後,單擊確認選擇
5,在允許影象上測試你的mask或者填充範圍,看看他們是否生成了預期的結果
使用「圖形」索引標籤可啟用或禁用 Current.TrainingImage 和 LastRun.InputImage 上的各種圖形:
這個頁面的引數主要是顯示的,可以開啟一些顯示,也可以關閉。
Find Features:在訓練影象上啟用或禁用以下圖形:
Train Features: 啟用或禁用該工具將用於在執行時影象中定位路徑的訓練路徑。
Results:在當前輸入影象上啟用或禁用以下圖形:
使用結果索引標籤檢視上一個執行時影象中發現的任何缺陷:
總之,這個工具主要是應用於工業的特殊場景使用,必須保證測試影象和訓練影象在同一個光源下。而且是一些精確化的檢測,所以並不是那麼大眾的工具。