• 大小: 18KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: Matlab
  • 标签: 最小二乘  matlab  

资源简介

提供测试用例,输入三维离散点空间坐标,可以直接获得最小二乘法的空间拟合直线,并可以求出每个离散点到空间直线的距离,方便剔除偏离较大的离散点

资源截图

代码片段和文件信息

% 空间直线拟合,并求每个点到直线距离
% 读入已经存储在txt文件中每个点x y z 坐标,也可以直接读入二维数组,维数[点数*3]
clc;clear;close all;
lineData=importdata(‘3D.txt‘);
figure(‘Color‘[1 1 1]);
scatter3(lineData(:1) lineData(:2) lineData(:3));
xlabel ‘x‘;
ylabel ‘y‘;
zlabel ‘z‘;
%zlim([2.91e4 2.97e4]);
hold on;
% 拟合的直线必过所有坐标的算数平均值
xyz0=mean(lineData1);
% 协方差矩阵奇异变换,与拟合平面不同的是
% 所得直线的方向实际上与最大奇异值对应的奇异向量相同
centeredLine=bsxfun(@minuslineDataxyz0);    %bsxfun函数是对矩阵中每个元素进行 减 操作
[USV]=svd(centeredLine);       %以降序顺序返回矩阵的奇异值
direction=V(:1);
% 画图
t=-500:0.1:500;
xx=xyz0(1)+direction(1)*t;
yy=xyz0(2)+direction(2)*t;
zz=xyz0(3)+direction(3)*t;
plot3(xxyyzz)
%求三维空间一点到空间直线的距离,P为一点,Q1、Q2线上两点
[mn]=size(xx);   
Q1(11)=xx(11); Q1(12)=yy(11); Q1(13)=zz(11);
Q2(11)=xx(1n); Q2(12)=yy(1n); Q2(13)=zz(1n);
P=zeros(13);  [m1n1]=size(lineData);  d=zeros(1m1);
for i=1:m1
    P=lineData(i:);
    d(1i) = norm(cross(Q2-Q1P-Q1))/norm(Q2-Q1);
end
figure(‘Color‘[1 1 1]);
x=1:m1;
plot(xd‘r.‘);
xlabel ‘行号‘;
ylabel ‘距离‘; 
%取出所有行号
j=0;
for i=1:m1
    if(d(1i)>10)
        j=j+1;
        hanghao(1j)=i;
    end
end
%去除偏差较大的点,重新存储txt文件
[m2n2]=size(hanghao);  count=0;
for k=1:n2
    q=hanghao(1k);
    for k1=q:m1-1
        lineData(q:)=lineData(q+1:);
    end
    m1=m1-1;
    count=count+1;
end
for k2=1:m1-count
    lineData1(k2:)=lineData(k2:);
end
% save 3D-1.txt  lineData1;








 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1617  2019-01-21 16:48  nihe.m

     文件      70928  2019-01-17 10:19  3D.txt

----------- ---------  ---------- -----  ----

                72545                    2


评论

共有 条评论