【OpenCV 4开发详解】边缘检测原理

本文探讨了图像边缘检测的原理,利用导数变化寻找图像边缘,并介绍了OpenCV 4中convertScaleAbs()和filter2D()函数在边缘检测中的应用,通过实例展示了边缘检测效果。
摘要由CSDN通过智能技术生成
本文首发于 “小白学视觉”微信公众号,欢迎关注公众号
本文作者为小白,版权归 人民邮电出版社发行所有,禁止转载,侵权必究!

经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。

图像的边缘指的是图像中像素灰度值突然发生变化的区域,如果将图像的每一行像素和每一列像素都描述成一个关于灰度值的函数,那么图像的边缘对应在灰度值函数中是函数值突然变大的区域。函数值的变化趋势可以用函数的导数描述。当函数值突然变大时,导数也必然会变大,而函数值变化较为平缓区域,导数值也比较小,因此可以通过寻找导数值较大的区域去寻找函数中突然变化的区域,进而确定图像中的边缘位置。图5-27给出一张含有边缘的图像,图像每一行的像素灰度值变化可以用图中下方的曲线表示。

图5-27 图像每行像素灰度值变化趋势

通过像素灰度值曲线可以看出图像边缘位于曲线变化最陡峭的区域,对灰度值曲线求取一阶导数可以得到图5-28中所示的曲线,通过曲线可以看出曲线的最大值区域就是图像中的边缘。

图5-28 每一行灰度值函数的导数

由于图像是离散的信号,我们可以用临近的两个像素差值来表示像素灰度值函数的导数,求导形式可以用式(5.12)来表示。
d f ( x , y ) d x = f ( x , y ) − f ( x − 1 , y ) (5.12) \frac{ {df(x,y)}}{ {dx}} = f(x,y) - f(x - 1,y) \tag{5.12} dxdf(x,y)=f(x,y)f(x1,y)(5.12)

这种对X轴方向求导方式对应于滤波器为 [ 1 − 1 ] \begin{bmatrix}1&-1\end{bmatrix} [11] ,同样对Y轴方向求导对应的滤波器为 [ 1 − 1 ] T \begin{bmatrix}1&-1\end{bmatrix}^T [11]T 。但是这种求导方式的计算结果最接近于两个像素中间位置的梯度,而两个临近的像素中间不再有任何的像素,因此如果想表示某个像素处的梯度,最接近的方式是求取前一个像素和后一个像素的差值,因此需要将式(5.12)修改为如所示。
d f ( x , y ) d x = f ( x + 1 ,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值