相机九点标定讲解

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

相关推荐
AAIshangyanxiu10 小时前
遥感与GIS在滑坡、泥石流风险普查中的实践技术应用
图像处理·遥感·dem数据·arcgis地质灾害·envi遥感
小伍_Five13 小时前
从0开始:OpenCV入门教程【图像处理基础】
图像处理·python·opencv
机器视觉知识推荐、就业指导19 小时前
【数字图像处理二】图像增强与空域处理
图像处理·人工智能·经验分享·算法·计算机视觉
烟锁池塘柳019 小时前
Camera ISP Pipeline(相机图像信号处理管线)
图像处理·数码相机·信号处理
3DVisionary19 小时前
XTOP3D的DIC技术在极端条件下的应用解决方案
数码相机·3d·航空工业·全场应变测量·航空机匣内部四测头同步测量·反射镜辅助dic观测·四测头方案
深图智能1 天前
OpenCV 4.10.0 图像处理基础入门教程
图像处理·opencv·计算机视觉
美狐美颜sdk1 天前
直播美颜SDK的底层技术解析:图像处理与深度学习的结合
图像处理·人工智能·深度学习·直播美颜sdk·视频美颜sdk·美颜api·滤镜sdk
刀客1232 天前
python小项目编程-中级(1、图像处理)
开发语言·图像处理·python
小屁孩大帅-杨一凡2 天前
如何实现使用DeepSeek的CV模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建。...
图像处理·人工智能·opencv·计算机视觉·超分辨率重建
埃菲尔铁塔_CV算法2 天前
基于 C++ OpenCV 图像灰度化 DLL 在 C# WPF 中的拓展应用
c++·图像处理·人工智能·opencv·机器学习·计算机视觉·c#