资源简介
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三维散乱点云曲率算法
- Sick激光雷达数据解析程序MATLAB
- 对点云数据计算体积
- 边缘提取的matlab程序
- matlab中kdtree调用,搜索点云数据近邻
- matlab代码,可将三角网格网格转换成
- matlab中ICP点云匹配算法
- 基于特征匹配和RANSAC的三维点云拼接
- matlab程序实现了目标对象的图像分割
- 亚像素边缘提取MATLAB码
- matlab三维点坐标生成点云
- 亚像素边缘提取
- 边缘提取边界跟踪法
- Matlab图像处理——小波变换去噪声、
- Matlab图像处理程序——去噪、边缘增
- 点云配准的ICP算法代码
- 三维点云精简的均匀网格法&不均匀网
- 点特征直方图PFH算法的matlab实现,以
- 点云的边界提取
- 改进的基于划分算法的三维点云聚类
- 点云滤波算法 一维双向扫描方法 ma
- PCL 点云的圆柱拟合.md
- matlab通过腐蚀与膨胀提取图像物体边
- 三维点云的配准和融合
- 点云三角剖分matlab代码
- 三维点云svd分解求取旋转矩阵
- matlab,深度图转换三维点云,depthma
- matlab三维点云的显示
- 点云显示MATLAB
- KITTI雷达点云与图像数据融合matlab源码
评论
共有 条评论