1.实验目的
了解Laplacian边缘检测的用途及原理。
2.实验设备
安装了python和pychrm的电脑一台。
3.实验内容
包含图片的导入、Laplacian边缘检测。
4.实验原理
Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。拉普拉斯高斯算子是一种二阶导数算子,它是一个线性的、移不变算子。将在边缘处产生一个陡峭的零交叉,Laplacian算子利用二阶导数信息,具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。使得图像经过二阶微分后,在边缘处产生一个陡峭的零交叉点,根据这个对零交叉点判断边缘。这是拉普拉斯算子区别于其他算法的最大优点。
拉普拉斯算子一种二阶边缘检测算子,它是一个线性的、移不变算子。是对二维函数进行运算的二阶导数算子,对一个连续函数f (x, y)它在图像中的位置(x, y),拉普拉斯值定义为:
即:
Laplacian算子利用二阶导数信息,具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。使得图像经过二阶微分后,在边缘处产生一个陡峭的零交叉点,根据这个对零交叉点判断边缘。其4邻域系统和8邻域系统的Laplacian算子的模板分别如下图所示。
用卷积核表示:
图1.1.1 滤波核
Laplacian算子对噪声比较敏感,Laplacian算子有一个缺点是它对图像中的某些边缘产生双重响应。所以图像一般先经过高斯平滑处理,通常把Laplacian算子和平滑算子结合起来生成一个新的模板。
处理流程:
1 .高斯模糊--去噪声GaussianBlur()
2 .转为灰度图片cvtColor()
3.拉普拉斯--二阶导数计算Laplacian()
4 .取绝对值concertScaleAbs()
5 .显示结果
在OpenCV-Python中,Laplace算子的函数原型如下:
dst = cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])
参数:
第一个参数是需要处理的图像;
第二个参数是图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度;其后是可选的参数:
ksize是算子的大小,必须为1、3、5、7。默认为1。
scale是缩放导数的比例常数,默认情况下没有伸缩系数;
delta是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;
borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT。
5.实验步骤
打开pycharm
我们右击相应的文件目录,选择new--->点击Python File,然后输入新建的文件名,点击确定,相应的.py文件就建好了,可以进行编写代码了。
导入需要的图片。
ipoert cv2
读取图片并转换为灰度图像。
img = cv2.imread("..\images\aifos.png")
高斯平滑去噪处理,这里卷积核大小为3*3。
gauss = cv2.GaussianBlur(img, (3, 3), 0)
将图像转为灰度图像。
gray = cv2.cvtColor(gauss, cv2.COLOR_RGB2GRAY)
调用Laplacian函数进行拉普拉斯计算,然后将像素点进行绝对值得计算。
dst=cv2.Laplacian(gray,cv2.CV_16S,ksize = 3)
edges1 = cv2.convertScaleAbs(edges1)
显示高斯滤波后的图像。
cv2.imshow("img", img) cv2.imshow("laplacian",lapla)
cv2.waitKey()
运行后原图和laplacian边缘检测的效果图。
图1.1.2 运行效果图