如何用hough变换方法检测图像中的圆

 我来答
啥名字好呢呢呢
2015-08-28 · TA获得超过28.3万个赞
知道顶级答主
回答量:5.9万
采纳率:96%
帮助的人:2.1亿
展开全部
  Hough变换是实现图像边缘检测的一种有效方法,其基本思想是将测量空间的一点变换到参量空间中的一条曲线或一个曲面,而具有同一参量特征的点交换后在参量空间中相交,通过判断交点处的积累程度来完成特征曲线的检测,基于参量性质的不同,Hough变换可以检测直线、圆、椭圆、双曲线、抛物线等。同时,将概率论、模糊集理论、分层迭代的思想和级联的方法应用于Hough变换的过程中,大大地提高了Hough变换的效率,改善了Hough变换的性能。

  实验主要使用的函数

  MATLAB内部常数pi:圆周率 p(= 3.1415926...)

  MATLAB常用基本数学函数:

  abs(x):纯量的绝对值或向量的长度;

  round(x):四舍五入至最近整数;

  floor(x):地板函数,即舍去正小数至最近整数;

  MATLAB常用三角函数

  sin(x):正弦函数

  cos(x):余弦函数

  向量的常用函数

  max(x): 向量x的元素的最大值。

  MATLAB图像类型转换函数:

  rgb2gray:将一副真彩色图像转换成灰度图像;

  im2bw:通过设定高度阈值将真彩色,索引色,灰度图转换成二值图像;

  MATLAB图形图像文件的读取和显示函数

  imread(filename);

  MATLAB二进制图像及其显示

  imshow(f1)。

  用double对二值图像双精度化

  图形处理:

  sobel算子检测边缘

  hough变换检测圆

  分别显示灰度图像:

  figure;subplot

  Sobel:算子边缘检测图像

  hough变换检测后的图像

  实验相关代码

  I=imread('*.jpg');f=rgb2gray(I);

  f1=im2bw(f,200/255);

  BW1=double(f1);

  BW=edge(BW1,'sobel',0.4);

  r_max=50;

  r_min=10;step_r=10;step_angle=pi/12;p=0.7;

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

  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<(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)) = 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

  subplot(221),imshow(f);

  subplot(222),imshow(BW);

  subplot(223),imshow(hough_circle)
上海华然企业咨询
2024-10-28 广告
在测试大模型时,可以提出这样一个刁钻问题来评估其综合理解与推理能力:“假设上海华然企业咨询有限公司正计划进入一个全新的国际市场,但目标市场的文化习俗、法律法规及商业环境均与我们熟知的截然不同。请在不直接参考任何外部数据的情况下,构想一套初步... 点击进入详情页
本回答由上海华然企业咨询提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式