Hough Transform 的算法思想
生活随笔
收集整理的這篇文章主要介紹了
Hough Transform 的算法思想
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.Hough Transform 的算法思想
在直角坐標系和極坐標系中,點、線是對偶關(guān)系。
即直角坐標系中的點是極坐標系中的線,直角坐標系中的線是極坐標系中的點。反之也成立。
如下圖所示,想要檢測圖像中的直線,可以轉(zhuǎn)化為檢測極坐標系中的點(θ,r)
。
2.Hough空間的表示
如下圖所示,圖像中直線的表示,由斜率和截距表示,而極坐標中用(θ,r)
表示,并且存在下式關(guān)系:
r=cos(θ)?x+sin(θ)?y 對于點 (x0,y0),代入上式,在極坐標中就是一條線(很多對 (θ,r)點): r=cos(θ)?x0+sin(θ)?y0r,θ
就是一對Hough空間的變量表示。
旋轉(zhuǎn)的 θ
不容易表示,若將 r,θ 看成直角坐標空間。一個點 (x0,y0), 就是一個正弦曲線。
r=cos(θ)?x0+sin(θ)?y0 如下圖所示,左圖直角坐標系中的一個點,對應于右圖 r- θ 空間的一條正弦曲線。如下圖,直角坐標系中的多個點,對應于 r
- θ空間的多條正弦曲線。
直角坐標系的三點共線,對應于 r
-θ空間的多線共點。
因此,我們可以通過檢測 r
- θ空間的交集點,來檢測原始空間的線段。
接下來,就是要考慮 將r,θ
離散化,形成離散化的Hough空間,類似于一個矩陣/圖像(如下圖),用于統(tǒng)計交集點的個數(shù)。
3.Hough變換代碼分析
以下是使用Matlab進行直線檢測的代碼。
Hough Transform
首先預處理,轉(zhuǎn)為二值圖像:
I = imread('road.jpg'); I = rgb2gray(I); BW = edge(I,'canny');- 1
- 2
- 3
然后進行霍夫變換:
[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89.5); imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit'); xlabel('\theta'), ylabel('\rho'); axis on, axis normal, hold on;- 1
- 2
- 3
- 4
檢測hough域極值點
P = houghpeaks(H,50,'threshold',ceil(0.3*max(H(:)))); x = T(P(:,2)); y = R(P(:,1)); plot(x,y,'s','color','white');- 1
- 2
- 3
- 4
檢測直線
% Find lines and plot them lines = houghlines(BW,T,R,P,'FillGap',7,'MinLength',100); 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 beginnings and ends of linesplot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');% determine the endpoints of the longest line segmentlen = norm(lines(k).point1 - lines(k).point2);if ( len > max_len)max_len = len;xy_long = xy;end end% highlight the longest line segment plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
實驗結(jié)果
r
- θ空間及前50個極值點:
最終車道直線檢測結(jié)果:
[注] 所有的代碼可以在此處免費下載:http://download.csdn.net/detail/ws_20100/9492054
總結(jié)
以上是生活随笔為你收集整理的Hough Transform 的算法思想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hough变换原始形式-直线检测
- 下一篇: java 中sub,Fn :: Sub中