多台Azure Kinect配准与三维重建点云融合

这篇具有很好参考价值的文章主要介绍了多台Azure Kinect配准与三维重建点云融合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文章讲解 多台Azure Kinect配准与三维重建点云融合 的相关理论及思路,相关代码将免费开源至github,敬请期待。


一、同步多台设备

在进行多相机或者双相机的数据采集时,为了使得各相机所捕获的每一帧数据都是同一时刻的场景,因此需要对各个相机间进行同步操作。当有多个Kinect Azure设备同时连接时,需将它们分成master属性(主设备)和subordinate属性(从属设备)两种,其中主设备有且只有一个,剩下的全部为从属设备。
每个 Azure Kinect DK 设备附带 3.5 毫米同步端口(输入同步和输出同步),可将多个设备链接在一起。 连接设备后,软件可以协调设备之间的触发定时。 需要注意的是,“同步输入”和“同步输出”插孔需要拆下Azure Kinect DK外部塑料盖才能看到。
同步的配置有两种,可使用以下任一方法来完成设备配置:
菊花链配置。 同步一个主设备以及最多八个从属设备。在菊花链配置中连接 Azure Kinect DK 设备步骤:

  1. 将每个 Azure Kinect DK 连接到电源。
  2. 将每个设备连接到其自身的主机。
  3. 选择一个设备充当主设备,并将 3.5 毫米音频线插入该设备输出同步端口。
  4. 将该线缆的另一端插入第一个从属设备的输入同步端口。
  5. 若要连接另一个设备,请将另一根线缆插入第一个从属设备的输出同步端口,以及下一个设备的输入同步端口。
  6. 重复上述步骤,直到所有设备都已连接。 最后一个设备应连接了一根线缆。 其输出同步端口应该是空的。
    多台Azure Kinect配准与三维重建点云融合
    星形配置。 同步一个主设备以及最多两个从属设备。在星形配置中连接 Azure Kinect DK 设备步骤:
  7. 将每个 Azure Kinect DK 连接到电源。
  8. 将每个设备连接到其自身的主机。
  9. 选择一个设备充当主设备,将耳机分线器的单体端插入其输出同步端口。
  10. 将 3.5 毫米音频线连接到耳机分线器的“分接”端。
  11. 将每根线缆的另一端插入某个从属设备的输入同步端口。
    多台Azure Kinect配准与三维重建点云融合
    触发器源必须使用 3.5 毫米音频线将信号传送到主设备的输入同步端口。线缆长度应小于 10 米,可以是立体声或单声道音频线。可以使用立体声或单声道音频线。 Azure Kinect DK 会将音频线连接器的所有套管和套环短接到一起,并将其接地。 如下图所示,设备只从连接器尖端接收同步信号。

多台Azure Kinect配准与三维重建点云融合
实际采集场景可如下所示:
多台Azure Kinect配准与三维重建点云融合每个Azure Kinect DK可以连接至不同的主机,也可以全部连接至同一台主机。可以根据设备的使用方式以及通过 USB 连接传输的数据量使用专用主机控制器。
注意:每个连接设备的软件必须配置为以主模式或从属模式运行。使用外部同步时,始终应先启动从属相机,然后再启动主相机,这样才能正常调整时间戳。
连接设备完成后简单地验证设备是否已连接并可通信,步骤如下:

  1. 打开 Azure Kinect 查看器的两个实例。
  2. 在“打开设备”下,选择要测试的从属设备的序列号。
  3. 在“外部同步”下,选择“从属设备”。选择“开始”。
  4. 启动从属设备后,使用 Azure Kinect 查看器的另一实例打开主设备。
  5. 在“外部同步”下,选择“主设备”。选择“开始”。
  6. Azure Kinect主设备启动后,Azure Kinect查看器两个实例应显示图像。
    除此之外,也可以自己编写代码完成多台设备的同步采集。

二、配准多台设备

