相机九点标定讲解

1 标定的目的及基本原理 2

1.1 标定的目的 2

1.2 标定的大体过程 2

1.3标定的方式 3

1.4标定中数据传输方向 3

2 标定前的准备 4

3 运动控制程序界面介绍 6

4 标定实操 8

4.1 操作步骤 8

4.2 程序讲解 11

1 标定的目的及基本原理

1.1 标定的目的

相机拍出来的图片,是由一个个像素点组成的,而机器设备的运动是根据物理坐标来移动的,所以需要进行九点标定仿射变换将像素坐标换算成物理坐标后,把结果传给机器设备使其进行对应的移动。所以九点标定就是为了建立像素坐标与物理坐标之间数学关系矩阵K。

1.2 标定的大体过程

如图1.1所示,图中的边框表示相机视野的大小。橙色中心表示相机的中心像素坐标点(Xcp,Ycp)X1;蓝色中心是定位到的模板物体的中心像素坐标点(Xmp,Ymp)X2;然后利用九点标定得到的仿射矩阵K并分别仿射计算出上述两个中心的实际物理坐标Y: Y1=KX1, Y2=K X2。

即相机中心的像素坐标点X1(Xcp,Ycp)通过仿射变换得到相机中心实际物理坐标(Xcw,Ycw)Y1;

模板物体中心的像素坐标点X2(Xmp,Ymp)通过仿射变换得到模板物体中心实际物理坐标(Xmw,Ymw)Y2;

然后利用得到的两个物理坐标算出两者的实际距离差,再将这个距离差(X=Y1X-Y2X,Y=Y1Y-Y2Y)发送给运动平台,使相机移动到模板物体中心完成矫正。图中来说就是橙色的坐标会移动到蓝色坐标处。相机的视野从1移动到了2,重新拍照的结果如图1.2所示,相机中心和模板物体的中心重合在一起。

图1.1

图1.2

1.3标定的方式

我们这边会提供的九点标定的平台。在标定过程中将检测物体作为Mark点固定不动,通过移动相机的位置来进行标定。

1.4标定中数据传输方向

在整个标定过程中,数据的传输方向是Halcon通过串口将数据发送给运动控制界面,运动控制界面再将数据发送给运动平台让相机进行相应的动作。

2 标定前的准备

要进行九点标定,我们需要以下准备:

① 一台完整的九点标定平台,如图2.1;

图2.1 标定平台

② Halcon九点标定代码,如图2.2;

图2.2

③ 运动控制界面Demo,如图2.3,双击运行后的界面如图2.4

图2.3

图2.4

④ 在电脑上安装九点标定平台所需的驱动,图2.5分别为驱动软件和安装教程

图2.5 驱动软件

⑤ 用串口虚拟助手虚拟一组串口,图2.6为串口虚拟助手界面。

图2.6 串口虚拟助手

3 运动控制程序界面介绍

运动控制程序界面如图3.1所示。

图3.1

(1)这部分为端口选择部分。首先右击计算机属性,点击设备管理器如图3.2所示,然后找到端口选项如图3.3所示(以图中所示的COM3为例),最后在运动平台联机部分选择相应的端口并且点击打开串口按钮如图3.4所示。

图3.2

图3.3

图3.4

(2)图3.5中的按钮就是为了控制平台运动

图3.5

(3)图3.6为坐标提示框

图3.6

(4)图3.7为信息提示框

图3.7

(5)图3.8为控制运动走位框

图3.8

(6)图3.9为运动控制界面与Halcon串口通讯部分

图3.9

4 标定实操

4.1 操作步骤

(1)首先我们先在halcon中创建两个空的数组用于存储后续匹配到的模板中心的像素坐标(X、Y)如图4.1所示。相机每次移动的间隔,例如我每次移动的间隔是4个毫米,是根据实际情况来确定的。(在移动相机的时候不让检测物体超出视野范围,但走的九宫格尽量能囊括整个视野)

