3D点云配准 ICP算法源码(matlab亲测 可用,)

10 篇文章 0 订阅
7 篇文章 1 订阅

ICP算法的原理 ,这里略

直接上源码

function [data_q,T] = rotate(data,x,y,z,t)
 
%欧拉角转旋转矩阵
 
x = x/180*pi;
y = y/180*pi;
z = z/180*pi;
 
Rx = [1      0      0;
    0 cos(x) -sin(x);
    0 sin(x) cos(x)];
Ry = [cos(y)  0 sin(y);
    0       1      0;
    -sin(y) 0 cos(y)];
Rz = [cos(z) -sin(z) 0;
    sin(z) cos(z)  0;
    0      0       1];
T = Rz*Ry*Rx;        %旋转矩阵
 
T = [T(1,1),T(1,2),T(1,3),t(1);
    T(2,1),T(2,2),T(2,3),t(2);
    T(3,1),T(3,2),T(3,3),t(3);
    0 0 0 1];  % 复合
 
 
rows=size(data,1);
rows_one=ones(rows,1);%创建一个rows行一列全是1的数组(ones的具体使用请查看文档 help ones)
%size(rows_one,1)%这是为了验证看看rows_one这个数组是不是自己想要的行和列
%size(rows_one,2)
data=[data,rows_one];    %化为齐次坐标
%size(data',1)
%size(data',2)
data_q=T*data';%把data专置,这样就变成了一列就是一个坐标点(即xyz的值),在加上一个1。这个1主要是去处理平移的,xyz是去处理旋转的。
data_q=data_q(1:3,:);    %返回三维坐标
function [data_q,T] = rotate(data,x,y,z,t)
 
%欧拉角转旋转矩阵
 
x = x/180*pi;
y = y/180*pi;
z = z/180*pi;
 
Rx = [1      0      0;
    0 cos(x) -sin(x);
    0 sin(x) cos(x)];
Ry = [cos(y)  0 sin(y);
    0       1      0;
    -sin(y) 0 cos(y)];
Rz = [cos(z) -sin(z) 0;
    sin(z) cos(z)  0;
    0      0       1];
T = Rz*Ry*Rx;        %旋转矩阵
 
T = [T(1,1),T(1,2),T(1,3),t(1);
    T(2,1),T(2,2),T(2,3),t(2);
    T(3,1),T(3,2),T(3,3),t(3);
    0 0 0 1];  % 复合
 
 
rows=size(data,1);
rows_one=ones(rows,1);%创建一个rows行一列全是1的数组(ones的具体使用请查看文档 help ones)
%size(rows_one,1)%这是为了验证看看rows_one这个数组是不是自己想要的行和列
%size(rows_one,2)
data=[data,rows_one];    %化为齐次坐标
%size(data',1)
%size(data',2)
data_q=T*data';%把data专置,这样就变成了一列就是一个坐标点(即xyz的值),在加上一个1。这个1主要是去处理平移的,xyz是去处理旋转的。
data_q=data_q(1:3,:);    %返回三维坐标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值