验证设备可正确通信后,接下来可对其进行校准,以便在单个域中生成图像。
在单个设备中,深度相机和 RGB 相机已经过出厂校准,可以协同工作。 但是,如果必须一同使用多个设备,则必须对这些设备进行校准,以确定如何将图像从捕获它时所在的相机域转换为用于处理图像的相机域。
目的:多摄像机转移矩阵的标定可以将多摄像机人体姿态转移到同一空间坐标。多摄像头的标定是为了通过标定技术获取两个或更多摄像头的相机坐标之间的旋转平移矩阵。
方案:目前使用的比较多的标定方法是张正友标定法(黑白棋盘格标定)。对于单个传感器而言,该方法可以计算传感器的内参、畸变参数以及传感器坐标系和世界坐标系之间的外参。对于两个传感器而言,可以计算它们之间的外参。
简而言之,配准就是一个用各种方法寻找相机间的旋转矩阵的过程。
配准之前,需要了解以下知识:

2.1 四个坐标系

世界坐标系:即物体在真实的物理环境所在坐标系。
相机坐标系:即以相机的的中心点为原点而建立的坐标系。相机的光轴通过该原点,且为该坐标系的Z轴。
图像坐标系:即所获得的图像所在的坐标系,图像的中心即为该坐标系的原点。需要注意的是,相机的光轴也通过图像坐标系的原点。
像素坐标系:即以图像的左上角(或者左下角)为原点的坐标系举个例子,CCD传感上上面的8mm x 6mm,转换到像素大小是640x480. 假如dx表示像素坐标系中每个像素的物理大小就是1/80. 也就是说毫米与像素点的之间关系是piexl/mm.需要注意的是,像素坐标系中的点,以像素来表示,而非距离单位。像素坐标系与图像坐标系均在像平面上,范围与图片尺寸有关。
相机坐标系和图像物理坐标系:
多台Azure Kinect配准与三维重建点云融合其中点X为相机坐标系下的现实世界中的点,XYZ为像机坐标系,xyz为图像坐标系,右图为正视图,f代表相机的焦距。
四个坐标系的叠加:
多台Azure Kinect配准与三维重建点云融合

2.2 世界坐标系到相机坐标系

多台Azure Kinect配准与三维重建点云融合

旋转变换:多台Azure Kinect配准与三维重建点云融合
平移变换:
多台Azure Kinect配准与三维重建点云融合

2.3 相机坐标系到图像物理坐标系

多台Azure Kinect配准与三维重建点云融合

2.4 图像物理坐标系到像素坐标系

多台Azure Kinect配准与三维重建点云融合
坐标系变换的总结

多台Azure Kinect配准与三维重建点云融合

2.5 张正友标定

张正友相机标定法是张正友教授1998年提出的单平面棋盘格的相机标定方法。传统标定法的标定板是需要三维的,需要非常精确,这很难制作,而张正友教授提出的方法介于传统标定法和自标定法之间,但克服了传统标定法需要的高精度标定物的缺点,而仅需使用一个打印出来的棋盘格就可以。同时也相对于自标定而言,提高精度,便于操作。因此张氏标定法被广泛应用于计算机视觉方面。
多台Azure Kinect配准与三维重建点云融合
已知相机的内参和外参,将他们重新表示为:
多台Azure Kinect配准与三维重建点云融合
多台Azure Kinect配准与三维重建点云融合
多台Azure Kinect配准与三维重建点云融合
多台Azure Kinect配准与三维重建点云融合
多台Azure Kinect配准与三维重建点云融合
容易发现B是一个对称阵,所以B的有效元素就剩下6个,即

多台Azure Kinect配准与三维重建点云融合
通过至少含一个棋盘格的三幅图像,应用上述公式我们就可以估算出B了。得到B后,我们通过cholesky分解 ,就可以得到摄相机机的内参阵A的六个自由度,即:
多台Azure Kinect配准与三维重建点云融合
多台Azure Kinect配准与三维重建点云融合且R具有正交性和归一性,所以

