有没有人知道OpenCV实现中的概率Hough变换的特定算法?我的意思是,是否有关于算法的参考文件或文档?
为了得到这个想法,我当然可以查看源代码,但我想知道是否有任何关于它的文档。 - 它不在源代码的注释中(OpenCV 1.0)。
谢谢!
-Jin
答案 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。这显然非常快,但你假设有一个非稀疏的矩阵,因为如果没有足够的边缘点可以很容易地错过线。