背景
不同的模板匹配方法,其操作步驟也不一樣,其生成模板的方式也有不同的地方,在之前的課程中我們講述了基于形狀的模板匹配,本期課程我們去了解一下基于灰度值的模板匹配。
基于灰度值的模板匹配適用于圖像內灰度變化比較穩定,噪聲比較少,且灰度差異比較明顯的檢測目標。 這是一種不太推薦的匹配方法,因為該方法復雜度高,一次只能檢測一個目標,耗時,且對光照和尺寸變化十分敏感。
如果在視覺檢測項目過程中,遇到采集到的圖像特征一致性差的情況下。我們可通過灰度匹配指令將待檢測目標的灰度值特征框選出來。首先去創建一個灰度模板,然后在圖像中去搜索與灰度模板的相似度最接近的區域,并找出相似度達到最大,即匹配到該模板。
在上期課程中,我們講述了如何使用VPLC系列機器視覺運動控制一體機進行進行ROI創建的課程。本期課程正運動小助手給大家分享一下VPLC系列機器視覺運動控制一體機對圖像進行灰度匹配的課程。
?
?
?
01VPLC控制器
?
?
(一)VPLC516E構架圖
(二)課前準備
1.電腦一臺,安裝ZDevelop3.10以上版本軟件
2.VPLC516E一臺
3.24V直流電源一個
4.網線一根
5.WinSCP軟件
6.電線若干
?
?
?
02課程主要使用的指令
?
1.?ZV_FASTTEMPL -- 快速簡單匹配
ZV_FASTTEMPL(img,modImg,tab_rst[,method = 0])
描述:
獲取最佳匹配位置的整型值 x、y 坐標。
參數:
img:ZVOBJECT 類型,待匹配圖像
modImg:ZVOBJECT 類型,模板圖像
tab_rst:TABLE 索引,匹配結果,輸出參數,依次為 x、y 坐標
Method:匹配算法
2.ZV_BESTTEMPL -- 灰度模板匹配
ZV_BESTTEMPL(img,modImg,min_score,tab_rst[,is_sub_pix=0,polar=0])
?
描述:
獲取最佳匹配位置,支持亞像素精度。
參數:
img:ZVOBJECT 類型,待匹配圖像,圖片為單通道圖片
modImg:ZVOBJECT 類型,模板圖像
min_score:最低匹配分值
tab_rst:TABLE 索引,匹配結果,輸出參數,依次為 score、x、y
is_sub_pix:是否子像素精度插值,0-否,1-是
polar:匹配極性模式?
3.?ZV_MULTITEMPL -- 灰度模板匹配
ZV_MULTITEMPL(img,modImg,mat_rst,min_score[,nums=0,min_dist=0,
?
is_sub_pix=0,polar=0]) ?
描述:
多目標灰度匹配,在搜索圖像中查找與模板匹配的目標,返回分值最高的前nums個匹配中分值大于min_score的結果。
參數 :
img:ZVOBJECT 類型,待匹配圖像
modImg:ZVOBJECT 類型,匹配模板圖像
mat_rst:ZVOBJECT 類型,匹配結果,矩陣類型,N 行 3 列,每行一
個結果,結果順序依次為分數 score、x 坐標和 y 坐標
min_score:最低匹配分值
nums:最大匹配數量,取分值最高的前 nums 個結果,為 0 則取全部
結果
min_dist:兩個匹配結果的最小距離,大于等于 0,等于 0 則自動選
擇距離
is_sub_pix:是否使用子像素精度插值
polar:匹配極性
→本期課程就使用第三條灰度匹配指令做多目標灰度匹配編寫示例代碼。
?
?
03軟件實現
?
1. 打開ZDevelop軟件:新建名稱為“基于灰度匹配的視覺定位.zpj”項目→新建“HMI”文件→新建“主函數.bas”文件 (用于編寫界面響應函數、并開啟HMI自動運行任務) →新建“相機采集.bas”文件 (用于實現相機采集功能) →新建“繪圖刷新.bas”文件 (用于更新繪制ROI數據) →新建“初始化.bas”文件 (用于初始化測量參數) →文件添加到項目。
2.設計HMI主界面和創建模板,并關聯它的控件變量。
?
主界面
創建模板界面
3.?編寫實現對圖像進行灰度匹配的執行函數。
?
'灰度匹配
GLOBAL SUB btn_match()
? ? if ga_cutModel=0 THEN
? ? ? ? ?"先截取模板圖像"
? ? ? ? RETURN
? ? endif
? ? ticks=0??
? ? GLOBAL match_rst(500)??
? ? ZV_GAUSSBLUR(grabImg, sImg, 3)
? ? ZV_MULTITEMPL(sImg,subImg,ga_match_rst,ga_match_param(0), ga_match_param(3),ga_match_param(4),ga_match_param(1),ga_match_param(2))
? ? ZV_MATINFO(ga_match_rst, 0)? ? ?'獲取矩陣結果信息。并存放到起始地址為0的table數組
? ? ZV_GRAYTORGB(sImg, colorImg) '灰度圖轉換到RGB圖
? ? if TABLE(0) > 0 then? ? ? ? ?'如果匹配到目標
? ? ? ?local rowr
? ? ? ?for rowr = 0 to TABLE(0)-1
? ? ? ? ? '獲取match_rst矩陣中第rowr行的數據存放到起始地址為3的table數組中,table最大長度5
? ? ? ? ? ZV_MATGETROW(ga_match_rst, rowr, 3, 3)??
? ? ? ? ? match_rst(rowr*3+0) = TABLE(3)? ? ? ? ? '將匹配結果賦值給定義的結果變量,顯示到界面
? ? ? ? ? match_rst(rowr*3+1) = TABLE(4)
? ? ? ? ? match_rst(rowr*3+2) = TABLE(5)
? ? ? ? ? match_rst(rowr*3+3) = TABLE(6)
? ? ? ? ? match_rst(rowr*3+4) = TABLE(7)? ? ? ??
? ? ? ? ? '在匹配目標上繪制對應的編號,以便和輸出結果信息相對應
? ? ? ? ? ZV_MARKER(colorImg,TABLE(4),TABLE(5),0,60,ZV_COLOR(255,0,0))'繪制十字??
? ? ? ?next
? ? endif??
? ? ZV_LATCH(colorImg, 0)? ? ?'顯示匹配結果圖像
? ? ga_match_time = abs(TICKS) '計算匹配消耗時間
ENDSUB
?
?
本次,正運動技術【機器 視覺運動控制 一體機小課堂】三分鐘進行灰度匹配,就分享到這里。
?
審核編輯:湯梓紅
評論
查看更多