%圆的方程是(x-a).^2+(y-b)>^2=r.^2
%转换为极坐标系是x=a-r*cos(theta);y=b-sin(theta);[Equation1]
%因此根据霍夫变换的原理,需要建立一个三维的累加数组A(a,b,j)
%其中a,b表示圆心的坐标,j表示圆的半径
%为了计算的方便,运算的速度,我们只针对图像的边缘进行检测和累加,因此先进行边缘检测
%在极坐标下,我们对x,y取遍所有的边缘点值,theta每隔pi/45度角取一个值,代入两个极坐标下圆的方程(Equation1),判断圆心坐标(a,b)是否在图像内
%若圆心坐标合理,则累加数组A加1
%当累加数组A中的值满足一定条件(如大于多少,或者前多少个)则算是所需的结果
clc;
clear;
origin=imread('circle.bmp');
origin=rgb2gray(origin);%转换为灰度图像
figure;imshow(origin);title('original image');
edged=edge(origin);%对源图像进行边缘检测
figure;imshow(edged);title('edged image');
%% initialization
[r c]=size(origin);%获取源图像/灰度图像的长、宽
A=zeros(r,c,floor(r/2)+1);%初始化累加数组A(a,b,j),其中a,b,j的最大值分别为r,c,floor(r/2)+1
[rows,cols]=find(edged);%查找边缘点,索引值存储在rows和cols中
%%
for i=1:size(rows)
for j=2:floor(r/2)
for k=1:90
theta=pi/45*k;%每隔pi/45度角进行一次检验
a=round(rows(i)-j*cos(theta));
b=round(cols(i)-j*sin(theta));
if(a>0&&b>0&&a<=r&&b<=c)%代入公式得到的圆心坐标a,b是否合理,合理的话A加1
A(a,b,j)=A(a,b,j)+1;
end
end
end
end
%% find the circles satisfied the threshold
Hout=zeros(r,c);
thresh=0.6;%阈值[可根据检测结果修改]用来确定A的值到底为多大算是需要的结果
maxvalue=max(max(max(A)));%找到A中元素的最大值
for i=1:size(rows)
for j=2:floor(r/2)
for k=1:90
theta=pi/45*k;
a=round(rows(i)-j*cos(theta));
b=round(cols(i)-j*sin(theta));
if(a>0&&b>0&&a<=r&&b<=c&&j>=5&&A(a,b,j)>=maxvalue*thresh)%增加条件j>5是防止圆角矩形被检测到,可以自行修改大小,也可根据原图像增加约束条件
Hout(rows(i),cols(i))=1;%符合要求的圆保存在H中
end
end
end
end
figure;imshow(Hout);title('After Hough Transform');
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【达摩老生出品,必属精品,亲测校正,质量保证】 资源名:matlab进行霍夫变换检测圆_matlab源码 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的开发人员
资源推荐
资源详情
资源评论
收起资源包目录
matlab进行霍夫变换检测圆_matlab源码.rar (1个子文件)
HoughCircle.m 2KB
共 1 条
- 1
阿里matlab建模师
- 粉丝: 3205
- 资源: 2782
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页