VisionPro學習筆記(4)——PatInspect

戰爭熱誠發表於2023-10-01

1:使用PatInspect查詢缺陷的原理

   例如,下圖顯示訓練圖案、輸入影像的區域以及由 PatInspect 工具生成的輸出影像:

1.1 訓練圖案

  PatInspect 工具將執行時影像的一個區域與訓練圖案進行比較,以定位潛在的缺陷。

  在使用 PatInspect 工具分析執行時影像之前,必須首先建立訓練圖案,該圖案與其他配置引數一起儲存。

  使用統計訓練方法,您可以使用要透過視覺應用程式檢查的物件的實際影像來建立訓練圖案。從多個影像建立訓練圖案允許您構建這樣的訓練圖案:即可以補償被檢查物件的背景內和反射的執行時影像中允許的照明變化。影像可以儲存在影像資料庫檔案中,也可以從生產環境中採集實時影像。在任何一種情況下,用於建立訓練圖案的訓練影像必須與您期望在視覺應用程式執行時採集的影像非常相似,包括背景、照明和物件放置。此外,影像必須沒有缺陷,以便它們生成訓練有圖案,代表您的視覺應用程式將檢查的物件的理想示例。

  為了建立訓練圖案,PatInspect 工具接受訓練影像並將其平均處理為當前訓練圖案(如果存在),使用下圖所示的公式:

  儘管可以從單個訓練影像建立訓練圖案,但使用多個影像構建的訓練圖案可以補償執行時影像中允許的光照變化和物件放置的微小變化。只有當您的生產環境可以保證光源一致並且被檢查物件的外觀永遠不會發生允許的變化時,才應該從單個影像生成訓練圖案。

  可用於建立訓練圖案的影像數量沒有上限,儘管隨著您新增的每個影像,圖案的變化會越來越小。

 

1.2 標準偏差影像

  使用訓練圖案 PatInspect 工具生成標準偏差影像,其中每個畫素是統計訓練影像中畫素值標準偏差的度量。標準偏差影像是訓練圖案中每個畫素的預期可變性程度的指示。

  PatInspect 工具使用下圖所示的公式生成標準偏差影像:

  如果您使用單個輸入影像建立訓練圖案,則 PatInspect 工具使用 Sobel 邊緣工具(後面會單獨講Soble工具)生成偽標準偏差影像,其中較亮的畫素表示特徵之間的預期邊界。例如,下圖是一個訓練圖案及其生成的偽標準差影像:

  使用該工具支援的縮放和偏移係數值,您可以更改偽標準偏差影像中的資訊。增加縮放係數會增加影像邊緣的大小,而增加偏移係數會增加影像的整體亮度。如果 PatInspect 工具一直報告執行時影像的輪廓或邊框存在錯誤缺陷,請嘗試調整 Sobel 係數值。

  如果使用統計訓練方法建立訓練圖案,則更改 Sobel 係數值不會產生任何效果。

 

1.3 閾值影像

  對於用於建立訓練圖案的每個輸入影像,PatInspect 工具會重新計算標準偏差影像,然後使用當前標準偏差影像生成閾值影像。下圖是一個訓練圖案及其生成的閾值影像:

  PatInspect 工具使用下圖所示的公式生成閾值影像:

  其中 AB 分別代表縮放係數和偏移係數。增加閾值縮放會增加邊緣資訊的對比度,而增加閾值偏移會增加整體亮度。如果 PatInspect 工具在執行時影像的大面積上始終報告錯誤缺陷,請嘗試調整閾值係數值。

  PatInspect 工具使用閾值影像來確定是否應將執行時影像中的任何畫素視為缺陷畫素。

1.4 影像歸一化

  PatInspect 工具對光照變化非常敏感。即使環境光水平的微小變化也會導致工具將執行時影像中的較亮或較暗畫素視為缺陷。為了補償不同的光照水平,該工具可以在分析差異之前對執行時影像執行影像歸一化操作。影像歸一化可以將非缺陷畫素的值降低或提高到與儲存在訓練圖案中的相同水平。

  在配置 PatInspect 工具時,您必須選擇以下影像歸一化型別之一:

