资源简介
把图像信息转移到参数空间,设置一些参数,就能得到图像的圆心坐标和半径
代码片段和文件信息
function [hough_spacehough_circlepara]=hough_circle(BWstep_rstep_angler_minr_maxp)
% input
% BW:二值图像;
% step_r:检测的圆半径步长
% step_angle:角度步长,单位为弧度
% r_min:最小圆半径
% r_max:最大圆半径
%p:以p*hough_space的最大值为阈值,p取0,1之间的数
%
% output
% hough_space:参数空间,h(abr)表示圆心在(ab)半径为r的圆上的点数
% hough_circl:二值图像,检测到的圆
% para:检测到的圆的圆心、半径
[mn] = size(BW);
size_r = round((r_max-r_min)/step_r)+1;
size_angle = round(2*pi/step_angle);
hough_space = zeros(mnsize_r);
[rowscols] = find(BW)
ecount = size(rows);
% Hough变换
% 将图像空间(xy)对应到参数空间(abr)
% 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(abr) = hough_space(abr)+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(mn);
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)-(
评论
共有 条评论