在3d高度图中找到鞍点

时间:2012-08-08 16:19:11

标签: algorithm language-agnostic 3d geometry point-clouds

给定一个3d高度图(来自激光扫描仪),如何找到saddle points

即。给出这样的东西:

height profile

我正在寻找曲率在一个方向上为正而在另一个方向上为负的所有点。

(这些方向不需要与X轴和Y轴对齐。 我知道如何检查X方向的曲率是否与Y方向的曲率符号相反,但这并不包括所有情况。更糟糕的是,X中的分辨率与Y中的分辨率不同

enter image description here

理想情况下,我正在寻找一种能够容忍一定量噪音并且只标记“重要”鞍点的算法。

2 个答案:

答案 0 :(得分:3)

我一直在探索计算拓扑类的类似问题,并且已经使用下面概述的方法取得了一些成功。

首先你需要一个比较函数来评估两个输入点的高度并返回<或者> (不等于)任何输入。一种方法是,如果点的高度相等,则使用一些基于位置或随机的索引来查找更高的点。您可以将此视为在高度上添加无穷小的扰动。

现在,对于每个点,您将比较所有周围邻居的高度(在2D矩形网格上将有8个邻居)。点的下部链接将是高度小于该点的所有邻居的集合。

如果所有相邻值都在下方链接中,则表示您处于本地最大值。如果下部链接中没有任何一个点,则您处于局部最小值。否则,如果下部链接是单个连接集,则您处于斜率上的常规点。但如果下面的链接是两个未连接的集合,那么你就处于困境中。

在2D中,您可以围绕要检查的点以循环顺序构建8个相邻点的列表。根据比较函数,为每个邻居分配值+/- 1。然后,您可以逐步浏览该列表(请记住比较两个端点)并计算符号更改的次数,以确定下部链接中已连接组件的数量。

确定哪些鞍座“重要”是一个更难分析。您可能希望看一下:http://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Gyulassy08.pdf以获得一些指导。

- 迈克尔

答案 1 :(得分:2)

(从猜测数学而不是实践经验)

在每个候选点周围的小块中为表面拟合二次曲线,例如最小二乘法。贴片的大小是控制噪声的一种方法,您可以根据它们与候选点的距离来获得加权点。在矩阵表示法中,您可以将二次表示为x'Ax + b'x + c,其中A是对称的。

二次方在x =(A ^ -1)b / 2时将具有零梯度。如果这不在补丁内,请丢弃它。

如果A同时具有+ ve和-ve特征值,则在x处有一个鞍点。由于A只有2x2,所以最多有两个特征值,你可以忽略它作为零特征值的情况,因此你不能在前一阶段反转它。