Least-Squares Rigid Motion Using SVD——文献精读(使用 SVD 方法求解 ICP 问题)

一、文章信息与摘要

文章标题:Least-Squares Rigid Motion Using SVD使用奇异值分解的最小二乘刚性运动

说明本文的核心目标:计算对齐两组对应点的最佳拟合刚性变换的步骤

二、问题描述

假设P={p1,p2,...,pn}Q={q1,q2,...,qn}是两组Rd空间中的对应点集,现在想要根据这个两个点集的数据来计算出它们之间的刚性转置信息,可以知道这其实是一个最小二乘求优问题

目标:我们希望找到一个使两个集合在最小二乘意义下最优对齐的刚性变换,即寻找一个旋转矩阵 R 和平移向量 t,满足如下关系:

其中, 𝑤𝑖 表示每个点的权重。 𝑆𝑂(𝑑表示 d 维空间的一组旋转群。

三、计算平移向量t和旋转矩阵

计算平移向量t的推导过程:

计算旋转矩阵的推导过程:

四、反射修正

为什么要进行反射修正?

答:通过之前的推导,我们用 SVD 求解的 R 一定是一个正交矩阵,但并非所有正交矩阵都是旋转矩阵,还可能是反射,因此要进行判断。

旋转矩阵的定义:旋转矩阵是一个用来表示在欧几里得空间中的点或向量围绕一个固定轴的旋转的正交矩阵。

旋转矩阵—>正交矩阵,但正交矩阵不能推导出旋转矩阵。举个反例:

  • 因此我们还需要对所求得的 R 进行行列式判断,判断方法:
  • 如果 det⁡(𝑉𝑈⊤)=−1,则所求的 R 包含了镜像;
  • 如果 det⁡(𝑉𝑈⊤)=1,则所求的 R 是我们所求的旋转矩阵。
  • 反射的最优化问题

    如果确定了𝑅包含反射(det(𝑉𝑈𝑇〖VU〗^T)=−1),我们接下来的目标是找到一个反射矩阵𝑀,它能最大化迹的函数𝑡𝑟(Σ𝑀) 。这里的迹函数只依赖于 𝑀的对角线元素𝑚𝑖𝑖。我们将这些对角线元素视作变量,它们构成了所有反射矩阵对角线的集合。由于反射矩阵可以通过反转旋转矩阵的一行来构建,所以优化集合是点 (±1,...,±1) 的凸包,其中坐标−1的个数是奇数。

    凸多面体和极值

    由于我们处理的领域是一个凸多面体,线性函数𝑓在其顶点达到极值。因此,我们寻找的最优解是在这些顶点之一。其中对角线全为1(即没有 −1)不在考虑的范围内,所以次优的选择是在最后一个元素为 −1的情况,即 𝑡𝑟(Σ𝑀)=𝜎1"σ" _1+ 𝜎2 "σ" _2  +…+ 𝜎d−1 "σ" _(d-1)   𝜎d "σ" _d  。这个值是在我们的域的一个顶点上取得的,除了全1情况外,是所有可能组合中最大的,因为 𝜎d"σ" _d是最小的奇异值(因为SVD 分解特征值是从大到小排序)

    总结

    如果 det(𝑉𝑈𝑇〖VU〗^T)=−1,我们需要的 𝑀=𝑉𝑇𝑅𝑈V^T RU的形式,其中最后一个元素为 −1即:

  • 我们还可以总结出一个更一般的公式,无论 det(𝑉𝑈𝑇〖VU〗^T)等于−1还是−1R 都可以表示为:

五、总结

经过上面的推导和镜像修正,我们可以总结出一套完整的使用 SVD 求解 ICP 问题的流程:

我们的问题是求解 R, t 使得下面的误差函数最小:

步骤如下:

  1. 1.计算两个点的加权质心;

2.对所有点做归一化;

3.计算d x d 的协方差矩阵d代表数据维度);

4.SSVD分解S= 𝑈Σ𝑉𝑇〖UΣV〗^T,则得到想要求的旋转矩阵R如下:

5.计算平移向量t

六、本文的扩展——点云配准中的ICP算法

