资源简介
1、MATLAB下Kdtree求点云数据边缘点。
2、dianyun.txt为点云文件,需要更换点云文件时直接替换就行。
3、直接运行dianyun.m文件即可求出点云边缘。

代码片段和文件信息
clc
clear
%获取点云并显示
load(‘dianyun.txt‘‘-ascii‘)%用ASCII码打开dianyun.txt点云文档
P=dianyun;%点云数据保存在P里
x=dianyun(:1);%建立x坐标
y=dianyun(:2);%建立y坐标
z=dianyun(:3);%建立z坐标
scatter3(xyz)%以x,y,z描绘点云三维图像
[Eindex]=sortrows(P1);%对点云数据进行矩阵排列
m=size(x);%确定点的个数
x1=E(:1);%确定x1坐标
y1=E(:2);%确定y1坐标
z1=E(:3);%确定z1坐标
w=[x1y1z1];%把取得的点保存在w中
mm=0;
for i=1:m
Q=[];
L=[];
K=[];
T=[];
TT=[];
k=0;
k3=0;
m3=0;
%待判断点
x2=w(i1);
y2=w(i2);
z2=w(i3);
%求邻域K
for j=1:m
x3=w(j1);
y3=w(j2);
z3=w(j3);
d=sqrt((x3-x2)^2+(y3-y2)^2+(z3-z2)^2);%计算两点距离
if d<200&&d~=0 %根据确定邻域范围大小
k=k+1;
KK=[x3y3z3];
K(k:)=KK;
end
end
m2=size(K(:1));%邻域内点的个数
%邻域内点的坐标
x4=K(:1);
y4=K(:2);
z4=K(:3);
%拟合平面
P=[x4 y4 ones(length(x4)1)]\z4 ; %最小二乘法拟合函数
A=P(1);
B=P(2);
C=-1;
D=P(3);
N=[ABC];%平面法向量
N=N/norm(N);%向量单位化
%把点投影到拟合平面上并求出坐标
kk1=-(A*x2+B*y2+C*z2+D);
kk2=(A^2+B^2+C^2);
kk=-(A*x2+B*y2+C*z2+D)/(A^2+B^2+C^2);
%求出的投影坐标
x5=x4+kk*A;
y5=y4+kk*B;
z5=z4+kk*C;
Q=[x5y5z5];
%待判断点投影坐标
x6=x2+kk*A;
y6=y2+kk*B;
z6=z2+kk*C;
%投影面上,其他投影点到待判断投影点的向量
for k2=1:m2
x7=Q(k21)-x6;
y7=Q(k22)-y6;
z7=Q(k23)-z6;
if x7~=0||y7~=0||z7~=0
Qqq=[x7y7z7];
k3=k3+1;
Qq(k3:)=Qqq;
m3=m3+1;
end
end
%求向量的旋转角
for k3=1:m3
q1=Qq(1:);
q2=Qq(k3:);
ff1=dot(q1q2);
ff2=cross(q1q2);
ff3=dot(ff2N);
theta=atan2(ff3ff1);
if theta<0
theta=2*pi+theta;
end
T(k3)=theta;
end
T=sort(T‘descend‘); %从大到小排列旋转角
for k4=1:m3-1
L(k4)=T(k4)-T(k4+1);
end
ma=max(L);
mi=min(L);
if ma>=pi/2
mm=mm+1;
M(mm:)=[x2y2z2];
end
end
x0=M(:1);
y0=M(:2);
z0=M(:3);
%显示边缘点结果
figure(2)
scatter3(x0y0z0)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-09-17 16:32 kt\
文件 2552 2014-09-17 16:32 kt\dianyun.m
文件 8400 2007-09-30 00:55 kt\dianyun.txt
文件 1362 2014-05-13 20:59 kt\kdtree_ball_query.m
文件 13824 2014-05-13 20:59 kt\kdtree_ball_query.mexw32
文件 850 2014-05-13 20:59 kt\kdtree_build.m
文件 28672 2014-05-13 20:59 kt\kdtree_build.mexw32
文件 462 2014-05-13 20:59 kt\kdtree_delete.m
文件 8704 2014-05-13 21:45 kt\kdtree_delete.mexw32
文件 0 2014-05-13 20:59 kt\kdtree_delete.tmp1
文件 1338 2014-05-13 20:59 kt\kdtree_k_nearest_neighbors.m
文件 19456 2014-05-13 20:59 kt\kdtree_k_nearest_neighbors.mexw32
- 上一篇:matlab三维散乱点云曲率算法
- 下一篇:10项目进度表(Project模板)
相关资源
- Matlab图像分割边缘提取算法
- stlwritematlab程序
- 使用matlab实现ICP点云匹配
- 离散点云三维重建matlab程序
- matlab实现三维点云三角化
- Matlab 三维点云 三角化
- matlab 基于点云的三维重建 附带 点云
- 点云的三维重建代码,内容丰富matl
- MATLAB 三维点云重构Surface recostruction
- point3d 点云三维重建
- 三维重建算法 MATLAB 点云数据
- 点云的三维重建 MATLAB代码 带图片以及
- 点云曲面重建
- matlab delaunary 三维点云三角化
- 基于高斯球的三维点云精简,matlab实
- 基于PCA的点云位姿估计与粗拼接,m
- 点云数据栅格化matlab代码
- 点云滤波 一维双向扫描方法
- 激光雷达数据处理.rar
- 从视差图重建3D点云MATLAB
- MATLAB点云ICP代码
- 激光雷达点云滤波---根据TIN渐进加密
- kd树的创建及搜索 matlab实现
- Matlab+PFH.rar
- 基于法向量的点云数据精简算法matl
- matlab开发-KDTreeNearestNeighborandRangeSear
- PCNN分割,边缘提取,图像增强等mat
- matlab读入三维点云数据斯坦福兔子
- matlab 轮廓 边缘提取
- Matlab三维点云法向量与特征值的简易
评论
共有 条评论