空间离散点和合成

1 原理

根据空间中的离散点进行直线拟合,其原理很简单,就只最小化众散点到该直线的最小距离。有一个最先要的知识,该直线必过众散点的平均值,那么我们需要做的就是寻找该直线的方向向量。

   根据空间几何知识,我们可以知道,利用协方差矩阵的奇异变换,得到的最大奇异值对应的奇异向量就是该直线的方向。

2 代码设计

<span style="font-size:18px;">% 随机生成一组点,这写点距离直线l比较近,l的过点[1,1,1],方向向量为[1,2,3]
lineData=bsxfun(@plus, [1,1,1], (-1:.1:1).'*[1,2,3]);
Noise=rand(size(lineData))*.1;
lineData=lineData+Noise;
scatter3(lineData(:,1), lineData(:,2), lineData(:,3),'filled')
hold on;

% 拟合的直线必过所有坐标的算数平均值
xyz0=mean(lineData,1),
% 协方差矩阵奇异变换,与拟合平面不同的是
% 所得直线的方向实际上与最大奇异值对应的奇异向量相同
centeredLine=bsxfun(@minus,lineData,xyz0);
[U,S,V]=svd(centeredLine);
direction=V(:,1);

% 画图
t=-8:0.1:8;
xx=xyz0(1)+direction(1)*t;
yy=xyz0(2)+direction(2)*t;
zz=xyz0(3)+direction(3)*t;
plot3(xx,yy,zz)</span>


</pre><pre>
3 实验结果


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页