Matla + SVD 求解变换矩阵

该博客介绍了一个使用Singular Value Decomposition (SVD)进行点集配准的MATLAB函数。通过对输入点集进行重心计算、协方差矩阵构造及SVD分解,函数求得旋转矩阵RR和平移矩阵TT,从而实现点集间的旋转和平移变换。通过迭代计算,评估变换后的点集与目标点集的匹配误差msen。
摘要由CSDN通过智能技术生成

在这里插入图片描述

% svd分解迭代求取R,T
% 要求inputA和inputB点集没有尺度变换,只有旋转和平移
function [RR,TT,msen]=findhomobySVD(inputA,inputB) 

N=size(inputA,1);            
%2计算目标点集P的重心和参考点集X的重心
up=mean(inputA); %1*3的矩阵
ux=mean(inputB); %1*3的矩阵

%3_由点集P和X构造协方差矩阵
E=((inputA-repmat(up,N,1))'*(inputB-repmat(ux,N,1)));
%svd分解
[U,A,D]=svd(E);
%求旋转矩阵
RR=D*U';
%求平移矩阵
TT=ux'-RR*up';
inpB=(RR*inputA'+repmat(TT,1,N))';
su=0;
for i=1:N
    for j=1:3
        su=su+(inputB(i,j)-inpB(i,j))^2;
    end
end
msen=sqrt(su/N);
end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值