图4.1

(2)接着确定运动走位方式,看个人喜好选择相对走位或者绝对走位如图4.2所示

图4.2

(3)确定好间隔和运动走位的方式后,将定下来相机要走的九个点的坐标X、Y添加到所创建的WorldX、WorldY数组中去,如图4.3中黑色的九个点为定下来相机要走的九个点,接下来就要将九个点的实际坐标添加到halcon创建的数组中。

图4.3

绝对走位

第1点: X 坐标18,Y坐标-2

第2点: X 坐标18,Y坐标0

第3点: X 坐标18,Y坐标2

第4点: X 坐标12,Y坐标2

第5点: X 坐标12,Y坐标0

第6点: X 坐标12,Y坐标-2

第7点: X 坐标6,Y坐标-2

第8点: X 坐标6,Y坐标0

第9点: X 坐标6,Y坐标2

(4)开始进行标定,图4.4为标定部分的代码,代码部分很简单,就是进行拍照、创建模板和匹配模板。下面主要讲操作,首先根据halcon中所创建数组的值(如图4.5所示)将相机的要走的坐标对应X,Y,Z输入到运动控制界面中相应的位置中如4.6所示,每次Z轴的坐标设为0就可以了(Z轴控制的是光源和相机的工作距离,这个不需要变动)。

注意:开始输入的第一组(0,0,0)的时候,重新启动下运动控制程序。这些坐标值必须也是0起步。重启启动就可以重置为0如图4.7所示。

每输入一次坐标,点击运动,让平台驱使相机运动一次,然后执行一次开始标定的代码,模板物体中心的数组就加一组像素坐标。第一次执行需要创建一个模板区域。接下的执行就不再需要了。当执行完九个坐标后,也随之获得了相应的模板物体中心的像素坐标。然后人为的将绿色的执行光标移出While循环,移动到关闭相机Close_Framegrabber();

图4.4

图4.5

图4.6

图4.7

(5)到此九点标定就已经可以说结束了,标定完毕后创建相应的仿射变换矩阵代码如图4.8所示,这样就获得了像素坐标和物理坐标的对应关系。

图4.8

4.2 程序讲解

(1)如图4.9虚拟串口已经建立COM1和COM2端口的连接,所以Halcon中端口的选择如图4.10所示,运动控制界面中端口选择如图4.11。

图4.9

图4.10

图4.11

(2)halcon九点标定代码中的介绍如下

图4.12

图4.13

相关推荐
code bean15 分钟前
【工控】线扫相机小结 第四篇
数码相机·工控·工业相机
GOTXX40 分钟前
基于Opencv的图像处理软件
图像处理·人工智能·深度学习·opencv·卷积神经网络
xrgs_shz1 小时前
MATLAB读入不同类型图像并显示图像和相关信息
图像处理·计算机视觉·matlab
uncle_ll2 小时前
PyTorch图像预处理:计算均值和方差以实现标准化
图像处理·人工智能·pytorch·均值算法·标准化
只怕自己不够好3 小时前
OpenCV 图像运算全解析:加法、位运算(与、异或)在图像处理中的奇妙应用
图像处理·人工智能·opencv
华清远见IT开放实验室4 小时前
【每天学点AI】实战图像增强技术在人工智能图像处理中的应用
图像处理·人工智能·python·opencv·计算机视觉
哈市雪花18 小时前
图像处理 之 凸包和最小外围轮廓生成
图像处理·人工智能·图形学·最小外围轮廓·最小外包
如若12318 小时前
实现了图像处理、绘制三维坐标系以及图像合成的操作
图像处理·人工智能
那就举个栗子!1 天前
多传感器融合slam过程解析【大白话版】
数码相机
思通数科AI全行业智能NLP系统1 天前
六大核心应用场景,解锁AI检测系统的智能安全之道
图像处理·人工智能·深度学习·安全·目标检测·计算机视觉·知识图谱