【问题标题】:Parallel Line detection using Hough Transform, OpenCV and python使用 Hough 变换、OpenCV 和 python 进行平行线检测
【发布时间】:2018-07-18 12:47:31
【问题描述】:

我需要关于我一直在研究的算法的帮助。我正在尝试检测阈值图像中的所有线条,检测所有线条,然后仅输出平行的线条。阈值图像输出我感兴趣的对象,然后我通过一个精巧的边缘检测器过滤这个图像。然后这个边缘图像通过概率霍夫变换。现在,我希望算法能够检测任何图像中的平行线。我想通过尝试检测所有线的坐标并计算它们的斜率(然后是角度)来做到这一点。平行线必须具有相同或几乎相同的角度,这样我只能输出具有相同角度的线。我也许可以在图像中画一条假想的线,然后将其用作图像中所有检测到的线的参考?我只是不明白如何使用通过函数 cv2.HoughLinesP() 检测到的所有线的坐标。这个函数的文档说输出是一个 4D 数组,这让我很困惑。这是我的代码的一部分:

通过概率霍夫变换进行线检测

rho_res = .1 # [pixels]

theta_res = np.pi / 180. # [radians]

threshold = 50 # [# votes]

min_line_length = 100 # [pixels]

max_line_gap = 40 # [pixels]

lines = cv2.HoughLinesP(edge_image, rho_res, theta_res, threshold, np.array([]),

                        minLineLength=min_line_length, maxLineGap=max_line_gap)

画线

    if lines is not None:
                for i in range(0, len(linesP)):
                    coords = lines[i][0]
                    slope = (float(coords[3]) - coords[1]) / (float(coords[2]) - coords[0])
                    cv2.line(img, (coords[0], coords[1]), (coords[2], coords[3]), (0,0,255), 2, cv2.LINE_AA)

知道如何推断所有检测到的线,然后只输出平行的线吗?我在网上尝试了一些算法,但似乎都没有。同样,我的问题是理解和使用函数 cv2.HoughLinesP() 的输出变量。我还找到了一个应该计算斜率的代码。我试过了,但只是给了我一个值(一个斜率)。我想要图像中所有线条的斜率。

【问题讨论】:

    标签: python algorithm opencv image-processing hough-transform


    【解决方案1】:

    我只是不明白如何使用通过函数 cv2.HoughLinesP() 检测到的所有线的坐标。这个函数的文档说输出是一个 4D 数组,这让我很困惑。

    4D 数组只是检测到的线的输出向量。每条线由一个 4 元素向量 (x1, y1, x2, y2) 表示,其中 (x1,y1) 和 (x2, y2) 是每个检测到的线段的终点。

    请参阅附图以了解这些含义。请记住,这些协调是在图像空间中。

    【讨论】:

      【解决方案2】:

      将霍夫变换投影到角度轴上。这为您提供了作为 theta 函数的一维信号,该信号与该方向的“线量”成正比。该信号中的峰值表示具有许多平行线的方向。找到最大的峰值,这会给你一个 theta。

      现在回到 Hough 变换图像,用这个 theta 值检测峰值(也许允许一点点摆动)。现在你将在这个方向上拥有所有平行线。

      抱歉,我无法为您提供适用于 cv2.HoughLinesP 的代码,我不知道此功能。我希望这个描述能给你一个起点。

      【讨论】:

        【解决方案3】:

        使用atan2 函数计算0..Pi 范围内所有线的斜率(角度)。要通过正角度限制范围,请将Pi 添加到负结果中。

        按斜率对结果进行排序。遍历排序列表,为接近的值建立联合——这些线几乎平行。请注意,对于略有不同的邻居值,您可能有很长的系列,但系列的开始和结束可能会有很大差异。所以使用一些(角度)阈值来打破系列运行。

        【讨论】:

          猜你喜欢
          • 2019-03-19
          • 1970-01-01
          • 2011-09-12
          • 1970-01-01
          • 2013-03-24
          • 2011-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多