计算两个对应点集之间的旋转矩阵R和转移矩阵T

这篇文章的相应数学推到在这个地方,有兴趣的可以瞧一瞧计算两个点集合的旋转矩阵R和T的数学推导
假设有两个点集A和B,且这两个点集合的元素数目相同且一一对应。为了寻找这两个点集之间的旋转矩阵 R R R和转移矩阵 t t t。可以将这个问题建模成如下的公式:
B = R ∗ A + t B = R*A+t B=RA+t
为了寻找 R R R t t t,通常需要一下三个步骤:

  • 计算点集合的中心点
  • 将点集合移动到原点,计算最优旋转矩阵 R R R
  • 计算转移矩阵 t t t

计算中心点

P = [ x y z ] μ A = 1 N ∑ i = 1 N P A i μ B = 1 N ∑ i = 1 N P B i P = \left[ \begin{matrix} x\\ y \\ z\end{matrix} \right] \\ \mu_A = \frac{1}{N} \sum_{i=1}^{N} P_{A}^i \\ \mu_B = \frac{1}{N} \sum_{i=1}^{N} P_{B}^i P=xyzμA=N1i=1NPAiμB=N1i=1NPBi

将点集合移动到原点,计算最优旋转矩阵 R R R

为了计算旋转矩阵 R R R,需要消除转移矩阵 t t t的影响,所以我们首先需要将点集重新中心化,生成新点集合 A ′ A' A B ′ B' B,然后计算性的点集之间的协方差矩阵:

点集重新中心化

A i ′ = { P A i − μ A } B i ′ = { P B i − μ B } A'_i = \{ P_A^i-\mu_A\} \\ B'_i = \{ P_B^i-\mu_B \} Ai={PAiμA}Bi={PBiμB}
注意其中的, P A i P_A^i PAi 、$ P_B^i$ 、 μ A \mu_A μA μ B \mu_B μB不是标量是向量。

计算点集之间的协方差矩阵H

H = ∑ i = 1 N A i ′ B i ′ T = ∑ i = 1 N ( P A i − μ A ) ( P B i − μ B ) T H = \sum_{i=1}^{N}A_{i}^{'} {B_{i}^{'}}^T \\ = \sum_{i=1}^{N} (P_A^i-\mu_A)(P_B^i-\mu_B)^T H=i=1NAiBiT=i=1N(PAiμA)(PBiμB)T
通过SVD方法获得矩阵的 U U U S S S V V V,可以计算点集之间的旋转矩阵 R R R

[ U , S , V ] = S V D ( H ) R = V U T \left[ U,S,V\right] = SVD(H) \\ R = VU^T [U,S,V]=SVD(H)R=VUT

计算转移矩阵 t t t

最后,通过 R R R可以获得转移矩阵 t t t
t = − R × μ A + μ B t = -R\times \mu_A + \mu_B t=R×μA+μB

下面通过python代码编写一个小例子验证一下上面的公式。
下面这个例子,首先通过随机函数生成两个三维点集A,旋转矩阵 R R R t t t。通过公式 B = R A T + t B=RA^T+t B=RAT+t获得新的点集B。然后通过上述的方法计算点集A和B之间的旋转矩阵 R ′ R' R t ’ t’ t,通过公式 B ′ = R ′ A T + t ′ B'=R'A^T+t' B=RAT+t生成新的点集合B’。并计算两个点集合之间的RMSE。

from numpy import *
from math import sqrt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as pltdef rigid_transform_3D(A, B):assert len(A) == len(B)N = A.shape[0];mu_A = mean(A, axis=0)mu_B = mean(B, axis=0)AA = A - tile(mu_A, (N, 1))BB = B - tile(mu_B, (N, 1))H = transpose(AA) * BBU, S, Vt = linalg.svd(H)R = Vt.T * U.Tif linalg.det(R) < 0:print "Reflection detected"Vt[2, :] *= -1R = Vt.T * U.Tt = -R * mu_A.T + mu_B.Treturn R, tif __name__=='__main__':R = mat(random.rand(3,3))t = mat(random.rand(3,1))U,S,Vt = linalg.svd(R)R = U*Vtif linalg.det(R) < 0:Vt[2,:]*=-1R = U*Vtn = 10A = mat(random.rand(n,3))B = R*A.T + tile(t,(1,n))B = B.Tret_R, ret_t = rigid_transform_3D(A,B)A2 = (ret_R*A.T)+ tile(ret_t,(1,n))A2 =A2.Terr = A2-Berr = multiply(err,err)err = sum(err)rmse = sqrt(err/n)print "points A2"print A2print ""print "points B"print Bprint ""print rmsefig = plt.figure()ax=fig.add_subplot(111,projection='3d')ax.scatter(A[:,0],A[:,1],A[:,2])ax.scatter(B[:,0],B[:,1],B[:,2],s=100,marker='x')ax.scatter(A2[:,0],A2[:,1],A2[:,2],s=100,marker= 'o')plt.legend()plt.show()

