【问题标题】:What algorithm does Matlab's boundary function use?Matlab的边界函数使用什么算法?
【发布时间】:2015-10-28 11:27:04
【问题描述】:

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

现在可以给函数一个称为“收缩因子”的参数。如果收缩因子为 0,则跟踪的边界是传统的凸包。收缩参数越大,边界越收缩。收缩系数的默认值为 0.5,以防您不指定任何值。

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

谢谢!

【问题讨论】:

    标签: matlab boundary


    【解决方案1】:

    在自己寻找答案时发现了您的问题。希望你现在已经解决了。我已经想通了,万一其他人发现这个问题,这是我对边界()函数的理解。

    边界函数是 alpha 形状的实现。使用 alpha 形状,可以通过使用一组具有特定半径的圆为一组点分配一个多边形: 想象一个围绕点绘制的任意形状,然后使用特定半径的圆尽可能多地删除该形状。尽可能长时间地继续,不要封闭任何点。小半径意味着可以移除更多的“材料”,更大的半径意味着更少的“移除”,即小半径创建紧密裁剪的形状,而无限半径重新创建集合的凸包。然后将确定为边缘点的点与直边相连接。这可以在点集内创建空心区域。 参见例如http://doc.cgal.org/latest/Alpha_shapes_2/index.html

    MATLAB 有一个 alphashape() 函数,它计算 alphashapes,所有可能的 alpha 半径给出不同的形状。这是在边界函数中使用的。

    boundary() 工作流程:

    (1) 创建 alphashape

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

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

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

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

    如果 S=1(最大收缩),则给出最小的 alpha 半径 alpha 形状的区域。

    如果 S=0(不收缩),给出唯一的最大 alpha 半径 形状。 (进一步增加 alpha 半径没有效果)。

    (5)将alphashape中空洞的填充阈值设置为与alphashape的面积相同,即填满所有空洞

    (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
    

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

    我使用 MATLAB R2014b

    【讨论】:

      【解决方案2】:

      YiraDati 的回答提供了很多细节。

      你也可以在命令窗口中输入“开放边界”,然后所有的程序都写在边界函数中。并且边界函数中显示的所有子函数都可以使用 matlab 文档访问,例如area()criticalAlpha()alphaSpectrum() 等...

      【讨论】:

        猜你喜欢
        • 2012-09-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 2018-05-05
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多