导数滤波器属于高通滤波器,因此它们往往会放大图像中的噪声和细小的高对比度细节。为了减少这些高频成分的影响,最好在应用导数滤波器之前对图像做平滑化处理。也许你觉得这需要两个步骤,即平滑化图像和计算导数。但仔细观察这些运算后就能发现,只要选用合适的平滑内核,这两个步骤是可以合并的。前面提到过,图像与滤波器的卷积可以表示为一些项的累加和。有趣的是,有一个著名的数学定理:项的累加和的导数等于项的导数的累加和。
因此,可以不采取对平滑化的结果求导数,而是先对内核求导数,然后与图像卷积,这两个运算可以在像素上的同一次滤波中完成。因为高斯内核是连续可导的,所以这种做法特别合适。用不同尺寸的内核调用 cv::Sobel 函数时,就采用了这种方法。这个函数用不同的 σ 值计算高斯可导内核。
图像很多精致的细节已经被移除,明显的边缘位置得到了进一步强化。注意,这时它已经成为一个带通滤波器,部分较高的频率被高斯滤波器移除,较低的频率被 Sobel 滤波器移除