霍夫變換檢測直線 原理和Matlab實現

2021-07-10 01:43:47 字數 2404 閱讀 5900

霍夫變換本質上是座標變換,如下圖1,左半部分表示直線的xy空間,直線方程為y=m

x+cy=mx+c

y=mx+c

,其中斜率為m,截距為c。右半部分表示將直線從xy空間變換到mc空間,取直線在xy空間上的四點1,2,3,4,在mc空間就是不同斜率和截距的四條直線。

那麼,在mc空間中四條直線的交點處的m值和c值就對應xy空間中直線的m和c。同理,對中的直線來說,將直線中的每個點都變換到變換後空間,找出多條直線相交的點就可以找出變換前空間的直線。

圖1是為了更好理解座標變換的概念,但是在實際應用中是將xy空間變換到極座標系,方程為ρ=x

cos(

θ)+y

sin(

θ)\rho=xcos(\theta)+ysin(\theta)

ρ=xcos

(θ)+

ysin

(θ),如下圖2。

其中r,即ρ

\rho

ρ為原點到直線的垂直距離,θ

\theta

θ為與x軸的夾角。從上述極座標方程可以看出,將該直線變換到ρ

θ\rho\theta

ρθ座標系後將是一系列不同初相、幅度,但是週期均為2

π2\pi

2π的正弦曲線,所有正弦曲線交點處的ρ和θ

\rho和\theta

ρ和θ將代表xy空間中的這條直線。

下圖3為測試影象,是一張簡單但是有代表性的影象。

以下**先根據canny運算元找出的邊緣,將邊緣經過霍夫變換,變換到ρ

θ\rho\theta

ρθ空間,因為圖3中有5條直線,為了演示方便,取前5個交點最多處。

邊緣資訊和相應的霍夫變換結果如下圖4。

上述**找到了5條直線對應的ρ和θ

\rho和\theta

ρ和θ,通過如下**進行反變換在原圖中標記出相應的直線。

% find lines and plot them

lines = houghlines(bw,theta,rho,p,'fillgap',5,'minlength',7);

figure, imshow(img), 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','r');

end

最終結果如下圖5。

參考**

霍夫變換檢測直線

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

霍夫變換檢測直線

對於線性目標提取時,霍夫變換是個很好的手段,博主在這裡做了 實驗,在乙個影象中畫上圓和矩形,通過霍夫變換提取矩形的邊緣。編譯環境為matlab2014a,如下。霍夫變換,找到矩形影象的邊界,用彩色表示出來,矩形和圓不重疊 clc clear all close all i zeros 256,256...

霍夫變換 檢測直線

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