- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈夫 霍夫 变换
哈夫变换
利用哈夫变换数钱
clc,close all
A=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(imdilate,消除边界的不连续)
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(M,N,round(sqrt(M^2+N^2)));
for row=1:M
for col=1:N
if(BW3(row,col)~=0)
for x0=1:M
for y0=1:N
r=round(sqrt((row-x0)^2+(col-y0)^2));%半径
if r~=0
H(x0,y0,r)=H(x0,y0,r)+1;%H是累加器,三维矩阵
end
end
end
end
end
end
%为了方便观察,将三维参数矩阵根据半径的不同做成不同的帧,制作成视频
for fn=1:360
[C,map]=gray2ind(mat2gray(H(:,:,fn),[0 90]),100);
mov(fn)=im2frame(C,map);
end
movie2avi(mov,hough.avi)
figure%在matlab内用动画的方式按半径增长的方式显示霍夫变换得到的三维矩阵
for i = 1:50
imshow(mat2gray(H(:,:,i),[0 90]));title(num2str(i)),drawnow
pause(0.3);
end
%另一种表示方法,设定恰当的阈值,将超过阈值的点在三维空间标示出来
figure,
hold on,
[m,n,p]=size(H);
for i=1:m
i
for j=1:n
for k=1:p/4
if(H(i,j,k)50)
colors=H(i,j,k)/125*[1 0 0];
plot3(i,j,k,.,Color,colors,MarkerSize,6);
end
end
end
end
实验结果:
由上图可见,超过累加器阈值50的点聚集为6个不同的小范围空间内,有3个半径接近21,另外3个半径接近25,假设半径小的是5毛,半径大的是1元,则可以得到结论:图中有4.5元。
实验总结:
由于不同钱币半径相差很小(比如5角和1元),所以拍照时必须小心排除阴影的干扰(比如在不同方向的光照下),而且,应该注意相机与钱币的相对角度,使得图片中钱币呈圆形。
附:
视频hough.avi,可以在暴风影音中播放
文档评论(0)