霍夫变换检测圆和直线
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
霍夫变换检测任意形状
一、实验目的
1.掌握MATLAB软件的使用,以及其设计流程;
2.掌握霍夫变换的实现方法;
3.用MATLAB语言设计基于霍夫变换的任意图形的识别。
二、实验仪器或设备
装MATLAB软件的微机一台
三、总体设计原理及流程图
1、程序设计的原理
霍夫变换的基本思想就是把图像平面上的点对应到参数平面上的曲线,最后通过统计特性来解决问题。具有良好的抗噪声性能和对部分遮盖的不敏感等特性。
2、程序流程图
四、主要程序代码
1、霍夫变换检测圆程序
clear all; close all; clc;
% [cr,st]=circle_product;%st(1)->x,st(2)->y,st(3)->r
cr=imread('sample.bmp');%circle1.bmp
figure;
imshow(cr);
[row,range]=size(cr);
p=row*range;a=0;Y=zeros(1,p);Q=zeros(1,p);
for k1=1:1:row
for k2=1:1:range
if cr(k1,k2)==0
a=a+1;
XXX=k2-1;YYY=row+1-k1;
Y(a)=YYY;Q(a)=XXX;
end
end
end
for k3=1:1:p
if Y(k3)==0&Q(k3)==0
break;
end
end
% z=ones(1,5);
% a=1:1:300;b=1:1:300;
% z1=sqrt((a-Q(1)).^2+(b-Y(1)).^2);
% z2=sqrt((a-Q(2)).^2+(b-Y(2)).^2);
% z3=sqrt((a-Q(3)).^2+(b-Y(3)).^2);
% z4=sqrt((a-Q(4)).^2+(b-Y(4)).^2);
% z5=sqrt((a-Q(5)).^2+(b-Y(5)).^2);
% % z1=sqrt((a-Q(1))*(a-Q(1))+(b-Y(1))*(b-Y(1)));
% % Z1=(a-Q(1)).^2+(b-Y(1)).^2;
r0=(abs(z1-z2)<=0.1&abs(z1<=z3)<=0.1&abs(z1<=z4)<=0.1&abs(z1<=z5)<=0.1&abs(z2<=z3)< =0.1&abs(z2<=z4)<=0.1&abs(z2<=z5)<=0.1);
% r=r0.*z1;
% aa=r0.*a;
% bb=r0.*b;
% rrr=round(r(r0~=0))
% aaa=aa(r0~=0)
% bbb=bb(r0~=0)
k7=floor(k3/6);k5=2;
a=1:1:300;b=1:1:300;rrr=zeros(1,p);aaa=zeros(1,p);bb=zeros(1,p);k6=0;as=0;k11=1;
for k5=1:1:k7
k6=0;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%
z1=sqrt((a-Q(k5)).^2+(b-Y(k5)).^2);
z2=sqrt((a-Q(k5+1)).^2+(b-Y(k5+1)).^2);
z3=sqrt((a-Q(k5+2)).^2+(b-Y(k5+2)).^2);
z4=sqrt((a-Q(k5+3)).^2+(b-Y(k5+3)).^2);
z5=sqrt((a-Q(k5+4)).^2+(b-Y(k5+4)).^2);
z6=sqrt((a-Q(k5+5)).^2+(b-Y(k5+5)).^2);
r0=(abs(z1-z2)<=.1&abs(z1<=z3)<=.1&abs(z1<=z4)<=.1&abs(z1<=z5)<=.1&abs(z1<=z6)<=.1& abs(z2<=z3)<=1&abs(z2<=z4)<=.1&abs(z2<=z5)<=.1&abs(z2<=z6)<=.1);
rr=r0.*z1;
aa=r0.*a;
bb=r0.*b;
[m,n]=size(rr);
if rr==zeros(1,n);
as=as+1; continue;
end
[pz1,pz]=size(rr(r0~=0));
rrr=round(rr(r0~=0))
aaa=aa(r0~=0)
bbb=bb(r0~=0)
pz2=pz+k11-1;k9=1;
for k8=k11:pz2
RR(k8)=rrr(k9);
XX(k8)=aaa(k9);
YY(k8)=bbb(k9);
k9=k9+1;
end
k11=k8+1;
% if rr==zeros(1,n);
% as=as+1; continue;
% end
end
% if aa==zeros(1,300)
% as=1
% end
rangex=1:1:range;rowy=1:1:row;[RX,RY]=meshgrid(rangex,rowy);
RT=RX;figure;
mesh(RX,RY,RT);hold on;
plot3(XX,YY,RR,'ko');%%%%%%%%%%%%%%%5
[rhao,nn]=the_max1(XX,YY,RR);
i1=ones(row,range);