OpenCV中概率Hough变换的具体实现是什么?

时间:2010-11-30 04:02:23

标签: opencv hough-transform

有没有人知道OpenCV实现中的概率Hough变换的特定算法?我的意思是,是否有关于算法的参考文件或文档?

为了得到这个想法,我当然可以查看源代码,但我想知道是否有任何关于它的文档。 - 它不在源代码的注释中(OpenCV 1.0)。

谢谢!

-Jin

5 个答案:

答案 0 :(得分:7)

OpenCV文档指出,算法基于J Matas等人的“使用渐进概率霍夫变换对线进行稳健检测”。这与维基百科上描述的RHT完全不同。

这篇论文似乎没有在互联网上免费提供,但你可以从Elsevier中获取它

答案 1 :(得分:2)

OpenCV 2.4.4中HoughLinesProbabilistic的源代码包含内联注释,解释了所涉及的各个步骤。

https://github.com/Itseez/opencv/blob/master/modules/imgproc/src/hough.cpp

答案 2 :(得分:1)

第6节中的文章Line Detection by Hough transformation可能很有用。

答案 3 :(得分:1)

这是Matas等人的一篇相当简洁的论文。它描述了这种方法,正如其他人所提到的,它确实与随机霍夫变换完全不同:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.40.2186&rep=rep1&type=pdf

(不知道这个链接有多长时间有效。它来自citeseer,不会指望它明天会消失,但谁知道......)

我快速查看了hough.cpp中的实现icvHoughLinesProbabilistic(),因为我将使用它:-)看起来相当简单,无论如何,我的主要兴趣是它是否在最小方块线拟合中结束 - 它没有,这很好。这只是意味着,如果需要获得准确的线段,可能需要使用OpenCV返回的起点/终点和隐含​​线参数来从整个点集中选择相关点。我首先使用相当保守的距离阈值,并在这些点上以较小的阈值运行RANSAC / MSAC。最后,像往常一样在inlier-set中插入一条线,例如使用OpenCV的cvFitLine()。

答案 4 :(得分:-1)

这是一篇关于随机Hough变换的文章,我认为它与OpenCV中使用的“概率Hough变换”相同 http://en.wikipedia.org/wiki/Randomized_Hough_Transform

基本上,你没有为所有点填充累加器,而是选择一组具有特定条件的点来填充Hough变换。

结果是,有时候,如果开始时没有足够的分数,你可能会错过实际的线路。如果你有一些线性结构,我猜你想要使用它,这样大多数点都是多余的。 参考文献2:L。Xu,E。Oja和P. Kultanan,“一种新的曲线检测方法:随机Hough变换(RHT)”,Pattern Recog。快报。 11,1990,331-338。

我还读到了一些非常不同的方法,其中算法需要两个点并计算这两个点中间的点。如果该点是一个边缘点,那么我们将累积该行的bin。这显然非常快,但你假设有一个非稀疏的矩阵,因为如果没有足够的边缘点可以很容易地错过线。