1. 程式人生 > >霍夫變換的一些理解

霍夫變換的一些理解

霍夫變換其實就是座標變換,將實際影象的xy投影到引數空間,有多少個引數就投影到多少維空間,然後利用投票演算法來決定所需的引數。

最簡單的霍夫變換就是直線檢測,y=kx+b。這裡引數就是k,b,所以它是一個二維引數空間,我們可以建立一個“投票器”,其實就是一個二維陣列。

b=y-kx 這麼寫比較容易分辨引數空間,但是當直線豎直時我們就求解不到k,b引數所以我們利用極座標公式r=x*sin(a)+y*cos(a)  a--<-pi~pi> 

這樣我們得到r和a兩個引數,同樣的還是投票二維引數空間。

第一步就是尋找邊緣,可以用sobel也可以用canny。

第二步將邊緣的點xy分別帶入極座標公式,帶入不同的a分別求出r,對不同的a和r,在投票器中進行投票,比如在(0,0)點 a為pi/20時 r為30 就將投票器中表示 (pi/20,30)的點加1,這樣當有一個點超過設定閾值票數時,我們就可以認定其為直線。

第三步就可以將引數帶回笛卡爾座標空間,影象中標明即可。

當然找圓也一樣。

而廣義霍夫變換就將這個引數空間擴充套件到橢圓甚至所有有方程的輪廓中,不管多少維引數都能將其找出,不過是時間比較浪費,其實霍夫變換的尋找方法類似於蠻力尋找,只不過利用數學方法提取而已,時間耗費相當可觀。