霍夫變換檢測直線

2021-08-20 18:44:46 字數 1532 閱讀 5302

對於線性目標提取時,霍夫變換是個很好的手段,博主在這裡做了**實驗,在乙個影象中畫上圓和矩形,通過霍夫變換提取矩形的邊緣。編譯環境為matlab2014a,**如下。

%%%%%%%%%%%%%%%%%%%%%%%霍夫變換,找到矩形影象的邊界,用彩色表示出來,矩形和圓不重疊

clc; clear all; close all;

i = zeros(256, 256);

[r, c] = size(i);

i(floor(1/5*r:4/5*r), floor(1/5*c:2/5*c)) = 1;

x = linspace(-c/2,c/2,c);

y = linspace(-r/2,r/2,r);

[x,y] = meshgrid(x,y);

d = sqrt((x-40).^2 + y.^2);

i(d<=40) = 1;

bw = edge(i,'sobel');

%% 霍夫變換

[h,t,r] = hough(bw);

imshow(h,,'xdata',t,'ydata',r,'initialmagnification','fit');

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

axis on,axis normal, hold on;

%% 提取極值點

p = houghpeaks(h,4,'threshold',ceil(0.1*max(h(:)))); %提取4個極值點,threshold為閾值設定,返回行列座標

x = t(p(:,2)); %橫座標

y = r(p(:,1)); %縱座標

plot(x,y,'s','color','white');

%% 找圖中的線

% 找到線段

lines = houghlines(bw,t,r,p,'fillgap',4,'minlength',7);%fillgap,小於指定值時,合併線段。minlength,比制定值小的線段丟棄

figure, imshow(i), hold on

max_len = 0;

for k = 1:length(lines)

xy = [lines(k).point1; lines(k).point2];

plot(xy(:,1),xy(:,2),'linewidth',2,'color','green');

% 畫線段的起始和終止點

plot(xy(1,1),xy(1,2),'x','linewidth',2,'color','yellow');

plot(xy(2,1),xy(2,2),'x','linewidth',2,'color','red');

end

結果如下

霍夫變換檢測直線

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

霍夫變換 檢測直線

將笛卡爾座標系的直線用統計展示 座標系a中的點 座標系b中的線 座標系a中的線 座標系b中的點 a中多點的連線 b中多曲線的交點 先理解這樣乙個思維 那麼x y座標系中,點a對應k b座標系的綠直線,點b對應k b座標系的紅直線,連線a b兩點的直線對應,紅綠直線的交點 這裡呼應了上一部分第4點 直...

4 霍夫變換直線檢測

定義 霍夫變換 hough transform 是影象處理中的一種特徵提取技術,可以識別影象中的幾何形狀。它將影象空間中的特徵點對映到引數空間進行投票,通過檢測累計結果的區域性極值點得到乙個符合某特定形狀的點的集合。經典霍夫變換用來檢測影象中的直線,後來霍夫變換擴充套件到任意形狀物體的識別,多為圓和...