Matlab的边界函数使用什么算法?

n.M*_*elo 2 matlab boundary

您可能已经注意到,在较新版本的matlab中,边界函数(计算一组2d或3d点的边界)已得到改进.

现在可以给函数一个名为'shrink factor'的参数.如果收缩因子为0,则跟踪的边界是传统的凸包.当收缩参数更大时,边界更加收缩.如果未指定任何值,则缩小系数的默认值为0.5.

所以,我理解它的用途和它的作用(实际上我已经在项目中使用过该函数),但我不知道它是如何工作的.这种收缩系数的几何原理是什么?

谢谢!

小智 7

在找到答案的同时找到了你的问题.希望你现在已经解决了.我已经弄明白了,以防其他人发现这个问题,这是我对boundary()函数的理解.

边界函数是alpha形状的实现.使用alpha形状,可以使用一组特定半径的圆来为一组点指定一组多边形:想象围绕这些点绘制的任意形状,然后使用特定半径的圆尽可能多地移除此形状.尽可能继续,不包括任何积分.小半径意味着可以移除更多的"材料",更大的半径意味着更少的"移除",即小半径产生紧密的裁剪形状,而无限半径重建该组的凸包.然后将确定为边缘点的点与直边连接.这可以在点集内创建空心区域.参见例如http://doc.cgal.org/latest/Alpha_shapes_2/index.html

MATLAB有一个alphashape()函数,可以计算所有可能的alpha半径给出不同形状的alpha形状.这用于边界函数.

boundary()工作流程:

(1)创建alphashape

(2)找到为alpha形状创建单个区域所需的关键alpha半径

(3)提取所有在该临界值之上创建独特形状的alphavalues

(4)使用收缩因子S选择要使用的单个alpha值.

示例:使用S = 0.25,使用alpha radius和index(1-.25)*numel(alphavalues> = alpha_crit).这将使用第75个最小的alpha半径创建一个alpha形状,从而产生单个区域(对于S = 0.25).

如果S = 1(最大收缩),则给出最小的alpha半径,为alpha形状提供单个区域.

如果S = 0(无收缩),则给出提供唯一形状的最大alpha半径.(Incraesing alpha radius进一步没有影响).

(5)设置填充alpha形状的孔的阈值与alpha形的区域相同,即填入所有孔

(6)将原始点云的索引返回到此alphashape的顶点.

boundary.m文件的相关部分(第79-86行)

Acrit = shp.criticalAlpha('one-region'); %alpha-radius required for single region
spec = shp.alphaSpectrum();%all alphavalues
idx = find(spec==Acrit);
subspec = spec(1:idx);%alphavalues up to criticalAlpha
subspec = flipud(subspec);%reverse order
idx = max(ceil((1-S)*numel(subspec)),1); %find index from shrink factor
alphaval = subspec(idx); 
shp.Alpha = alphaval; %set alpha value of alpha shape
shp.HoleThreshold = areavol; % remove holes in interior
Run Code Online (Sandbox Code Playgroud)

希望这对某人来说足够清楚和有用.

我使用MATLAB R2014b