matlab練習程式(霍夫變換檢測直線斜率)

2022-06-12 14:33:07 字數 2428 閱讀 2898

這個過去用就寫過,這次正好有人問這個演算法,所以在這裡又把c**改為了matlab了。

霍夫變換是把原影象中的直線上的每乙個點轉換到引數空間對應的曲線上,由於每乙個點對應一條曲線,因此在引數空間中所有曲線會相交到乙個點,形成乙個最值。因此原圖尋找直線斜率的問題就變成了引數空間尋找最值的問題了。

**如下:

clear all;

close all;

clc;

%%%以下只是做乙個帶直線的影象而已

r=300

;

jiaodu=30; %更改這個值測試,90

度270度時不管用

jiaodu1=mod(jiaodu,360

);

flag=0

;if jiaodu1>=0 && jiaodu1<90

jiaodu1=jiaodu1;

flag=1

;end

if jiaodu1>=90 && jiaodu1<180

jiaodu1=180-jiaodu1;

flag=2

;end

if jiaodu1>=180 && jiaodu1<270

jiaodu1=jiaodu1-180

; flag=3

;end

if jiaodu1>=270 && jiaodu1<360

jiaodu1=360-jiaodu1;

flag=4

;end

h=floor(r*sin(jiaodu1*pi/180

));w=floor(r*cos(jiaodu1*pi/180

));if

mod(h,2)==0

h=h+1

;end

ifmod(w,2)==0

w=w+1

;end

w=zeros(h,w);

if jiaodu1 ~= 90 && jiaodu1 ~= 270

for i=1

:h

for j=1

:w tmp=floor(j*tan(jiaodu1*pi/180

));

if tmp+1==i

w(i,j)=r;

endend

endelse

for i=1

:h w(i,

1)=r;

endend

if flag==1 || flag==3 %如果角度在1,3

象限,卷積矩陣上下翻轉

w=flipud(w);

end%%

%下面是真正的霍夫變換

img=mat2gray(w); %處理這個影象

[m n]=size(img);

imshow(img);

data=zeros(314,2*(m+n));

for i=1:m %將影象二維空間的乙個點對映到p=x*cos(theta)+y*sin(theta)方程對應的引數空間的一條曲線

for j=1

:n

if img(i,j)==1

for theta=0.01:0.01:3.14

data(round(theta*100),round(i*sin(theta)+j*cos(theta)+m+n))=...

data(round(theta*100),round(i*sin(theta)+j*cos(theta)+m+n))+1

;

endend

endend

theta=0

;ma=0

;for i=1:314

%尋找曲線相交最多的那個點,即找最大值

for j=1:2*(m+n)

if data(i,j)>ma

ma=data(i,j);

theta=i/100

; rou=j-m-n;

endend

endfigure;imshow(data) %形象的顯示引數空間曲線

sr_k=tan(jiaodu*pi/180

) %設定的斜率

re_k=cos(theta)/sin(theta) %求得的斜率

做出的一條直線

引數空間中的曲線

30度時斜率是0.5774,霍夫變換求得的斜率是0.5736。

matlab 霍夫直線變換誤差

影象處理中,常常遇到需要對影象中的特定形狀進行識別的情景,如線條 圓弧等,如何有效地將其識別出來,業界常用演算法是霍夫變換,霍夫變換依賴於二值化邊緣影象提供的座標。直線在二值影象中可由兩個變數顯示,在笛卡爾座標系,由斜率a和截距b進行表示 在極座標系中,可由極徑r和極角 表示。由於直線在垂直狀態時,...

Python的OpenCV霍夫變換圓形檢測

circles cv2.houghcircles image,method,dp,mindist circles param1 param2 minradius maxradius 引數說明 輸出 circles 找到的圓的輸出向量。每個向量被編碼為3元素的浮點向量 x,y,半徑 傳遞引數 imag...

Matlab實現霍夫變換 優化版

thus it is necessary to combine 相同斜率的直線 and connect them.本 提供了matlab下求取經過霍夫變換的直線斜率,並將其聯合,見下方,實驗結果見文末。入口影象為 bw,出口影象為f sigma 2 定義高斯引數 f edge double bw c...