Matlab findcircle函数实现 霍夫变换——检测圆

Matlab findcircle函数实现 霍夫变换——检测圆


    实现了基于霍夫变换的findcircle函数,function[circlefind]=findcircle(img,minr,maxr,stepr,stepa,percent)传进来6个参数,img是二值化的边缘图像,minr是最小搜索的圆半径,maxr是最大搜索的圆半径,stepr是圆半径增长步长,stepa是角度增长步长,percent是阈值百分比,返回circlefind,存放了大于阈值的圆的圆心坐标以及半径。

代码如下(附解释)

function[circlefind]=findcircle(img,minr,maxr,stepr,stepa,percent)
r=round((maxr-minr)/stepr)+1;%可增长的步长个数
angle=round(2*pi/stepa);
[m,n]=size(img);
houghspace=zeros(m,n,r);%霍夫空间
[m1,n1]=find(img);%返回二值化边缘检测图像Img中非零点的坐标,m1存放横坐标,n1存放纵坐标
num=size(m1,1);%非零点个数
%霍夫空间,统计相同圆 点的个数
%a = x-r*cos(angle), b = y-r*sin(angle)
for i=1:num
    for j=1:r
        for k=1:angle
            a=round(m1(i)-(minr+(j-1)*stepr)*cos(k*stepa));
            b=round(n1(i)-(minr+(j-1)*stepr)*sin(k*stepa));
            if(a>0&&a<=m&&b>0&&b<=n)
                houghspace(a,b,j)=houghspace(a,b,j)+1;
            end
        end
    end
end
%以阈值来检测圆
par=max(max(max(houghspace)));%找出个数最多的圆的数量作为阈值
par2=par*percent;%百分比percent阈值调整
[m2,n2,r2]=size(houghspace);
circlefind=[];%存储大于阈值的圆的圆心坐标及半径
for i=1:m2
    for j=1:n2
        for k=1:r2
            if (houghspace(i,j,k)>=par2)
                a=[i,j,minr+k*stepr];
                circlefind=[circlefind;a];
            end
        end
    end
end
end

结果如图,传入的二值化边缘图像可以使用edge函数来转化初始图像得到,采用的是canny算子


  • 17
    点赞
  • 192
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值