资源描述:
《哈夫 霍夫 变换》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、哈夫变换1、利用哈夫变换数钱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,消除边界的不连续')BW=imclearborder(BW);figure,subplot(131),imshow(BW),title('imclearborder,清除边界上不相关部分')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%为了方便观察,将三维参数矩阵根据半径的不同做成不同的帧,制作成视频forfn=1:360[C,map]=gray2ind(mat2gray(H(:,:,fn),[090]),100);
4、mov(fn)=im2frame(C,map);endmovie2avi(mov,'hough.avi')figure%在matlab内用动画的方式按半径增长的方式显示霍夫变换得到的三维矩阵fori=1:50imshow(mat2gray(H(:,:,i),[090]));title(num2str(i)),drawnowpause(0.3);end%另一种表示方法,设定恰当的阈值,将超过阈值的点在三维空间标示出来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实验结果:由上图可见,超过累加器阈值50的点聚集为6个不同的小范围空间内,有3个半径接近21,另外3个半径接近25,假设半径小的是5毛,半径大的是1元,则可以得到结论:图中有4.5元。实验总结:由于不同钱币半径相差很小(比如5角和1元),所以拍照时必须小心排除阴影的干扰(比如在不同方向的光照下),而且,应该注意相机与钱币的相对角度,使得图片中钱币呈圆形。附:视频houg
6、h.avi,可以在暴风影音中播放