ICP Iterative Closest Point,迭代最近点)算法是一种广泛应用于计算机视觉和机器人领域的技术,主要用于在两组数据点之间找到最佳的对齐方式。通过不断地迭代,每次在前一次的计算结果之上再计算出新的变换矩阵,最终当迭代次数满足条件或者变换矩阵收敛时停止ICP广泛应用于3D重建、机器人定位、医疗影像处理等领域。

原理

ICP算法的基本步骤如下:

1. 选择对应点:在两组点云中,为每个点找到对应的最近点。这些对应点构成了点云之间的初步匹配。
2. 最小化误差:计算一个变换(包括旋转 矩阵 R 和平移向量 t ),使得这些对应点之间的距离(即误差)最小化。常用的求解 R t 的方法有: SVD 非线性优化,但非线性优化的描述比较繁琐,通常采用 SVD 方法。
3. 应用变换:将变换应用到其中一组点云上,使其更好地与另一组点云对齐。
4. 迭代优化:重复上述步骤,每次都在更新后的点云基础上进行对应点选择和误差最小化,直到变换达到稳定或误差小于某个阈值。

优点:简单,不必对点云进行分割和特征提取;初值较好情况下,精度和收敛性都不错

缺点对初始变换敏感,容易陷入局部最优解;只考虑了点与点距离,缺少对点云结构信息的利用

实际使用中的一些注意事项

ICP 比较依赖于变换初值,平移比较简单,直接用点云质心来估计;旋转初值的话可以手动调一个粗略值,或者沿每个轴的旋转进行采样、组合来尝试(不适合实时性应用);
点太多的话可以先降采样;
找到一些 anchor 点对(比如先用特征点匹配),可以帮助加速收敛;
对应用场景引入一些合理假设,比如限制旋转、平移的范围,变换自由度数量等
ICP改进算法名称简介

Point-to-Plane ICP

原始 ICP 算法的代价函数中使用的 point-to-point 距离,point-to-plane 则是考虑源顶点到目标顶点所在面的距离,比起直接计算点到点距离,考虑了点云的局部结构,精度更高,不容易陷入局部最优;但要注意 point-to-plane 的优化是一个非线性问题,速度比较慢,一般使用其线性化近似;

Plane-to-Plane ICP

point-to-plane 只考虑目标点云局部结构, plane-to-plane 顾名思义就是也考虑源点云的局部结构,计算面到面的距离

Generalized ICP (GICP)

综合考虑 point-to-pointpoint-to-plane plane-to-plane 策略,精度、鲁棒性都有所提高;

Normal Iterative Closest Point (NICP)

考虑法向量和局部曲率,更进一步利用了点云的局部结构信息,其论文中实验结果比 GICP 的性能更好。

七、本文的扩展——常见点集配准技术:RPM

Robust point matchingRPM

RPM算法的核心是通过软对应和确定性退火过程来逐步达到精确匹配:

1.软对应:RPM算法中每个点可以部分地与多个点对应,这种软对应由一个“对应矩阵”来表示,该矩阵中的每个元素表示两点之间的匹配程度。

2.确定性退火:算法引入了退火技术,通过逐渐减小“温度”参数来从宽松的匹配逐步过渡到严格的匹配。高温度允许点对之间有更大的自由度,随着温度的降低,算法逐步锁定更精确的对应关系。

3.变换优化:在每个退火步骤中,算法通过优化变换参数(旋转、缩放、平移)来最小化配准误差,通常使用迭代最小化方法。

优点:由于引入了退火过程,RPM算法不如ICP算法那样依赖于初始位置,能够从较差的初始状态恢复;软对应机制使得RPM能够处理局部遮挡问题,不要求两个点集具有完全相同的点数或结构。

缺点RPM算法的计算复杂度高于传统ICP算法,尤其是在点集较大时,计算量和时间消耗显著增加。算法效果很大程度上依赖于退火过程中温度下降策略和其他参数的选择,这些参数的设定需要根据具体问题仔细调整,可能需要较多的实验和专业知识。

八、本文的扩展——常见点集配准技术:KC

Kernel correlationKC

KC算法的核心是利用核函数来转换和比较数据集,其基本步骤如下:

1.数据转换:使用核函数将原始数据映射到一个高维特征空间。常用的核函数包括高斯核、多项式核等

2.核相关计算:在特征空间中,通过计算两个映射后的数据集的内积(或相似度)来评估它们的相关性。核相关的值越高,表示两个数据集越相似。