多台Azure Kinect配准与三维重建点云融合
此处K等于上述的A,一个H矩阵可以提供两个方程,对于5自由度的A,至少需要三幅图片可以求解。但上述的推导结果是基于理想情况下的解,由于可能存在高斯噪声,所以使用最大似然估计进行优化。采用更多的图片(20幅有效图片),每幅图片有更多角点(8*6棋盘格)。
根据上述原理可以求得单个传感器的外参,分别求出两个设备的颜色传感器的外参,就可以计算出两个颜色传感器间的外参。

2.6 实际操作
可以通过opencv库实现相机标定。使用opencv库实现相机标定的步骤如下:

  1. 相机获取一帧图像,由图像格式转为Mat矩阵
  2. 利用findChessboardCorners()函数识别图像中的棋盘格角点位置drawChessboardCorners()函数可以查看识别的角点位置是否准确
  3. 当有足够多张图后,调用calibrateCamera()以获取单相机的内外参和畸变系数;调用stereoCalibrate()以获取双相机间的外参(R、t)。
    Microsoft 提供了使用 OpenCV 方法的 GitHub 绿屏代码示例。 此代码示例的自述文件提供了有关校准设备的更多详细信息和说明。
    多台Azure Kinect配准与三维重建点云融合

三、多台设备3维空间信息重建

此处建议录制视频与生成点云是分开的。 这样做的好处有两点:一是在具体操作时发现如果二者并行,采集速度将会是龟速。二是这里的kinect即使替换为任意的RGB-D相机,该程序仍然可以运行。
Kinect Azure通过k4a_device_get_calibration函数可以获取各传感器的内参以及它们之间的外参,并存放在k4a_calibration_t数据类型中,方便使用者直接获取数据。在SDK提供的各函数接口中,会通过k4a_transformation_create函数将k4a_calibration_t数据类型转换成k4a_transformation_t类型后进行使用。换句话说,直接使用SDK提供的函数时用k4a_transformation_t类型,需要读取内外参具体数据时用k4a_calibration_t类型。
通过k4a_transformation_color_image_to_depth_camera函数可以获取到深度图像上每个像素对应的彩色值,并保存在同分辨率的transformation_color_image图像中。通过k4a_transformation_depth_image_to_point_cloud函数可以获取到深度图像上每个像素对应的点云坐标。最后遍历每个像素点,将对应的点云坐标和彩色数据写在构造的color_point_t结构体中作为一个彩色点,排除数据异常点后,所有被写在vector向量中的点即为单相机获得的单帧点云数据。可以使用PCL点云库生成点云。
得到单个相机的点云后,将所有点云进行融合,根据第二步配准得到的外参,我们可以将不同视角的点云融合至同一视角,达到三维重建的效果。
三维重建点云融合流程如下图:

多台Azure Kinect配准与三维重建点云融合


总结

以上就是今天要讲的内容,本文章讲解 多台Azure Kinect配准与三维重建点云融合 的相关理论及思路,相关代码将免费开源至github,敬请期待。文章来源地址https://www.toymoban.com/news/detail-448621.html

