当前位置: 首页 > news >正文

ICP问题 SVD方法推导(Markdown版)

目录

    • 1 问题描述
    • 2 解决方案

1 问题描述

利用SVD求解ICP问题的详细推导。

已知三维点集 P { P 1 , P 2 , ⋯   , P n } P\{P_1,P_2,\cdots,P_n\} P{P1,P2,,Pn}和三维点集 Q { Q 1 , Q 2 , ⋯   , Q n } Q\{Q_1,Q_2,\cdots,Q_n\} Q{Q1,Q2,,Qn},且这两个点集已经进行了匹配,求其变换矩阵 T T T
T = [ R t 0 1 ] (1) T=\begin{bmatrix} R & t\\ 0 & 1 \end{bmatrix} \tag{1} T=[R0t1](1)

2 解决方案

将上述问题用数学公式描述如下,
m i n R , t   ∑ i = 1 n ∥ Q i − ( R P i + t ) ∥ 2 = m i n R , t ∑ i = 1 n ( Q i − R P i − t ) T ( Q i − R P i − t ) (2) \underset{R,t}{min} \ \sum_{i=1}^n \Vert Q_i-(RP_i+t) \Vert^2=\underset{R,t}{min} \sum_{i=1}^n (Q_i-RP_i-t)^T(Q_i-RP_i-t) \tag{2} R,tmin i=1nQi(RPi+t)2=R,tmini=1n(QiRPit)T(QiRPit)(2)
又因为,
Q i − R P i − t = ( Q i − Q ˉ ) − R ( P i − P ˉ ) ⏟ A − t + Q ˉ − R P ˉ ⏟ B (3) Q_i-RP_i-t=\underbrace{(Q_i-\bar{Q})-R(P_i-\bar{P})}_{A} \underbrace{ -t+ \bar{Q}-R\bar{P} }_{B}\tag{3} QiRPit=A (QiQˉ)R(PiPˉ)B t+QˉRPˉ(3)

那么, ( Q i − R P i − t ) T ( Q i − R P i − t ) (Q_i-RP_i-t)^T(Q_i-RP_i-t) (QiRPit)T(QiRPit)可以表示为,
( Q i − R P i − t ) T ( Q i − R P i − t ) = ( A + B ) T ( A + B ) = A T A + A T B + B T A + B T B = A T A + B T B + 2 A T B (4) (Q_i-RP_i-t)^T(Q_i-RP_i-t)=(A+B)^T(A+B)=A^TA+A^TB+B^TA+B^TB \\ = A^TA+B^TB+2A^TB \tag{4} (QiRPit)T(QiRPit)=(A+B)T(A+B)=ATA+ATB+BTA+BTB=ATA+BTB+2ATB(4)
由于,
∑ i = 1 n 2 A T B = 2 ( ∑ i = 1 n A T ) B = 2 ( ∑ i = 1 n A ) T B (5) \sum_{i=1}^n2A^TB=2\Big(\sum_{i=1}^n A^T \Big)B=2\Big(\sum_{i=1}^nA \Big)^TB \tag{5} i=1n2ATB=2(i=1nAT)B=2(i=1nA)TB(5)
∑ i = 1 n A = ∑ i = 1 n { ( Q i − Q ˉ ) − R ( P i − P ˉ ) } = ( ∑ i = 1 n Q i − n Q ˉ ) − R ( ∑ i = 1 n P i − n P ˉ ) = 0 ⃗ − R ⋅ 0 ⃗ = 0 ⃗ (6) \sum_{i=1}^n A = \sum_{i=1}^n \Big\{ (Q_i-\bar{Q})-R(P_i - \bar{P}) \Big\} = \Big( \sum_{i=1}^n Q_i - n\bar{Q} \Big) - R\Big( \sum_{i=1}^nP_i - n\bar{P} \Big) = \vec{0} - R \cdot \vec{0} = \vec{0} \tag{6} i=1nA=i=1n{(QiQˉ)R(PiPˉ)}=(i=1nQinQˉ)R(i=1nPinPˉ)=0 R0 =0 (6)
故,公式(2)表示的优化问题,可以写成,
m i n R , t ∑ i = 1 n ( Q i − R P i − t ) T ( Q i − R P i − t ) = m i n R , t ∑ i = 1 n { ( Q i ′ − R P i ′ ) T ( Q i ′ − R P i ′ ) + ( Q ˉ − R P ˉ − t ) T ( Q ˉ − R P ˉ − t ) } (7) \underset{R,t}{min} \sum_{i=1}^n \Big( Q_i - RP_i-t \Big)^T(Q_i - RP_i - t) \\ = \underset{R,t}{min} \sum_{i=1}^n \Big\{ (Q_i'-RP_i')^T(Q_i'-RP_i') + (\bar{Q}-R\bar{P}-t)^T(\bar{Q}-R\bar{P}-t) \Big\} \tag{7} R,tmini=1n(QiRPit)T(QiRPit)=R,tmini=1n{(QiRPi)T(QiRPi)+(QˉRPˉt)T(QˉRPˉt)}(7)
其中 Q i ′ Q_i' Qi P i ′ P_i' Pi分别表示 Q i Q_i Qi P i P_i Pi的去中心坐标。

