Canny边缘检测图像处理常用算法
Canny边缘检测
二维正太分布/二维高斯分布
中间峰值的地方对应的是(0,0)的位置,每个像素的值都和周围的像素值有关。在进行边缘检测之前,先用高斯核去一下噪声。
Sobel算子可以看做是对像素求差值,相当于导数的作用,对于要求的中间像素来说,直接接触的上下位置权重为正负2,对像素值影响大一些,其他位置的影响小一些。Gx相当于是纵向偏导数,Gy相当于横向偏导数。找边的本质是寻找导数的幅值,谁的导数的幅值大就更有可能是边。
Edge_Gradient(G)为梯度的幅值,而Angle(θ)可以表示梯度的方向,因为我们希望准确的找到边缘的像素点,即在这个梯度方向这个像素点变化率是最大的(极大值的位置才是准确的边缘位置)
非极大值抑制,与梯度方向垂直的方向是要求的边缘像素。判断C点是否是最后所需要的像素,而g1,g2,g3,g4是图像上与C相邻的像素点的值,θ则是梯度的方向,中间的蓝色线未C点的梯度方向示意图,将C点的梯度幅值与两个交点处的梯度的幅值进行比较,判断C处是否是极大值,如果是则则认为C点就是要求的边界像素点应该保留下来,否则对该点进行执黑处理。但是交点处并不是像素所在的位置,因此需要对其进行线性插值,即根据g1和g2的像素值和θ确定出的交点到g1,g2的比例关系,认为像素是线性变化的,从而求出交点处的像素值。这个判断C点是否是极大值的过程叫做非极大值抑制,
双阈值minVal是低阈值,maxVal是高阈值,一般来说,minval取50,maxVal取3倍的minVal.先通过这两个阈值进行筛选,即梯度幅值高于高阈值的则认为一定是边,梯度幅值小于低阈值的则认为一定不是边。中间的部分需要继续判断:如果其八邻域内存在一个确定是边的点,那么则认为该点也属于边,进行点与点之间的连接,以此循环,直到再也没有确定为边的点,说明所有的边已经被连接好了。(可以用栈来完成,遍历所有肯定是边的点,观察其八邻域内是否存在一个有可能是边的点——灰度值在高低阈值之间的点。如果一个点有可能是边,并且处于一个确定是边的点的八邻域内,则把这个可能是边的点也标记成边并压入栈里面,然后出栈,看弹出栈的点的八邻域内是否有确定点,直到栈空了为止)
- 点赞
- 收藏
- 分享
- 文章举报
- 图像处理常用算法GPU实现二:基于微分的边缘检测
- 图像处理常用算法GPU实现三:基于模板匹配的边缘检测
- 【图像处理】 常用边缘检测算法对比分析
- 图像处理常用算法GPU实现三:基于模板匹配的边缘检测
- 图像处理常用算法GPU实现二:基于微分的边缘检测
- 【MATLAB图像处理3】 canny边缘检测 (附源码)
- 图像处理常用边缘检测算子总结
- 图像处理之Canny边缘检测
- 图像处理常用边缘检测算子
- 图像处理之Canny边缘检测
- 【数字图像处理】Canny边缘检测详解及编程实现
- 图像处理常用边缘检测算子总结
- [置顶] 【matlab 图像处理】五种边缘检测算法比较
- OpenCV图像处理快速上手:Canny边缘检测
- 图像分割算法:概述及常用边缘检测算法
- 图像处理常用边缘检测算子总结
- 图像边缘检测(Canny 算法)的Java实现
- 图像处理常用边缘检测算子总结
- 图像边缘检测(Canny 算法)的Java实现
- 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny)