边缘检测
对图像进行边缘检测之前,一般都需要先进行降噪(可调用GaussianBlur函数)。
Sobel算子 与 Scharr算子
都是一个离散微分算子 (discrete differentiation operator),用来计算图像灰度函数的近似梯度。结合了高斯平滑和微分求导。Sobel算子与Scharr算子的内核不同,Sobel内核产生误差比较明显,Scharr更为准确一些。
Sobel算子的计算步骤:
在两个方向求导:将原图分别与两个3x3的内核进行卷积计算,得到Gx与Gy
在图像的每一点,结合Gx与Gy求出近似梯度:
或者
(简单公式)
/// 求 X方向梯度
//Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT );
Sobel( src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT );
convertScaleAbs( grad_x, abs_grad_x );
/// 求Y方向梯度
//Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT );
Sobel( src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT );
convertScaleAbs( grad_y, abs_grad_y );
/// 合并梯度(近似)