如果需要了解其他圖像處理的文章,請移步小編的GitHub地址
傳送門:請點擊我
如果點擊有誤:https://github.com/LeBron-Jian/ComputerVisionPractice
VisionPro有很多的示例和算子,這裏再展示一個最新出的算子Pat Inspect Tool。我自己的筆記不會按照順序一一展示出來的,也許那個文章先OK,我會先release出來的。 其中大部分的圖片和步驟都是VisionPro的官方文檔,我這裏只是自己的學習筆記,不做任何商用。
首先,我們可以看一下VisionPro的新功能,如下圖所列:
他們新增了PatInspect工具,主要是將圖像的特徵與訓練圖像的特徵進行比較,並生成突出顯示他們之間差異的輸出圖像。輸出圖像突出顯示輸入圖像中的潛入特徵。例如缺陷或未對齊的特徵,對象上的錯誤或不需要的標記,或錯誤顏色的表面。
1:使用PatInspect查找缺陷的原理
例如,下圖顯示訓練圖案、輸入圖像的區域以及由 PatInspect 工具生成的輸出圖像:
然後,可以使用其他視覺工具(如斑點工具或直方圖工具)分析輸出圖像,以收集有關潛在缺陷的更多信息。
下面按照步驟展示一下這個工具如何使用:
1.1 訓練圖案
PatInspect 工具將運行時圖像的一個區域與訓練圖案進行比較,以定位潛在的缺陷。
在使用 PatInspect 工具分析運行時圖像之前,必須首先創建訓練圖案,該圖案與其他配置參數一起存儲。
使用統計訓練方法,您可以使用要通過視覺應用程序檢查的對象的實際圖像來創建訓練圖案。從多個圖像創建訓練圖案允許您構建這樣的訓練圖案:即可以補償被檢查對象的背景內和反射的運行時圖像中允許的照明變化。圖像可以存儲在圖像數據庫文件中,也可以從生產環境中採集實時圖像。在任何一種情況下,用於創建訓練圖案的訓練圖像必須與您期望在視覺應用程序運行時採集的圖像非常相似,包括背景、照明和對象放置。此外,圖像必須沒有缺陷,以便它們生成訓練有圖案,代表您的視覺應用程序將檢查的對象的理想示例。
爲了創建訓練圖案,PatInspect 工具接受訓練圖像並將其平均處理爲當前訓練圖案(如果存在),使用下圖所示的公式:
儘管可以從單個訓練圖像創建訓練圖案,但使用多個圖像構建的訓練圖案可以補償運行時圖像中允許的光照變化和對象放置的微小變化。只有當您的生產環境可以保證光源一致並且被檢查對象的外觀永遠不會發生允許的變化時,才應該從單個圖像生成訓練圖案。
可用於創建訓練圖案的圖像數量沒有上限,儘管隨着您添加的每個圖像,圖案的變化會越來越小。
1.2 標準偏差圖像
使用訓練圖案 PatInspect 工具生成標準偏差圖像,其中每個像素是統計訓練圖像中像素值標準偏差的度量。標準偏差圖像是訓練圖案中每個像素的預期可變性程度的指示。
PatInspect 工具使用下圖所示的公式生成標準偏差圖像:
如果您使用單個輸入圖像創建訓練圖案,則 PatInspect 工具使用 Sobel 邊緣工具(後面會單獨講Soble工具)生成僞標準偏差圖像,其中較亮的像素表示特徵之間的預期邊界。例如,下圖是一個訓練圖案及其生成的僞標準差圖像:
使用該工具支持的縮放和偏移係數值,您可以更改僞標準偏差圖像中的信息。增加縮放係數會增加圖像邊緣的大小,而增加偏移係數會增加圖像的整體亮度。如果 PatInspect 工具一直報告運行時圖像的輪廓或邊框存在錯誤缺陷,請嘗試調整 Sobel 係數值。
如果使用統計訓練方法創建訓練圖案,則更改 Sobel 係數值不會產生任何效果。
1.3 閾值圖像
對於用於創建訓練圖案的每個輸入圖像,PatInspect 工具會重新計算標準偏差圖像,然後使用當前標準偏差圖像生成閾值圖像。下圖是一個訓練圖案及其生成的閾值圖像:
PatInspect 工具使用下圖所示的公式生成閾值圖像:
其中 A 和 B 分別代表縮放係數和偏移係數。增加閾值縮放會增加邊緣信息的對比度,而增加閾值偏移會增加整體亮度。如果 PatInspect 工具在運行時圖像的大面積上始終報告錯誤缺陷,請嘗試調整閾值係數值。
PatInspect 工具使用閾值圖像來確定是否應將運行時圖像中的任何像素視爲缺陷像素。
1.4 圖像歸一化
PatInspect 工具對光照變化非常敏感。即使環境光水平的微小變化也會導致工具將運行時圖像中的較亮或較暗像素視爲缺陷。爲了補償不同的光照水平,該工具可以在分析差異之前對運行時圖像執行圖像歸一化操作。圖像歸一化可以將非缺陷像素的值降低或提高到與存儲在訓練圖案中的相同水平。
在配置 PatInspect 工具時,您必須選擇以下圖像歸一化類型之一:
1.5 PatInspect 分析
爲了分析運行時圖像,該工具首先計算匹配圖像,這是該工具將與訓練圖案進行比較的運行時部分。匹配圖像由您選擇的訓練區域的形狀確定。
接下來,該工具對匹配圖像進行圖像歸一化操作,然後生成原始差異圖像(如下圖所示),作爲訓練圖案與匹配圖像之間的絕對差異:
然後,該工具將閾值圖像的每個像素與原始差異圖像進行比較。如果原始差異圖像中的像素值大於閾值圖像的對應像素值,則從原始圖像像素中減去當前偏移值(單個圖像圖案的 Sobel 偏移或統計訓練圖案的閾值偏移)並將結果(不小於 0)存儲在閾值差分圖像中。如果原始差異圖像中的像素值小於閾值圖像的對應像素值,則將值 0 存儲在閾值差異圖像中。例如,下圖顯示了原始差異圖像、閾值圖像和 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 工具 。 有關將視覺工具放置在固定座標空間上的好處,請參閱創建固定座標空間主題。
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 工具找到的特徵的姿勢連接起來
如下圖所示,這是鏈接的示例,當然你也可以按照這個步驟進行操作。
Fixture 工具的 OutputImage 提供具有相對於 PMAlign 工具找到的特徵的座標空間的圖像,並允許 PatInspect 工具檢查每個運行時圖像的所需部分。
step7:添加 PatInspect 工具併爲其提供 Fixture 工具的 OutputImage
這裏主要是添加本文的主角,PatInspect工具。
step8:打開 PatInspect 編輯控件,進行編輯
單擊“抓取訓練圖像和原點”將 Current.InputImage 複製到 Current.TrainImage 緩衝區。
我們調整要測試的感興趣區域,調整後如下所示:
如下圖所示,我們選擇三角形作爲PatInspect工具的模板圖像。單擊 PatInspect 編輯控件上的“訓練新模式”以創建經過訓練的模式。 編輯控件在“訓練參數”選項卡上顯示訓練後的模式:
PatInspect 工具現在具有經過訓練的模式來檢查這些工具包的連續運行時圖像。如果單擊 PatInspect 編輯控件上的“運行”按鈕,該工具會將 Current.InputImage 與經過訓練的模式進行比較。在獲取不同的圖像之前,LastRun.DifferenceImageAbsolute 緩衝區不會顯示結果。
在此示例應用中,套件上的照明可以變化,並且套件本身內的各個對象的位置可以放置在某個小的公差範圍內。 PatInspect 工具需要一個訓練有素的模式來解釋運行時圖像中這些允許的差異。
意思是多增加幾張訓練圖像,儘量包含多張不同樣式的圖像,使得最終做測試的時候,訓練圖像儘可能的不會被測試圖像的一些小變化干擾。根據可能的照明條件和工具套件的變化,重複此過程。 捕獲新圖像,將其傳遞給 PatInspect 工具,並將新圖像合併到經過統計訓練的模式中。
所以最終對於您添加的每個新圖像,經過訓練的模式變化越來越小,但最終您必鬚生成經過訓練的模式,該模式可生成包含真正缺陷的閾值差異圖像。
下圖顯示了經過統計訓練的模式,該模式說明了套件中對象位置的細微變化:
當您獲取足夠的圖像來訓練模式時,單擊結束統計訓練。 結束統計訓練允許 PatInspect 工具使用比啓用統計訓練更少的 PC 內存。
step9:運行run,進行比對
針對圖像數據庫中存在明確缺陷的圖像測試 PatInspect 工具。我們可以將測試圖片一一喂入PatInspectTool中,這樣就可以查看差異圖像,如果全爲黑色,則表示差異很小屬於正常圖像,如果差異很大,則表示這張圖像存在問題。
下圖顯示了從缺少組件的工具包的採集圖像生成的閾值差異圖像:
當然,最終的PatInspect 工具使閾值差異圖像可供應用中的其他視覺工具進行進一步分析或圖像處理。
3:界面介紹
3.1 訓練界面
界面如下:
我們可以通過訓練界面設置要訓練的ROI區域,如下圖所示:
3.2 訓練區域設置界面
界面如下:
下圖是設置訓練區域,意思是輸入圖像要檢測的區域,當然可以選擇設置全圖,也可以選擇驗證指定區域,比如我們下面我們調整的是訓練的ROI區域。當然測試圖像也通過定位,然後到PatInspectTool後,來使用檢測區域。
3.3 運行參數界面
界面如下:
3.4 結果頁面
界面如下: