霍夫变换检测圆和直线.docx

上传人:b****0 文档编号:12593198 上传时间:2023-04-20 格式:DOCX 页数:11 大小:58.73KB
下载 相关 举报
霍夫变换检测圆和直线.docx_第1页
第1页 / 共11页
霍夫变换检测圆和直线.docx_第2页
第2页 / 共11页
霍夫变换检测圆和直线.docx_第3页
第3页 / 共11页
霍夫变换检测圆和直线.docx_第4页
第4页 / 共11页
霍夫变换检测圆和直线.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

霍夫变换检测圆和直线.docx

《霍夫变换检测圆和直线.docx》由会员分享,可在线阅读,更多相关《霍夫变换检测圆和直线.docx(11页珍藏版)》请在冰豆网上搜索。

霍夫变换检测圆和直线.docx

霍夫变换检测圆和直线

霍夫变换检测圆和直线

霍夫变换检测任意形状

一、实验目的

1.掌握MATLAB软件的使用,以及其设计流程;

2.掌握霍夫变换的实现方法;

3.用MATLAB语言设计基于霍夫变换的任意图形的识别。

二、实验仪器或设备

装MATLAB软件的微机一台

三、总体设计原理及流程图

1、程序设计的原理

霍夫变换的基本思想就是把图像平面上的点对应到参数平面上的曲线,最后通过统计特性来解决问题。

具有良好的抗噪声性能和对部分遮盖的不敏感等特性。

2、程序流程图

程序开始

打开图形

基于霍夫曼变换的简单图形识别

霍夫变换检测直线

霍夫变换检测圆

识别得到的图像

保存图像

程序结束

四、主要程序代码

1、霍夫变换检测圆程序

clearall;closeall;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);

fork1=1:

1:

row

fork2=1:

1:

range

ifcr(k1,k2)==0

a=a+1;

XXX=k2-1;YYY=row+1-k1;

Y(a)=YYY;Q(a)=XXX;

end

end

end

fork3=1:

1:

p

ifY(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;

fork5=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);

ifrr==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;

fork8=k11:

pz2

RR(k8)=rrr(k9);

XX(k8)=aaa(k9);

YY(k8)=bbb(k9);

k9=k9+1;

end

k11=k8+1;

%ifrr==zeros(1,n);

%as=as+1;continue;

%end

end

%ifaa==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);holdon;

plot3(XX,YY,RR,'ko');%%%%%%%%%%%%%%%5

[rhao,nn]=the_max1(XX,YY,RR);

i1=ones(row,range);

rhao

center=rhao;

%t2=1.5;t3=1.5;

fork1=1:

1:

row

fork2=1:

1:

range

XXX=k2-1;YYY=row+1-k1;

ifabs(((XXX-center

(1))*(XXX-center

(1))+(YYY-center

(2))*(YYY-center

(2)))-center(3)*center(3))<=101

i1(k1,k2)=0;

end

end

end

imwrite(i1,'找出的圆.bmp','bmp');

i2=imread('找出的圆.bmp');

figure;

imshow(i2);%st

2、霍夫变换检测直线

clearall;closeall;clc;

i=imread('sample.bmp');

[row,range]=size(i);

p=row*range;a=0;Y=zeros(1,p);Q=zeros(1,p);

fork1=1:

1:

row

fork2=1:

1:

range

ifi(k1,k2)==0

a=a+1;

XXX=k2-1;YYY=row+1-k1;

Y(a)=YYY;Q(a)=YYY-XXX;

end

end

end

%fort=1:

1:

a

%o=[Y(t)Q(t)]

%end

X1=[01];Y1=[Y

(1)Q

(1)];

plot(X1,Y1,'r');holdon;

YY=zeros(1,a-1);QQ=zeros(1,a-1);

fort=2:

1:

a

X2=[01];Y2=[Y(t)Q(t)];

plot(X2,Y2);

[YY(t-1),QQ(t-1)]=pll(X1,Y1,X2,Y2);

%yyy=YY(t-1)

%qqq=QQ(t-1)%看交点

plot(YY(t-1),QQ(t-1),'ko');

end

%[res]=gather_point(YY,QQ,QQ);nn=0;res

%[m,n3]=size(YY);

%forno1=1:

1:

n3

%n=0;

%forno2=(no1+1):

1:

n3

%if(abs(res(no2,1)-res(no1,1))<=0.0001&abs(res(no2,2)-res(no1,2))<=0.0001&abs(res(no2,2)-res(no1,2))<=0.0001)

%n=n+1;hao=res(no1,:

);

%end

%end

%ifnn>=n3/5

%rhao=hao;break;

%elseifnn

%rhao=hao;nn=n;

%end

%end

[rhao]=the_max1(YY,QQ,QQ);

%yyy=YY

%qqq=QQ

%t2=0;t3=0;

%fort1=2:

1:

t

%t2=YY(t1)+t2;

%t3=t3+QQ(t1);

%end

%t2=t2/(t1-1)

%t3=t3/(t1-1)%t2=m,t3=b

%i1=ones(row,range);

%t2=2;t3=0;

i1=ones(row,range);

rhao

t2=rhao

(1);t3=rhao

(2);

t2=round(t2);t3=round(t3);

%t2=1.5;t3=1.5;

fork1=1:

1:

row

fork2=1:

1:

range

XXX=k2-1;YYY=row+1-k1;

ifabs(YYY-(t2*XXX+t3))<=1%YYY==t2*XXX+t3

i1(k1,k2)=0;

end

end

end

imwrite(i1,'找出的直线.bmp','bmp');

i2=imread('找出的直线.bmp');

figure;

subplot(2,1,1);

imshow(i);

subplot(2,1,2);

imshow(i2);

五、实验结果

1、霍夫变换检测圆实验结果截图

待检测的图:

 

检测出的圆:

2、霍夫变换检测直线实验结果截图

待检测的图

 

检测出的直线

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1