背景
ROI即感興趣區域是我們機器視覺圖像處理經常使用的基本功能。在實際的視覺檢測項目過程中,我們將待檢測目標的檢測特征框選出來的區域稱作ROI(感興趣區域)。使用ROI功能我們可以針對性的處理目標特征,提升檢測效率和準確性,同時還可以過濾掉環境中引入的干擾因素。
ROI創建有以下兩個優點:
1.可縮減處理圖像的區域范圍,減少圖像像素處理量,縮短圖像處理時間,提升效率。
2.基準模板。框選檢測目標特征后可過濾掉干擾因素,提高檢測方案的準確度。
在采集到一張圖像后,即可在圖像上框選感興趣的區域創建ROI。
常見的ROI類型有:矩形、旋轉矩形、圓形、圓環。本期課程以創建矩形ROI為例。
在上期課程中,我們講述了如何使用 VPLC系列機器視覺運動控制一體機進行圖像開閉運算的課程。本期課程正運動小助手給大家分享一下VPLC系列機器視覺運動控制一體機對圖像進行ROI創建的課程。
01VPLC控制器
(一)VPLC516E構架圖
(二)課前準備
1.電腦一臺,安裝ZDevelop3.10以上版本軟件
2.VPLC516E一臺
3.24V直流電源一個
4.網線一根
5.WinSCP軟件
6.電線若干
02課程主要使用的指令
1.SET_REDRAW -- 指定區域重新繪制(需要在自定義元件的刷新函數中使用)
SET_REDRAW ([x, y, width, height])
參數:
X,Y:顯示區域左上角的坐X、Y坐標位置
width,height:區域寬和高
2.MOUSE_SCAN -- 掃描觸摸按下動作
MOUSE_SCAN (num)
參數:
num:觸摸對應的位置的X、Y坐標分別存儲在table(num), table(num+1)
3.ZV_HMIADJRECT -- 矩形ROI調整
hittype = ZV_HMIADJRECT(mousex,mousey,tab_rect,hittype)
參數:
mousex:HMI 控件的鼠標X坐標
mousey:HMI 控件的鼠標Y坐標
tab_rect:保存矩形ROI參數的TABLE索引,依次為ltx、lty、 rbx、rby,即分別為正矩形左上角坐標ltx、lty,右下角坐標rbx、 rby,對應的是hmi控件坐標系下的值,調整后的值將直接替換調整前的值。
hittype:指定擊中區域編號,表示指令要調整的矩形對應部分,為-1時表示無效編號,不對矩形做調整;為有效編號時則調整矩形對應的部分。按下鼠標左鍵則返回當前選中的擊中區域編號,按住鼠標左鍵不放再移動鼠標表示在不斷地在調整指定編號所對應的矩形部分,此時返回的擊中區域編號與輸入的編號一致。
返回值:
hittype:根據鼠標點擊位置計算的新的擊中區域編號
4.MOUSE_STATE -- 讀取觸摸狀態
MOUSE_STATE (num)
參數:
num:觸摸對應的位置的 X,Y 坐標分別存儲在 table(num), table(num+1)
5.HMI_CONTROLSIZEX -- 獲取控件寬度
HMI_CONTROLSIZEX ([winid, controlid])
參數:
winid:HMI文件里面窗口編號
controlid:元件編號,缺省為當前自定義元件寬度
6.HMI_CONTROLSIZEY -- 獲取控件高度
HMI_CONTROLSIZEX ([winid, controlid])
參數:
winid:HMI文件里面窗口編號
controlid:元件編號,缺省為當前自定義元件高度
7.ZV_POSTOIMG -- HMI控件坐標轉圖像坐標
ZV_POSTOIMG(latch_id,num,tab_in_id,tab_out_id)
參數:
latch_id:鎖存通道號
num:坐標點數量
tab_in_id:存放轉換前坐標點的TABLE索引,num個坐標點數據依次為x、y、x、y......
tab_out_id:存放轉換后坐標點的TABLE索引
8.DRAWRECT --繪制矩形
DRAWRECT(x1,y1,x2,y2)
參數:
x1,y1:顯示區域左上角的坐標位置
x2,y2:顯示區域右下角的坐標位置
03軟件實現
1.打開ZDevelop軟件:新建名稱為“創建ROI.zpj”項目→新建“HMI”文件→新建“main.bas”文件(用于編寫界面響應函數、并開啟HMI自動運行任務)→新建“相機采集.bas”文件(用于實現相機采集功能)→新建“初始化.bas”文件(用于初始化測量參數)→文件添加到項目。
2.設計HMI主界面和關聯它的控件變量。
3.編寫實現對圖像進行ROI創建的執行函數。
'ROI創建的執行函數
GLOBAL SUB update_roi()
local is_redraw,lv_i
SET_REDRAW '全局繪制
if ROI_flag=1 THEN
if mouse_scan(11) = 1 then '掃描鼠標按下操作
hit_pos = ZV_HMIADJRECT(table(11), table(12), 25, -1) '獲取調整區域標志
is_redraw = 1 '將繪圖標志置1
endif
if mouse_scan(11) = -1 then '掃描鼠標松開操作
ZV_HMIADJRECT(table(11), table(12), 25, hit_pos) '調整ROI的位置
is_redraw = 1 '將繪圖標志置1
endif
if (MOUSE_state(11)) then
ZV_HMIADJRECT(table(11), table(12), 25, hit_pos) '調整ROI的位置
is_redraw = 1 '將繪圖標志置1
endif
if (TABLE(25) >= 0) AND (TABLE(27) <= and="">= 0) AND (TABLE(28) <= HMI_CONTROLSIZEY(10,2))? THEN
TABLE(30) = TABLE(25) ' CX
TABLE(31) = TABLE(26) ' CY
TABLE(32) = TABLE(27) ' Width
TABLE(33) = TABLE(28) ' Height
ELSEIF (TABLE(25) < 0) OR (table(27) > HMI_CONTROLSIZEX(10,2)) OR (table(26) < 0) OR (table(28) > HMI_CONTROLSIZEY(10,2)) THEN
TABLE(25) = TABLE(30)
TABLE(26) = TABLE(31)
TABLE(27) = TABLE(32)
TABLE(28) = TABLE(33)
endif
if (1 = is_redraw) then
is_redraw = 0 '將繪圖標志置0
ZV_POSTOIMG(0, 2, 25, 15)'將ROI的控件坐標數據轉到圖像坐標數據
d_roi_rect(0) = TABLE(15)'將ROI的圖像坐標數據賦值給定義的變量
d_roi_rect(1) = TABLE(16)
d_roi_rect(2) = table(17)
d_roi_rect(3) = table(18)
SET_REDRAW '全局繪制
endif
endif
ENDSUB
'ROI區域更新后實時繪制ROI區域
GLOBAL SUB draw_roi()
if ROI_flag= 1 THEN
SET_COLOR(rgb(0,255,0)) '設置繪制時畫筆的顏色為綠色
'繪制矩形
DRAWRECT(table(25),table(26),table(27),table(28))
'繪制十字標
DRAWLINE((table(25)+table(27))/2-5,(table(28)+table(26))/2,(table(25)+table(27))/2+5,(table(28)+table(26))/2)
DRAWLINE((table(25)+table(27))/2,(table(28)+table(26))/2-5,(table(25)+table(27))/2,(table(28)+table(26))/2+5)
endif
END SUB
本次,正運動技術【機器視覺運動控制一體機小課堂】三分鐘對圖像進行ROI創建,就分享到這里。
審核編輯:湯梓紅
-
機器視覺
+關注
關注
162文章
4379瀏覽量
120402 -
一體機
+關注
關注
0文章
900瀏覽量
32739 -
運動控制
+關注
關注
4文章
581瀏覽量
32885
發布評論請先 登錄
相關推薦
評論