边缘的定义和意义
边就是一种不连续,图像中变化突变的地方
图像的边缘信息是关键信息,能够紧凑地表达图像,帮助我更容易地去解决问题
边的分类
- 面上的不连续(形体上的边)
两个面连接的地方产生的边 - 深度上的边
- 字母上的边
- 阴影的边
如何提取边
对图像信号进行求导,从而找到极值也就是信号变化最明显的地方,这也就是边所在的位置
从而引出新问题:如何对2D图像进行求导?
求导的定义中是有极限的存在,我们这边直接近似把
ϵ
\epsilon
ϵ 看成1
对x方向的求导:近似后的数学公式就变成了右边减左边,就可以用卷积来实现了,使用一行二列1,-1(自己是-1,右边的值是1)的卷积核来实现求导,对x方向求导之后,只有在x方向上的边(也就是左右变化明显的地方)会被留下来
对y方向的求导也是如此:近似后的数学公式就会变成上面减下面,使用一列二行的上面是-1,下面是1(或者上1下-1也行,看模版是怎么和图像叠加的)的卷积核
得到求导的结果后,进行梯度的计算:一点的梯度是由该点的x方向导数和y方向导数一起组成的向量。
有两种对梯度的描述,可以使得我们去量化梯度的性质
- 梯度方向
梯度方向指的是信号变化最大的方向;梯度方向和边垂直 - 梯度的模值
也称为这个点的强度和幅值,当这个点的强度越强时,这个点越有可能是边
高斯偏导卷积
高斯滤波及偏导边缘提取过程
直接对图像进行边缘检测提取,显然是不行的,如下图因为噪音过多导致没有办法找到真正的边
所以我们需要先对图像进行高斯滤波,平滑后再进行求导边缘。
f
∗
g
f *g
f∗g的图像变小了是因为卷积本身的特性,不补0的话,就会导致图像越来越小
但是卷积十分的耗费时间,上面一共进行了两次卷积,其实我们可以把它简化为一步卷积。因为卷积是存在结合律和交换律的,所以我们可以直接对高斯卷积核进行一次卷积,然后再直接和图像进行相乘,就能够得到和两次卷积一样的结果的了。
高斯偏导核图像及特性
如下就是高斯偏导模板的图像:
高斯偏导模板和之前的滤波器模板一样,同样由两个参数,一个是窗框,一个是标准差
σ
\sigma
σ,其实只要指定其中一个另一个就能够根据公式推导出来。如下图,我们可以发现随着标准差的增大,图像信息丢失的越来越厉害。我们可以根据具体任务所需要进行选择标准差,看是需要粗狂一点的线条,还是比较细节一点的线条,根据时间成本等进行考虑。
高斯平滑核与高斯偏导核的区别
高斯平滑核:
- 高斯平滑核中没有负数,所有数加权求和以后为1(为了不丢失原本的图像信号)
- 高斯平滑核是用来去除高频噪声的
高斯偏导核:
- 模板中有负数(卷积以后肯定存在负数) ,所有数求和之后为0(只有等于0的时候,对于那种平坦的区域才不会有响应值)
- 高斯偏导核是用来做边缘提取的
Canny算法边缘提取
在高斯偏导上做了两件事情,一个是非最大化抑制,帮我们找到真正的边,还有一个就是双门限法。
问题引入
首先介绍的canny算法的使用场景,下面是一张未经处理的原始图像,我们将对其进行边缘提取
进行高斯偏导卷积之后,得到后的图像如下所示,我们可以看到这个边缘提取的并不干净。于是我们可以对其进行设定门限从而将噪声去除
以下是选定一个门限之后,对图像进行门限分割后的结果,线条会比上图更加清晰一点,但是我们会发现有的线条过于宽了,真实的边缘并不没有这么宽。这是因为有的图像信号在边缘部分是缓慢升上去的,这样求导之后再取门限我们会发现会有一大块值都会被取到。即使它原始信号也非常垂直,但是经过我们第一步的高斯平滑,它也变得不那么垂直
非最大化抑制
所以说这边就要使用非最大化抑制来细化边缘,其核心思想就是把每一点沿着其梯度方向与上下两个点的值进行比较,要是这个点比上下两个点都大就保留,要是这个点不是最大的就去除。
有时候可能沿着梯度方向并没有相邻点的存在,此时我们可以将附近四个点进行加权求和,如谁离中心点越近谁的值就影响越大,从而找到真正的r点和p点
Hysteresis thresholding 滞后阈值法
对图像进行非最大化抑制后,发现还有问题没有被解决。我们能够发现人像中的下巴被滤除掉了。这是因为一开始的门限设高了,对于这些小的连续的边就被去除掉了
所以这边使用Hysteresis thresholding 滞后阈值法,它是一种双门限的方法,先用高门限去除大多数噪声,然后留下的是比较粗的线条,再用低门限对图像信号进行滤除,但用低门限的时候要注意,如何这时的线条跟高门限出来强边缘有连接关系(首位相连),我们就认为这是有意义的边,否则我们就去除。
具体效果如下所示:
Canny算法总结
第一步,用高斯偏导模板考虑了信号里的存在噪声
第二步,用梯度的强度和方式来描述这个记录这个当前点的信息
第三件,用非最大化抑制把我们那个求解过程中,由于那个边的信号不是突变的,所以他会是缓缓上去的,所以求出来的梯度有的地方可能有一个大于门线的,有很长的很宽的一块边
第四步,就是用启发式链接来解决这种门限过高过低的问题