执行Canny边缘检测两次 - >更好的线路检测?

时间:2014-01-17 14:41:09

标签: emgucv edge-detection hough-transform

我正在使用EmguCV(OpenCV的.NET版本)开展项目,我正在使用概率Hough变换来查找行。

所以起初我正在执行canny-operator。然后进行霍夫变换。

Gray cannyThreshold = new Gray(50);
Gray cannyThresholdLinking = new Gray(300);

Image<Gray, Byte> cannyEdges = gray.Canny(cannyThreshold, cannyThresholdLinking);

LineSegment2D[] linesFound_temporary = cannyEdges.HoughLines
(
    cannyThreshold,         // 1. Parameter
    cannyThresholdLinking,  // 2. Parameter
    1,                      // 3. Parameter
    Math.PI / 360.0,        // 4. Parameter
    gray.Width * 0.2,       // 5. Parameter
    gray.Width * 0.4,       // 6. Parameter
    gray.Width * 0.1        // 7. Parameter
)[0];

后来我意识到HoughLines-Method已经集成了canny边缘检测。

然而,当我使用额外的canny检测而不是将其遗漏时,我的线检测结果更好,更稳定。

任何人都可以向我解释,为什么会这样?或者有没有人经历过同样的事情?

1 个答案:

答案 0 :(得分:0)

我在做一个项目时经历了同样的事情。我认为它取决于赋予两个函数的参数。如果第一个canny删除太多信息而没有删除行,则第二个函数会很糟糕。如果你做了“第一次通过”,删除了大部分信息但留下了非常明显的线条,那么霍夫线几乎没什么可做的。但我发现通过在第一时间调整Hough Line的参数可以获得几乎相同的结果。

希望它有所帮助!