SVD求解ICP问题

news2024/12/26 10:59:25

Background

ICP(Iterative Closest Point)问题,迭代最近点。已知一组三维点在两个坐标系中的坐标表示,求这两个坐标系之间的变换关系,称为ICP问题。

最开始想到这个问题,是想进行手眼标定,有一台机械臂以及一个深度相机,如何确定相机坐标系和机械臂坐标系之间的变换关系?后来想使用接口将机械臂末端移动至某个位姿,在深度相机图像中标出该点位置(通过专门的标注工具),这样得到了一个三维点在两个坐标系下的表示,这实际构建了一个方程组。设变换矩阵为 T T T,点在两个坐标系下的表示为 p , p ′ p,p' p,p,则方程组可表示为 p = T × p ′ p=T\times p' p=T×p

在这里插入图片描述

一维情形只需要一个点,就可以基本确定两个坐标系的关系;二维情形需要两个点,只有一个点的话,两个坐标系可以绕该点进行旋转;进而推之,三维情形至少需要三个点。但是,采样过程是存在误差的,因此需要增加数据点控制误差。

ICP问题也常常在SLAM和无人驾驶的研究中出现,也称为3D点云之间的匹配问题,传感器外参的标定问题。

SVD求解ICP问题

有两组点 P = { p 1 , p 2 , . . . , p n } P=\{p_1,p_2,...,p_n\} P={p1,p2,...,pn} P ′ = { p 1 ′ , p 2 ′ , . . . , p n ′ } P'=\{p_1',p_2',...,p_n'\} P={p1,p2,...,pn},需要找到到一组参数 { R , t } \{R,t\} {R,t}表示这两组点之间“最有可能的变换关系”,可以构建最小二乘问题如下

