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 %输出平面方程系数