| 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。 |
图像的边缘指的是图像中像素灰度值突然发生变化的区域,如果将图像的每一行像素和每一列像素都描述成一个关于灰度值的函数,那么图像的边缘对应在灰度值函数中是函数值突然变大的区域。函数值的变化趋势可以用函数的导数描述。当函数值突然变大时,导数也必然会变大,而函数值变化较为平缓区域,导数值也比较小,因此可以通过寻找导数值较大的区域去寻找函数中突然变化的区域,进而确定图像中的边缘位置。图5-27给出一张含有边缘的图像,图像每一行的像素灰度值变化可以用图中下方的曲线表示。
通过像素灰度值曲线可以看出图像边缘位于曲线变化最陡峭的区域,对灰度值曲线求取一阶导数可以得到图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(x−1,y)(5.12)
这种对X轴方向求导方式对应于滤波器为 [ 1 − 1 ] \begin{bmatrix}1&-1\end{bmatrix} [1−1] ,同样对Y轴方向求导对应的滤波器为 [ 1 − 1 ] T \begin{bmatrix}1&-1\end{bmatrix}^T [1−1]T 。但是这种求导方式的计算结果最接近于两个像素中间位置的梯度,而两个临近的像素中间不再有任何的像素,因此如果想表示某个像素处的梯度,最接近的方式是求取前一个像素和后一个像素的差值,因此需要将式(5.12)修改为如所示。
d f ( x , y ) d x = f ( x + 1 ,
本文探讨了图像边缘检测的原理,利用导数变化寻找图像边缘,并介绍了OpenCV 4中convertScaleAbs()和filter2D()函数在边缘检测中的应用,通过实例展示了边缘检测效果。
最低0.47元/天 解锁文章
445

被折叠的 条评论
为什么被折叠?



