C语言canny算子函数 c语言里的算法( 五 )


canny算子的计算步骤如下:
1.高斯滤波器平滑图像 。去除噪声
2.一阶差分偏导计算梯度值和方向 。通过sobel算子计算的 。
3.对梯度值不是极大值的地方进行抑制 。把不是极值的点,全部置0,去掉了大部分弱的边缘 。所以图像边缘会变细 。
4.用双阈值连接图上的联通点 。设置双阈值 t1, t2, 是这样的 , t1 = t2 大于 t2 的点肯定是边缘;小于 t1 的点肯定不是边缘;在 t1, t2 之间的点,通过已确定的边缘点,发起8领域方向的搜索(广搜),图中可达的是边缘,不可达的点不是边缘 。最后得出 canny 边缘图 。
(2)二阶导算子
1、lapacian
一阶差分:f '(x) = f(x) - f(x - 1)
二阶差分:f '(x) = (f(x + 1) - f(x)) - (f(x) - f(x - 1))
化简后:f '(x) = f(x - 1) - 2 f(x)) + f(x + 1)
提取前面的系数:[1, -2, 1]
二维的情况下 , 同理可得f '(x, y) = -4 f(x, y) + f(x-1, y) + f(x+1, y) + f(x, y-1) + f(x, y+1)提取各个系数,写成模板的形式
0,1, 0
1, -4, 1
0,1, 0
考虑两个斜对角的情况
1,1, 1
1, -8, 1
1,1, 1
与原图卷积运算即可求出边缘 。
那么这些算子有什么区别呢:
下面三张图分别是 sobel,canny,laplace 结果图 。
sobel 产生的边缘有强弱,抗噪性好,计算量小
laplace 对边缘敏感,可能有些是噪声的边缘,也被算进来了
canny 产生的边缘很细,可能就一个像素那么细,没有强弱之分 。计算量大,但是准确
部分参考自:

【C语言canny算子函数 c语言里的算法】C语言canny算子函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言里的算法、C语言canny算子函数的信息别忘了在本站进行查找喔 。

推荐阅读