Opencv学习之图像边缘检测


该博客只为记录点滴所学,若有误导,还请大家原谅,并不吝赐教。

         一直不太明白应用函数求导的方法能求出图像强度变化的边缘,其实就是图像边缘检测。现在终于想通了,解释如下。比如一张如下的图片:


图1


检测边缘可以检测到狗和兔子的轮廓。因为它们的轮廓跟其周围的像素值强度差是很明显的。那怎样理解这个呢?我们先假设有一个一维的图片,一维的图片就是一条线。它可以如下表示:

图2


横轴表示像素坐标,纵轴表示像素值。(如果不太好理解的话,我们可以对应二维图片来理解,像素坐标就是诸如(x,y)这样的值,只不过一维图片只需一个值来表示像素坐标,这里只需用t表示。像素值是一样理解的。)

再说回上面图2那张图片,可以看到在红色圆圈处像素值跳跃比较大。即在同样的delta t区间里,该处的像素值变化最大。而此处的导数值也越大,趋于无穷。于是我们就可以将其看成是一维图像的边缘。将其延伸到二维图片,即我们所认知的看到的普通的图片,也是一样的道理。我们可以将其拆分成两个轴向的一维图片,然后组合起来。

         综上,就解释了为什么求导可以得出一张图片的边缘。比如我们假设当导数超过一个限度之后,就认为它是边缘,我们就把它的像素值设为255,否则设为0.