algorithm - 如何通过网格点生成线段

标签 algorithm grid geometry gridlines

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

enter image description here

图片大小为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

我试过霍夫变换来检测网格线。 但我只需要一张图片,点之间的差距被填补(像这样):

enter image description here

enter image description here

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

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

最佳答案

对于每个点,在 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 方向更偏,所以你可能应该使用更大的边距来比较它们。

    您可以摆脱单位向量点积内的归一化

关于algorithm - 如何通过网格点生成线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40623900/

相关文章:

string - 等长字符串的排序算法 C++

c - [QuickSort]递归问题

android - 如何在 achartengine android 中设置网格深度?

grid - ZK网格滚动条问题

actionscript-3 - 抛物线与线段的交点

Python scikits 学习 - 分离超平面方程

algorithm - 重新安排 session 问题 : Where maximum rearrangement can go upto a value k

sql - SQL复制与空值

reactjs - 如何修复必须在 "Failed prop type: The property ` 上使用的 `grid` 的 `container` 间距?

c++ - 圆形和椭圆光栅化算法