OpenCV霍夫梯度找圆算法

来源:互联网 发布:淘宝不能选择菜鸟驿站 编辑:程序博客网 时间:2024/04/29 21:28

OpenCV使用霍夫梯度算法检测图像中的圆。

算法步骤如下


寻找圆心

  1. 用Canny算法进行边缘检测,得到边界二值图
  2. 用Sobel算子计算原图的梯度
  3. 遍历边缘二值图中的非0点,沿着梯度方向和反方向画线段(梯度方向为圆弧的法线方向,即半径方向),线段的起点和长度由参数允许的半径区间决定。将线段经过的点在累加器中记数
  4. 对累计器中的点从大到小排序,记数越大越有可能成为圆心,优先估计半径

对某个可能的圆心作半径估计
  1. 计算所有边界图中的非0点离圆心的距离,并从小到大排序
  2. 从小半径r开始,距离相差在一个小量范围内的点,都认为是同一个圆,记数属于该半径r的非0点数,记为n
  3. 尝试放大半径,同样记数改半径的点数
  4. 判断两个半径孰优孰劣的依据——点的线密度(点数n/半径r),密度越高,半径的可信度越大
  5. 重复以上步骤,直至半径超过参数允许的范围,从而得到最优半径
1 0