LoG算子(高斯拉普拉斯算子)
LoG算子是由拉普拉斯算子改进而来。拉普拉斯算子是二阶导数算子,是一个标量,具有线性、位移不变性,其传函在频域空间的原点为0。所有经过拉普拉斯算子滤波的图像具有零平均灰度。但是该算子的缺点是对噪声具有敏感性,因此在实际应用中,一般先要对图像进行平滑滤波,再用拉氏算子进行图像的边缘检测。这就是LoG算子的产生的背景(最后的梯度表达式为高斯函数和原图像卷积,再去二阶微分算子)。
其滤波函数模型为:

常用的5*5卷积核模板为:
0 0 − 1 0 0 0 − 1 − 2 − 1 0 − 1 − 2 16 − 2 − 1 0 − 1 − 2 − 1 0 0 0 − 1 0 0 \] \\left\[ \\begin{array} {cccc} 0\&0\&-1\&0\&0\\\\ 0\&-1\&-2\&-1\&0\\\\ -1\&-2\&16\&-2\&-1\\\\ 0\&-1\&-2\&-1\&0\\\\ 0\&0\&-1\&0\&0\\\\ \\end{array} \\right\] 00−1000−1−2−10−1−216−2−10−1−2−1000−100 代码: ```python import numpy as np import cv2 from matplotlib import pyplot as plt import imgShow as iS #定义掩膜 m1 = np.array([[0,0,-1,0,0],[0,-1,-2,-1,0],[-1,-2,16,-2,-1],[0,-1,-2,-1,0],[0,0,-1,0,0]]) #LoG算子模板 img = cv2.imread("./originImg/Lena.tif") img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #边缘扩充 image = cv2.copyMakeBorder(img, 2, 2, 2, 2, borderType=cv2.BORDER_REPLICATE) # image = cv2.GaussianBlur(img,(3,3),4) rows = image.shape[0] cols = image.shape[1] temp = 0 image1 = np.zeros(image.shape) for i in range(2,rows-2): for j in range(2,cols-2): temp = np.abs( (np.dot(np.array([1, 1, 1, 1, 1]), (m1 * image[i - 2:i + 3, j - 2:j + 3]))) .dot(np.array([[1], [1], [1], [1], [1]]))) image1[i,j] = int(temp) if image1[i, j] > 255: image1[i, j] = 255 else: image1[i, j] = 0 iS.showImagegray(image1,img , 25, 15, 'LoG', 'origin', './LoG.jpg') # cv2.imshow("LoG",image1) # cv2.waitKey(0) ``` 检测结果为: 