資源簡(jiǎn)介
運(yùn)用到邊沿檢測(cè),霍夫變換等
代碼片段和文件信息
sourcePic=imread(‘xcv-2.jpg‘);
sourcePic=rgb2gray(sourcePic);
sourcePic=im2double(sourcePic);
%使用水平和垂直Sobel算子自動(dòng)選擇閾值?
edgePic=edge(sourcePic‘sobel‘‘horizontal‘);?
figureimshow(edgePic)title(‘水平圖像邊緣檢測(cè)‘);?%?顯示邊緣探測(cè)圖像?
edgePic=edge(sourcePic‘sobel‘‘vertical‘);?
figureimshow(edgePic)title(‘垂直圖像邊緣檢測(cè)‘);?%?顯示邊緣探測(cè)圖像?
edgePic=edge(sourcePic‘sobel‘);?
[heightwidth]=size(edgePic);?
?%圖像中直線的個(gè)數(shù)
?LINE_COUNT?=?100;
?
?%?Hough變換檢測(cè)直線,g(x)=(ap)為邊界點(diǎn)對(duì)應(yīng)的平面??
?ma=180;?%a的值為0到180度??
?mp=round(sqrt(height^2+width^2));?%對(duì)應(yīng)P的最大值??
?npc=zeros(ma2*mp);?%用于記錄(ap)對(duì)應(yīng)的點(diǎn)的個(gè)數(shù)??
?
?MAP=zeros(height?width);
?
?npp=cell(ma2*mp);?%用于記錄(ap)對(duì)應(yīng)的點(diǎn)的坐標(biāo)??
?
?for?i=1:height?%計(jì)算(ap)的值,并做相應(yīng)記錄??
?????for?j=1:width??
?????????if(edgePic(ij)==1)??
?????????????for?k=1:ma
?????????????????p?=?round(i*cos(pi*k/180)+j*sin(pi*k/180));
?????????????????npc(kmp+p)=npc(kmp+p)+1;
?????????????????npp{kmp+p}=[npp{kmp+p}[ij]‘];
?????????????end??
?????????end??
?????end??
?end
LNum?=?0;???????????????????????%得到的直線的數(shù)目
LPC?=?zeros(LINE_COUNT6);??????%直線的參數(shù)集合?元素為?[Number][k][b][a][p][DP]???分別為直線的:?編號(hào)?斜率?截距?角度a?弦長(zhǎng)p?是否為消失線
index?=?1;
%提取直線的閥值
LT?=?90;
for?i=1:ma??????
?????for?j=1:mp*2??
?????????if(npc(ij)?>?LT)?
?????????????
????????????????lk=?-cot(pi*i/180);
????????????????lb=?round((j?-?mp?-?1)/sin(pi*i/180));
????????????????%保存直線的參數(shù),順序?yàn)?編號(hào)?(kb)?(ap)
????????????????LNum?=?LNum?+?1;
????????????????
????????????????LPC(index1)?=?LNum;%存儲(chǔ)直線的編號(hào)
????????????????LPC(index2)?=?lk;
????????????????LPC(index3)?=?lb;
????????????????LPC(index4)?=?i;
????????????????LPC(index5)?=?j;
????????????????
????????????????index?=?index?+?1;
????????????????
????????????????lp=npp{ij};
????????????????for?k=1:npc(ij)
?????????????????????MAP(lp(1k)lp(2k))=1;??
????????????????end
?????????end??
?????end??
end??
figureimshow(MAP);title(‘檢測(cè)出的直線圖‘);
%求出總共有多少交點(diǎn)
InterCount?=?LNum*(LNum?-?1)*0.5;
LInter?=?zeros(InterCount4);???????????%直線的交點(diǎn)集合?元素為?兩條相交直線的編號(hào)?ij?和?交點(diǎn)坐標(biāo)?xy?.?有?i?????????????????????????????????????????%元素個(gè)數(shù)為?n*(n?-?1)/2
%下面的代碼是求直線的交點(diǎn)
T?=1;
LIC?=?0;????????????????????????????????%直線交點(diǎn)的個(gè)數(shù)
for?i?=?1:LNum?-?1
????for?j?=?i?+?1:LNum
????????
????????k1?=?LPC(i2);
????????b1?=?LPC(i3);
????????k2?=?LPC(j2);
????????b2?=?LPC(j3);
????????
????????dp?=?k1?-?k2;???????????????????%得到兩條直線斜率之差
????????
????????if(abs(dp?-?0)?>?10e-03)????????%如果斜率之差太小,就可以認(rèn)為這兩條直線平行而沒(méi)有交點(diǎn)。
????????????
????????????LIC?=?LIC?+?1;??????????????%直線交點(diǎn)個(gè)數(shù)加一
????????????
????????????X?=?(b2?-?b1)/(k1?-?k2);????%?X?=?(b2?-?b1)/(k1?-?k2)
????????????Y?=?k1?*?X?+?b1;????????????%?Y?=?k1?*?X?+?b1
????????????LInter(LIC1)?=?i;
????????????LInter(LIC2)?=?j;
????????????LInter(LIC3)?=?round(X);
????????????LInter(LIC4)?=?round(Y);
????????????
????????end
????end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%以下的部分是求消失點(diǎn)和消失線的參數(shù)
%%%
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件????????9092??2012-09-04?18:13??All.m
評(píng)論
共有 條評(píng)論