霍夫变换检测圆和直线

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档