HOUGH變換程式部分如下 萬分感激
a=180; %角度的值為0到180度
d=round(sqrt(m^2+n^2)); %影像對角線長度為p的最大值
s=zeros(a,2*d); %存盤每個(a,p)個數
z=cell(a,2*d); %用元胞存盤每個被檢測的點的坐標
for i=1:m
for j=1:n%遍歷影像每個點
if(q(i,j)==255)%只檢測影像邊緣的白點,其余點不檢測
for k=1:a
p = round(i*cos(pi*k/180)+j*sin(pi*k/180));%對每個點從1到180度遍歷一遍,取得經過該點的所有直線的p值(取整)
if(p > 0)%若p大于0,則將點存盤在(d,2d)空間
s(k,d+p)=s(k,d+p)+1;%(a,p)相應的累加器單元加一
z{k,d+p}=[z{k,d+p},[i,j]'];%存盤點坐標
else
ap=abs(p)+1;%若p小于0,則將點存盤在(0,d)空間
s(k,ap)=s(k,ap)+1;%(a,p)相應的累加器單元加一
z{k,ap}=[z{k,ap},[i,j]'];%存盤點坐標
end
end
end
end
end
for i=1:a
for j=1:d*2 %檢查每個累加器單元中存盤數量
if(s(i,j) >90) %將提取直線的閾值設為90
lp=z{i,j};%提取對應點坐標
for k=1:s(i,j)%對滿足閾值條件的累加器單元中(a,p)對應的所有點進行操作
o(lp(1,k),lp(2,k),1)=255; %每個點R分量=255,G分量=0,B分量=0
o(lp(1,k),lp(2,k),2)=0;
o(lp(1,k),lp(2,k),3)=0; %結果為在原圖上對滿足閾值要求的直線上的點賦紅色
end
end
end
end
uj5u.com熱心網友回復:
http://jingyan.baidu.com/article/91f5db1bd040e31c7e05e34d.html轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/99744.html
標籤:圖形處理/算法
