2016-11-10 574 views
1

你能給我的rhotheta參數快速定義OpenCV's HoughLines功能RHO的說明和HoughLines THETA參數

void cv::HoughLines ( InputArray image, 
    OutputArray  lines, 
    double rho, 
    double theta, 
    int  threshold, 
    double srn = 0, 
    double stn = 0, 
    double min_theta = 0, 
    double max_theta = CV_PI 
) 

我在doc發現的唯一的事情是:

RHO :累加器的距離分辨率(以像素爲單位)。

θ:累加器角度分辨率弧度。

這是否意味着如果我設置了rho=2那麼我的圖像像素的1/2將被忽略......一種stride = 2?

+0

這是stride_在儲存室,而不是像空間_kind。這是一個2D直方圖。如果是一維直方圖,則與設置每個箱的大小相同。 – Miki

回答

0

要檢測具有霍夫變換的行,最好的方法是用這個圖像上顯示的具有兩個參數rho和theta的方程來表示行。方程式如下:

Xcos⁡(θ)+ Ysin⁡(θ)=ρ

其中(x,y)是行參數。

該寫入在(θ,ρ)參數允許檢測到與位置取決於比寫入少爲Y = A * X + B

(θ,ρ)在這種情況下給出這些離散兩個參數

Hough explanation

+1

這是如何解釋任何事情 –

0

...我已經尋找這幾個小時,仍然沒有找到一個地方,它被整齊地解釋。但是拿起這些東西,我想我已經明白了。

該算法越過每邊緣像素(Canny算子的結果是,例如),並使用等式ρ = x * cosθ + y * sinθ中,出於許多θ值來計算ρ

θ實際步驟由函數參數定義,因此如果使用theta的通常math.pi/180.0值,則該算法將計算在總ρ 180次針對圖像中的僅一個邊緣像素。如果您使用更大的theta,計算將會減少,累加器列/桶數更少,因此找到的線數更少。

另一個參數ρ定義累加器的一行是多麼「胖」。值爲1時,表示您希望累加器行的數量等於可能的最大ρ,這是您正在處理的圖像的對角線。因此,如果對於θ的某些兩個值,您會得到接近的值ρ,但它們仍會進入單獨的累加器桶中,因爲您要精確。對於參數rho的較大值,這兩個值可能會在同一個桶中結束,這將最終爲您提供更多的行,因爲更多桶會有大量的投票計數並因此超過閾值。

一些有用的資源:

http://docs.opencv.org/3.1.0/d6/d10/tutorial_py_houghlines.html

https://www.mathworks.com/help/vision/ref/houghtransform.html

https://www.youtube.com/watch?v=2oGYGXJfjzw