m i n R , t J = 1 2 ∑ i = 1 n ∣ ∣ p i − ( R p i ′ + t ) ∣ ∣ 2 s . t . R T R = I min_{R,t}J=\frac{1}{2}\sum_{i=1}^{n}||p_i-(Rp_i'+t)||^2\\ s.t. R^TR=I minR,tJ=21i=1n∣∣pi(Rpi+t)2s.t.RTR=I

Solution

首先,去质心坐标;
p = 1 n ∑ i = 1 n p i , p ′ = 1 n ∑ i = 1 n p i ′ p=\frac{1}{n}\sum_{i=1}^np_i,p'=\frac{1}{n}\sum_{i=1}^np_i' p=n1i=1npi,p=n1i=1npi
q i = p i − p , q i ′ = p i ′ − p ′ q_i=p_i-p,q_i'=p_i'-p' qi=pip,qi=pip

误差函数化简如下
J = 1 2 ∑ i = 1 n ∣ ∣ p i − ( R p i ′ + t ) ∣ ∣ 2 J=\frac{1}{2}\sum_{i=1}^{n}||p_i-(Rp_i'+t)||^2 J=21i=1n∣∣pi(Rpi+t)2
= 1 2 ∑ i = 1 n ∣ ∣ p i − ( R p i ′ + t ) − p + R p ′ + p − R p ′ ∣ ∣ 2 =\frac{1}{2}\sum_{i=1}^{n}||p_i-(Rp_i'+t)-p+Rp'+p-Rp'||^2 =21i=1n∣∣pi(Rpi+t)p+Rp+pRp2
= 1 2 ∑ i = 1 n ∣ ∣ ( q i − R q i ′ ) + ( p − R p ′ − t ) ∣ ∣ 2 =\frac{1}{2}\sum_{i=1}^{n}||(q_i-Rq_i')+(p-Rp'-t)||^2 =21i=1n∣∣(qiRqi)+(pRpt)2
= 1 2 ∑ i = 1 n ( ∣ ∣ q i − R q i ′ ∣ ∣ 2 + ∣ ∣ p − R p ′ − t ∣ ∣ 2 + 2 ( q i − R q i ′ ) ( p − R p ′ − t ) ) =\frac{1}{2}\sum_{i=1}^{n}(||q_i-Rq_i'||^2+||p-Rp'-t||^2+2(q_i-Rq_i')(p-Rp'-t)) =21i=1n(∣∣qiRqi2+∣∣pRpt2+2(qiRqi)(pRpt))

= 1 2 ∑ i = 1 n ( ∣ ∣ q i − R q i ′ ∣ ∣ 2 + ∣ ∣ p − R p ′ − t ∣ ∣ 2 ) + ( p − R p ′ − t ) ∑ i = 1 n ( q i − R q i ′ ) =\frac{1}{2}\sum_{i=1}^{n}(||q_i-Rq_i'||^2+||p-Rp'-t||^2)+(p-Rp'-t)\sum_{i=1}^{n}(q_i-Rq_i') =21i=1n(∣∣qiRqi2+∣∣pRpt2)+(pRpt)i=1n(qiRqi)

根据定义可得最后一项为0.

∑ i = 1 n ( q i − R q i ′ ) = ∑ i = 1 n q i − R ( ∑ i = 1 n q i ′ ) = ∑ i = 1 n ( p i − p ) − R ( ∑ i = 1 n ( p i ′ − p ′ ) ) = 0 \sum_{i=1}^{n}(q_i-Rq_i')=\sum_{i=1}^{n}q_i-R(\sum_{i=1}^{n}q_i')=\sum_{i=1}^{n}(p_i-p)-R(\sum_{i=1}^{n}(p_i'-p'))=0 i=1n(qiRqi)=i=1nqiR(i=1nqi)=i=1n(pip)R(i=1n(pip))=0

因此我们有

J = 1 2 ∑ i = 1 n ( ∣ ∣ q i − R q i ′ ∣ ∣ 2 + ∣ ∣ p − R p ′ − t ∣ ∣ 2 ) J=\frac{1}{2}\sum_{i=1}^{n}(||q_i-Rq_i'||^2+||p-Rp'-t||^2) J=21i=1n(∣∣qiRqi2+∣∣pRpt2)

t = p − R p ′ t=p-Rp' t=pRp可以使第二项为0,同时减少参数 t t t,得到

R ∗ = a r g R   m i n 1 2 ∑ i = 1 n ∣ ∣ q i − R q i ′ ∣ ∣ 2 R^*=arg_{R}\ min\frac{1}{2}\sum_{i=1}^{n}||q_i-Rq_i'||^2 R=argR min21i=1n∣∣qiRqi2

利用约束条件 R T R = I R^TR=I RTR=I,继续化简:

R ∗ = a r g R   m i n 1 2 ∑ i = 1 n ∣ ∣ q i − R q i ′ ∣ ∣ 2 R^*=arg_{R}\ min\frac{1}{2}\sum_{i=1}^{n}||q_i-Rq_i'||^2 R=argR min21i=1n∣∣qiRqi2

= a r g R   m i n 1 2 ∑ i = 1 n ( q i T q i + q i ′ T R T R q i ′ − 2 q i T R q i ′ ) =arg_{R}\ min\frac{1}{2}\sum_{i=1}^{n}(q_i^Tq_i+q_i'^TR^TRq_i'-2q_i^TRq_i') =argR min21i=1n(qiTqi+qiTRTRqi2qiTRqi)

= a r g R   m i n 1 2 ∑ i = 1 n ( q i T q i + q i ′ T q i ′ − 2 q i T R q i ′ ) =arg_{R}\ min\frac{1}{2}\sum_{i=1}^{n}(q_i^Tq_i+q_i'^Tq_i'-2q_i^TRq_i') =argR min21i=1n(qiTqi+qiTqi2qiTRqi)

= a r g R   m i n 1 2 ∑ i = 1 n ( q i T q i + q i ′ T q i ′ − 2 q i T R q i ′ ) =arg_{R}\ min\frac{1}{2}\sum_{i=1}^{n}(q_i^Tq_i+q_i'^Tq_i'-2q_i^TRq_i') =argR min21i=1n(qiTqi+qiTqi2qiTRqi)

= a r g R   m a x ∑ i = 1 n q i T R q i ′ =arg_{R}\ max\sum_{i=1}^{n}q_i^TRq_i' =argR maxi=1nqiTRqi

利用 a T b = t r ( b a T ) a^Tb=tr(ba^T) aTb=tr(baT)继续变形,得

∑ i = 1 n q i T ( R q i ′ ) = ∑ i = 1 n t r ( R q i ′ q i T ) = t r ( R ∑ i = 1 n q i ′ q i T ) \sum_{i=1}^{n}q_i^T(Rq_i')=\sum_{i=1}^{n}tr(Rq_i'q_i^T)=tr(R\sum_{i=1}^{n}q_i'q_i^T) i=1nqiT(Rqi)=i=1ntr(RqiqiT)=tr(Ri=1nqiqiT)

定义 W = ∑ i = 1 n q i q i ′ T W=\sum_{i=1}^nq_iq_i'^T W=i=1nqiqiT,至此ICP问题转化为
m a x   t r ( R W T ) s . t . R T R = I max\ tr(RW^T)\\ s.t. R^TR=I max tr(RWT)s.t.RTR=I

Method A

对矩阵 W W W进行奇异值分解(SVD)得到 W = U Σ V T W=U\Sigma V^T W=UΣVT,根据SVD的定义, U U U V V V均是 3 × 3 3\times 3 3×3的正交矩阵,根据约束, R R R矩阵也是。
t r ( R W T ) = t r ( R V Σ U T ) = t r ( S Σ U T ) tr(RW^T)=tr(RV\Sigma U^T)=tr(S\Sigma U^T) tr(RWT)=tr(RVΣUT)=tr(SΣUT)
其中 S = U V S=UV S=UV S S T = U V ( U V ) T = U V V T U T = I SS^T=UV(UV)^T=UVV^TU^T=I SST=UV(UV)T=UVVTUT=I也是正交矩阵(两个正交矩阵相乘结果仍是正交矩阵)。

S S S V V V展开写成3个列向量的组合的形式:

t r ( S Σ U T ) = t r ( σ 1 s 1 u 1 T + σ 2 s 2 u 2 T + σ 3 s 3 u 3 T ) tr(S\Sigma U^T)=tr(\sigma_1s_1u_1^T+\sigma_2s_2u_2^T+\sigma_3s_3u_3^T) tr(SΣUT)=tr(σ1s1u1T+σ2s2u2T+σ3s3u3T)

= s 1 u 1 T σ 1 + s 2 u 2 T σ 2 + s 3 u 3 T σ 3 =s_1u_1^T\sigma_1+s_2u_2^T\sigma_2+s_3u_3^T\sigma_3 =s1u1Tσ1+s2u2Tσ2+s3u3Tσ3

由于 S S S U U U均是正交矩阵,有

∣ ∣ s 1 ∣ ∣ = ∣ ∣ s 2 ∣ ∣ = ∣ ∣ s 3 ∣ ∣ = ∣ ∣ u 1 ∣ ∣ = ∣ ∣ u 2 ∣ ∣ = ∣ ∣ u 3 ∣ ∣ = 1 ||s_1||=||s_2||=||s_3||=||u_1||=||u_2||=||u_3||=1 ∣∣s1∣∣=∣∣s2∣∣=∣∣s3∣∣=∣∣u1∣∣=∣∣u2∣∣=∣∣u3∣∣=1

因此,满足不等式

s 1 u 1 T σ 1 + s 2 u 2 T σ 2 + s 3 u 3 T σ 3 ≤ σ 1 + σ 2 + σ 3 s_1u_1^T\sigma_1+s_2u_2^T\sigma_2+s_3u_3^T\sigma_3\leq \sigma_1+\sigma_2+\sigma_3 s1u1Tσ1+s2u2Tσ2+s3u3Tσ3σ1+σ2+σ3

∀ s i , u i \forall s_i,u_i si,ui同向时,等式成立。此时, S = U S=U S=U,即 R V = U RV=U RV=U R = U V T R=UV^T R=UVT

因此,我们得到 R R R的最优解就是 W W W矩阵SVD得到两个正交矩阵 U U U V T V^T VT的乘积。

Method B

这个问题形式和PCA十分相近,PCA最终转化得到问题是
m a x u   u T S u s . t .   u T u = 1 max_{u}\ u^TSu\\ s.t.\ u^Tu=1 maxu uTSus.t. uTu=1
这个可以通过拉格朗日乘子法求解,对上面的问题套用。

设拉格朗日函数为 L ( R , λ ) = t r ( R ∑ i = 1 n q i ′ q i T ) − λ ( R T R − I ) \mathcal{L}(R,\lambda)= tr(R\sum_{i=1}^{n}q_i'q_i^T)-\lambda(R^TR-I) L(R,λ)=tr(Ri=1nqiqiT)λ(RTRI)

R R R求导得 ∇ L ( R , λ ) = ∑ i = 1 n q i q i ′ T − 2 λ R \nabla\mathcal{L}(R,\lambda)=\sum_{i=1}^nq_iq_i'^T-2\lambda R L(R,λ)=i=1nqiqiT2λR,令 ∇ = 0 \nabla=0 =0,得到

(矩阵求导 ∇ A t r ( A B ) = B T , ∇ A ( A T A ) = 2 A \nabla_A tr(AB)=B^T,\nabla_A(A^TA)=2A Atr(AB)=BT,A(ATA)=2A

R = 1 2 λ ∑ i = 1 n q i q i ′ T = 1 2 λ W = 1 2 λ U Σ V T R=\frac{1}{2\lambda}\sum_{i=1}^nq_iq_i'^T=\frac{1}{2\lambda}W=\frac{1}{2\lambda}U\Sigma V^T R=2λ1i=1nqiqiT=2λ1W=2λ1UΣVT

代入 R T R = I R^TR=I RTR=I得到

1 4 λ 2 U Σ V T ( U Σ V T ) T = U Σ 2 4 λ 2 U T = I \frac{1}{4\lambda^2}U\Sigma V^T(U\Sigma V^T)^T=U\frac{\Sigma^2}{4\lambda^2}U^T=I 4λ21UΣVT(UΣVT)T=U4λ2Σ2UT=I

利用 U U U为正定矩阵的性质得 Σ 2 4 λ 2 = I \frac{\Sigma^2}{4\lambda^2}=I 4λ2Σ2=I Σ = 2 λ I \Sigma=2\lambda I Σ=2λI

因此, R = 1 2 λ U Σ V T = 1 2 λ U ( 2 λ I ) V T = U V T R=\frac{1}{2\lambda}U\Sigma V^T=\frac{1}{2\lambda}U(2\lambda I)V^T=UV^T R=2λ1UΣVT=2λ1U(2λI)VT=UVT

通过拉格朗日乘子法可以得到相同的结果。

Reference

用SVD求解ICP问题的完整证明:https://zhuanlan.zhihu.com/p/108858766

SVD求解ICP问题:https://zhuanlan.zhihu.com/p/188668384

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

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

相关文章

头歌c语言实训项目-综合案例课外练习:大奖赛现场统分

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 第1关:大奖赛现场统分 题目: 代码思路: 代码表示: 第1关…

【看图识文】tesseract.js@4.0.2

看图识文 介绍示例一示例二示例三示例四示例五示例六 介绍 该库用于识别并获取图片上的文字,支持多种语言。对英文识别度非常高,但是对中文的识别度非常一般。需要单独训练对应的中文库。对白纸黑字的合同文识别度还不错,其他的都不太好。 …

Android之编写申请权限库PermissionX

比如要实现拨打电话的功能,一般我们要编写如下Android运行时权限API class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)if(ContextCom…

日撸 Java 三百行day35

文章目录 说明day35 图的 m 着色问题1.问题描述2.思路2.代码 说明 闵老师的文章链接: 日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护:https://github.com/fulisha-ok/sampledata day3…

JUC安全/非安全容器

一、JUC java.util.concurrent下的类就叫JUC类,JUC下典型的类有: 1.ReentrantLock可重入锁 2.Semaphore信号量 3.CountDownLatch计数器 4.CyclicBarrier循环屏障 二、线程安全&非安全容器 2.1非线性安全容器 2.2线性安全容器 三、关于HashMap ha…

【谷歌浏览器 -- Vimium 常用快捷键】

文章目录 1.1.1 标签页管理1.1.2 网页操作1.1.3 打开链接1.1.4 搜索1.1.5 自定义搜索引擎短语1.1.6 Vimimu 使用注意事项 Vimium 是一款用键盘控制 Chrome 浏览器的 Chrome 插件, 可以在 Chrome 应用商店下载到. 下面列出个人比较习惯使用的几个快捷键。 1.1.1 标签页管理 [ x…

【C语言】基础语法4:函数和递归

上一篇:控制流程结构 下一篇:数组和指针 ❤️‍🔥前情提要❤️‍🔥   欢迎来到C语言基本语法教程   在本专栏结束后会将所有内容整理成思维导图(结束换链接)并免费提供给大家学习,希望大家…

Cookie、Session、Token的区别

1 网站交互体验升级 1.1 无状态的 http 协议 HTTP 无状态协议,是指协议对于业务处理没有记忆能力,之前做了啥完全记不住,每次请求都是完全独立互不影响的,没有任何上下文信息。 缺少状态意味着如果后续处理需要前面的信息&…

基于蛋白-配体复合物构建药效团的药物设计(Pharmacophore)

基于蛋白-配体复合物构建药效团的药物设计(Pharmacophore) step 1.蛋白-配体复合物准备 点击File-->Import Structures导入之前已经下载好的1IEP.pdb(Abl蛋白和Imatinib的晶体复合物) 蛋白准备:点击Tasks--->…

【数据集实例】CMIP6气候模式数据下载-以河东地区为例

1 数据准备 主要根据研究区域等,介绍下载数据需求。 1.1 研究区域 以甘肃省河东地区为例,分区图如下所示: 数据时间范围如下所示: 历史时段:1970-2014年(共44年)预估时段:2015-2100年此外,根据研究内容,确定下载的变量为: 日尺度降水:缩写为pr日尺度最高/最低温…

OrCAD创建原理图库

OrCAD创建原理图库 概述常规器件建库方法大封装器件建库基于pinout表格创建原理图库导入方法: 通过fsp软件导入fpga原理图库 概述 原理图库是硬件设计的基本工作,每个新人都要先学会建库,才能开始画图,本文主要介绍几种常用的建库…

Linux多线程-4

在了解完多线程的绝大部分概念之后,我们本篇博客作为Linux多线程中的最后一篇博客,来对其中剩余内进行一个收尾。 目录 1.线程池 1.1引入 1.2原理 1.3优点 1.4实现 2.单例模式 2.1内容 2.2原理 2.3实现 2.3.1饿汉模式实现 2.3.2懒汉模式实现…

Web3技术入门向科普

Web3是指下一代互联网,它基于区块链技术,将各种在线活动更加安全、透明和去中心化。Web3是一个广义的概念,它包括了很多方面,如数字货币、去中心化应用、智能合约等等。在这篇文章中,我们将重点讨论Web3的入门知识&…

Opencv+Python笔记(四)图像的形态学处理

1.腐蚀与膨胀 膨胀用来处理缺陷问题,把缺陷填补掉,提高亮区面积; 腐蚀用来处理毛刺问题,把毛刺腐蚀掉,降低亮区面积。 腐蚀操作可以消除噪点,同时消除部分边界值,导致目标图像整体缩小。 膨胀…

轻松掌握安装k8s官方可视化界面工具知识点

轻松掌握安装k8s官方可视化界面工具知识点 1、安装 1、安装资源 kubernetes官方提供的可视化界面 https://github.com/kubernetes/dashboard 执行以下命令 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml…

RocketMq集群搭建

各个角色介绍: producer:消息的发送者;举例:发信者consumer:消息的接受者;举例:收信者broker:暂存和传输消息;举例:邮局NameServer:管理Broker&am…

PWM输出实验

实验内容 使用TIM3来产生PWM输出 使用TIM3的通道2,把通道2重映射到PB5.产生PWM来控制DS0的亮度。 PWM简介 脉冲宽度调制(PWM),简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种有效方法。 脉冲波…

excle表格打印相关问题

ps:无论是打印word,还是打印excel, 最后最好都保存成pdf,再打印。 ps:无论是打印word,还是打印excel, 最后最好都保存成pdf,再打印。 ps:无论是打印word,还是打印excel, 最后最好都保存成pdf,再打印。 …

Android修改头像之拍照、从相册选择、裁剪

手写一个修改头像的需求,头像图片支持手机拍照裁剪和从相册选择图片裁剪; 实现效果: 本节主要内容: 1)头像修改对话框实现; 2)调用系统相机拍照; 3)自定义图片裁剪页…

centos7 配置LNMP环境

文章目录 LNMP环境的搭建LNMP工作流程FastCGI接口配置LNMP部署环境配置环境测试安装 Discuz LNMP环境的搭建 随着我们 Nginx web 服务器的流行,又出现了我们叫做 LNMP 的一种新的 web 环境服务组合。LNMP 就是 Linux Nginx Mysql PHP 等首字母的缩写。现在&…