CV6-structures2

图像边缘检测

边缘的要求

在这里插入图片描述
假阳少:尽量保证检测出来的边缘像素都是真正的边缘像素

假阴少:尽量保证不是边缘的像素都不会被检测出来

边缘检测的基本步骤

在这里插入图片描述

梯度与边缘的关系

  • 对于一阶梯度来说,边界出现在一阶导的最大最小处

  • 对于二阶梯度来说,边界出现在二阶导为 0 的位置
    在这里插入图片描述

  • 那么我们如何计算梯度呢?

    • 对于一个二维函数,计算公式如下
      在这里插入图片描述

    • 对于离散的数据,我们可以使用有限差分来近似估计

      • 注意到,分母是 1 ,所有该式子就是后一个的值减去前一个的值
        在这里插入图片描述

图像梯度

  • 表达式
    在这里插入图片描述

  • 梯度指向强度变化最快的方向
    在这里插入图片描述

  • 梯度方向
    在这里插入图片描述

  • 边缘强度是由梯度大小决定的
    在这里插入图片描述

  • 二维边缘检测函数
    在这里插入图片描述

  • 整体流程

    • 计算边缘响应

    • 利用响应图,设置阈值,来确定图像边缘

      • 使用阈值是为了粗略保留边缘

      • 非极大值抑制是为了使边缘的宽度变得更窄
        在这里插入图片描述

      • 滞后阈值法

        保持两个阈值 T h i g h T_{high} Thigh T l o w T_{low} Tlow

        • 使用 T h i g h T_{high} Thigh 来寻找强边以开始边缘链(大于该值的确定为边)
        • 使用 T l o w T_{low} Tlow 寻找弱边以继续边缘链(小于该值大确定不为边,介于两值中间的,若与边相连,则确定为边)
        • 阈值的典型比率大致为 T h i g h T l o w = 2 \frac{T_{high}}{T_{low}} = 2 TlowThigh=2
    • 为了保证边缘的单像素响应,我们使用极大值抑制的方法

      • 只保留沿梯度方向上响应值的极大值点
        在这里插入图片描述

Canny边缘检测器

  • 可能是计算机视觉领域使用最广泛的边缘检测器
  • 理论模型:

过程

  • 用高斯函数的一阶导过滤图像
  • 寻找梯度的大小和方向
  • 非极大值抑制
  • 使用滞后阈值法并进行连接

基元检测

基元定义:直线,圆等基本几何元素

使用边缘检测来检测线?

困难

  • 会产生额外边缘点,选择哪些点?选择哪条线?
  • 线的一些部分检测出来的,一些没有检测出来,怎么办?
  • 检测的边缘点和方向存在噪音,如何检测真正的参数?

霍夫变换

任务:给定点集,检测包含的直线(可能存在多条直线)

思想:基于投票的思想

  • 每个点投票所有可能经过它的直线
  • 在直线参数空间取票数较多的点

图像空间中的一条线,可以映射成霍夫空间中的一个点。因为 y = m x + b y = mx + b y=mx+b
在这里插入图片描述
图像空间中的一个点,可以映射为霍夫空间中的一条线。因为 y = m x + b y=mx+b y=mx+b
在这里插入图片描述
那么图像空间中的一条线的参数,在霍夫空间中怎么寻找呢?

  • 答案:是图像空间中在该线上的点,在霍夫空间中对应的线的交点(这就是投票,线上的点会在霍夫空间中为这个线的参数投一票
    在这里插入图片描述
    对于图像空间中最明显的线,我们如何找到最可能的参数 ( m , b ) (m,b) (m,b)呢?

  • 让图像空间中的每个边缘点,在霍夫空间中为一组可能的参数投票

  • 得票最多的参数就代表了图像空间中的线
    在这里插入图片描述

线的极坐标表达

传统的 ( m , b ) (m,b) (m,b)参数空间的问题:会产生无限的值,且对垂直的线没有定义(写不成 y = m x + b y=mx+b y=mx+b)的形式

( d , θ ) (d,\theta) (d,θ)表示

  • d d d :线和原点之间的垂直距离

  • θ \theta θ:垂线与 x 轴的夹角
    在这里插入图片描述

    • 图像空间中的点在霍夫空间中对应正弦波段

极坐标下的霍夫变换算法

θ \theta θ 从 0 到 180 , 相当于遍历了可能经过该点的所有直线,每条直线的参数是 ( d , θ ) (d,\theta) (d,θ) 。若两点在一条直线上,他们都会为这个 ( d , θ ) (d,\theta) (d,θ)投票
在这里插入图片描述

  • 结果图
    在这里插入图片描述
    • 这种情况下效果不好
      在这里插入图片描述
    • 这里数据看起来更像是随机分布的,但是我们仍然找到了峰值
      在这里插入图片描述
  • 改进
    在这里插入图片描述

推广到圆的检测

  • 知道半径,不知道梯度

    • 图像空间中圆上的一个点 ( x , y ) (x,y) (x,y),在霍夫空间中对应以 ( x , y ) (x,y) (x,y)为圆心的一个圆。同一个圆上的点在霍夫空间中形成的圆会有交点
      在这里插入图片描述
  • 不知道半径,不知道梯度

    遍历半径,同一个圆上的点在霍夫空间中形成的圆锥会有交点
    在这里插入图片描述

  • 知道梯度,不知道半径

    圆上的点只有对应梯度的线经过圆心,每个点画一条线,投票最多的就是圆心
    在这里插入图片描述

  • 算法流程:圆心是 ( a , b ) (a,b) (a,b)
    在这里插入图片描述

  • 投票的技巧

    • 首先最小化不相关的标记(取具有显著梯度的边缘点)
    • 选择一个好的网格/离散化
      • 太粗了:当太多的不同线条对应于一个桶时,会得到很大的票数(并不是同一条线上的点头的票,而是因为给它投票的点太多了,它的票数就大)
      • 太细:由于一些不完全相邻的点为不同的桶投票,从而错过了一些线。
    • 也为邻居投票(在累加器阵列中平滑)
    • 利用边缘的方向来减少参数的自由度
    • 要读回哪些点为 "获胜 "的山峰投票。 在投票上保留标签。

优缺点

  • 优点
    • 所有的点都是独立处理的,所以可以应对遮挡
    • 对噪声有一定的稳健性:噪声点不太可能 对任何单一仓的贡献一致
    • 可以在一次处理中检测到一个模型的多个实例
  • 缺点
    • 搜索时间的复杂性随着模型参数的数量呈指数级增长
    • 非目标形状会在参数空间中产生虚假的峰值
    • 很难选择一个好的网格大小

推广到任意形状

  • 任务:通过几个边界点和一个参考点来检测任意形状
    在这里插入图片描述

  • 步骤

    • 对于每个边界点
      • 使用梯度方向作为索引将其存入表中(一个梯度方向可能会对应很多vector)
      • 使用向量 r 来对参考点的位置进行投票

    一条边上的每个点都会对参考点的位置进行投票,因此该位置得票多
    ·在这里插入图片描述
    在这里插入图片描述

应用

可以通过“视觉代码进行索引”,而不是通过梯度方向
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

长命百岁️

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值