matlab 霍夫直線變換誤差

2021-09-30 17:24:13 字數 1198 閱讀 6153

影象處理中,常常遇到需要對影象中的特定形狀進行識別的情景,如線條、圓弧等,如何有效地將其識別出來,業界常用演算法是霍夫變換,霍夫變換依賴於二值化邊緣影象提供的座標。

直線在二值影象中可由兩個變數顯示,在笛卡爾座標系,由斜率a和截距b進行表示;在極座標系中,可由極徑r和極角θ表示。由於直線在垂直狀態時,斜率無窮大,無法表示,所以轉換到極座標更方便運算。因此,取直線方程的極座標表示式為:

化簡得:

在matlab中,使用hough函式來獲得標準霍夫變換結果,**如下:

%影象e

e=zeros(600,600);

for i=1:499

e(i,500-i)=1;

ende=logical(e);

%函式變換

starttheta=-90;

endtheta=89.5;

step=0.01;

[h,t,r] = hough(e,'rhoresolution',1,'theta',starttheta:step:endtheta);

%熱圖顯示

imshow(mat2gray(h),'xdata',t,'ydata',r,...

'initialmagnification','fit');

title('hough transform of gantrycrane.png');

xlabel('\theta'), ylabel('\rho');

axis on, axis normal, hold on;

colormap(hot);

%計算直線a,b

ma=max(max(h));

[rows,cols]=find(h==ma);

row=mean(rows);col=mean(cols);

theta=(col-1)*step+starttheta;

r=(row-1)+r(1);

a=-cot(theta/180*pi);

b=r/sin(theta/180*pi);

影象e是乙個y=-x+500的直線,霍夫變換結果為y=-x+497.8,誤差較大。

讓人迷惑的是,霍夫空間不應該有負r存在,否則都進入複數域了,所以裡面的門門道道還不是很清楚。

霍夫變換 直線

hough line transform用來做直線檢測 前提條件 邊緣檢測已經完成 平面空間到極座標空間轉換 對於任意一條直線上的所有點來說 變換到極座標中,從 0 360 空間,可以得到r的大小 屬於同一條直線上點在極座標空 r,theta 必然在乙個點上有最強的訊號出現,根據此反算到平面座標中就...

Matlab實現 霍夫變換直線檢測

霍夫變換實現直線檢測 matlab 網上好多不能用,就重新寫了乙個 入口影象為 bw,出口影象為fclc,closebw imread d picture 9 605d53eea243812bb29.jpg bw rgb2gray bw thresh 0.01,0.17 sigma 2 定義高斯引數...

霍夫變換檢測直線

對於結構化道路的檢測,常用的方法是採用霍夫變換檢測道路中的直線段。一條直線可以看做是影象上的若干個畫素點組成,也可以用一條直線方程來表示,如 y kx b,那麼霍夫變換檢測直線段其實是將影象畫素點空間變換到引數空間,對於直線來說就是引數 k,b 也可以用來檢測其他形狀如圓和橢圓,只是引數空間表示不一...