计算机视觉系列(二) - 霍夫线/圆变换

  • 💂 个人主页: 同学来啦
  • 🤟 版权: 本文由【同学来啦】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助,欢迎关注、点赞、收藏和订阅专栏哦

👉︎ 一、引言

在计算机视觉识别系统中,图像内容通常用图像特征进行描述,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在。在许多应用场合中,通常需要快速准确地检测出直线或者圆等形状,霍夫变换(Hough Transform)作为一种从图像识别几何形状的有效解决方法,受到广泛应用。本文将着重介绍霍夫变换的发展史、技术原理和使用方法等内容。

🌶 二、霍夫变换概述

🔴 1、发展历史

霍夫变换的发展历史可分为三个阶段:

  • 🍎 初期发展阶段
    1959年,Paul Hough基于气泡室(Bubble Chamber)图片解析需要发明了霍夫变换(Hough Transform),并于1962年发表了名为“Method and Means for Recognizing Complex Patterns”(中文名称:辨识复杂图案的方法及手段)的专利,其中描述的就是最初形态的霍夫变换。在该专利中,在笛卡尔坐标系下任一条直线均可以由斜率和截距来表示,然后由于垂线的斜率无限大会导致无界变换空间(unbounded transform space)的问题。

  • 🍑 推广应用阶段
    1972年,霍夫变换由Richard Duda & Peter Hart进行了推广使用,将霍夫变换扩展到任意形状物体的识别,多为圆和椭圆。霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题。

  • 🍈 开始流行阶段
    1981年,因为Dana H. Ballard 的一篇期刊论文 “Generalizing the Hough transform to detect arbitrary shapes”,让霍夫变换开始流行于计算机视觉界。该文描述了使用模板匹配原理对霍夫变换进行修改,通过了解其形状并旨在其找出图像中的位置和方向,这种改变使得霍夫变换能够检测用其模型描述的任意对象,通过查找模型在图像中的位置来解决图像中查找对象的问题。利用广义霍夫变换(GHT),找到模型位置的问题转换为寻找将模型映射到图像中的变换参数的问题。给定变换参数的值,就可以确定模型在图像中的位置。

🟠 2、简要说明

霍夫变换是图像处理中的一种特征提取技术,该过程在一个参数空间通过计算累计结果的局部最大值得到一个符合特定形状的集合作为霍夫变换结果。
霍夫变换可用于隔离图像中特定形状的特征的技术,主要应用在图像分析、计算机视觉和数字图像处理领域。目的是通过投票程序在特定类型的形状内找到对象的不完美实例。这个投票程序是在一个参数空间中进行的,在这个参数空间中,候选对象被当作所谓的累加器空间中的局部最大值来获得,所述累加器空间由用于计算霍夫变换的算法明确地构建。最基本的霍夫变换是从黑白图像中检测直线(线段)。Hough变换主要优点是能容忍特征边界描述中的间隙,并且相对不受图像噪声的影响

🥕 三、霍夫变换原理

霍夫变换主要分为霍夫直线变换与霍夫圆变换两种,下面分别对其进行介绍。

➖ 1、霍夫线变换

🔴 1.1 霍夫线变换简介

  • 🟥 霍夫线变换输入:一般为边缘二值图,用以寻找轮廓中的直线;
  • 🟧 霍夫线变换分类
    标准霍夫变换(Standard Hough Transform,SHT):由HoughLines函数调用;
    多尺度霍夫变换(Multi-Scale Hough Transform,MSHT):SHT在多尺度下的一个变种,由HoughLines函数调用;
    累计概率霍夫变换(Progressive Probablilistic Hough Transform,PPHT):是SHT的一个改进,其在一定范围内进行霍夫变换,计算单独线段的方向以及范围,进而减少计算时间和运算量,由HoughLinesP函数调用;

🟠 1.2 霍夫线变换原理

笛卡尔坐标系中,直线可由斜截式方程表示,即有:
y = m x + b (1) y=mx+b\tag{1} y=mx+b(1)

笛卡尔坐标系霍夫空间
变量与参数互换变量( x , y x,y x,y)参数( m , b m,b m,b y = m x + b y=mx+b y=mx+b变量( m , b m,b m,b)参数( x , y x,y x,y b = x m + y b=xm+y b=xm+y
直线→点直线 y = m x + b y=mx+b y=mx+b点( m , b m,b m,b
点→直线多条经过点( x , y x,y x,y)的直线 y = m i ∗ x + b i y=m_i*x+b_i y=mix+bi一条直线,斜率为 − x -x x,截距为 y y y,经过( m i , b i m_i,b_i mi,bi

在这里插入图片描述
当直线斜率不存在(或无限大),即 m m m值接近于无限值时,该情形已不能用斜截式来表示,此时需要用到极坐标法,即有:
r = x c o s θ + y s i n θ (2) r=xcosθ+ysinθ\tag{2} r=xcosθ+ysinθ(2)
其中 r r r是原点到直线上最近点的距离, θ θ θ是x轴与连接原点和最近点直线之间的夹角。如下图所示。
在这里插入图片描述

笛卡尔坐标系霍夫空间
变量与参数互换变量( x , y x,y x,y)参数( θ , r θ,r θ,r r = x c o s θ + y s i n θ r=xcosθ+ysinθ r=xcosθ+ysinθ变量( θ , r θ,r θ,r)参数( x , y x,y x,y
直线→点直线 r = x c o s θ + y s i n θ r=xcosθ+ysinθ r=xcosθ+ysinθ点( θ , r θ,r θ,r
点→直线多条经过点( x , y x,y x,y)的直线 r i = x ∗ c o s θ i + y ∗ s i n θ i r_i=x*cosθ_i+y*sinθ_i ri=xcosθi+ysinθi一条曲线,经过( θ i , r i θ_i,r_i θi,ri

⭕ 2、霍夫圆变换

霍夫圆变换的基本思路是认为图像上每一个非零像素点都有可能是一个潜在的圆上的一点,跟霍夫线变换一样,也是通过投票生成累积坐标平面,设置一个累积权重来定位圆。
在笛卡尔坐标系中圆的方程为:
( x − a ) 2 + ( y − b ) 2 = r 2 (3) (x-a)^2+(y-b)^2=r^2\tag{3} (xa)2+(yb)2=r2(3)
其中(a,b)是圆心,r是半径,亦可表述为:
x = a + r c o s θ x=a+rcosθ x=a+rcosθ
y = b + r s i n θ y=b+rsinθ y=b+rsinθ
即有:
a = x − r c o s θ a=x-rcosθ a=xrcosθ
b = y − r s i n θ b=y-rsinθ b=yrsinθ
在这里插入图片描述
实际上问题转换成求解经过像素点最多的 (a,b,r) 参数对。但发现(a,b,r)的参数空间特别大,计算量特别大,故一般使用霍夫梯度法来解决圆的变换。
在这里插入图片描述
如上图所示,如果我们对一个圆求梯度,那么圆上所有的点的梯度的方向均朝向圆心
基于此有如下实现步骤:

  • ①对图像应用边缘检测,比如用canny边缘检测;
  • ②使用sobel算子计算所有像素的梯度;
  • ③遍历canny之后的所有非0的像素点,沿着梯度方向画线,每个点有是一个累加器,有一个线经过该点,累加器加1,对所有累加器进行排序,根据阈值找到所有可能的圆心;
  • ④计算canny图像中所有的非0像素点距离圆心的距离,距离从小到大排序,选取合适的半径;
  • ⑤对选取的半径设置累加器,对于满足半径r的累加器+1。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

同学来啦

原创不易,打赏随意。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值