3.归一化:通常需要对核相关值进行归一化处理,确保结果的稳定性和可比性。

优点:通过使用核函数,KC算法能有效处理非线性的数据,显著提高模型的灵活性和适用范围提供了一种在复杂数据集间进行深入相似度评估的有效工具。

缺点:映射数据到高维空间可能导致计算成本高算法性能在很大程度上依赖于核函数的选择,不恰当的核函数可能导致性能不佳参数敏感:核参数(如在高斯核中的带宽)的选择对结果有显著影响,需要仔细调整以获得最佳性能。

九、本文的扩展——常见点集配准技术:CPD

Coherent point driftCPD

CPD算法的核心思想基于概率方法,将点集配准问题视为一个概率密度估计问题。算法的基本步骤包括:

1.概率模型:将一个点集视为高斯混合模型(GMM)中心的“静态”点集,而另一个点集则被视为来自这个模型的“动态”样本。

2.期望最大化(EM)算法CPD使用EM算法来估计配准的参数。在期望步骤(E-step),算法计算每个点对模型中每个高斯成分的责任度(即该点来自某个高斯成分的概率)。在最大化步骤(M-step),根据这些责任度更新变换参数和GMM参数。

3.变换估计CPD支持刚体、仿射和非刚体变换,可以根据实际应用需求选择相应的模型进行点集配准。

优点:CPD算法对噪声和异常值具有很好的鲁棒性,可以有效处理不完整或部分遮挡的数据。支持多种类型的变换,包括刚体、仿射和非刚体变换无需手动标定或预处理,算法能够自动对点集进行有效配准。

缺点:由于涉及复杂的迭代计算和概率模型,CPD算法在处理大规模数据时可能会有较高的计算成本;算法性能在一定程度上依赖于参数的选择,如高斯混合模型的宽度参数等,这些参数需要根据具体的数据情况仔细调整在某些情况下,CPD算法可能需要较多的迭代次数才能收敛,特别是在点集规模较大或数据复杂度较高的情况下。

十、本文的扩展——常见点集配准技术的对比

参考文章:

点集配准技术(ICP、RPM、KC、CPD) - 算法小丑 - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/846675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Feature Manipulation for DDPM based Change Detection

基于去噪扩散模型的特征操作变化检测 文章提出了一种基于去噪扩散概率模型(DDPM)的特征操作变化检测方法。变化检测是计算机视觉中的经典任务,涉及分析不同时间捕获的图像对,以识别场景中的重要变化。现有基于扩散模型的方法主要…

C++ 习题精选(2)

目录 1. 验证回文串2. 字符串相乘 1. 验证回文串 题目描述:如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s&#xff…

Vue01-vue的简介

一、Vue是什么? 一套用于构建用户界面的渐进式javaScript框架。 构建用户界面: 渐进式: 目前Vue的地位:生态完善,国内前端工程师必备技能。 二、Vue的特点 一个XXX.vue就是一个组件,封装的概念&#xff0c…

threejs的三维前端项目用THREEPlaneGeometry创建平面几何体对象的方法

在 Three.js 中,可以使用THREE.PlaneGeometry类来创建平面几何体对象。THREE.PlaneGeometry类用于创建一个具有指定宽度和高度的平面几何体。 艾斯视觉作为行业ui设计与前端开发服务商很高兴能在这里与你共同探讨:以下是一个示例代码,展示了如…

文心一言 VS 讯飞星火 VS chatgpt (272)-- 算法导论20.2 7题

七、试说明如果 PROTO-vEB-MINIMUM 中的第 9 行被执行,则proto-vEB 结构为空。如果要写代码,请用go语言。 文心一言: 在 PROTO-vEB-MINIMUM 算法中,我们假设你指的是一个基于位向量(bit-vector)的扩展二进…

OSG学习记录

学习自OpenSceneGraph Quick Start Guide的中文版,建议学习书(比较全面) OSG的内存管理机制 程序保存一个指向根节点的指针,不保存场景图形中其他节点的指针。根节点将直接或间接地“引用”场景图形中的所有的节点。 当应用程序…

回溯算法 -- 77. 组合