到了这里,关于多台Azure Kinect配准与三维重建点云融合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【CloudCompare教程】008:基于点云的三维模型重建(泊松重建)

    本文讲述基于点云的三维模型重建方法,PoissonRecon是“Poisson Surface Reconstruction”的缩写,它是由约翰霍普金斯大学的Misha Kazhdan47提出的三角形网格生成算法的简单接口。 加载兔子点云,如下图所示: 在三维模型构建之前,应先计算法向量,否则会有以下提示:点云必须具有

    2024年02月07日
    浏览(47)
  • 三维重建(单目、双目、多目、点云、SFM、SLAM)

    三维重建定义 在计算机视觉中, 三维重建是指根据单视图或者多视图的图像重建三维信息的过程. 由于单视频的信息不完全,因此三维重建需要利用经验知识. 而多视图的三维重建(类似人的双目定位)相对比较容易, 其方法是先对摄像机进行标定, 即计算出摄像机的图象坐标系与

    2024年02月03日
    浏览(35)
  • MATLAB算法实战应用案例精讲-【目标检测】三维点云重建

    目录 前言 算法原理 什么是点云? 数据预处理  三维计算视觉研究内容

    2024年02月06日
    浏览(50)
  • 【计算机视觉】基于三维重建和点云处理的扫地机器人寻路

    [摘要] 扫地机器人的使用已经越发普及,其中应用到了三维重建的知识。本项目旨在设计由一   定数量的图像根据算法完成三维模型的建立,并利用三维数据最终得到扫地机器人的行驶路   线,   完成打扫机器人成功寻路的任务   。本项目采用的方法是 SFM-MVS   、Colmap  

    2024年01月21日
    浏览(54)
  • 开源,点云处理及三维重建软件(Point Cloud Viewer, PCV)的设计与实现

    GitHub地址:point-cloud-viewer GitCode地址:point-cloud-viewer 笔者于2021年底开始,着手设计并实现这款点云处理及三维重建软件Point Cloud Viewer, PCV,历时三个月,完成该软件的大部分功能实现。由于笔者转行做嵌入式底层相关工作,不再研究点云处理相关技术,PCV的后续功能实现就一

    2024年02月01日
    浏览(34)
  • 4 OpenCV实现多目三维重建(多张图片增量式生成稀疏点云)【附源码】

    本文是基于 OpenCV4.80 进行的,关于环境的配置可能之后会单独说,先提一嘴 vcpkg 真好用 从多张图片逐步生成稀疏点云,这个过程通常包括以下步骤: 初始重建: 初始两张图片的选择 十分重要 ,这是整个流程的基础,后续的增图都是在这两张图片的基础上进行的 对于输入图

    2024年02月06日
    浏览(43)
  • 【Kinect】Ubuntu20.04 安装Azure Kinect Sensor

    本文主要记录Ubuntu20.04 安装Azure Kinect Sensor SDK Azure Kinect 人体跟踪 SDK官网 : https://learn.microsoft.com/zh-cn/azure/Kinect-dk/body-sdk-download Linux版本目前只支持 18.04 和 20.04 Azure Kinect 传感器 SDK 官网: https://learn.microsoft.com/zh-cn/azure/Kinect-dk/sensor-sdk-download Linux版本目前只支持 18.04 ,但也能

    2024年02月06日
    浏览(39)
  • Azure Kinect 使用记录 (一)

    20211111 - 占坑 20211115 - 添加vs编译内容 20220311 - k4abt_simple_3d_viewer 突然用不了了 因项目需要,得用Azure Kinect以及它的SDK进行开发,在这里记录下心得体会,不定时更新 1.0 k4abt_simple_3d_viewer 闪退 之前用着还好好的,突然就用不了了,表现情况是,双击 k4abt_simple_3d_viewer.exe ,出现

    2024年02月06日
    浏览(37)
  • Azure Kinect获取相机内参

    在采集点云数据时需要根据相机不同depth、color分辨率调整对应相机内参u0(px)、v0(py)、fx、fy,那么具体内参怎么获得呢?就跟随ludaner一起来看看吧。 其实Azure-Kinect-Sensor-SDK已经提供了example代码,只需编译运行即可: Azure-Kinect-Sensor-SDK/main.cpp at develop · microsoft/Azure-Kinect-Sensor-S

    2023年04月13日
    浏览(72)
  • Azure Kinect 之 Note(一)

    Azure Kinect DK 是一款开发人员工具包,配有先进的AI 传感器,提供复杂的计算机视觉和语音模型。 Kinect 将深度传感器、空间麦克风阵列与视频摄像头和方向传感器整合成一体式的小型设备,提供多种模式、选项和软件开发工具包(SDK)。 https://learn.microsoft.com/zh-tw/azure/kinect-dk/h

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包