1.5 PatInspect 分析

  為了分析執行時影像,該工具首先計算匹配影像,這是該工具將與訓練圖案進行比較的執行時部分。匹配影像由您選擇的訓練區域的形狀確定。

  接下來,該工具對匹配影像進行影像歸一化操作,然後生成原始差異影像(如下圖所示),作為訓練圖案與匹配影像之間的絕對差異:

  您可以將此閾值差異影像傳遞給其他視覺工具,如斑點工具或直方圖工具,以生成有關執行時影像中存在的缺陷數量和型別的更多資訊。

1.6 用於對齊的PMAlign 工具

  在許多視覺應用中,被檢查物件的位置可能會在一次檢測之間發生位置、旋轉或縮放變化。如果姿勢(當訓練圖案與執行時影像進行比較時物件如何對映的描述)隨著每次檢查而變化,該工具可以輕鬆檢查影像的錯誤區域並返回許多錯誤結果。

  在執行分析和生成結果之前,PatInspect 工具無法執行任何型別的區域對齊。為了確保 PatInspect 工具將區域放置在每次檢查的執行時影像的正確區域中,另一個視覺工具必須首先定位物件並將其姿勢報告給 PatInspect 工具。PMAlign 工具非常適合此任務,Cognex 建議您在使用 PatInspect 工具之前使用帶有 PatMax 演算法的 PMAlign 工具來定位物件。PMAlign 工具的姿勢可以直接傳遞到 PatInspect 工具,確保 PatInspect 工具為每次檢查分析正確的影像區域。

  此外,也可以使用固定工具,將姿勢資訊從 PMAlign 工具傳遞到固定工具的固定引數,然後使用固定工具生成的輸出影像作為 PatInspect 工具的輸入影像。

  無論是單獨使用 PMAlign 工具還是將 PMAlign 工具與固定工具組合使用,都必須確保 PMAlign 原點與 PatInspect 原點保持同步。否則,在執行統計培訓或檢查時,PatInspect 工具將無法正確放置其區域。

1.7 插值模式

  PatInspect 工具支援兩種插值模式:雙線性和相容性。預設情況下,該工具使用雙線性模式,適用於大多數應用程式。此外,您必須使用選擇雙線性模式來利用多核 PC。非預設模式相容性可用於使用 PatInspect 工具的舊應用程式。

 

2:PatInspect的官方示例程式

  PatInspect 工具將輸入影像區域內包含的特徵與訓練模式中儲存的特徵進行比較,並生成突出顯示它們之間差異的輸出影像。 輸出影像突出顯示輸入影像中的潛在缺陷 - 缺失或未對齊的特徵、物體上的錯誤或不需要的標記或顏色錯誤的表面。

  例如,下圖顯示了經過訓練的模式、輸入影像的區域以及 PatInspect 工具生成的輸出影像:

  由於許多視覺應用程式都具有受檢查物件的特徵,其中感興趣的特徵可能會從一幅影像更改為另一幅影像的位置,因此此示例應用程式從 PMAlign 工具開始,以定位可靠的特徵,並使用結果生成固定的座標空間來定位 PatInspect 工具 。 有關將視覺工具放置在固定座標空間上的好處,請參閱建立固定座標空間主題。

   所以下面在VisionPro的官方QuickBuild裡面建立一個完整的示例來學習一下Pat Inspect Tool。以下過程建立一個應用程式,該應用程式使用 PMAlign 工具在 PatInspect 工具分析之前報告物件的姿勢。

step1:啟動 QuickBuild 並配置新應用程式以從連線的相機或影像資料庫獲取影像

   此示例應用程式使用工具包的影像資料庫以及從生產環境捕獲的示例影像。

  關於獲取影像,我這裡再囉嗦一下,常見的獲取影像有兩種方法:1,直接使用攝像頭在生產環境中獲取影像;2,使用採集好的資料相簿。 當然,無論哪種方式都取決於你的需求。

  下圖是QuickBuild獲取到的影像展示:

