在3*3模板中:

我如下定义水平、垂直和两对角线方向的梯度:  

该定义下的算子称之为Prewitt算子: 

Sobel算子是在Prewitt算子的基础上改进的,在中心系数上使用一个权值2,相比较Prewitt算子,Sobel模板能够较好的抑制(平滑)噪声。 
计算公式为: 


Sobel算子:

       上述所有算子都是通过求一阶导数来计算梯度的,用于线的检测,在图像处理中,通常用于边缘检测。在图像处理过程中,除了检测线,有时候也需要检测特殊点,这就需要用二阶导数进行检测。

Mat src = imread("test.png", IMREAD_GRAYSCALE);
imshow("src", src);

//X方向—Prewitt算子
Mat imgx;
Mat kernel_x = (Mat_<int>(3, 3) << -1, -1, -1, 0, 0, 0, 1, 1, 1);
filter2D(src, imgx, -1, kernel_x, Point(-1, -1), 0, 0);
imshow("x方向", imgx);

Mat imgy;
//Y方向—Prewitt算子
Mat kernel_y = (Mat_<int>(3, 3) << -1, 0, 1, -1, 0, 1, -1, 0, 1);
filter2D(src, imgy, -1, kernel_y, Point(-1, -1), 0, 0);
imshow("y方向", imgy);

waitKey();

参考:

https://blog.csdn.net/swj110119/article/details/51777422

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