通过上述代码生成的点集 B ′ B' B B B B中的所有元素如下所示:

points A2
[[0.65985419 1.60528398 1.38340275][0.92739301 1.68052107 0.90692937][0.3398634  1.20672748 1.24869353][0.76117272 1.46282089 1.35712503][0.45657103 1.17657746 0.9993309 ][0.86068981 1.76370772 0.53447625][0.46723696 0.98764769 1.06947054][0.67152812 1.00675099 0.73363394][0.3102857  1.23971537 0.86977264][0.495524   1.10873545 0.93223688]]points B
[[0.65985419 1.60528398 1.38340275][0.92739301 1.68052107 0.90692937][0.3398634  1.20672748 1.24869353][0.76117272 1.46282089 1.35712503][0.45657103 1.17657746 0.9993309 ][0.86068981 1.76370772 0.53447625][0.46723696 0.98764769 1.06947054][0.67152812 1.00675099 0.73363394][0.3102857  1.23971537 0.86977264][0.495524   1.10873545 0.93223688]]

上面小程序的可视化结果如下所示。其中,绿色的圆球和红色的"X"分别表示利用上述方法生成点集 B ′ B' B B B B。蓝色的小圆球表示点集合 A A A
这里写图片描述

【引用】

  1. Finding optimal rotation and translation between corresponding 3D points

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

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

相关文章

diag矩阵(Diag矩阵计算公式)

A&#xff1d;diag(a1,a2..an)是表示对角矩阵吗&#xff1f;书上没有明确? 是的,其中ai表示在第i行第i列的数是ai,其余都是0 对角行列式的读法对角行列式(对角矩阵的行列式)可记为-diag( 对所有的数学符号都要考虑音(读),形(写),意(内涵), 其中读和写都是为了记载和交流, |d…

澳洲将推新支付系统 实现跨行实时转账

澳洲准备在国庆日&#xff08;Australia Day&#xff09;后推出新支付系统&#xff0c;实现不同银行间实时转账&#xff0c;有望淘汰BSB电汇清算网络编码。 据《悉尼先驱晨报》报道&#xff0c;2012年时&#xff0c;澳洲对支付基础设施进行了审查&#xff0c;促使新支付平台…

LinuxUnix time时间戳的处理转换函数

linux下的时间函数 我们在编程中可能会经常用到时间&#xff0c;比如取得系统的时间&#xff08;获取系统的年、月、日、时、分、秒&#xff0c;星期等&#xff09;&#xff0c;或者是隔一段时间去做某事&#xff0c;那么我们就用到一些时间函数。 linux下存储时间常见的有两种…

澳洲最热门职业,护士排第一,医生竟然不如程序员?

2022澳洲最新的职业紧缺名单出炉了&#xff0c;令人惊讶的是护士竟然排行第一名&#xff0c;可见澳洲的医疗人力资源紧缺的问题。 既然人力资源紧缺&#xff0c;那么首当其冲的医生作为高学历且同属医疗行业的代表理应收到重视&#xff0c;然而令人意外的是&#xff0c;通过榜单…

走出腾讯和阿里,大厂员工转型记

击上方“码农突围”&#xff0c;马上关注&#xff0c;每天早上8:50准时推送 真爱&#xff0c;请置顶或星标 编辑 | 熊腿腿 作者 | 婷婷的勇敢世界 脉脉研究院的《人力迁徙&#xff1a;2019》显示&#xff0c;过去的一年里&#xff0c;互联网公司出来的人&#xff0c;大部分…

澳洲社区宜居指数:首都第一西澳垫底

澳洲一向被认为是充满安宁与希望的土地&#xff0c;然而社区相关数据可能颠覆这一看法。 首都领地社区宜居程度被评为全澳第一&#xff08;澳洲新闻集团图片&#xff09; 据澳洲新闻集团报道&#xff0c;澳洲社区理事会&#xff08;Community Council for Australia&#xff09…

你是如何转行的?转行容易吗?

你是如何转行的&#xff1f;转行容易吗&#xff1f; 没考上大学&#xff0c;也不喜欢复读。 特别不喜欢父母从小说的&#xff0c;考不上大学没有出路的说法。 所以心里头一直想的就是&#xff0c;考不上大学有什么大不了的。 但是什么都不会&#xff0c;于是读了个自考。 电…

澳洲游戏市场分析

一、 全球游戏市场概览 1.1 全球游戏市场规模逐渐扩大,2020年游戏利润可达800亿美元 全球游戏市场规模保持逐年扩大的趋势。2020年预计全球游戏市场份额将达到1593亿美元。 据Deloitte的《2020科技、传媒和电信行业预测》,2020年智能手机增值营收的前三大来源为手机广告、应…

澳洲大火可视化

前言 小编找到一些数据&#xff0c;在接下来的文章中可能会连续推出几篇数据分析可视化的&#xff0c;大概十几个项目吧&#xff0c;数据集来自【凹凸数据】这个公众号的文章的推荐: https://mp.weixin.qq.com/s/j2dnxFaO1WYVJJAkBg_Hxg 这次我们来做一个澳洲大火可视化的案例…

