这个算是ICP算法中的一个关键步骤,单独拿出来看一下。

算法流程如下:

1.首先得到同名点集P和X。

2.计算P和X的均值up和ux。

3.由P和X构造协方差矩阵sigma。

4.由协方差矩阵sigma构造4*4对称矩阵Q。

5.计算Q的特征值与特征向量。其中Q最大特征值对应的特征向量即为最佳旋转向量q。

6.通过四元数q得到旋转矩阵R。

7.根据R计算最佳平移向量qr。

具体公式我就不贴图了,可以参考这篇“ICP算法在点云配准中的应用”论文的3.1节。

处理效果如下:

原始点集:

其中蓝点为原始点集,红点为旋转平移后的点集。

配准后点集:

计算得到的旋转平移矩阵,通过对蓝点集进行转换得到绿点集,比较红点集与绿点集是否基本一致。

matlab代码如下:

clear all;
close all;
clc;%生成原始点集
X=[];Y=[];Z=[];
for i=-180:2:180for j=-90:2:90x = i * pi / 180.0;y = j * pi / 180.0;   X =[X,cos(y) * cos(x)];Y =[Y,sin(y) * cos(x)];Z =[Z,sin(x)]; end
end
P=[X(1:3000)' Y(1:3000)' Z(1:3000)'];%生成变换后点集
i=0.5;j=0.3;k=0.7;
Rx=[1 0 0;0 cos(i) -sin(i); 0 sin(i) cos(i)];
Ry=[cos(j) 0 sin(j);0 1 0;-sin(j) 0 cos(j)];
Rz=[cos(k) -sin(k) 0;sin(k) cos(k) 0;0 0 1];
R=Rx*Ry*Rz;
X=P*R + [0.2,0.3,0.4];plot3(P(:,1),P(:,2),P(:,3),'b.');
hold on;
plot3(X(:,1),X(:,2),X(:,3),'r.');%计算点集均值
up = mean(P);
ux = mean(X);P1=P-up;
X1=X-ux;%计算点集协方差
sigma=P1'*X1/(length(X1));
sigma_mi = sigma - sigma';
M=sigma+sigma'-trace(sigma)*[1,0,0;0,1,0;0,0,1];%由协方差构造4*4对称矩阵
Q=[trace(sigma) sigma_mi(2,3) sigma_mi(3,1) sigma_mi(1,2);sigma_mi(2,3) M(1,1) M(1,2) M(1,3);sigma_mi(3,1) M(2,1) M(2,2) M(2,3);sigma_mi(1,2) M(3,1) M(3,2) M(3,3)];%计算特征值与特征向量
[x,y] = eig(Q);
e = diag(y);%计算最大特征值对应的特征向量
lamda=max(e);
for i=1:length(Q)if lamda==e(i)break;end
end
q=x(:,i);q0=q(1);q1=q(2);q2=q(3);q3=q(4);%由四元数构造旋转矩阵
RR=[q0^2+q1^2-q2^2-q3^2 ,2*(q1*q2-q0*q3), 2*(q1*q3+q0*q2);2*(q1*q2+q0*q3), q0^2-q1^2+q2^2-q3^2, 2*(q2*q3-q0*q1);2*(q1*q3-q0*q2), 2*(q2*q3+q0*q1), q0^2-q1^2-q2^2+q3^2];%计算平移向量
qr=ux-up*RR';%验证旋转矩阵与平移向量正确性
Pre = P*RR'+qr;figure;
plot3(P(:,1),P(:,2),P(:,3),'b.');
hold on;
plot3(X(:,1),X(:,2),X(:,3),'r.');plot3(Pre(:,1),Pre(:,2),Pre(:,3),'go');

关注公众号: MATLAB基于模型的设计 (ID:xaxymaker) ,每天推送MATLAB学习最常见的问题,每天进步一点点,业精于勤荒于嬉。

打开微信扫一扫哦!

转载于:https://www.cnblogs.com/52geek/p/10127499.html

matlab练习程序(对应点集配准的四元数法)相关推荐

  1. 如何在matlab中表达点集,matlab练习程序(点集配准的SVD法)

    上一篇博客中我们使用了四元数法计算ICP. 本篇我们使用SVD计算ICP. 下面是<视觉slam十四讲>中的计算方法: 计算步骤如下: 我们看到,只要求出了两组点之间的旋转,平移是非常容易 ...

  2. matlab点集配准,matlab练习程序(对应点集配准的四元数法)

    clear all; close all; clc; %生成原始点集 X=[];Y=[];Z=[]; for i=-180:2:180 for j=-90:2:90 x = i * pi / 180. ...

  3. matlab多元回归程序,多元回归程序MATLAB程序

    <多元回归程序MATLAB程序>由会员分享,可在线阅读,更多相关<多元回归程序MATLAB程序(45页珍藏版)>请在人人文库网上搜索. 1.程序MATLAB多元回归程序matl ...

  4. 无源定位之时差估计的精确时差估计算法(ETDE)及MATLAB实现程序

    精确时差估计算法(ETDE)及MATLAB实现程序 算法原理 算法总结 性能分析 实验结果 算法原理 假设两接收站分别接收的带噪信号为 {x(kT)=s(kT)+ε1(kT)y(kT)=s(kT−D) ...

  5. matlab潮流程序,IEEE33节点matlab潮流程序.doc

    IEEE33节点matlab潮流程序 Bus [1,0,0 ; 2,100, 60; 3,90,40; 4,120,80; 5,60,30; 6,60,20; 7, 200, 100 ; 8,200, ...

  6. matlab有意思程序,matlab有意思的小程序

    10个C++趣味小程序,很有意思的.VIP专享文档 VIP专享文档是百度文库认... 现在很多人使用微信的时间已经非常长了,他们注册的微信号往上可能已经是5年前的事情了,正是由于不少使用者在这个过程当 ...

  7. matlab程序里nbus=x的意思,MATLAB潮流程序(IEEE14 直角坐标 牛拉法)

    MATLAB潮流程序(IEEE14 直角坐标牛拉法)clear baseMVA=100; %功率基值 %%读Data1中数据 load Data1.txt Bus=Data1(:,1); %节点号 V ...

  8. 怎样在matlab q-q图上读出斜率,Q分解法潮流计算matlab小程序

    <Q分解法潮流计算matlab小程序>由会员分享,可在线阅读,更多相关<Q分解法潮流计算matlab小程序(18页珍藏版)>请在人人文库网上搜索. 1.Q分解法潮流计算matl ...

  9. matlab期权风险评估算法,使用 MATLAB 应用程序根据期权价格估算风险中性密度 (risk-neutral density, RND)...

    我们为什么选择 MATLAB 我们决定创建 MATLAB 应用程序估算 RND,因为我们希望研究成果得到广泛应用,而不是仅限于在量化经济学领域或是熟悉 MATLAB 编程的和金融研究人员使用. 我们发 ...

  10. 点集配准技术(ICP、RPM、KC、CPD)

    在计算机视觉和模式识别中,点集配准技术是查找将两个点集对齐的空间变换过程.寻找这种变换的目的主要包括:1.将多个数据集合并为一个全局统一的模型:2.将未知的数据集映射到已知的数据集上以识别其特征或估计 ...

最新文章

  1. 再测Golang的JSON库
  2. iOS 中 OC项目使用swift第三方工具(OC、swift 混合)
  3. 让Windows下的Tomcat将控制台信息记录到日志
  4. 从任何兼容 TWAIN 的设备获取图象的控件Dynamic Web TWAIN
  5. 【LeetCode从零单排】No100 Same Tree No101 Symmetric Tree
  6. 关于 Laravel Redis 多个进程同时取队列问题详解
  7. VC批量拷贝,移动,删除文件---SHFileOperation
  8. 光端机和光纤交换机的区别?
  9. Spring Data JPA 从入门到精通~@Procedure 储存过程的查询方法
  10. Written English-书面-现在完成时
  11. 【大数据处理技术】实验7(推荐林子雨老师的教程)
  12. TrueLaunchBar 4.2
  13. 差分数组:PIPI的区间操作Ⅰ
  14. Bayesian Browsing Model 的个人理解
  15. oracle ins ctx.mk,安装Oracle10g遭遇ins_ctx.mk问题解决方法
  16. Linux下C程序的编辑,编译和运行以及调试
  17. 相控非绝缘技术为何是黄金微针效用至高点?深度剖析相控射频微针差异
  18. 初识云计算和DevOps
  19. scrapy指定item输出项顺序到csv
  20. Ubuntu18.04 设置Speaker为默认播放器

热门文章

  1. 为什么Spring MVC能自动转换json/xml,你研究过它背后的原理吗?
  2. Java 9 新特性,看这里就明白了
  3. 看过来,说的就是你!
  4. *第八周*数据结构实践项目二【建设链串算法库】
  5. Delphi2010 RTTI + Attribute 简单实现ORM实例
  6. 计算机二级-C语言-对标志位的巧妙使用。对二维数组数据进行处理。对文件进行数据输入。...
  7. Java web ch02_3
  8. 国产操作系统剽窃Linux内核可耻!
  9. 【笔记】定积分的近似计算
  10. 转:《潜伏》映射办公室潜规则