目录 一.题目描述 二.解题思路 三.回溯三部曲 3.1确定递归函数的返回值以及参数 3.2回溯算法的终止条件 3.3确定单层循环搜索逻辑 四.具体的代码 一.题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案…

【Linux】进程间通信(System V IPC)

这节我们开始学习System V IPC方案。 分别是共享内存,消息队列与信号量 会着重讲解共享内存,但是消息队列与信号量只会说明一下原理。 原因:System V是新设计的一套标准 与文件的整合度不高只能进行本地通信 更何况,我们现在有…

若依开发-数据库修改密码

若依忘记密码 在SecurityUtils类添加 public static void main(String[] args) {System.out.println(SecurityUtils.encryptPassword("admin123"));}即可打印出加密后密码

探索安全之道 | 企业漏洞管理:从理念到行动

如今,网络安全已经成为了企业管理中不可或缺的一部分,而漏洞管理则是网络安全的重中之重。那么企业应该如何做好漏洞管理呢?不妨从业界标准到企业实践来一探究竟!通过对业界标准的深入了解,企业可以建立起完善的漏洞管…

谷歌发布文生视频模型——Veo,可生成超过一分钟高质量1080p视频

前期我们介绍过OpenAI的文生视频大模型-Sora 模型,其模型一经发布,便得到了大家疯狂的追捧。而Google最近也发布了自己的文生视频大模型Veo,势必要与OpenAI进行一个正面交锋。 Veo 是Google迄今为止最强大的视频生成模型。它可以生成超过一分…

JVM虚拟机性能监控工具

命令行工具 jps 虚拟机进程状况查询工具 jps(JVM Process Status Tool),可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称或者jar文件名,还有这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)。 # …

网页安全登陆的设计思路

对于Web网站来讲,不管是企业内容信息化系统,还是公共站点(博客、音视频站等),都有需要用户注册和登录的功能。用以识别用户、信息交互、信息隔离以及商业行为等场景。用户数据已成为网站的重要资产。保护用户信息(数据)是网站安全运行的关键任务。本文以用户安全登录的场…

521源码-网站源码-Thinkphp聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能/全开源运营版本

全开源运营版本聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能 都是去年买的,很多买的源码基本都下架了,详情还是套已经老站的,可能网上已经流传了点,不过还是不影响这个源码的牛逼所在 运营版本的聊天室&…

JVM之【运行时数据区2——堆】

三、堆(Heap) 1、什么是堆 在Java虚拟机(JVM)中,堆(Heap)是用于动态分配内存的区域。在Java程序运行时,所有对象和数组都是在堆中分配内存的。堆是Java内存模型的重要组成部分&…

21.Redis之分布式锁

1.什么是分布式锁 在⼀个分布式的系统中, 也会涉及到多个节点访问同⼀个公共资源的情况. 此时就需要通过 锁 来做互斥控制, 避免出现类似于 "线程安全" 的问题. ⽽ java 的 synchronized 或者 C 的 std::mutex, 这样的锁都是只能在当前进程中⽣效, 在分布式的这种多…

LabVIEW调用第三方硬件DLL常见问题及开发流程

在LabVIEW中调用第三方硬件DLL时,除了技术问题,还涉及开发流程、资料获取及与厂家的沟通协调。常见问题包括函数接口不兼容、数据类型转换错误、内存管理问题、线程安全性等。解决这些问题需确保函数声明准确、数据类型匹配、正确的内存管理及线程保护。…

C/C++开发,2024.x CLion安装,亲测有效

CLion 是一款专为 C 和 C 开发者设计的跨平台集成开发环境(IDE),提供了智能代码补全、代码分析、调试和 Git 集成等功能,以提高开发效率和代码质量。 1.下载安装c/c开发工具 CLion 先去官网下载,我这里下载的是最新版…

Re73 读论文:ULMFiT Universal Language Model Fine-tuning for Text Classification

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:Universal Language Model Fine-tuning for Text Classification 模型简称:ULMFiT 模型全名:Universal Language Model Fine-tuning ArXiv网址:https…

【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版6(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言方法一、使用excel配置表excel转txt文本读取txt数据按配置信息生成僵尸 方法二、使用ScriptableObject 配置关卡信息源码结束语 前言 本节主要是推荐两种实现配置关卡信息,并按表生成僵尸和关卡波次 方法一、使用…