matlab拟合平面

分享个自己编写的三维点云拟合平面的程序 – MATLAB中文论坛 (ilovematlab.cn)

function [A,B,C,D]=PlaneFitting(s) %A,B,C,D为平面方程系数,s为测量点阵,求平面方程,平面方程D=Ax+By+Cz
x=s(:,1);%s的第1列
y=s(:,2);%s的第2列
z=s(:,3);%s的第3列
so=mean(s,1);%对x,y,z求均值
xo=so(:,1);%x的均值
yo=so(:,2);%y的均值
zo=so(:,3);%z的均值
os=bsxfun(@minus,s,so);%x,y,z与其均值之差
ox=os(:,1);%x与其均值之差
oy=os(:,2);%y与其均值之差
oz=os(:,3);%z与其均值之差
oxox=sum(bsxfun(@times,ox,ox));
oyoy=sum(bsxfun(@times,oy,oy));
ozoz=sum(bsxfun(@times,oz,oz));%x,y,z的方差
oxoy=sum(bsxfun(@times,ox,oy));
oxoz=sum(bsxfun(@times,ox,oz));
oyoz=sum(bsxfun(@times,oy,oz));%x,y,z的互协方差
oxyz=[oxox,oxoy,oxoz;oxoy,oyoy,oyoz;oxoz,oyoz,ozoz];%x,y,z的协方差阵
[V,D]=eig(oxyz);%进行特征分解
[~,t]=min([abs([D(1,1),D(2,2),D(3,3)])]);%最小特征值所对应的特征向量就是平面方程系数
A=V(1,t)
B=V(2,t)
C=V(3,t)
D=A*xo+B*yo+C*zo %输出平面方程系数

 

posted on 2023-09-23 00:18  一杯明月  阅读(326)  评论(0编辑  收藏  举报