【2019-12-29-挖坑】matlab实现区域生长的点云分割

参考

区域生长算法的一种C++实现

区域生长算法原理及MATLAB实现

【C++】pcl中的Region Growing(区域生长)算法

区域生长的原理

1、排序,基于曲率对点云进行排序,曲率最小的点叫做初始种子点,区域生长算法从曲率最小的种子点开始生长,初始种子点所在区域为最平滑区域,从初始种子点所在的区域开始生长可减小分割片段的总数,从而提高算法的效率。

2、设置一个种子集合Q,聚类区域C,对种子点的邻域点进行分析,如果和种子点的法向量差值小于阈值,就把这个点放到C中;再计算曲率,若小于曲率阈值,就把这个点放入到Q中。对邻域计算完后再种子点的集合Q中剔除原来的种子点。

3、若Q非空,则重复2(找种子点的邻域点,进行判断)。直到Q为空集合。

论文

 

 

 

PCL封装的效果

 

matlab实现代码

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

更新:2020-1-15

思路比较简单,pcl的代码实在看不下去,便参考了二维图像的区域生长分割,采用最简单的一种方法:手工指定一个初始种子点,在matlab中给出了实现

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

主函数building_Example2_Region_Grow_Segment.m

% 读取txt文件,将txt文件保存为pcd文件并以点云的格式显示
clear;clear all;close all;

pt=pcread('region_growing_tutorial.pcd');
pcData=pt.Location;




% pcData=load('building_Example2.txt');
% pcData=load('Building1.txt');

color=zeros(size(pcData,1),3);
pcData=[pcData color];
ptCloud = pointCloud(pcData(:,1:1:3),'Color',pcData(:,4:1:6));%读取txt文件的坐标信息以及颜色信息

% ptCloud = pointCloud(pcData(:,1:1:3));%读取txt文件的坐标信息
pcwrite(ptCloud, 'building_Example2_color.pcd', 'Encoding', 'ascii'); %将程序中的xyz数据写入pcd文件中

% pc = pcread('building_Example2_color.pcd');
pcshow(ptCloud); %显示点云
view(-37.5,30);

% 计算法向量
normals=pcnormals(ptCloud,10);

%2020-1-9  
%使用PCA计算法向量和曲率pw 
k=8;%近邻点数量为8
[pn,pw] 
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tech沉思录

点赞加投币,感谢您的资瓷~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值