首页 > 其他分享 >基础 | 详解3D结构光如何标定

基础 | 详解3D结构光如何标定

时间:2023-08-02 17:25:53浏览次数:49  
标签:激光 标定 摄像机 详解 图像 条纹 平面 3D

结构光视觉的优点:

非接触、信息量大、测精度高、抗干扰能力强。

结构光视觉传感器参数的标定包括:摄像机参数标定、结构光平面参数标定。

结构光视觉测量原理图

我们不考虑镜头的畸变,将相机的成像模型简化为小孔成像模型,则特征点的图像坐标Pf 与其在摄像机坐标系下的三维坐标P 之间的关系可表示为:

其中:(u,v)是特征点的图像坐标,(u0,v0) 光轴中心的图像坐标,(kx ky )是X 轴,Y 轴方向的放大系数,(xc yc zc) 是特征点在摄像机坐标系下坐标,  Mc 是摄像机内参数矩阵。

结构光视觉投影成像模型:

设结构光在摄像头坐标系的平面方程为:

依据激光条纹特征点图像坐标就可以得到其在摄像机坐标系下的三维坐标

相机参数标定:

采用张正友提出的基于2D平面棋盘格的摄像机标定方法,利用Matlab摄像头标定工具完成相机参数的标定。

摄像机标定工具箱主窗口:

用于摄像机标定的棋盘格图像:

得到摄像机内参数矩阵:

结构光平面参数标定:

首先,激光器投射结构光平面到平面棋盘格上形成激光条纹,并通过CCD 摄像机采集激光条纹图像。然后,对图像进行处理,提取激光条纹上的两个特征点。控制机器人按照一定的约束进行运动,从一个标定位置移动到另一个位置,从而产生两条不共线的激光条纹,利用上述相同的图像处理方法再次提取激光条纹上的两个特征点。最后,利用结构光平面上的四个点来确定结构光平面方程参数。该方法可以在摄像机参数标定过程中,同时完成结构光平面方程参数的标定。同时,该方法不需要加工高精度的三维标定靶标,也不需要手工测量,标定过程简单实用。

试验装备:

一个六自由度机器人,一个CCD 工业摄像机,一个激光器和一个平面棋盘格靶标。

结构光平面参数标定系统示意图:

摄像机坐标系位于摄像机中心,而世界坐标系位于平面棋盘格靶标上。一个特征点在摄像机坐标系下坐标与其在世界坐标系下坐标之间的对应关系可以用下式来表达:

标定过程如下:

(1)图像获取:

图像的获取是在摄机参数标定过程中同时完成。 首先将棋盘格放在工作台上, 在这个初始位置,利用摄像机采集一幅图,如图 (a) 所示 。保持摄像机和棋盘格的位置姿态不变,打开激光器让条纹投射到棋盘格上, 再采集一幅图像如图 (b) 所示:

然后改变棋盘格和摄像机的相对位姿,使前后形成的两条激光条纹在空间上不共线,即可确定一个唯一的结构光平面。

 

(2)图像处理:

图像处理的目的是提取激光条纹上特征点的图像坐标。

分为图像感兴趣区域(ROI)确定、自适应阈值分割、骨架细化和特征点计算。

1)图像ROI确定

通过观察图像看出,激光条纹大致平行于图像的u 轴,而且激光条纹处像素的灰度值高于图像中其它像素的灰度值,所以图像的ROI 可以通过对每行像素灰度值进行求和得到:

2)阈值分割

阈值分割分为全局阈值分割、局部阈值分割和自适应阈值分割。最常用的自适应阈值分割是Otsu方法,该方法使用统计学的方法确定最优的阈值,适用于一般的图像,但是不太适合于棋盘格上激光条纹的分割。

根据图像中激光条纹的灰度值高于图像中其它像素的灰度值以及激光条纹所在区域比较集中的特点,利用图像ROI 内行像素灰度值之和计算激光条纹的自适应阈值:

3) 骨架细化:

自适应阈值分割以后的激光条纹具有一定的宽度,直接处理计算量巨大而且精度较低,需要对图像进行骨架细化得到单像素的线。

采用下面文献中所提出的快速骨架细化方法:

该方法通过迭代提取图像骨架,每个迭代过程分为两步,第一步去除东南边缘和西北角的点,第二步去除西北边缘和东南角的点。

Pi分布情况如下:

第二个迭代过程将上述条件的c、d条件更改为:

4)特征提取:

选取激光条纹中心线上的两个点作为激光条纹的特征点,为了提高激光条纹中心线的提取精度,利用最小二乘法拟合方法对细化后的激光条纹直线进行处理。

激光条纹特征点提取过程如下:

标定棋盘格平面内任意一点与法向量关系

由上图可知:

由特征点的图像坐标Pf 与其在摄像机坐标系下的三维坐标P 之间的关系知:

得到棋盘格上任意一点在摄像机坐标系下的zc 坐标

得到激光条纹特征点在摄像机坐标系下的坐标值

至此,得到四个激光条纹特征点的图像坐标,由上式得四个激光条纹特征点在摄像机坐标系下的坐标,由于三点确定一个平面方程,使用最小二乘法计算结构光平面方程如下:

至此,完成结构光平面方程的参数的标定。

本文仅做学术分享,如有侵权,请联系删文。

标签:激光,标定,摄像机,详解,图像,条纹,平面,3D
From: https://www.cnblogs.com/DDQQ/p/17601215.html

相关文章

  • 请求头详解——Headers
    请求头定义:客户端,即浏览器通过输入url后确定等于做了一次向服务器的请求动作,在这个请求里面带有请求参数,请求参数的集合即为请求头。请求头的参数(常用的):Accept:浏览器可接收的文件类型Accept-Charset:浏览器可以接收的编码类型Accept-Encoding:浏览器可以接收的压缩编码类型Ac......
  • Rhinoceros 7 - 犀牛3D建模软件mac/win版
    Rhinoceros7(简称Rhino7)是一款由美国RobertMcNeel&Associates公司开发的专业三维建模软件。它以其强大而灵活的功能、友好的用户界面和广泛的应用领域而备受设计师、工程师和艺术家的喜爱。点击获取Rhinoceros7 强大的三维建模功能:Rhino7提供了一套强大的工具......
  • maven-resources-plugin详解
    核心资料来源:maven-resources-plugin详解(csdn.net)maven-resources-plugin到低在什么场景下使用?他到底有什么作用?他和pom当中配置的resources标签又有什么关联?为什么有的项目使用了该插件而有的却没有?resources当中的filtering标签到低是干什么的?maven怎么打包过滤文件?......
  • open3d -- voxel_down_sample
    官网文档parameter:Input:open3d.geometry.Pointcloud点云类voxel_size:体素单位长度Return:处理后的点云类Description:体素降采样使用常规的体素网格从输入点云创建统一降采样的点云。它通常用作许多点云处理任务的预处理步骤。 就是将点云分块(这里为体素),然后逐......
  • 镭拓详解塑料激光焊接机在汽车车灯塑料焊接上的应用
    编辑:镭拓激光随着激光焊接技术的快速发展与进步,激光技术应用深入到各个领域,尤其是在高精密制造业领域。比如汽车制造行业上,激光焊接技术的应用更为深刻和重要。不过很多人可能不知道是,汽车制造业使用到的激光焊接技术可不仅仅是一种。你激光焊接技术只是用在汽车车上的金属材料焊接......
  • git如何上传本地代码文件到git仓库【图文详解】
    第一步:新建代码库第二步:复制仓库地址第三步:在本地文件夹内右击,通过GitBashHere进入命令窗口,克隆复制的仓库地址    第四步:将你的项目添加至该文件夹下,通过命令进行添加至仓库主要命令1:gitinit(初始化仓库)2:gitadd.(这里的.表示添加所有文......
  • 【腾讯云Cloud Studio实战训练营】使用Cloud Studio快速开发一个3D家具个性化定制应用
    目录前言: 一、腾讯云CloudStudio介绍:1、接近本地IDE的开发体验2、多环境可选,或连接到云主机3、随时分享预览效果4、兼容VSCode插件 5、AI代码助手二、腾讯云CloudStudio项目实践(3D家具个性化定制应用)1、注册并登录CloudStudio2、进入Vue预置开发环境2.1登录成功进入C......
  • spring的事务注解详解
    Spring是一个流行的开发框架,它提供了很多功能和特性,其中包括事务管理。事务管理是在应用程序中执行一系列操作时,确保数据的一致性和完整性的关键方面之一。Spring框架提供了多种方式来管理事务,其中最常用的方式是使用注解。通过在方法或类级别上添加特定的注解,可以将相关的方法或类......
  • linux /sys/class/dmi/id目录详解
    /sys/class/dmi/id是一个linux系统的目录,用于存储有关计算机硬件的DMI(desktopmanagementinterface)信息。DMI是一种由系统固件提供的标准接口,收集和报告有关计算机硬件配置的信息/sys/class/dmi/id目录下,可以找到以下文件和子目录bios_date:存储计算机的BIOS固件版本的发布日......
  • PHPHook框架详解 实现代码注入和拦截的利器
    PHPHook框架详解实现代码注入和拦截的利器PHPHook框架是一种具有强大功能的代码注入和拦截工具,它被广泛应用于各种Web开发中。本文将为大家详细介绍PHPHook框架的实现原理,以及如何利用该框架实现代码注入和拦截。PHPHook框架详解实现代码注入和拦截的利器一、PHPHook框架简介......