那么,公式(7)表示的优化问题可以进一步写成如下两个优化问题,
m i n R ∑ i = 1 n ( Q i ′ − R P i ′ ) T ( Q i ′ − R P i ′ ) (8) \underset{R}{min} \sum_{i=1}^n (Q_i'-RP_i')^T(Q_i'-RP_i') \tag{8} Rmini=1n(QiRPi)T(QiRPi)(8)
m i n R , t ∑ i = 1 n ( Q ˉ − R P ˉ − t ) T ( Q ˉ − R P ˉ − t ) = n   m i n R , t ( Q ˉ − R P ˉ − t ) T ( Q ˉ − R P ˉ − t ) (9) \underset{R,t}{min} \sum_{i=1}^n (\bar{Q}-R\bar{P}-t)^T(\bar{Q}-R\bar{P}-t) = n \ \underset{R,t}{min} (\bar{Q}-R\bar{P}-t)^T(\bar{Q}-R\bar{P}-t) \tag{9} R,tmini=1n(QˉRPˉt)T(QˉRPˉt)=n R,tmin(QˉRPˉt)T(QˉRPˉt)(9)

对于公式(8)所表示的优化问题,有,
( Q i ′ − R P i ′ ) T ( Q i ′ − R P i ′ ) = ( Q i ′ T − P i ′ T R T ) ( Q i ′ − R P i ′ ) = Q i ′ T Q i ′ − Q i ′ T R P i ′ − P i ′ T R T Q i ′ + P i ′ T R T R P i ′ = Q i ′ T Q i ′ − 2 Q i ′ T R P i ′ + P i ′ T P i ′ (10) (Q_i'-RP_i')^T(Q_i'-RP_i') = (Q_i'^T-P_i'^TR^T)(Q_i'-RP_i') \\ = Q_i'^TQ_i' - Q_i'^TRP_i'-P_i'^TR^TQ_i'+P_i'^TR^TRP_i' \\ = Q_i'^TQ_i'-2Q_i'^TRP_i'+P_i'^TP_i' \tag{10} (QiRPi)T(QiRPi)=(QiTPiTRT)(QiRPi)=QiTQiQiTRPiPiTRTQi+PiTRTRPi=QiTQi2QiTRPi+PiTPi(10)

