资源简介
基于ICP的迭代配准算法,用matlab编写
代码片段和文件信息
%%
%寻找的变换关系data2=Rdata1+T
%%
%加载数据选取控制点
data1=load(‘3.asc‘);
data2=load(‘4.asc‘);
figure(1);
plot3(data1(:1)data1(:2)data1(:3)‘r.‘);
hold on;
plot3(data2(:1)data2(:2)data2(:3)‘b.‘);
title(‘原始数据‘);
axis tight equal;
hold off;
[mn]=size(data2);
controldata1=load(‘controldata.asc‘);%选取控制点
[controldatanum~]=size(controldata1);
controldata2=zeros(controldatanum3);
%%
%初始化
R=[100;010;001];
T=[000];
last_E=0;
iteration=20;
R_Intermediate=zeros(33iteration);
T_Intermediate=zeros(31iteration);
delta_Intermediate=zeros(iteration1);
index=zeros(controldatanum1);
e_Intermediate=zeros(iteration1);
%%
%迭代
for iter=1:iteration
%寻找控制点的对应点
for i=1:controldatanum
temp_data1=repmat(controldata1(i:)m1);
diff=sqrt(sum((temp_data1-data2).^22));
[minvalueindex(i1)]=min(diff);
controldata2(i:)=data2(index(i1):);
end
%%
%对于确定的关系,求解RT
centroid1=mean(controldata1);
centroid2=mean(controldata2);
demeancontroldata1=controldata1-repmat(centroid1controldatanum1);
demeancontroldata2=controldata2-repmat(centroid2controldatanum1);
H=demeancontroldata1‘*demeancontroldata2;
[USV]=svd(H);
R=V*U‘;
T=(centroid2-centroid1)‘;
R_Intermediate(::iter)=R;
T_Intermediate(::iter)=T;
%%
%利用求解得到的RT计算变换之后的点
controldata1=R*controldata1‘+repmat(T1controldatanum);
controldata1=controldata1‘;%新的控制点
E=norm(controldata1-controldata22);
e_Intermediate(iter1)=E/controldatanum
delta=abs(E-last_E)/controldatanum%中间迭代的误差
delta_Intermediate(iter1)=delta;
if(delta<0.001)
break;
end
last_E=E;
end
figure(2);
plot(1:iterdelta_Intermediate(1:iter1)‘);
xlabel(‘迭代次数‘);ylabel(‘delta‘);
figure(3);
plot(1:itere_Intermediate(1:iter)‘);
xlabel(‘迭代次数‘);ylabel(‘loss‘);
%%
%计算最终的R与T
temp_R=eye(3);
temp_T=zeros(31);
for i=1:iter
temp_R=R_Intermediate(::i)*temp_R;
temp_T=R_Intermediate(::i)*temp_T+T_Intermediate(::i);
end
R_final=temp_R;
T_final=temp_T;
data1_transformed=R_final*data1‘+repmat(T_final1size(data11));
data1_transformed=data1_transformed‘;
figure(4);
plot3(data1_transformed(:1)data1_transformed(:2)data1_transformed(:3)‘r.‘)
hold on;
plot3(data2(:1)data2(:2)data2(:3)‘b.‘)
title(‘ICP results‘)
axis equal tight;
hold off;
save data3.asc -ascii data1_transformed;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5470577 2017-01-03 11:47 ICPmatlab\3.asc
文件 5411799 2017-01-01 18:50 ICPmatlab\4.asc
文件 106109 2017-01-03 16:04 ICPmatlab\controldata.asc
文件 2428 2017-01-03 17:00 ICPmatlab\main.m
..AD... 0 2017-01-07 16:15 ICPmatlab
文件 7793400 2017-01-03 16:06 ICPmatlab\data3.asc
----------- --------- ---------- ----- ----
18784313 6
相关资源
- 波导MATLAB仿真
- 使用matlab对5G进行开发指南与白皮书
- libmwins.so
- 基于matlab的坐标转换系统设计与实现
- 用matlab求解单摆模型
- 光学Matlab模拟
- matlab读取SAC类文件函数
- TE过程matlab
- 模式识别与智能计算-Matlab技术实现(
- bm3d的matlab代码
- Matlab形态学处理
- 基于matlab水果识别
- WNNM加权核范数最小化进行图像复原
- 一种基于Matlab的语音信号采集与分析
- Matpower6.0
- CNN卷积神经网络图像识别matlab
- EKF-UKF-PF 扩展卡尔曼-无迹卡尔曼-粒子
- 杨氏双缝干涉实验matlab模拟
- 基于matlab的MPEGVideo压缩算法程序
- 有关同态滤波的相关资料及matlab代码
- GPS定位程序代码
- 丹麦理工大学MATLAB编写的超声声场仿
- matlab初学教程超详细
- 基于MATLAB的语音识别简明代码完整版
- matlab 车牌定位与分割 详细注释
- matlab实现一维和二维离散小波变换,
- 检索视频中运动的点并计算线速度角
- BM3D matlab
- ADS MATLAB
- RSM算法仿真MATLAB代码
评论
共有 条评论