7.4.2 拉普拉斯边缘检测
7.4.2 拉普拉斯边缘检测
基于一阶导数的soble效果并不理想,人们在其基础上提出了取对应的二阶导数为0的点为边缘。拉普拉斯边缘检测正是利用了这一原理,如图7-19所示。
图7-19 拉普拉斯边缘检测示意图
拉普拉斯边缘检测在opencv中的函数定义如下:
laplacian(src, ddepth, ksize=none, scale=none, delta=none, bordertype=none)
其中主要的参数为:
? ddepth:深度类型。
? ksize:卷积核大小。
如图7-20所示,一共有三个子图,子图a是原始图像,子图b使用了soble算法,子图c使用了拉普拉斯算法。
img=cv2.imread("../picture/smallpig.jpeg")
gray_img=cv2.cvtcolor(img, cv2.color_rgb2gray)
#拉普拉斯边缘检测
lap = cv2.laplacian(gray_img,cv2.cv_64f)#拉普拉斯边缘检测
lap = np.uint8(np.absolute(lap))##对lap去绝对值
#对二值图像进行反转,黑白颠倒
lap=cv2.bitwise_not(lap)
#sobel边缘检测
sobel = cv2.sobel(gray_img,cv2.cv_64f,0,1)
#对二值图像进行反转,黑白颠倒
sobel=cv2.bitwise_not(sobel)
图7-20 拉普拉斯边缘检测示例
相对soble,拉普拉斯对边缘的识别效果更好,但是拉普拉斯对噪声敏感,会产生双边效果,不能检测出边的方向,通常不直接用于边的检测,只起辅助的角色。
基于一阶导数的soble效果并不理想,人们在其基础上提出了取对应的二阶导数为0的点为边缘。拉普拉斯边缘检测正是利用了这一原理,如图7-19所示。
图7-19 拉普拉斯边缘检测示意图
拉普拉斯边缘检测在opencv中的函数定义如下:
laplacian(src, ddepth, ksize=none, scale=none, delta=none, bordertype=none)
其中主要的参数为:
? ddepth:深度类型。
? ksize:卷积核大小。
如图7-20所示,一共有三个子图,子图a是原始图像,子图b使用了soble算法,子图c使用了拉普拉斯算法。
img=cv2.imread("../picture/smallpig.jpeg")
gray_img=cv2.cvtcolor(img, cv2.color_rgb2gray)
#拉普拉斯边缘检测
lap = cv2.laplacian(gray_img,cv2.cv_64f)#拉普拉斯边缘检测
lap = np.uint8(np.absolute(lap))##对lap去绝对值
#对二值图像进行反转,黑白颠倒
lap=cv2.bitwise_not(lap)
#sobel边缘检测
sobel = cv2.sobel(gray_img,cv2.cv_64f,0,1)
#对二值图像进行反转,黑白颠倒
sobel=cv2.bitwise_not(sobel)
图7-20 拉普拉斯边缘检测示例
相对soble,拉普拉斯对边缘的识别效果更好,但是拉普拉斯对噪声敏感,会产生双边效果,不能检测出边的方向,通常不直接用于边的检测,只起辅助的角色。