1. 程式人生 > >Hough變換的直線檢測基礎

Hough變換的直線檢測基礎

一、Hough 變換(直線)

Hough變換是依賴於投票機制的,在引數空間統計原空間下點的貢獻值(投票)得到了累計值,累積量的峰值確定了所要的檢測目標 1。以直線為例,在二維平面X - Y 中,直線方程可以描述為點斜式: y=kx+by=kx+b 若是已知直線的(k,b)那麼也就唯一的確定了平面上的直線。我們把(k,b)所組成的空間理解為引數空間(K,B)。過X-Y平面上的一點(x0,y0)(x_0,y_0)有無數條直線,對應引數空間有無數個點(k,b),他們滿足 y0=kx0+b y_0 = kx_0 +b 也就是引數空間(K,B)上的一條直線。由於直線的斜率可能取值很大,不利於統計計算。如下圖所示,直線可以用θ

,r\theta,r唯一確定。

所以對X-Y平面上的直線方程改為: r=xcosθ+ysinθ r = x cos\theta + y sin\theta 此時,平面X-Y上的一條直線對應引數空間 h(r,θ)h(r,\theta)上的一個點,過X-Y平面上的一個點的所有直線,在引數空間 h(r,θ)h(r,\theta)上得到一條曲線。 注意:

  • 1、上式雖然可以由點的極座標形式推導得出,但是(r,θ)(r,\theta)並非極座標系,仍是笛卡爾座標系下得到的引數。
  • 2、rr是原點到直線的距離,並不會取負值,但是由於θ
    \theta
    取值範圍的原因,rr會有負數的情況。

二、影象變換實現步驟

  • 1 、對影象做二值化或者取邊緣資訊,得到影象ImageImage,這裡假設影象大小為640*480.
  • 2、設定引數的取值範圍:θ\theta 取值[90,89)[-90,89)rr 取值為[800,800][-800,800](直覺上並不會取到-800)rmax=xmax2+ymax2 r_{max} = \sqrt{x_{max}^2 + y_{max}^2}
  • 3、設H(r,θ)H(r,\theta)儲存點(r,θ)(r,\theta)出現的次數。
  • 3、遍歷二值化影象ImageImage,得到第一個非零點 (x0,y0)(x_0,y_0),帶入到: r=x0cosθ+y0sinθ r = x_0 cos\theta + y_0 sin\theta θ\theta 取值[90,89)[-90,89)間隔1,得到一系列點(r,θ)(r,\theta),在相應的H(r,θ)H(r,\theta)加一。依次處理整幅圖片。

三、Opencv 下的測試結果

在這裡插入圖片描述 在這裡插入圖片描述