霍夫变换MATLAB怎么实现,做过Matlab关于霍夫变换检测圆的高手请进

Hough变换对圆的检测

Hough变换的基本原理在于,利用点与线的对偶性,将图像空间的线条变为参数空间的聚集点,从而检测给定图像是否存在给定性质的曲线。

Hough对圆的检测程序如下  完整的程序及实例效果见附件

% p:阈值,0,1之间的数

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% output

% hough_space:参数空间,h(a,b,r)表示圆心在(a,b)半径为r的圆上的点数

% hough_circl:二值图像,检测到的圆

% para:检测到的圆的圆心、半径

[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);

% Hough变换

% 将图像空间(x,y)对应到参数空间(a,b,r)

% a = x-r*cos(angle)

% b = y-r*sin(angle)

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(a>0&a<=m&b>0&b<=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

(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',par1,par2,par3);

para(:,k) = [par1,par2,par3];

end

这是用霍夫变换检测圆的程序,用红色标示的地方一点也看不懂了,其中

max_para = max(max(max(hough_space)));

max_para代表的是什么?

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;

part1,part2,part3代表的是什么意思?

if((rows(i)-par1)^2+(cols(i)-par2)^2

(rows(i)-par1)^2+(cols(i)-par2)^2>(r_min+(par3-1)*step_r)^2-5)

hough_circle(rows(i),cols(i)) = 1;

上面这段起到什么作用?,

请高手指点了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值