Hough变换对圆的检测.docVIP

  • 3
  • 0
  • 约2.45千字
  • 约 3页
  • 2017-02-09 发布于重庆
  • 举报
Hough变换对圆的检测

Hough变换对圆的检测 Hough变换的基本原理在于,利用点与线的对偶性,将图像空间的线条变为参数空间的聚集点,从而检测给定图像是否存在给定性质的曲线。 圆的方程为:,通过Hough变换,将图像空间对应到参数空间。 Hough对圆的检测程序如下: function [hough_space,hough_circle,para] = hough_circle(BW,step_r,step_angle,r_min,r_max,p) % %%%%%%%%%%%%%%%%%%%%%%%%%% % input % BW:二值图像; % step_r:检测的圆半径步长 % step_angle:角度步长,单位为弧度 % r_min:最小圆半径 % r_max:最大圆半径 % p:以p*hough_space的最大值为阈值,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(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=zeros(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)) = 1; 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 运行如下程序: clc,clear all I = imread(2.bmp); [m,n,l] = size(I); if l

文档评论(0)

1亿VIP精品文档

相关文档