实验目
1. 掌握MATLAB软件设计流程
2. 掌握霍夫变换实现方法
3. MATLAB语言设计基霍夫变换意图形识
二 实验仪器设备
装MATLAB软件微机台
三 总体设计原理流程图
1程序设计原理
霍夫变换基思想图面点应参数面曲线通统计特性解决问题具良抗噪声性部分遮盖敏感等特性
2程序流程图
程序开始
开图形
基霍夫曼变换简单图形识
霍夫变换检测直线
霍夫变换检测圆
识图
保存图
程序结束
四 程序代码
1 霍夫变换检测圆程序
clear all close all clc
[crst]circle_productst(1)>xst(2)>yst(3)>r
crimread('samplebmp')circle1bmp
figure
imshow(cr)
[rowrange]size(cr)
prow*rangea0Yzeros(1p)Qzeros(1p)
for k111row
for k211range
if cr(k1k2)0
aa+1
XXXk21YYYrow+1k1
Y(a)YYYQ(a)XXX
end
end
end
for k311p
if Y(k3)0&Q(k3)0
break
end
end
zones(15)
a11300b11300
z1sqrt((aQ(1))^2+(bY(1))^2)
z2sqrt((aQ(2))^2+(bY(2))^2)
z3sqrt((aQ(3))^2+(bY(3))^2)
z4sqrt((aQ(4))^2+(bY(4))^2)
z5sqrt((aQ(5))^2+(bY(5))^2)
z1sqrt((aQ(1))*(aQ(1))+(bY(1))*(bY(1)))
Z1(aQ(1))^2+(bY(1))^2
r0(abs(z1z2)<01&abs(z1
aar0*a
bbr0*b
rrrround(r(r0~0))
aaaaa(r0~0)
bbbbb(r0~0)
k7floor(k36)k52
a11300b11300rrrzeros(1p)aaazeros(1p)bbzeros(1p)k60as0k111
for k511k7
k60
z1sqrt((aQ(k5))^2+(bY(k5))^2)
z2sqrt((aQ(k5+1))^2+(bY(k5+1))^2)
z3sqrt((aQ(k5+2))^2+(bY(k5+2))^2)
z4sqrt((aQ(k5+3))^2+(bY(k5+3))^2)
z5sqrt((aQ(k5+4))^2+(bY(k5+4))^2)
z6sqrt((aQ(k5+5))^2+(bY(k5+5))^2)
r0(abs(z1z2)<1&abs(z1
aar0*a
bbr0*b
[mn]size(rr)
if rrzeros(1n)
asas+1 continue
end
[pz1pz]size(rr(r0~0))
rrrround(rr(r0~0))
aaaaa(r0~0)
bbbbb(r0~0)
pz2pz+k111k91
for k8k11pz2
RR(k8)rrr(k9)
XX(k8)aaa(k9)
YY(k8)bbb(k9)
k9k9+1
end
k11k8+1
if rrzeros(1n)
asas+1 continue
end
end
if aazeros(1300)
as1
end
rangex11rangerowy11row[RXRY]meshgrid(rangexrowy)
RTRXfigure
mesh(RXRYRT)hold on
plot3(XXYYRR'ko')5
[rhaonn]the_max1(XXYYRR)
i1ones(rowrange)
rhao
centerrhao
t215t315
for k111row
for k211range
XXXk21YYYrow+1k1
if abs(((XXXcenter(1))*(XXXcenter(1))+(YYYcenter(2))*(YYYcenter(2)))center(3)*center(3))<101
i1(k1k2)0
end
end
end
imwrite(i1'找出圆bmp''bmp')
i2imread('找出圆bmp')
figure
imshow(i2)st
2 霍夫变换检测直线
clear all close all clc
iimread('samplebmp')
[rowrange]size(i)
prow*rangea0Yzeros(1p)Qzeros(1p)
for k111row
for k211range
if i(k1k2)0
aa+1
XXXk21YYYrow+1k1
Y(a)YYYQ(a)YYYXXX
end
end
end
for t11a
o[Y(t) Q(t)]
end
X1[0 1]Y1[Y(1) Q(1)]
plot(X1Y1'r')hold on
YYzeros(1a1)QQzeros(1a1)
for t21a
X2[0 1]Y2[Y(t) Q(t)]
plot(X2Y2)
[YY(t1)QQ(t1)]pll(X1Y1X2Y2)
yyyYY(t1)
qqqQQ(t1)交点
plot(YY(t1)QQ(t1)'ko')
end
[res]gather_point(YYQQQQ)nn0res
[mn3]size(YY)
for no111n3
n0
for no2(no1+1)1n3
if (abs(res(no21)res(no11))<00001&abs(res(no22)res(no12))<00001&abs(res(no22)res(no12))<00001)
nn+1haores(no1)
end
end
if nn>n35
rhaohaobreak
elseif nn
end
end
[rhao]the_max1(YYQQQQ)
yyyYY
qqqQQ
t20t30
for t121t
t2YY(t1)+t2
t3t3+QQ(t1)
end
t2t2(t11)
t3t3(t11)t2mt3b
i1ones(rowrange)
t22t30
i1ones(rowrange)
rhao
t2rhao(1)t3rhao(2)
t2round(t2)t3round(t3)
t215t315
for k111row
for k211range
XXXk21YYYrow+1k1
if abs(YYY(t2*XXX+t3))<1YYYt2*XXX+t3
i1(k1k2)0
end
end
end
imwrite(i1'找出直线bmp''bmp')
i2imread('找出直线bmp')
figure
subplot(211)
imshow(i)
subplot(212)
imshow(i2)
五 实验结果
1 霍夫变换检测圆实验结果截图
检测图
检测出圆:
2 霍夫变换检测直线实验结果截图
检测图
检测出直线
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档