opencv2.4.9中HoughlinesP源碼中的疑問解析!

相信大部分人都看過這篇文章:

Opencv2.4.9源碼分析——HoughLinesP :https://blog.csdn.net/zhaocj/article/details/40047397

趙老師分析的很詳細也很深入,但是對於初學者來說,還是有些死角沒覆蓋到。文章解答兩個問題:

1、rho的數量

numrho = cvRound(((width + height) * 2 + 1) / rho);

爲啥角度的個數就是 numangle = cvRound(CV_PI / theta);

而距離的個數就不能是圖像對角線的長度/rho呢?

回想一下映射公式:

\rho =xcos\theta +ysin\theta

x和y都是正的,而sin和cos結果是正負的,因此申請空間的時候,應該是實際距離的2倍。這個2倍沒毛病,那爲啥不是對角線的長度,而是(width+height)?我也沒弄明白,是不是爲了整齊,方便後面計算地址的時候方便?還是因爲width和height是未知的,並不知道xcos\theta +ysin\theta的最大值是多少,索性就兩者相加,肯定超不過這個範圍呢?

2 shift到底是幹啥的?

,<<shift到底是幹啥的?

從計算dy的時候發現:

dy0 = cvRound( b*(1 << shift)/fabs(a) );

這個應該是一種快速的計算小數的方法,精度是1/(2^16),這個就是b/a*(2^16),但是是在完全的整數情況下計算的,如果計算平臺是DSP,支持硬件浮點運算的話,那就隨意去計算這個dy dx了,小數就小數唄,反正都是一個指令週期,但是爲了適應不同平臺,採用純整數計算的方法,達到高精度的計算,算是很巧妙的想法了!後面在搜索的時候,加完dy dx後,就又向右移動了16bit, 相當於是隻截取整數部分,小數部分全部截斷:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章