step2:建立一個ToolBlock,新增PMAlign工具並將ToolBlock的輸入影像連線到PMAlign工具的InputImage

  我們需要執行 ToolBlock,將影像資料庫中的第一個影像傳遞給 PMAlign 工具(PMAlign工具是用來做定位的工具,這個我們後面會介紹,也是VisionPro中不可缺少的一個常用工具)。

  如下圖所示,我們新增了PMAlign工具和Inputs的輸入影像連線,一般情況下,當執行報錯(即顯示紅色),要麼是載入的影像有問題,要麼就是工具需要的是灰度圖,而我們匯入了RGB影像,要麼就是工具需要的是RGB影像,我們匯入了灰度圖(解決方法也很簡單,影像有問題,更換影像即可;後面兩種情況,我們只需要接入ImageConvertTool,這個工具前面部落格已經介紹了)。

step3:迴圈瀏覽影像資料庫,直到找到代表工具包的影像,並且所有元件都位於所需位置

  其實這一步驟主要是觀察影像的特徵,從我們個人的理解,檢視影像中某一個位置是不容易改變的。我們需要透過這個位置進行定位。意思是來確定整個產品的方位。

  如下圖所示,我們決定圈圈的地方是我們定位的地方,當然這個位置也是仁者見仁智者見智,自己選自己認為合適的即可。

 

step4:配置 PMAlign 工具以在所有影像中定位特徵常量。 應用程式使用原點在後續步驟中建立固定座標空間

 

step5:在影像資料庫的所有影像上執行 ToolBlock,並驗證 PMAlign 工具在每個影像中找到所需的特徵

  注意,如果找不到該功能,則應用程式將失敗。 根據需要調整搜尋區域或其他執行引數以在所有影像中查詢該特徵,或選擇另一個特徵供 PMAlign 工具定位。 所以我之前說定位的位置自己隨便選,選擇自己認為合適的即可。

 

step6:將 Fixture 工具新增到 ToolBlock 中,並將影像資料庫中的 InputImage 與 PMAlign 工具找到的特徵的姿勢連線起來

  如下圖所示,這是連結的示例,當然你也可以按照這個步驟進行操作。

 

step7:新增 PatInspect 工具併為其提供 Fixture 工具的 OutputImage

  這裡主要是新增本文的主角,PatInspect工具。

step8:開啟 PatInspect 編輯控制元件,進行編輯

  單擊“抓取訓練影像和原點”將 Current.InputImage 複製到 Current.TrainImage 緩衝區。

  如下圖所示,我們選擇三角形作為PatInspect工具的模板影像。單擊 PatInspect 編輯控制元件上的“訓練新模式”以建立經過訓練的模式。 編輯控制元件在“訓練引數”選項卡上顯示訓練後的模式:

   所以最終對於您新增的每個新影像,經過訓練的模式變化越來越小,但最終您必須生成經過訓練的模式,該模式可生成包含真正缺陷的閾值差異影像。

   下圖顯示了經過統計訓練的模式,該模式說明了套件中物件位置的細微變化:

 

step9:執行run,進行比對   

  針對影像資料庫中存在明確缺陷的影像測試 PatInspect 工具。我們可以將測試圖片一一喂入PatInspectTool中,這樣就可以檢視差異影像,如果全為黑色,則表示差異很小屬於正常影像,如果差異很大,則表示這張影像存在問題。

   下圖顯示了從缺少元件的工具包的採集影像生成的閾值差異影像:

  當然,最終的PatInspect 工具使閾值差異影像可供應用中的其他視覺工具進行進一步分析或影像處理。

 

3:介面介紹

3.1  訓練介面

  介面如下:

   我們可以透過訓練介面設定要訓練的ROI區域,如下圖所示:

  下圖是設定訓練區域,意思是輸入影像要檢測的區域,當然可以選擇設定全圖,也可以選擇驗證指定區域,比如我們下面我們調整的是訓練的ROI區域。當然測試影像也透過定位,然後到PatInspectTool後,來使用檢測區域。

相關文章