边缘检测:Sobel算子
1、图像梯度:sobel算子
Sobel算子主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值, Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很好的消除噪声的影响
Sobel算子对于象素的位置的影响做了加权,与Prewitt算子、Roberts算子相比因此效果更好。
Sobel算子包含两组3x3的矩阵,分别为横向及纵向模板,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值
实际使用中,常用如下两个模板来检测图像边缘。
1、检测水平边沿横向模板 :
2、检测垂直平边沿纵向模板:
图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。
然后可用以下公式计算梯度方向。
在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。
缺点是Sobel算子并没有将图像的主题与背景严格地区分开来,换言之就是Sobel算子并没有基于图像灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
调用如下:
sobelx = cv2.sobel(src,depth,dx,dy,ksize)
sobely = cv2.sobel(src,depth,dx,dy,ksize)
sobel = cv2.addweight(sobelx,0.5,sobely,0.5,0)
白到黑是正数,黑到白是负数,所有负数截断为0,所以要取绝对值
cv2.convertScaleAbs(sobel)
2、图像梯度:scharr算子
和sobel的区别就是,权重差别更大,效果更明显
cv2.scharr(img,cv2,CV_64F,1,0)
3、图像梯度:laplacian算子
Laplacian 算子对噪声比较敏感,二阶,所以图像一般先经过平滑处理,因为平滑处理也是用模板进行的,所以,通常的分割算法都是把Laplacian 算子和平滑算子结合起来生成一个新的模板。
如果邻域系统是4 邻域,Laplacian 算子的模板为:
如果邻域系统是8 邻域,Laplacian 算子的模板为:
cv2.laplacian(img,cv2.CV_64F)
参考文章:
https://blog.****.net/xddwz/article/details/78006655