資源簡介
Matlab檢測消失點源代碼,并且可以實現深度圖填充
代碼片段和文件信息
sourcePic=imread(‘xcv-2.jpg‘);
sourcePic=rgb2gray(sourcePic);
sourcePic=im2double(sourcePic);
%使用水平和垂直Sobel算子自動選擇閾值?
edgePic=edge(sourcePic‘sobel‘‘horizontal‘);?
figureimshow(edgePic)title(‘水平圖像邊緣檢測‘);?%?顯示邊緣探測圖像?
edgePic=edge(sourcePic‘sobel‘‘vertical‘);?
figureimshow(edgePic)title(‘垂直圖像邊緣檢測‘);?%?顯示邊緣探測圖像?
edgePic=edge(sourcePic‘sobel‘);?
[heightwidth]=size(edgePic);?
?%圖像中直線的個數
?LINE_COUNT?=?100;
?
?%?Hough變換檢測直線,g(x)=(ap)為邊界點對應的平面??
?ma=180;?%a的值為0到180度??
?mp=round(sqrt(height^2+width^2));?%對應P的最大值??
?npc=zeros(ma2*mp);?%用于記錄(ap)對應的點的個數??
?
?MAP=zeros(height?width);
?
?npp=cell(ma2*mp);?%用于記錄(ap)對應的點的坐標??
?
?for?i=1:height?%計算(ap)的值,并做相應記錄??
?????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;???????????????????????%得到的直線的數目
LPC?=?zeros(LINE_COUNT6);??????%直線的參數集合?元素為?[Number][k][b][a][p][DP]???分別為直線的:?編號?斜率?截距?角度a?弦長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));
????????????????%保存直線的參數,順序為?編號?(kb)?(ap)
????????????????LNum?=?LNum?+?1;
????????????????
????????????????LPC(index1)?=?LNum;%存儲直線的編號
????????????????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(‘檢測出的直線圖‘);
%求出總共有多少交點
InterCount?=?LNum*(LNum?-?1)*0.5;
LInter?=?zeros(InterCount4);???????????%直線的交點集合?元素為?兩條相交直線的編號?ij?和?交點坐標?xy?.?有?i?????????????????????????????????????????%元素個數為?n*(n?-?1)/2
%下面的代碼是求直線的交點
T?=1;
LIC?=?0;????????????????????????????????%直線交點的個數
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)????????%如果斜率之差太小,就可以認為這兩條直線平行而沒有交點。
????????????
????????????LIC?=?LIC?+?1;??????????????%直線交點個數加一
????????????
????????????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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%以下的部分是求消失點和消失線的參數
%%%
- 上一篇:matlab混合高斯背景建模
- 下一篇:基于MATLAB的MIMO通信系統仿真
評論
共有 條評論