霍夫线变换 - 45度角的人工制品

时间:2015-11-29 13:35:18

标签: c++ opencv edge-detection hough-transform

我在OpenCV(c ++)中实现了Hough Lines Transform,我在Hough Space中得到了奇怪的文物。下图为霍夫空间。距离rho在行中描绘,而180列表示从0到179度的角度。如果放大第45和135列,则会看到一条垂直线,其中包含交替的暗和亮像素。 http://imgur.com/NDtMn6S

对于更高的阈值,可以很好地检测到栅栏的线条,但是当我降低阈值时,最终图片中的伪影可以看作是45°或135°旋转的线条: Detected lines for medium threshold

起初我认为在我的Hough Lines方法的实现中是一个错误,但是使用OpenCV的Hough Line方法得到类似的中等阈值线。使用Canny而不是Sobel时,我也遇到了同样的问题。

所以问题是:为什么我会得到这些文物,我怎么能摆脱它们呢?我无法找到任何关于此的信息,我们将不胜感激。

这是我在OpenCV Hough Lines方法中使用的代码:

module Tests.Units

open FsUnit
open NUnit.Framework
open NUnit.Core.Extensibility

open FsCheck.NUnit
open FsCheck.NUnit.Addin
open FsCheck

let add x y = (x + y)

let commutativeProperty x y = 
    let result1 = add x y
    let result2 = add y x // reversed params
    result1 = result2

[<Test>]
let ``When I add two numbers, the result should not depend on parameter order``()=
    Check.Quick commutativeProperty

[<Test>]
let ``add two numbers`` () =
    add 2 3 |> should equal (5)

2 个答案:

答案 0 :(得分:0)

偶然发现这可能对未来的人有用。

图像反转;该算法正在累积白色像素,显然沿着图像的对角线有更多的像素。您正在寻找的线是黑色的,这意味着它们是零值且不予考虑。

答案 1 :(得分:0)

回答问题-您无法摆脱这种伪影-由于图像的离散特性和像素的网格正交性,它本质上是数学的。唯一的方法是从分析中排除确切的45度。

我找到了来源-下一个问题会产生异常的亮像素:

  • 红点-恰好是45度明亮的异常-您可以看到它们加倍,形成了阶梯状图案-使累加涉及的像素数增加了一倍。
  • 蓝点-恰好为45度的暗淡异常-制作棋盘图案
  • 绿点-44度线-您可以看到它是交替的倍增和象棋图案-可以调节异常。

如果您查看霍夫变换矩阵的整个图像,您会发现亮度在整个图像上的变化是如何缓慢的-表示根据角度缓慢改变此交替比。但是,由于像素网格的性质,正好在45度角时,此异常非常严重。我还不知道该如何处理...