資源描述:
《哈夫 霍夫 變換》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、哈夫變換1、利用哈夫變換數(shù)錢clc,closeallA=imread('money2.jpg');A=rgb2gray(A);A=imresize(A,0.25);figure,subplot(131),imshow(A),title('原圖')BW=edge(A,'roberts',0.04);subplot(132),imshow(BW),title('Roberts,thresh=0.04')se1=strel('square',3);BW=imdilate(BW,se1);subplot(133),imshow(BW),title('im
2、dilate,消除邊界的不連續(xù)')BW=imclearborder(BW);figure,subplot(131),imshow(BW),title('imclearborder,清除邊界上不相關(guān)部分')BW2=imfill(BW,'holes');subplot(132),imshow(BW2),title('imfill,填補空洞')se1=strel('square',3);BW3=bwperim(BW2);subplot(133),imshow(BW3),title('bwperim,提取邊緣')[M,N]=size(A);H=zeros
3、(M,N,round(sqrt(M^2+N^2)));forrow=1:Mforcol=1:Nif(BW3(row,col)~=0)forx0=1:Mfory0=1:Nr=round(sqrt((row-x0)^2+(col-y0)^2));%半徑ifr~=0H(x0,y0,r)=H(x0,y0,r)+1;%H是累加器,三維矩陣endendendendendend%為了方便觀察,將三維參數(shù)矩陣根據(jù)半徑的不同做成不同的幀,制作成視頻forfn=1:360[C,map]=gray2ind(mat2gray(H(:,:,fn),[090]),100);
4、mov(fn)=im2frame(C,map);endmovie2avi(mov,'hough.avi')figure%在matlab內(nèi)用動畫的方式按半徑增長的方式顯示霍夫變換得到的三維矩陣fori=1:50imshow(mat2gray(H(:,:,i),[090]));title(num2str(i)),drawnowpause(0.3);end%另一種表示方法,設定恰當?shù)拈撝?,將超過閾值的點在三維空間標示出來figure,holdon,[m,n,p]=size(H);fori=1:miforj=1:nfork=1:p/4if(H(i,j,k
5、)>50)colors=H(i,j,k)/125*[100];plot3(i,j,k,'.','Color',colors,'MarkerSize',6);endendendend實驗結(jié)果:由上圖可見,超過累加器閾值50的點聚集為6個不同的小范圍空間內(nèi),有3個半徑接近21,另外3個半徑接近25,假設半徑小的是5毛,半徑大的是1元,則可以得到結(jié)論:圖中有4.5元。實驗總結(jié):由于不同錢幣半徑相差很?。ū热?角和1元),所以拍照時必須小心排除陰影的干擾(比如在不同方向的光照下),而且,應該注意相機與錢幣的相對角度,使得圖片中錢幣呈圓形。附:視頻houg
6、h.avi,可以在暴風影音中播放