故公式(8)的最优值 R ∗ R^* R相当于如下优化问题的解,
m a x R ∑ i = 1 n Q i ′ T R P i ′ = m a x R ∑ i = 1 n t r a c e ( Q i ′ T R P i ′ ) (11) \underset{R}{max} \sum_{i=1}^n Q_i'^TRP_i'=\underset{R}{max} \sum_{i=1}^n trace\Big( Q_i'^TRP_i' \Big) \tag{11} Rmaxi=1nQiTRPi=Rmaxi=1ntrace(QiTRPi)(11)
由于矩阵的迹具有性质 t r a c e ( A B ) = t r a c e ( B A ) trace(AB)=trace(BA) trace(AB)=trace(BA),故上式可以写成,
m a x R ∑ i = 1 n t r a c e ( R P i ′ Q i ′ T ) = m a x R   t r a c e ( R ∑ i = 1 n P i ′ Q i ′ T ) (12) \underset{R}{max} \sum_{i=1}^n trace\Big( RP_i'Q_i'^T \Big) = \underset{R}{max}\ trace\Big( R \sum_{i=1}^n P_i'Q_i'^T \Big) \tag{12} Rmaxi=1ntrace(RPiQiT)=Rmax trace(Ri=1nPiQiT)(12)
W = ∑ i = 1 n P i ′ Q i ′ T W=\sum_{i=1}^n P_i'Q_i'^T W=i=1nPiQiT,上式可以写成,
m a x R   t r a c e ( R W ) (13) \underset{R}{max} \ trace\Big( RW \Big) \tag{13} Rmax trace(RW)(13)

考虑到如下定理,


定理:若有正定矩阵 A A T AA^T AAT,则对于任意正定矩阵 B B B,有 t r a c e ( B A A T ) ≤ t r a c e ( A A T ) trace(BAA^T) \leq trace(AA^T) trace(BAAT)trace(AAT)


那么,依据上述定理,公式(13)的最优值 R ∗ R^{*} R满足,矩阵 R ∗ W R^*W RW是一个正定矩阵。不妨对矩阵 W W W进行奇异值分解,有,
W = U Σ V T (14) W = U\Sigma V^T \tag{14} W=UΣVT(14)
那么当矩阵 R R R取为 V U T VU^T VUT时, R W RW RW可以表示为,
R W = V U T ⋅ U Σ V T = V Σ V T = ( V Σ 1 2 ) ( V Σ 1 2 ) T (15) RW = VU^T \cdot U\Sigma V^T = V\Sigma V^T = \Big(V\Sigma^{\frac{1}{2}} \Big) \Big(V\Sigma^{\frac{1}{2}} \Big)^T \tag{15} RW=VUTUΣVT=VΣVT=(VΣ21)(VΣ21)T(15)
为正定矩阵,取最大值。

故,
R ∗ = V U T (16) R^* = VU^T \tag{16} R=VUT(16)
即证。

相关文章:

  • java基于ssm+vue+elementui的水果生鲜销售购物商城
  • kafka知识点总结
  • 【vue3】06. 跟着官网学习vue3
  • 任务十一 BERT
  • MyBatis实现多层级collection嵌套查询
  • Containerd【轻量级容器管理工具】
  • 计算机毕业设计ssm+vue基本微信小程序的图书馆座位管理系统
  • 腾讯核心高级架构师汇总Java全栈知识点笔记,“吃透”后成功上岸!
  • 169.多数元素
  • webpack拓展篇(六十七):webpack5 新特性解析
  • CF515E Drazil and Park【思维+线段树】
  • CodeForces 1717E【线性筛】
  • Java程序猿搬砖笔记(九)
  • ROS1云课→16机器人模型从urdf到xacro
  • 花好月圆│以代码寄相思,绘嫦娥之奔月
  • .pyc 想到的一些问题
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 2017届校招提前批面试回顾
  • Angularjs之国际化
  • css的样式优先级
  • IDEA 插件开发入门教程
  • Java基本数据类型之Number
  • Java应用性能调优
  • LeetCode29.两数相除 JavaScript
  • Linux链接文件
  • Mocha测试初探
  • Redis中的lru算法实现
  • Spring框架之我见(三)——IOC、AOP
  • vuex 笔记整理
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 聚簇索引和非聚簇索引
  • 前端性能优化--懒加载和预加载
  • 三分钟教你同步 Visual Studio Code 设置
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 思考 CSS 架构
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 在Mac OS X上安装 Ruby运行环境
  • 正则表达式
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (day 12)JavaScript学习笔记(数组3)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (转)EOS中账户、钱包和密钥的关系
  • *2 echo、printf、mkdir命令的应用
  • .NET Core 中的路径问题
  • .Net FrameWork总结
  • .NET NPOI导出Excel详解
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [BUG]vscode插件live server无法自动打开浏览器
  • [C#]C#学习笔记-CIL和动态程序集