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.先通过这两个阈值进行筛选,即梯度幅值高于高阈值的则认为一定是边,梯度幅值小于低阈值的则认为一定不是边。中间的部分需要继续判断:如果其八邻域内存在一个确定是边的点,那么则认为该点也属于边,进行点与点之间的连接,以此循环,直到再也没有确定为边的点,说明所有的边已经被连接好了。(可以用栈来完成,遍历所有肯定是边的点,观察其八邻域内是否存在一个有可能是边的点——灰度值在高低阈值之间的点。如果一个点有可能是边,并且处于一个确定是边的点的八邻域内,则把这个可能是边的点也标记成边并压入栈里面,然后出栈,看弹出栈的点的八邻域内是否有确定点,直到栈空了为止)

发布了40 篇原创文章 · 获赞 0 · 访问量 2101

猜你喜欢

转载自blog.csdn.net/DDWDDZY/article/details/105063352