matlab_包围盒压缩

一、code

1.1  unique function

Reference:https://zhuanlan.zhihu.com/p/47389313

unique按排序顺序返回。[C,ia,ic] = unique(___) 还可返回索引向量 iaic。 如果 A 是向量,则 C = A(ia)A = C(ic)。 如果 A 是矩阵或数组,则 C = A(ia)A(:) = C(ic)。 如果指定了 'rows'选项,则 C = A(ia,:)A = C(ic,:)。 

1.2 txt转化为mat

data=load('smallchair.txt');
save smallchair.mat data;

1.3 view

从用户自己定义的视角观察三维图用命令view,这一命令的使用格式为 view(az,el)

az是azimuth(方位角)的缩写,EL是elevation(仰角)的缩写。它们均以度为单位。系统缺省的视点定义为方位角-37.5°,仰角30°。

1.4 uigetfile

[filename,pathname]=uigetfile({'*.mat;*.txt' },'选择点云');

uigetfile可以获取文件夹中的文件,可以获取指定格式,也可以多种格式,或者所有格式。获取多种格式时,所有格式写到同一对单引号下,用分号隔开。

二、compression principle

点云个数N  ——>  max函数计算xyz最大最小值max/min  ——>  确定bounding box边长Lx/Ly/Lz  ——> 体积V  ——>  单位立方体中点的个数n  ——>  子立方体的边长Ls  ——>  确定栅格数量mm*nn*ll  ——>  确定每个点所在的格子(hh,jj,kk)  ——>  求每个格子的中心坐标  ——>  计算每个点与对应的子盒中心点的距离——>将所有格子排序——>一个格子中保留一个点

把程序看了一遍,根据我的理解,应该就是把一个大的包围盒分成很多小的立方体格子,最后每个格子中只保留可能不到一个点,从而实现压缩。

三、result 

在csdn下载的代码,运行结果:

code:https://download.csdn.net/download/u013031908/8104863?locationNum=9&fps=1

k=1 时:

四、GUI

跑完以后做作的我,突然想做个Gui界面。不过在gui里显示的不能旋转。

可以查看原点云及压缩后点云,以及压缩前后点的数量。可以手动输入Kc值,控制压缩程度。效果图如下:

点击choose ptcloud后可以选择需要压缩的点云数据:

 


 

猜你喜欢

转载自blog.csdn.net/yamgyutou/article/details/104609372
今日推荐