VPLC系列机器视觉运动控制一体机快速入门(六)
于形状匹配的视觉定位、BLOB有无检测以及测量尺寸。
本期课程,正运动技术和大家一起分享和标定有关的详细知识内容。
视频教程:《VPLC系列机器视觉运动控制一体机快速入门(六)》
机器视觉检测结果
将机器视觉处理的像素结果(单位:像素)转换成现实中使用到的实际结果(单位:毫米),或者是将机器视觉中使用的图像坐标转换成世界坐标的过程。
测量标定是使用已知尺寸的标准模块,如已知半径的小圆块、已知宽度的小方块、刻度尺等物品,在使用机器视觉检测出对应尺寸的像素值后,求出实际尺寸值和像素值的比例即像素比例,之后再将检测的像素结果乘以像素比例即可得出实际值结果。
坐标标定是指使用机器视觉获取几组图像坐标数据(至少9组),然后输入对应的几组世界坐标数据,根据公式计算出矩阵坐标转换系数,然后将检测的图像坐标结果按照这个标定系数转换成世界坐标结果。
1.测量标定
测量标定的实施方法比较简单,只需要将已知尺寸的标准块放到检测平台中,然后使用视觉输出的像素结果和已知尺寸计算得到像素比例即可。
2.坐标标定--使用标定板
标定板的特点是特征点的距离是固定且已知的。我们就可以在标定板上选择几组矩阵坐标数据,把某个点设置成坐标原点,再根据实际圆点(或棋盘格)的距离定义对应点的实际坐标,最后再使用视觉检测出对应特征点的图像坐标即可。得到图像坐标数据和世界坐标数据后就可以求出标定系数。
3.坐标标定--不使用标定板
在没有准备标定板的条件下做坐标标定需要运动机构如机械手配合。
机械手抓取产品按照指定的位置坐标(机械手坐标)走9个点位(这9个点位需要保证在相机拍照的视野范围内),每走到一个点位就使用相机获取产品特征在当前位置的图像坐标并记录图像坐标数据,依次走完9个点位即可。然后再根据获取的图像坐标数据和记录的机械手坐标进行坐标系转换,得出标定系数。
注意:在相机结构和检测平台的相对位置发生变化时需要重新标定!
坐标标定流程图
演示实例说明:本课程实例在《VPLC系列机器视觉运动控制一体机快速入门(三)--形状匹配》实例的基础上增加使用标定板进行坐标标定的功能,并输出标定后的产品位置。
1.打开ZDevelop软件:点击[文件]→[打开项目]→选择“基于形状匹配的视觉定位”项目。
2.修改设计主界面。
3.在global_variable.bas文件中增加定义坐标标定使用到的全局变量。
'***********定义坐标标定相关变量*********************
'定义是否使用标定功能标志,0-不使用标定功能,1-使用标定功能
GLOBAL DIM d_use_calib
d_use_calib = 0
'定义标定成功标志,0-标定未成功,1-标定成功
GLOBAL DIM d_calib_success
d_calib_success = 0
'标定参数
GLOBAL ZVOBJECT ca_param
'标定参数数组,依次为:标定类型、对比度、极性、最小面积、最大面积、世界坐标点间距
GLOBAL DIM d_ca_param(6) 'd开头表示数据结构
'标定误差,最小误差、最大误差、平均误差
GLOBAL DIM ca_min_err,ca_max_err,ca_avg_err
ca_min_err = 0
ca_max_err = 0
ca_avg_err = 0
'常用颜色变量
GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOW
C_RED = RGB(255, 0, 0)
C_GREEN = RGB( 0,255, 0)
C_BLUE = RGB( 0, 0,255)
C_YELLOW= RGB(255,255, 0)
'标定矩阵
GLOBAL ZVOBJECT ca_mat
'***********结束定义坐标标定相关变量******************
4.在InitLocator.bas文件中初始化坐标标定相关的测量参数。
'初始化坐标标定相关的变量
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 '平均误差
5.新建主界面按下【坐标标定】按钮时弹出的窗口界面calib,并设计界面布局。
6.在calib窗口界面中关联元件变量。
7.添加在主界面按下【坐标标定】按钮时响应的函数,并关联动作函数名。
'点击主界面坐标标定按钮时响应的函数
GLOBAL SUB btn_calib()
ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(13, 91), HMI_CONTROLSIZEY(13, 91)) '设置坐标标定窗口锁存通道0的锁存大小
ZV_LATCHCLEAR(0) '将锁存通道0清空
ZV_LATCH(grabImg, 0) '显示采集图像显示到锁存通道0中
HMI_SHOWWINDOW(13)
END SUB
8.添加在calib界面按下【提取mark点】按钮时响应的函数,并关联动作函数名。
'坐标标定界面按下提取mark点按钮时响应的函数
GLOBAL SUB btn_ca_extract()
ZVOBJECT inppts, ppts, wpts
'提取像素坐标
ZV_CALGETSCAPTS(grabImg, inppts, d_ca_param(1), d_ca_param(2), d_ca_param(3), d_ca_param(4))
ZV_MATINFO (inppts, 400)
DIM row,col
row = TABLE(400)
col = TABLE(401)
if(row * col = 18) then
TABLE(150) = 1 '提取mark点成功
else
TABLE(150) = 0 '提取mark点失败
return
endif
'根据mrak点间距和像素坐标计算世界坐标
ZV_CALGETPTSMAP(inppts,ppts,wpts,d_ca_param(5))
ZV_MATINFO (ppts, 400)
row = TABLE(400)
col = TABLE(401)
if(row * col = 18) then
TABLE(150) = 1 '提取mark点成功
else
TABLE(150) = 0 '提取mark点失败
return
endif
'像素坐标和世界坐标放入table中
DIM i
FOR i=0 TO row-1
ZV_MATGETROW (ppts, i, col, 81 + i*col)
ZV_MATGETROW (wpts, i, col, 131 + i*col)
NEXT
'设置用于绘制mark点的图像
ZVOBJECT color
ZV_GRAYTORGB(grabImg, color)
'和绘制mark点的十字架
DIM j, pixNum '像素个数
pixNum = 0
FOR i=0 TO 2
FOR j=0 TO 2
ZV_MARKER(color, TABLE(81 + 2 * pixNum), TABLE(81 + 2 * pixNum + 1), 0, 40, C_GREEN)
pixNum = pixNum + 1
NEXT
NEXT
'用文本绘制mark点的序号
FOR i=0 TO 8
ZV_TEXT (color, TOSTR(i,1,0), TABLE(81+2*i)-20, TABLE(81+2*i +1)-40, 20, C_BLUE)
NEXT
ZV_LATCH(color, 0)
end sub
在calib界面按下【提取mark点】按钮时仿真效果图。
9.添加在calib界面按下【标定】按钮时响应的函数,并关联动作函数名。
'坐标标定界面按下标定按钮时响应的函数
global sub btn_ca_calib()
ZV_IMGINFO(grabImg,0)
ZV_CALCAM(ppts,wpts,ca_param,TABLE(0),TABLE(1),d_ca_param(0))
is_ca_success=1
'计算标定误差
ZV_CALERROR(ca_param, ppts, wpts, 0)
ca_min_err = TABLE(1)
ca_max_err = TABLE(2)
ca_avg_err = TABLE(0)
end sub
在calib界面按下【标定】按钮时仿真效果图
10.添加在calib界面按下【返回】按钮时响应的函数,并关联动作函数名。
'坐标标定界面按下返回按钮时响应的函数
global sub btn_ca_param_rtn()
HMI_CLOSEWINDOW(13)
end sub
11.修改匹配测试子函数中匹配结果输出部分的指令代码。
if(is_ca_success = 1 AND TABLE(300)) then
ZV_GETRIGIDVECTOR(mat_rigid1, 0, 0, 0, TABLE(4), TABLE(5), TABLE(6))'计算刚性变换矩阵
ZV_CONTAFFINE(contlist1, mat_rigid1, tsContlist1)'对轮廓或轮廓序列进行仿射变换
ZV_CONTLIST(colorImg, tsContlist1, ZV_COLOR(0, 255, 0), 0)'在colorSubImg图像上绘制绿色的轮廓序列
ZV_CALTRANSW(ca_param, TABLE(4),TABLE(5),4)
d_match_rst(0) = TABLE(3)
d_match_rst(1) = TABLE(4)
d_match_rst(2) = TABLE(5)
d_match_rst(3) = TABLE(6)
d_match_rst(4) = TABLE(7)
else
d_match_rst(0) = TABLE(3)
d_match_rst(1) = TABLE(4)
d_match_rst(2) = TABLE(5)
d_match_rst(3) = TABLE(6)
d_match_rst(4) = TABLE(7)
ZV_GETRIGIDVECTOR(mat_rigid1, 0, 0, 0, TABLE(4), TABLE(5), TABLE(6))'计算刚性变换矩阵
ZV_CONTAFFINE(contlist1, mat_rigid1, tsContlist1)'对轮廓或轮廓序列进行仿射变换
ZV_CONTLIST(colorImg, tsContlist1, ZV_COLOR(0, 255, 0), 0)'在colorSubImg图像上绘制绿色的轮廓序列
endif
【单次执行】按钮按下时的仿真效果图
使用标定功能的检测效果图
不使用标定功能的检测效果图
本次,正运动技术VPLC系列机器视觉运动控制一体机快速入门(六)——标定功能就分享到这里,更多精彩内容请关注“正运动小助手”公众号。
本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。
VPLC系列机器视觉运动控制一体机快速入门(六)相关推荐
- VPLC系列机器视觉运动控制一体机快速入门(十)
此前,我们依次讲解了软硬件介绍及计数实例.相机的基本使用.基于形状匹配的视觉定位.BLOB有无检测.测量尺寸.机器视觉方案中使用到的标定功能.ZDevelop软件实现识别条形码和二维码,测量点/直线/ ...
- 机器视觉运动控制一体机应用例程(三) 基于BLOB分析的多圆定位
我们在<VPLC系列机器视觉运动控制一体机快速入门(三)>的推文中,讲述了基于形状匹配的视觉定位功能,而BLOB斑点分析也可以实现定位功能. 本期课程我们将在BLOB斑点分析定位的基础上进 ...
- 【机器视觉运动控制一体机小课堂】三分钟进行灰度匹配
背景 不同的模板匹配方法,其操作步骤也不一样,其生成模板的方式也有不同的地方,在之前的课程中我们讲述了基于形状的模板匹配,本期课程我们去了解一下基于灰度值的模板匹配. 基于灰度值的模板匹配适用于图像内 ...
- 【机器视觉运动控制一体机小课堂】三分钟进行轮廓提取
背景 轮廓提取是基于边缘轮廓的算法,可用于需要提取工件轮廓信息后进行加工处理的检测加工项目,可广泛应用于点胶.激光切割.工件打磨等需要提取工件轮廓的领域. 轮廓是一种能存储一系列点集的数据结构,可分为 ...
- 机器视觉运动控制一体机应用例程|3C电子屏幕裂痕检测
一.应用背景 3C电子出品质量直接决定了企业的生命线和盈利能力. 随着3C制造技术和人们生活水平的 不断提高,以及3C电子行业的蓬勃发展.各类3C消费电子产品如雨后春笋涌现,其产量也 持续增长,与此同 ...
- 机器视觉运动控制一体机应用例程|柔性振动盘上料解决方案
一.什么是柔性振动盘? 柔性振动盘作为高度灵活的.可自定零件的自动化柔性上料机构,解决了由于零件的大小.形状不一导致金属/塑料的零部件产品难以上料的难题.适用于更新换代快,频繁切换物料的工业应用场景, ...
- OpenAI API及ChatGPT系列教程1:快速入门
系列文章目录: OpenAI API及ChatGPT系列教程1:快速入门 OpenAI API及ChatGPT系列教程2:使用手册 OpenAI API及ChatGPT系列教程3:API参考(Pyth ...
- 机器视觉运动控制一体机应用例程|锂电池组装线上的读码应用
应用背景 读码识别技术作为工业物联网信息收集的关键途径,它在生产型企业中得到了广泛的应用. 锂电池在新能源汽车.消费电子和储能领域都有着不可或缺的地位. 它也与人的生命安全保证密切相关. 因此,锂电池 ...
- openGauss数据库源码解析系列文章——openGauss开发快速入门(二)
在上一篇openGauss数据库源码解析系列文章--openGauss开发快速入门(上)中,我们介绍了openGauss的安装部署方法,本篇将具体介绍openGauss基本使用. 二. openGau ...
最新文章
- Supervisor重新加载配置启动新的进程
- Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02
- Spring学习网址
- php连接mysql开发环境_Windows下安装PHP开发环境
- python下载文件暂停恢复_selenium+Python如何取消Chrome下载文件的‘保留’‘放弃’提示?...
- 清空邮件队列中的邮件
- 安卓手机端口号怎么查看_微信小程序怎么查看手机便签待办事项?
- AI队列长度检测:计算区域中的人数
- linux下DNS服务器的配置
- linux系统学习第六天
- SAStruts中文文档
- 【ArcGIS】数据属性重新赋值
- windows11 - 快速实现局域网内传文件
- 大数据杀熟 算法_大数据杀熟这事,究竟有多没谱?
- 机器视觉——镜头介绍
- 计算机病毒的分类与防范 论文,浅析计算机病毒与防范措施
- 抖音APP终极瘦身方案
- 微信小程序实现服务通知 模板消息详解(附源码)
- 软件测试密码修改教程,软件测试之用户注册和密码修改测试用例设计
- 【黑灰产犯罪研究】Web应用攻击
热门文章
- 请假时长计算和每月工作天数计算
- vue引用echarts折线平滑面积图
- Python:实现tabu search禁忌搜索算法(附完整源码)
- 免安装Oracle客户端就能使用pl/sql developer
- UG NX软件的一些简单设置
- ipad通过nps内网穿透连接windows主机
- android绑定手机设备,浅谈移动端设备标识码:DeviceID、IMEI、IDFA、UDID和UUID
- 解决has leaked ServiceConnection com.baidu.location.c@427b6780
- matlab语言及测绘数据处理应用,MATLAB语言及测绘数据处理应用
- html 中加载pdf,在HTML中嵌入PDF的推荐方法?