霍夫變換直線檢測的原理
笛卡爾座標(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變換需要的緩衝...