澳洲服务器拳头账号怎么注册,云顶之弈手游澳服账号怎么注册 澳洲服拳头账号注册方法分享...

云顶之弈手游澳服账号怎么注册 澳洲服拳头账号注册方法分享 2020-02-10 18:25 作者&#xff1a;佚名 来源&#xff1a;本站整理 浏览&#xff1a;17932 评论&#xff1a;1 云顶之弈手游版最近在澳洲上线了&#xff0c;很多玩家想要提前体验却不知道该怎么注册账号&#xff0c;下…

澳洲语言成绩等级c,D比C好—说说澳洲的学位成绩分几等

原标题&#xff1a;D比C好—说说澳洲的学位成绩分几等 澳洲的成绩&#xff0c;三言两语道不尽。即便是学霸拿着全班第一的成绩单&#xff0c;不解释一番只怕别人也要一头雾水。 那么&#xff0c;扑朔迷离的澳洲成绩等级究竟面目如何&#xff1f;一张表格道尽全部。 图中可以看出…

「转行人工智能」是否前景一片光明?

「转行人工智能」是否前景一片光明&#xff1f; https://mp.weixin.qq.com/s/ZHmMvIemM9tqUwA4LdlxVw 知乎科技板块上有一类问题经久不衰&#xff1a;xxx是否可以转行做AI&#xff1f;代表性的问题有&#xff1a; 锅炉设计转行 AI&#xff0c;可行吗&#xff1f;28岁女孩想转行…

计算机 澳洲 博士后 要考雅思么,博士后移民澳大利亚(澳洲做科研博士后)

我是哈尔滨工业大学的博士在读&#xff0c;想毕业后去澳洲读博士后或者找工作移民&#xff0c; 你的条件是可以的&#xff0c;只要你到时候找的工作在澳洲移民局列出的工种之内就可以办理移民。总的来说你如果在那边博士毕业了之后留下来是非常容易的。 可以的&#xff0c;并不…

澳洲语言成绩等级c,澳洲本科成绩等级介绍 怎么划分的

想去澳洲留学本科&#xff0c;就要了解澳洲本科的一些情况&#xff0c;特别是成绩方面的&#xff0c;只有了解清楚才能顺利的通过考试最后拿到毕业证。那你知道澳洲跟国内的的成绩等级跟划分标准与国内是完全不一样的吗&#xff0c;今天就让蔚蓝留学的老师带大家了解一下澳洲本…

澳洲计算机专业几年,澳洲计算机硕士几年

澳洲计算机硕士几年 计算机硕士学制根据学校的课程不同安排有所区别&#xff0c;一般是1.5-2年时间。 澳洲计算机硕士前景 在澳洲留学的专业选择中&#xff0c;计算机专业一直是仅次于会计专业的最热门专业之一&#xff0c;也是热门的移民专业之一。据立思辰留学360介绍&#x…

企业数字化转型技术盘点及趋势展望

作者 | 张家驹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 数字化转型是指采用数字技术将非数字产品、服务或运营数字化&#xff0c;其实施目标是通过创新、发明、提升客户体验或效率来增加价值。 回顾历史&#xff0c;数字化曾特指使用模数转换器将模拟信息转…

因果推断类问题探索实践

作者 | 陆春晖 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 近些年来&#xff0c;随着机器学习和深度神经网络等人工智能技术的高速发展&#xff0c;人们对数据的理解和应用不再仅仅满足于拟合的准确性&#xff0c;而是开始探索数据内部更深层次的逻辑关…

你的专属音乐生成器「GitHub 热点速览」

作者&#xff1a;HelloGitHub-小鱼干 如果你制作视频&#xff0c;一定会碰到配乐的问题。虽然网上找的一些免费配乐能勉强满足需求&#xff0c;但是如果有个专属的配乐生成器&#xff0c;根据你的视频画面生成对应配乐是不是不错呢&#xff1f;audiocraft 也许能帮助你&#xf…

开源大数据可观测性方案实践 - 助力集群运维智能化、便捷化

前言 在过去的20年时间&#xff0c;大数据技术蓬勃发展&#xff0c;从最开始大公司内部的秘密武器&#xff0c;到现在广泛作用于几乎所有行业。通过使用大数据技术分析存量和实时的数据&#xff0c;能够更加全面清晰地洞察商业的本质。在商业节奏日益加快和发展越来越迅猛的今…

英美TOP名校对IB的申请要求汇总

英美TOP名校对IB的申请要求汇总 英国大学 剑桥大学 IB要求 40-42分&#xff08;满分45&#xff09;&#xff0c;HL要求为776分。 学校可能要求申请者的某些科目成绩为7&#xff0c;视不同专业和学院而定。 对任何要求数学的专业&#xff0c;申请者需选Analysis and Approa…