【问题标题】:Determine if a set of points lie on a regular grid确定一组点是否位于规则网格上
【发布时间】:2010-07-21 06:39:10
【问题描述】:

问题:假设您在 2D 平面中有一组点。我想知道这组点是否位于规则网格上(如果它们是 2D 晶格的子集)。我想要一些关于如何做到这一点的想法。

现在,假设我只关心这些点是否形成一个轴对齐的矩形网格(底层格子是矩形的,与 x 和 y 轴对齐),并且它是一个完整的矩形(晶格的子集有一个没有孔的矩形边界)。任何解决方案都必须非常有效(优于 O(N^2)),因为 N 可以是数十万或数百万。

上下文:我编写了一个 2D 矢量场图生成器,它适用于任意采样的矢量场。如果采样在规则网格上,则有更简单/更有效的插值方案来生成绘图,我想知道何时可以使用这种特殊情况。特殊情况足够好,值得做。该程序是用 C 语言编写的。

【问题讨论】:

  • 让我更好地理解您的问题:您对晶格基向量有何假设?它们的长度相同吗?它们是正交的吗?他们是(1,0)(0,1)

标签: math geometry computational-geometry


【解决方案1】:

这可能很愚蠢,但是如果您的点位于规则网格上,那么坐标的傅里叶变换中的峰值不会都是网格分辨率的精确倍数吗?您可以对 X 和 Y 坐标进行单独的傅立叶变换。如果网格上没有孔,那么我认为 FT 将是一个 delta 函数。 FFT 为 O(nlog(n))。

附言我会留下这个作为评论,但我的代表太低了..

【讨论】:

    【解决方案2】:

    不太确定这是否是您所追求的,但是对于平面上的 2d 点的集合,您始终可以将它们放在矩形网格上(无论如何都要精确到点的精度),问题可能出在它们的网格上fit to 的点可能过于稀疏,无法为您的算法提供任何好处。

    要找到适合一组点的矩形网格,您基本上需要找到所有 x 坐标的GCD 和所有 y 坐标的 GCD,原点位于 xmin,ymin 这应该是 O( n (记录 n)^2) 我想。

    您如何确定此网格是否过于稀疏尚不清楚

    【讨论】:

      【解决方案3】:

      如果所有点都仅来自网格上的交叉点,那么您的一组点中的 hough transform 可能会对您有所帮助。如果您发现最常出现两组相互垂直的线(这意味着您在四个相隔 90 度的 theta 值处发现峰值)并且在伽马空间中发现重复峰值,那么您就有了一个网格。否则不行。

      【讨论】:

        【解决方案4】:

        这是一个适用于 O(ND log N) 的解决方案,其中 N 是点数,D 是维度数(在您的情况下为 2)。

        1. 为 N 个数字分配 D 数组空间:X、Y、Z 等(时间:O(ND))
        2. 遍历您的点列表并将 x 坐标添加到列表 X,将 y 坐标添加到列表 Y 等(时间:O(ND))
        3. 对每个新列表进行排序。 (时间:O(ND log N))
        4. 计算每个列表中唯一值的数量,并确保整个列表中连续唯一值之间的差异相同。 (时间:O(ND))
        5. 如果
          • 每个维度中的唯一值是等距的,并且
          • 如果每个坐标的唯一值个数的乘积等于原始点的个数(length(uniq(X))*length(uniq(Y))* ... == N,

        那么这些点在一个规则的矩形网格中。

        【讨论】:

        • 我知道这个问题很老,但我正在解决完全相同的问题(从采样点插入矢量场)并且想知道是否有更好的解决方案。
        【解决方案5】:

        假设网格由方向 Or(在 0 和 90 度之间)和分辨率 Res 定义。您可以计算一个成本函数来评估网格(Or, Res) 是否符合您的观点。例如,您可以计算每个点到网格中最近点的平均距离。

        然后你的问题是找到最小化成本函数的 (Or, Res) 对。为了缩小搜索空间并提高 ,可以使用一些启发式方法来测试“好”候选网格。

        这种方法与 jilles 提出的 Hough 变换中使用的方法相同。 (Or, Res) 空间相当于霍夫的伽马空间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-20
          • 1970-01-01
          • 1970-01-01
          • 2015-10-25
          相关资源
          最近更新 更多