背景
輪廓提取是基于邊緣輪廓的算法,可用于需要提取工件輪廓信息后進行加工處理的檢測加工項目,可廣泛應用于點膠、激光切割、工件打磨等需要提取工件輪廓的領域。
輪廓是一種能存儲一系列點集的數據結構,可分為像素輪廓或亞像素輪廓。 輪廓指令只能提取特定屬性的輪廓。
提取圖像的邊緣信息時會不可避免地提取到一些非檢測目標的干擾輪廓信息,如未閉合的邊緣線條、毛刺等輪廓信息。
此時我們需要使用圖像預處理或者設置一些過濾條件來過濾一些干擾噪點。因此我們還需要根據目標的輪廓特點過濾掉雜散的冗余邊緣或進行邊緣的修補等操作去獲取我們實際所需的目標輪廓信息。
輪廓提取效果如下圖所示:
將目標輪廓提取完成之后,我們就可以提取輪廓點集位置信息進行工件相 關的輪廓隨動加工處理。
注意:提取圖像目標輪廓前需確保圖像內目標輪廓的對比度明顯,才能保證輪廓提取的精度。
在上期課程中,我們講述了如何使用 VPLC系列機器視覺運動控制一體機進行 圖像拼接 的課程。本期課程正運動小助手給大家分享一下 VPLC系列機器視覺運動控制一體機進行輪廓提取的課程。
一.VPLC控制器
(一)VPLC516E構架圖
(二)課前準備
1.電腦一臺,安裝ZDevelop3.10以上版本軟件
2.VPLC516E一臺
3.24V直流電源一個
4.網線一根
5.WinSCP軟件
6.電線若干
二.課程主要使用的指令
1.ZV_AUTOTHRESH -- 自動二值化
ZV_AUTOTHRESH(src,dst,tab_thresh)
描述:
使用OTSU算法計算最佳閾值并對圖像進行自動二值化處理。
參數:
src:ZVOBJECT類型,源圖像,單通道圖像
dst:ZVOBJECT類型,二值圖像
tab_thresh:TABLE索引,輸出參數,使用的分割閾值
2.ZV_CONTGEN -- 生成輪廓
ZV_CONTGEN(img,contlist,mode,appro)
描述:
提取二值圖像的邊緣輪廓。
參數:
img:ZVOBJECT類型,源二值圖像
contlist:ZVOBJECT類型,提取到的輪廓序列,列表類型,輪廓序列中包含多個輪廓,每個輪廓由一系列的點集構成
mode:輪廓提取方式:0-外輪廓即被某輪廓封閉包圍的所有輪廓將不被提取,1-所有輪廓
appro:輪廓表示方式:0-點集方式即輪廓用一系列的點集表示,1-精簡方式即輪廓用一系列的點集表示但水平、垂直、對角線將被精簡成兩個端點,建議使用1
ZV_CONTFILTER(contlist,feature,min,max,is_invert)
描述:
將輪廓序列中的輪廓以某種特征進行過濾,保留滿足特征要求的輪廓。
參數:
contlist:ZVOBJECT類型,待過濾的輪廓序列,列表類型
feature:輪廓特征類型,參考排序,可取值-1,則按照順序取序號在范圍內的輪廓
min:特征值的下限
max:特征值的上限
is_invert:是否反向選擇,為1則保留不在范圍內的輪廓,默認值為0
4.ZV_CONTSORT -- 排序
ZV_CONTSORT(contlist,feature,is_inc)
描述:
對輪廓序列按照特征feature進行排序。
參數:
contlist:ZVOBJECT類型,待排序的輪廓序列,列表類型
feature:排序的特征類型,如下表所示
is_inc:指定是否升序,為0則降序排列,否則升序
輪廓特征如下:
5.ZV_CONTCOUNT -- 輪廓點數量
ZV_CONTCOUNT(contour,tab_count)
描述:
獲取輪廓中點的數量,支持在線命令,使用無需傳入TABLE索引參數。
參數:
contour:ZVOBJECT類型,輪廓
tab_count:TABLE索引,輸出參數,點的數量
6.ZV_CONTGETPT -- 輪廓點遍歷
ZV_CONTGETPT(contour,id,tab_pt)
描述:
獲取輪廓中的指定點坐標。
參數:
contour:ZVOBJECT類型,輪廓
id:指定點的id,第一個點的id為0
tab_pt:TABLE索引,輸出參數,獲取的點坐標x,y
7.ZV_CONTLIST -- 輪廓繪制
ZV_CONTLIST(img,contlist,color,auto_color)
描述:
繪制輪廓序列。
參數:
img:ZVOBJECT類型,繪制的目標圖像
contlist:ZVOBJECT類型,輪廓序列
color:繪制序列的顏色,img為彩色圖像時可用ZV_COLOR(r,g,b)生成顏色,img為黑白圖像時顏色取值為[0,255],如黑色0,灰色128,白色255
auto_color:是否自動設置顏色,為1則自動設置不同的顏色,color將不再使用
三、軟件實現
1. 打開ZDevelop軟件:新建名稱為“輪廓提取.zpj”項目→新建“HMI”文件→新建“Basic.bas”文件 (用于編寫界面響應函數、并開啟HMI自動運行任務) →新建“相機采集.bas”文件 (用于實現相機采集功能 )→新建“初始化.bas”文件 (用于初始化測量參數) →文件添加到項目。
2.設計HMI主界面,并關聯它的控件變量。
3.編寫實現對圖像進行輪廓提取的執行函數。
'輪廓提取執行程序
GLOBAL sub main()
LOCAL dot_count,i
DMSET TABLE(10000,10000,0)
ZV_IMGCOPY(GrabImg,testImg) '復制圖像
ZV_AUTOTHRESH(testImg,testImg,0) '自動二值化
ZV_CONTGEN(testImg,contlist,outline_mode,outline_appro) '生成輪廓
ZV_CONTFILTER(contlist,filt_param(0),filt_param(1),filt_param(2),0)'對輪廓列表中的輪廓進行過濾
ZV_GRAYTORGB(GrabImg,ResImg) '灰度圖轉彩色圖
ZV_CONTSORT(contlist,filt_param(0),0)'對輪廓以周長特征進行降序排序
ZV_LISTGET(contlist,con,0)'獲取第0個輪廓
dot_count = ZV_CONTCOUNT(con)'獲取輪廓點數量
TABLE(10)=dot_count
FOR i = 0 TO dot_count-1
ZV_CONTGETPT(con,i,10000+i*2)'輪廓中的點坐標放到TABLE(0)中
NEXT
ZV_CONTLIST(ResImg,contlist,zv_color(0,255,0)) '繪制輪廓序列
ZV_LATCH(ResImg,1)
ENDSUB
本次,正運動技術【機器視覺運動控制一體機小課堂】 三分鐘進行輪廓提取 ,就分享到這里。
審核編輯 黃昊宇
-
控制器
+關注
關注
112文章
16339瀏覽量
177860 -
運動控制
+關注
關注
4文章
579瀏覽量
32861
發布評論請先 登錄
相關推薦
評論