在图上选择外点的算法(“丰富的”凸包)

时间:2013-11-21 16:38:56

标签: graph-algorithm convex-hull

我正在寻找一种有效的方法来选择距离中心最远的相对大部分的点(2D欧几里德图)。这类似于凸包,但包括(许多)更多的点。进一步的标准:

  • 选择/设置(“K”)中的点数必须在指定范围内。最可能的是它不会非常窄,但它最适用于不同的范围(例如,0.01 * N

  • 算法必须能够平衡距离中心的距离和“局部密度”。如果图形范围上部附近有密集区域,但下部附近有稀疏区域,则算法必须确保从下部选择一些点,即使它们比上部点更接近中心区域。 (见下面的例子)

  • 奖励:考虑到与特定点(或点和中心两者)的距离是完美的,而不是距离中心的简单距离。

到目前为止,我的尝试主要集中在使用“鸽子钻孔”(将图形划分为CxR框,根据坐标为点分配点)并选择“外部”框,直到我们在集合中有足够的点。但是,我没有成功地平衡选择(由于固定的盒子大小而过度选择的密集区域),也没有使用选定的点作为参考而不是(仅)中心。

我(很差)画了Example:红点是点,绿色形状是我想要的一个例子(在绿色=选中之外)。对于稀疏区域,边界形状更接近中心以找到合适的点(但如果它们太靠近中心,则不一定找到任何点)。黄色框是我的基于Pigeon Holing的算法的一个例子。即使在尝试调整稀疏区域时,也无法很好地管理。

欢迎任何和所有想法!

1 个答案:

答案 0 :(得分:1)

我认为没有任何标准算法可以满足您的需求。你必须要有创意。假设你的点嵌入2D欧几里德空间,这里有一些想法:

  1. 迭代计算几个凸包。例如,计算凸包,保持作为凸包一部分的点,然后计算另一个凸包,忽略原始凸包的点。继续这样做,直到你有足够数量的点,基本上每次迭代都会在周长上拔掉点。这种方法的唯一问题是它不适用于数据集中的凹陷(例如,您发布的样本底部的凹陷)。

  2. 为您的数据设置高斯并保留所有内容> N标准 远离平均值的偏差(其中N是您必须的值 选择)。如果您的数据是高斯数据,这应该可以很好地工作。如果 事实并非如此,你可以随时用几个高斯模型来代替它 一个),并保持点的联合概率小于某个阈值。使用多个高斯人可能会很好地处理凹陷。
    参考文献
    http://en.wikipedia.org/wiki/Gaussian_function
    How to fit a gaussian to data in matlab/octave? \

  3. 使用核密度估算 - 如果您创建核密度 表面,你可以在某个高度切割表面(例如,转动 它进入一个高原),给你一个周长的形状(形状的 高原)周围的点。诀窍是将其切片 正确的位置,因为你可能最终得到没有积分 在形状之外,你可以轻松选择正确的选择 得到你画的绿色形状。如果您明智地选择切片点(这可能很难),这种方法可以很好地为您提供示例中的绿色形状。这种方法的最大缺点是它的计算成本非常高。更多信息: http://en.wikipedia.org/wiki/Multivariate_kernel_density_estimation

  4. 使用 alpha形状来获得紧密包裹的一般形状 点集的外围。然后侵蚀形状a 很少强迫形状之外的一些点。我没有很多alpha形状的经验,但这种方法在计算上也很昂贵。更多信息: http://doc.cgal.org/latest/Alpha_shapes_2/index.html