资源简介

使用主元分析法PCA对两片点云数据作粗略的拼接配准,可以作为ICP算法的预处理步骤。尝试规定了PCA主元向量的朝向。附带ply文件格式的bunny多视角数据。

资源截图

代码片段和文件信息

clc
clear
close all
%------读取点云数据------%
% mydir=uigetdir(‘d:‘‘选择一个目录‘);
mydir=‘d:\Matlab.R2017a\work\bunny‘;
DIRS=dir(fullfile(mydir‘*.ply‘));
n=length(DIRS);
name={DIRS.name}‘;
p=1;q=2;
[~P] = ply_read(fullfile(mydirDIRS(p).name)‘tri‘);
[~Q] = ply_read(fullfile(mydirDIRS(q).name)‘tri‘);
figure;
plot3(P(1:)P(2:)P(3:)‘r.‘);
hold on
plot3(Q(1:)Q(2:)Q(3:)‘b.‘)
hold off
title(name([pq]));
view(2)
point1=size(P2);
point2=size(Q2);
%------分别求解P Q的每一行的均值------%
pc = mean(P2);%  xc:3*1的矩阵
qc = mean(Q2);   %mean(A2)求各行的均值 

%----分别求解两个数据集合的协方差矩阵----%
x1 = P - repmat(pc1point1); %repmat(Amn)将矩阵A以m行n列复制摆好拼起来
Mx =x1 * x1‘;
y1 = Q - repmat(qc1point2);
My = y1 * y1‘;

%------求解Mx My的主元和主方向------%
[VxDx] = eig(Mx‘nobalance‘); %Vx特征向量Dx特征值
[VyDy] = eig(My‘nobalance‘);

[~index]=max(sum(x1.*x1));
xm=x1(:index);
xm(31)=-abs(xm(31));
p3 = Vx(:3);
if dot(xmp3)<0
    p3=-p3;
end
p2 = Vx(:2);
if dot(xmp2)<0
    p2=-p2;
end
p1=cross(p3p2);

[~index]=max(sum(y1.*y1));
ym=y1(:index);
ym(31)=-abs(ym(31));
q3 = Vy(:3);
if dot(ymq3)<0
    q3=-q3;
end
q2 = Vy(:2);
if dot(ymq2)<0
    q2=-q2;
end
q1=cross(q3q2);
%------求解旋转矩阵R和平移向量T------%

R = [q1q2q3]/[p1p2p3];%R=(q1q2q3)(p1p2p3)-1:逆矩阵

xc2 = R*pc;
T = (qc - xc2);
P1=R*P+repmat(T1size(P2));
figure;
plot3(P1(1:)P1(2:)P1(3:)‘r.‘);
hold on
plot3(Q(1:)Q(2:)Q(3:)‘b.‘)
hold off
title(name([pq]));
view(2)


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-04 12:58  PCA点云位姿估计\
     目录           0  2018-04-04 12:58  PCA点云位姿估计\bunny\
     文件        1590  2018-04-04 12:58  PCA点云位姿估计\PCA_demo.m
     文件       16255  2018-04-04 12:58  PCA点云位姿估计\ply_read.m
     文件     1988159  2018-04-04 12:58  PCA点云位姿估计\bunny\bun000.ply
     文件     1965799  2018-04-04 12:58  PCA点云位姿估计\bunny\bun045.ply
     文件     1651508  2018-04-04 12:58  PCA点云位姿估计\bunny\bun090.ply
     文件     1983009  2018-04-04 12:58  PCA点云位姿估计\bunny\bun180.ply
     文件     1679880  2018-04-04 12:58  PCA点云位姿估计\bunny\bun270.ply
     文件     1808074  2018-04-04 12:58  PCA点云位姿估计\bunny\bun315.ply
     文件     3033195  2018-04-04 12:58  PCA点云位姿估计\bunny\bun_zipper.ply
     文件      658744  2018-04-04 12:58  PCA点云位姿估计\bunny\bun_zipper_res2.ply
     文件      148524  2018-04-04 12:58  PCA点云位姿估计\bunny\bun_zipper_res3.ply
     文件       34359  2018-04-04 12:58  PCA点云位姿估计\bunny\bun_zipper_res4.ply
     文件     1861310  2018-04-04 12:58  PCA点云位姿估计\bunny\chin.ply
     文件     1686708  2018-04-04 12:58  PCA点云位姿估计\bunny\ear_back.ply
     文件     1898128  2018-04-04 12:58  PCA点云位姿估计\bunny\top2.ply
     文件     1833305  2018-04-04 12:58  PCA点云位姿估计\bunny\top3.ply

评论

共有 条评论