【问题标题】:Group lines with similar slope and y-intercept对具有相似斜率和 y 截距的线进行分组
【发布时间】:2018-02-28 19:25:18
【问题描述】:

在 python 中,我使用霍夫线来检测图像上的线条。它可以很好地检测线条,但source image 是手绘的,在每个线段上产生了许多直线。我想结合具有相似斜率和 y 截距的线来重新创建图像的整体结构。 我知道我可以更改霍夫线参数(阈值、min_length、max_gap)以制作更长的直线,但我想保持霍夫线函数的粒度输出并使用输出线重新构建结构

图像的霍夫线看起来像this

我当前的输出是一个带有线条起点/终点、斜率和 y 截距的字典:

{'slope': -2.0, 'start': (438, 317), 'yintercept': 167.0, 'end': (457, 279)}
{'slope': -8.0, 'start': (580, 414), 'yintercept': 1442.0, 'end': (582, 398)}
{'slope': -5.333333333333333, 'start': (438, 375), 'yintercept': 
{'slope': -1.5, 'start': (492, 215), 'yintercept': 142.5, 'end': (502, 200)}
{'slope': 0.0, 'start': (524, 316), 'yintercept': 152.0, 'end': (536, 316)}
{'slope': 3.0, 'start': (533, 238), 'yintercept': -232.0, 'end': (527, 220)}
{'slope': -1.9142857142857144, 'start': (450, 292), 'yintercept': 164.37142857142857, 'end': (485, 225)}
{'slope': 0.0, 'start': (467, 317), 'yintercept': 153.0, 'end': (523, 317)}

原始输出中有 40 行,但我想合并为 6 行。

我的问题:

  1. 按斜率和 y 截距进行分组的最佳方法是什么?
  2. 如何将相似但不精确的行分组?

我可以按精确斜率分组:

grouper = itemgetter("slope")
    result = []
    for key, grp in groupby(sorted(line_dict, key = grouper), grouper):
        result.append(list(grp))

对此的任何帮助表示赞赏。

【问题讨论】:

  • 将斜率和 y 截距绘制为散点图中的点。然后仔细阅读 This 页面以选择您最喜欢的聚类算法。几年前,我个人曾在我的毕业论文中使用 DBSCAN 处理一些特别难看的数据。
  • 斜率和截距在我看来是很差的功能,斜率可以“炸毁”到无穷大。端点,单位方向向量在我看来是关键特征,“斜率”相似度是单位方向向量的点积的绝对值(假设段“开始”,“结束”实际上不携带线连接/方向信息)
  • 感谢您提供这些提示。我正在使用带有 DBSCAN 方法的单位方向向量。
  • 再次感谢您的帮助,我非常接近得到我想要的集群,我问了一个后续问题here

标签: python opencv image-processing scikit-image


【解决方案1】:

你可以使用 -

norm = np.linalg.norm(b, ord=2, axis=1) 
#b = array of start and end of lines 
# axis 1 = row
print(norm)

并检查范数是否在范围内或低于某个阈值

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多