机器视觉运动控制一体机应用例程(三) 基于BLOB分析的多圆定位.docx
《机器视觉运动控制一体机应用例程(三) 基于BLOB分析的多圆定位.docx》由会员分享,可在线阅读,更多相关《机器视觉运动控制一体机应用例程(三) 基于BLOB分析的多圆定位.docx(40页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、机器视觉运动控制一体机应用例程(三) 基于BLOB分析的多圆定位 我们在VPLC系列机器视觉运动控制一体机快速入门(三)的推文中,讲述了基于形状匹配的视觉定位功能,而BLOB斑点分析也可以实现定位功能。 本期课程我们将在BLOB斑点分析定位的基础上进行检测圆形,输出圆心的坐标数据。 一检测原理 (一)BLOB斑点定位 BLOB斑点分析功能可以输出BLOB区域的重心位置XY,BLOB斑点区域还可以拟合成特定形状如外接矩形,输出矩形的角度,从而实现定位的功能。 (二)BLOB分析的圆形检测+示意图 圆形测量器不具有定位功能,因此当检测目标在视野的位置是随机时,我们需要配合定位功能将测量器跟随目标移
2、动。本节程序示例将检测到的BLOB重心XY数据作为圆形测量器的中心XY值,即可实现位置跟随功能。 二软件演示 (一)检测要求 使用ZDevelop软件的ZBASIC编程语言编写程序,用于检测以下路径中图片的圆环零件的圆心位置XY以及半径。 使用到的视觉功能:BLOB斑点分析+检测圆形+九点标定。 (二)实例演示 1.打开ZDevelop软件:新建项目新建HMI文件新建main.bas文件,用于编写界面响应函数新建global_variable.bas文件用于定义全局变量并开启HMI自动运行任务新建detectParam.bas文件,用于初始化测量参数新建camera.bas文件用于实现相机采集
3、功能文件添加到项目。 2.设计HMI界面。 3.在global_variable.bas文件中添加全局变量。 全局变量大部分使用数组结构注:basic编程中很多函数会以TABLE(系统的数据结构)做为参数table 说明 table 说明0 自动二值化阈值 1112 鼠标操作时获取的坐标2 亮区域的面积 2024 图像信息4 暗区域的面积 6 连通区域的数量 4042 小圆斑点的面积和位置X,Y数据 8198 标定图像坐标xy 4648 小圆圆心X,Y和半径 131148 标定世界坐标xy39提取mark点成功标志 5657 圆点矩阵行列数4950 圆上的点坐标主任务状态0 - 未初始化1 -
4、 停止2 - 运行中3 - 正在停止GLOBAL DIM main_task_statemain_task_state = 1 采集开关0 - 停止采集1 - 请求采集GLOBAL DIM grab_switchgrab_switch = 0 相机个数GLOBAL cam_numcam_num = 0 相机种类,zmotion;mvision;basler;mindvision;huarayGLOBAL DIM CAMERA_TYPE(16)CAMERA_TYPE = mvision 定义主任务id - 10GLOBAL DIM main_task_idmain_task_id = 10 定义
5、连续采集任务id - 9GLOBAL DIM grab_task_idgrab_task_id = 9 定义全局图像变量GLOBAL ZVOBJECT grabImg 采集图像GLOBAL ZVOBJECT binImg 二值化图像GLOBAL ZVOBJECT disImg 显示图像 定义常用颜色变量GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOWC_RED = RGB(255, 0, 0)C_GREEN = RGB( 0,255, 0)C_BLUE = RGB( 0, 0,255)C_YELLOW= RGB(255,255, 0) 检测参数:阈值模式(自动阈值
6、或手动阈值)、低阈值、高阈值、最小面积、最大面积GLOBAL DIM d_detect_param(5) d开头表示数据结构 开/闭运算参数GLOBal DIM d_deal_value(2) 检测消耗时间GLOBal DIM d_detect_time 小圆的位置x/y结果GLOBal DIM d_circle_rst(18) 显示打印的字符GLOBAL ShowString(64) *定义坐标标定相关变量*是否标定GLOBAL DIM is_ca_success 定义标定成功标志,0-标定未成功,1-标定成功GLOBAL DIM d_calib_successd_calib_success
7、 = 0 定义标定系数即矩阵转换系数GLOBAL ZVOBJECT ca_param 定义标定参数数组,依次为:标定类型、对比度、极性、最小面积、最大面积、世界坐标点间距GLOBAL DIM d_ca_param(6) d开头表示数据结构 定义是否使用标定功能GLOBAL DIM d_use_calibd_use_calib=0 定义标定误差,依次为最小误差、最大误差、平均误差GLOBAL DIM ca_min_err,ca_max_err,ca_avg_errca_min_err = 0ca_max_err = 0ca_avg_err = 0 *定义读取本地文件功能相关变量*注意,该功能只在
8、使用仿真器时有效定义是否使用本地图片标志GLOBAL DIM d_use_imgfile 定义本地图片索引GLOBAL DIM d_index 定义读取图片的路径GLOBAL DIM File_Name(100) *结束定义读取本地文件功能相关变量* 运行HMI文件RUN Hmi.hmi,14.关联HMI界面控件变量。 5.在detectParam.bas文件中初始化测量参数。 end GLOBAL SUB init_detect_param() 初始化测量参数 d_deal_value(0)=1 初始化开/闭运算参数 d_deal_value(1)=1 初始化检测参数:阈值模式(自动阈值 =
9、 1 或 手动阈值 = 0)、低阈值、高阈值、极性(黑或白)、最大、最小、反向(即结果取反,成功变成失败、失败变成成功) d_detect_param(0) = 0 手动阈值 d_detect_param(1) = 140 低阈值 d_detect_param(2) = 255高阈值 d_detect_param(3) = 11000 最小面积即像素个数 d_detect_param(4) = 12000 最大面积 d_use_imgfile = 1 默认使用本地图片 d_index = 0 TABLE(6)=0 将小圆数量初始化为0 for i=0 to 17 d_circle_rst(i)
10、=0 next 初始化坐标标定相关的变量 d_ca_param(0) = 0 标定类型 d_ca_param(1) = 120 对比度 d_ca_param(2) = 0 极性 d_ca_param(3) = 80 最小面积 d_ca_param(4) = 20000 最大面积 d_ca_param(5) = 9 世界坐标点间距 ca_min_err = 0 最小误差 ca_max_err = 0 最大误差 ca_avg_err = 0 平均误差 for i=0 to 17 初始化圆点矩阵像素坐标 TABLE(81+i)=0 next for i=0 to 17 初始化圆点矩阵世界坐标 TAB
11、LE(131+i)=0 next TABLE(39)=0 提取mark点状态默认为失败 END SUB6.在main.bas文件中添加界面初始化函数,并在hmi系统设置中关联初始化函数名。 end 注:凡是要使用Region有关的算子在系统初始化时都要调用ZV_RESETCLIPSIZE(width, height)这个算子设置下图像尺寸,以满足相机分辨率,因为默认的是640*480尺寸 HMI界面初始化函数GLOBAL SUB hmi_init() grab_switch = 0 停止采集 main_task_state = 1 主任务停止运行 ZV_RESETCLIPSIZE(1280,
12、960) 依据图像分辨率设置区域的裁剪尺寸,此处图像分辨率为1280x960 ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(10, 7), HMI_CONTROLSIZEY(10, 7) 设置锁存的大小 init_detect_param() 初始化测量参数 ZV_SETSYSDBL(CamGetTimeout, 1000) 设置采集超时 ZV_SETSYSINT(LineWidth,6) ZV_LATCHCLEAR(0) 清空锁存通道0 END SUB 7.在camera.bas文件中添加HMI运行界面中采集相关按钮响应的函数并关联动作函数。 图片 相机操作相关按钮
13、 end 主界面按下扫描相机按钮时响应的函数GLOBAL SUB cam_scan_all() if(d_use_imgfile=1)then ?请先按下使用本地图片按钮关闭该功能 return endif ZV_SETSYSINT(LogLevel, 7)设置控制器信息 ZV_SETSYSSTR(DataDir,) CAM_SCAN(CAMERA_TYPE) 扫描相机,CAMERA_TYPE=mvision cam_num = CAM_COUNT() 获取扫描到的相机数量 if (0 = cam_num) then 如果相机数量=0,打印提示信息 ? 未找到相机 return 退出子函数,不
14、往下执行 endif ?cam_num = cam_num 如果扫描到相机,打印相机数量 CAM_SEL(0) 选择扫描到的第一个相机进行操作 CAM_SETEXPOSURE(5000) 设置相机曝光时间为5000us CAM_SETMODE(0) 设置软件触发模式 CAM_START(0) 开启相机END SUB 主界面按下单次采集按钮执行的函数GLOBAL SUB btn_grab() 如果d_use_imgfile=1时使用读取本地图片功能,该功能只在使用仿真器时有效,使用控制器时请将此部分代码注释掉 if (d_use_imgfile=1) then if(d_index=3) the
15、n d_index=0 endif File_Name=圆定位+TOSTR(d_index,1,0)+.bmp ./flash/圆定位/目录下的图片所在的路径名称 ZV_IMGREAD(grabImg,File_Name,0) ZV_LATCH(grabImg, 0) d_index=d_index+1 return endif 读取本地图片功能结束 if cam_num = 0 then ?请先扫描相机! return endif CAM_SETPARAM(TriggerSoftware, 0) 发送触发指令 CAM_GET(grabImg, 0) 获取一帧图像存放到grabImg变量中 Z
16、V_LATCH(grabImg, 0) 将图像显示到锁存通道0中 END SUB 主界面按下连续采集按钮响应的函数GLOBAL SUB btn_cgrab() if grab_switch =1 then 如果已经处于连续执行状态,打印提示信息并退出函数 ?正在连续运行中,请勿重复操作!return endif if( d_use_imgfile =0) then if cam_num = 0 then 如果相机数量=0,打印提示信息并退出函数 ?请先扫描相机! return endif endif grab_switch = 1 采集任务开关置1 if (1 = grab_switch) t
17、hen if (0 = PROC_STATUS(grab_task_id) then RUNTASK grab_task_id, grab_task 开启连续采集任务 endif endifEND SUB 采集任务实现函数grab_task: while(1) if (0 = grab_switch) then 如果采集任务开关=0即停止采集按钮按下时 exit while 退出循环 endif 重复执行以下操作 btn_grab() wendEND 主界面按下停止采集按钮响应的函数GLOBAL SUB btn_stopCgrab() if grab_switch =0 then 如果已经处于
18、停止采集状态,打印提示信息并退出函数 ?未开启连续采集! return endif grab_switch = 0 将采集任务开关置0 END SUB8.点击“元件”“新建窗口”,新建标定界面窗口,并将VPLC系列机器视觉运动控制一体机快速入门(六)中的标定程序的界面拷贝到新建的窗口界面。 9.在main.bas文件中添加运行界面按下【标定】按钮时的响应函数,以及标定窗口界面按下【提取mark点】按钮、【标定】按钮以及【返回】按钮时响应的函数,可参考VPLC系列机器视觉运动控制一体机快速入门(六)中的标定程序。 点击运行界面按下标定按钮时响应的函数GLOBAL SUB btn_calib()
19、设置坐标标定窗口锁存通道0的锁存大小 ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(11, 91), HMI_CONTROLSIZEY(11, 91) if (d_use_imgfile=1) then 如果使用本地图片功能 ZV_IMGREAD(grabImg,圆定位calib.bmp,0) 加载标定图片 endif ZV_LATCHCLEAR(0) 将锁存通道0清空 ZV_LATCH(grabImg, 0) 显示采集图像显示到锁存通道0中 HMI_SHOWWINDOW(11) 弹出窗口号为11的坐标标定窗口界面 END SUB 坐标标定界面按下提取mark点按钮时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器视觉运动控制一体机应用例程三 基于BLOB分析的多圆定位 机器 视觉 运动 控制 一体机 应用 例程 基于 BLOB 分析 定位
限制150内