【问题标题】:How to generate line segments by grid points如何通过网格点生成线段
【发布时间】:2016-11-16 04:06:09
【问题描述】:

我正在尝试通过网格点生成网格线段。我有 34 个这样的点:

图片尺寸为720*480,34个网格点,坐标在这里:

323.708 205.925
382.585 206.75
320.296 216.596
381.729 217.499
271.118 227.4
286.04 227.643
301.208 227.631
316.538 228.165
332.195 228.323
348.114 228.828
364.194 229.139
380.893 229.356
397.731 230.219
414.795 230.634
432.307 231.407
312.507 241.026
379.886 242.892
307.735 254.944
378.838 257.705
251.514 268.437
268.271 269.035
285.124 269.701
302.801 270.563
320.684 271.637
339.107 272.332
358.067 273.122
377.46 274.347
397.01 275.033
416.814 276.199
437.558 277.354
297.437 288.028
375.766 292.266
291.296 307.268
374.233 313.316

我已尝试使用霍夫变换来检测网格线。 但我只需要一张填充点之间间隙的图片(像这样):

这样我就可以做下一个工作了。使用霍夫变换有点浪费。

我尝试使用线性插值来填补空白,但我需要手动找到端点。因此,我想知道如何仅通过这些网格点自动生成网格线段。

【问题讨论】:

    标签: algorithm grid geometry gridlines


    【解决方案1】:

    为每个点找到N,S,E,W 方向中的最近点,如果列表中不存在,则将行添加到列表中。如果n 是我看到的点数:

    1. 循环i = <0,n-2>
    2. 循环j = <i+1,n-1>
    3. 每个轴方向

      添加任何尺寸|pnt[i1]-pnt[i1]|小于或等于网格尺寸的线,同时线的方向类似于实际方向NSWE所以:

      abs(dot(direction/|direction|,(pnt[i1]-pnt[i1])/|pnt[i1]-pnt[i1]|))
      

      接近1 或至少大于0.75 如果方向向量不准确。作为您可以开始的方向:

      NS = ( 0.0, 1.0 )
      WE = ( 1.0. 0.0 )
      

      NS 方向更偏离,因此您可能应该使用更大的边距来比较它们。

      您可以摆脱单位向量点积内部的规范化

    【讨论】:

      【解决方案2】:

      您已经知道要点,所以霍夫变换是相当开销的。

      如果只有 34 个(甚至数百个)点,它们形成大约 1000 对,您可以为每一对构建线,然后将这些线聚集在 rho-theta 空间中,无需任何复杂的算法(这种方法是二次的)。您将拥有 4 个大集群,并且不难从这些集群中找到哪些线段(点)是结束线段。

      对于较大的数据集,您可以以随机方式为小的随机点子集形成初始集群,然后将每个点添加到它适合的最佳线(线性方法)

      【讨论】:

        猜你喜欢
        • 2020-02-29
        • 2020-09-16
        • 1970-01-01
        • 1970-01-01
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-13
        相关资源
        最近更新 更多