Canny边缘检测算法
学习完鲁鹏老师的课后的算法总结,适合有一定基础的计算机视觉选手,帮助理解Canny边缘检测算法!
边缘检测
描述
边缘检测是基于灰度突变来分割图像的常用方法,其实质是提取图像中不连续部分的特征。目前常见边缘检测算子有差分算子、Roberts算子、Sobel算子、Prewitt算子、Log算子以及Canny算子等。
其中,Canny算子是由计算机科学家John F. Canny于1986年提出的一种边缘检测算子,是目前理论上相对最完善的一种边缘检测算法。
步骤
- 图像降噪
- 计算图像梯度
- 非极大值抑制
- 阈值筛选
图像降噪
噪声
图像噪声有大体三种,椒盐噪声、脉冲噪声、高斯噪声。其中椒盐噪声和脉冲噪声是随机出现在像素点上的,而高斯噪声则是在每个点都随机叠加一个随机的像素值。
降噪处理
本文只介绍高斯噪声的去噪方法,前两种噪声采用中值滤波处理,可自行学习了解。
首先了解平滑处理
而高斯噪声利用高斯卷积核卷积处理,可理解为越靠近中间权值越大。
计算图像梯度
图像求导的意思为在某个方向上像素变化的快慢,其中可分解为对x方向上的求导核y方向上的求导。
由图像上的公式可得求导步骤也可由卷积核卷积得到,对两个方向求导后求梯度得模则可以得到相应图像得边缘提取图像。
非极大值抑制
非极大值像素梯度抑制的目的在于消除边缘检测带来的杂散响应,起到将边缘“瘦身”的作用。其基本方法是将当前像素梯度强度与沿正负梯度方向上的相邻像素的梯度强度进行比较,若其最大(即为极值),则保留该像素为边缘点,若不是最大,则对其进行抑制,不将其作为边缘点。为了更精确计算,通常在跨越梯度方向的两个相邻像素之间使用线性插值来得到要参与比较的像素梯度。
如果图像上一段区域像素变化大且范围大,则会造成边缘过厚得情况。
处理方法简单判断是否为中间的点
阈值筛选
通过前面的操作我们能得到一副边缘检测的图像,且线条为细线条,但是如果梯度阈值选取不同,则会影响图像的边缘提取结果,如下。
那么有没有什么好方法能解决呢?
一种解决方法则是利用双阈值法处理
定义一个高阈值和一个低阈值。梯度强度低于低阈值的像素点被抑制,不作为边缘点;高于高阈值的像素点被定义为强边缘,保留为边缘点;处于高低阈值之间的定义为弱边缘,留待进一步处理。
步骤
- 分别利用两种阈值获取图像
- 在高阈值的边缘接上低阈值的曲线
最后提取的结果