影象處理中,常常遇到需要對影象中的特定形狀進行識別的情景,如線條、圓弧等,如何有效地將其識別出來,業界常用演算法是霍夫變換,霍夫變換依賴於二值化邊緣影象提供的座標。
直線在二值影象中可由兩個變數顯示,在笛卡爾座標系,由斜率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 也可以用來檢測其他形狀如圓和橢圓,只是引數空間表示不一...