- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用Hough变换检测二值图像中的圆
Hough 变换简介
Hough变换是实现图像边缘检测的一种有效方法,其基本思想是将测量空间的一点变换到参量空间中的一条曲线或一个曲面,而具有同一参量特征的点交换后在参量空间中相交,通过判断交点处的积累程度来完成特征曲线的检测,基于参量性质的不同,Hough变换可以检测直线、圆、椭圆、双曲线、抛物线等。同时,将概率论、模糊集理论、分层迭代的思想和级联的方法应用于Hough变换的过程中,大大地提高了Hough变换的效率,改善了Hough变换的性能。
实验主要使用的函数
?
MATLAB内部常数pi:圆周率?p(=?3.1415926...)
?
MATLAB常用基本数学函数:?
abs(x):纯量的绝对值或向量的长度;
round(x):四舍五入至最近整数;
floor(x):地板函数,即舍去正小数至最近整数;
?
MATLAB常用三角函数
sin(x):正弦函数?
cos(x):余弦函数;
?
向量的常用函数
max(x):?向量x的元素的最大值。
?
MATLAB图像类型转换函数:
?rgb2gray:将一副真彩色图像转换成灰度图像;?
im2bw:通过设定高度阈值将真彩色,索引色,灰度图转换成二值图像;
?
MATLAB图形图像文件的读取和显示函数
?imread(filename);
?
MATLAB二进制图像及其显示
imshow(f1)。
?
用double对二值图像双精度化
?
图形处理:
sobel算子检测边缘
hough变换检测圆
?
分别显示灰度图像:
figure;subplot?
Sobel:算子边缘检测图像
hough变换检测后的图像
实验相关代码
?
I=imread(*.jpg);f=rgb2gray(I);?
f1=im2bw(f,200/255);?
BW1=double(f1);?
?
BW=edge(BW1,sobel,0.4);?
r_max=50;?
r_min=10;step_r=10;step_angle=pi/12;p=0.7;?
[m,n]?=?size(BW);?
size_r?=?round((r_max-r_min)/step_r)+1;?
size_angle?=?round(2*pi/step_angle);?
hough_space?=?zeros(m,n,size_r);?
[rows,cols]?=?find(BW);?
ecount?=?size(rows);?
for?i=1:ecount?
for?r=1:size_r?
for?k=1:size_angle?
a?=?round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));?
b?=?round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));?
if(a0a=mb0b=n)?
hough_space(a,b,r)?=?hough_space(a,b,r)+1;?
end?
end?
end?
end?
max_para?=?max(max(max(hough_space)));?
index?=?find(hough_space=max_para*p);?
length?=?size(index);?
hough_circle?=?false(m,n);?
for?i=1:ecount?
for?k=1:length?
par3?=?floor(index(k)/(m*n))+1;?
par2?=?floor((index(k)-(par3-1)*(m*n))/m)+1;?
par1?=?index(k)-(par3-1)*(m*n)-(par2-1)*m;?
if((rows(i)-par1)^2+(cols(i)-par2)^2(r_min+(par3-1)*step_r)^2+5...?
(rows(i)-par1)^2+(cols(i)-par2)^2(r_min+(par3-1)*step_r)^2-5)?
hough_circle(rows(i),cols(i))?=?true;?
end?
end?
end?
for?k=1:length?
par3?=?floor(index(k)/(m*n))+1;?
par2?=?floor((index(k)-(par3-1)*(m*n))/m)+1;?
par1?=?index(k)-(par3-1)*(m*n)-(par2-1)*m;?
par3?=?r_min+(par3-1)*step_r;?
fprintf(1,Center?%d?%d?radius?%d\n,
文档评论(0)