sobel算子、scharr算子和laplacian算子效果图比较

 

img =cv2.imread('F://from 2to7 notebook//images//lena.jpg')
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobely=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobelx=cv2.convertScaleAbs(sobelx)
sobely=cv2.convertScaleAbs(sobely)
sobelxy=cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
cv_imshow('sobelxy',sobelxy)

scharrx=cv2.Scharr(img,cv2.CV_64F,1,0)
scharry=cv2.Scharr(img,cv2.CV_64F,0,1)
scharrx=cv2.convertScaleAbs(scharrx)
scharry=cv2.convertScaleAbs(scharry)
scharrxy=cv2.addWeighted(scharrx,0.5,scharry,0.5,0)
cv_imshow('scharrxy',scharrxy)

laplacian=cv2.Laplacian(img,cv2.CV_64F)
laplacian=cv2.convertScaleAbs(laplacian)
cv_imshow('laplacian',laplacian)

res=np.hstack((sobelxy,scharrxy,laplacian))
cv_imshow('res',res)

sobel算子、scharr算子和laplacian算子效果图比较

sobel算子:https://blog.csdn.net/xiachong27/article/details/88371771

sobel算子、scharr算子和laplacian算子效果图比较

scharr算子和sobel算子使用的方法差不多,也分为x方向和y方向,区别就是scharr算子的核数值相对较大,使得周围像素对其影响会变大,边缘会更多,最终效果图会更明显。也是取绝对值。

laplacian算子是二阶的,对边缘更敏感,但是对噪声也敏感,所以一般会和其他算法一起使用;他不分为xy,相当于周围4个像素和对4倍的目标像素相减,也就是周围4个像素的均值与该像素比较,,若此处有边缘,会差值较大,取的也是差的绝对值。