欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Prewitt和Sobel算子

程序员文章站 2022-03-22 16:56:03
...

在3*3模板中:

Prewitt和Sobel算子

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

Prewitt和Sobel算子

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

Prewitt和Sobel算子

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

Prewitt和Sobel算子


Sobel算子:

Prewitt和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();

Prewitt和Sobel算子

Prewitt和Sobel算子

Prewitt和Sobel算子

参考:

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

相关标签: opencv