我一直在研究card.io的算法,在阅读Hough转换脚本时遇到一些困难。
对于霍夫变换,需要设置累加器,该累加器是一个将投票存储在(rho,theta)空间中的网格。
在card.io-dmz/cv/hough.cpp
(https://github.com/card-io/card.io-dmz/blob/master/cv/hough.cpp#L99)第99行中,表示numrho
的rho数由
numrho = cvRound(((width + height) * 2 + 1) / rho);
此处width
和height
是ROI的尺寸,而rho
是距离分辨率。
问题:我不明白为什么分子是(width + height) * 2 + 1
。
我的猜测是+ 1
将计算零值,而* 2
将同时计算+ ve rho和-ve rho。
但是我仍然不明白为什么出现width + height
。我认为用sqrt(width*width + height*height)
代替它是更直观的,这是rho中可能的最大值。
此设置也用于OpenCV(请参见此链接:https://github.com/opencv/opencv/blob/master/modules/imgproc/src/hough.cpp#L128)
任何帮助将不胜感激。谢谢