Hough變換 直線檢測原理及其Matlab實現

2021-06-13 20:28:52 字數 2070 閱讀 3114

霍夫變換直線檢測的原理

笛卡爾座標(x,y座標)系上的直線y=kx+b 可以在極座標系上可以用下式表示

r=x cosθ + ysinθ ,

其中r為該原點到該直線的距離,θ

為該直線和x軸的夾角。

那麼可以通過計算每個點x,y上,假設經過該點的直線與x軸為θ ,然後θ 從(1~180度)進行計算,分別得到不同的r值。

最後統計中經過各點,各個角度的直線概率最高的(r,θ)值,

我們認為這個值就是中真正的直線對應的r,

θ值。 也即中直線對應的normal line(法線)長度r及其與x軸的夾角θ

以下是其matlab程式實現。以下程式首先讀取,並得到的大小rows,columns.

然後用counters=zeros(rmax,180)陣列用來統計各個r, θ的概率。

找到概率值最高的r, θ.

然後重新遍歷,當x,y值滿足r=x cosθ + ysinθ 時即認為該點是檢測到的直線上的點。

a=imread('1.bmp');

imshow(a);

a_gray=rgb2gray(a);

%get the image size

[rows,columns]=size(a_gray);

%define and initiate the counters.

rmax=round(sqrt(rows^2+columns^2))

counters=zeros(rmax,180);

%begin to count

tic      %-------------start to timing.

for x=1:columns

for y=1:rows

if(a_gray(y,x)==0)

for m=1:180

r=round(x*cos(m*pi/180)+y*sin(m*pi/180));

if(r0)

counters(r,m)=counters(r,m)+1;

endend

end%end of if(a_gray(y,x)==0)

end%end of y=1;rows

end

toc

%get the line max probable,print the r (distance) and angle

ticcountermax=0

for i=1:rmax

for j=1:180

if(countermax

countermax=counters(i,j);

imax=i;%it's the r ,distance from the original to the line.

jmax=j;%it's the angle bettween the normal line

and the x axis.

endend

endtoc

countermax

imax

jmax

counters(imax,jmax)

x=imax/cos(pi*jmax/180)

y=imax/sin(pi*jmax/180)

%get the line and remove(strip away) the background.

ticfor x=1:columns

for y=1:rows

if(a_gray(y,x)==0)

r=round(x*cos(jmax*pi/180)+y*sin(jmax*pi/180));

if(r==imax)

%only the dot on the line will be dark.

%other dot will be change to be white.

a_gray(y,x)=80;

else

a_gray(y,x)=255;

endelse

a_gray(y,x)=255;

endend

endtoc

imshow(a_gray)

Hough 變換檢測直線

hough 變換檢測直線的基本原理是 對x y 座標系下的每一點 x,y 對應極座標下為 rho x cos theta y sin theta 1 因此,對x y平面內的每一點,對應到極座標系則為一條直線,如果直角座標系下的點共線,則在極座標的直線會相交於一點。因此,求得極座標下相交最多的點,rh...

Hough變換檢測直線

1 基本原理 hough變換是影象處理中從影象中識別幾何形狀的基本方法之一,即它可以檢測已知形狀的目標,而且受雜訊和曲線間斷的影響小。hough變換的基本思想是利用點 線的對偶性。如下圖1所示 從圖1中可看出,x y座標和k b座標有點 線的對偶性。x y座標中的點p1 p2對應於k b座標中的l1...

通過hough變換檢測直線

函式功能 通過hough變換檢測直線 引數說明 imgbinaryin,表示二值圖象 width,表示圖象寬 height,表示圖象高 houghbuf,表示hough變換需要的緩衝區指標 houghwidth,表示hough變換需要的緩衝區的寬 houghheight,表示hough變換需要的緩衝...