Python 高斯滤波器的拉普拉斯实现

Python 高斯滤波器的拉普拉斯实现,python,image,filter,edge-detection,laplacianofgaussian,Python,Image,Filter,Edge Detection,Laplacianofgaussian,我想为我的图像实现拉普拉斯高斯滤波器。我测试了这两种方法,它们给出了完全不同的答案。请告诉我我犯了什么错误。在第一种方法中,我从它的函数实现日志过滤器,在第二种方法中,我使用opencv函数。以下是第一种方法的代码: img = np.array(Image.open('Bi00069.bmp').convert('I;16')) ddepth = cv2.CV_16U kernel_size = 3 def gkern(l,sig): ax = np.linspace(-(l -

我想为我的图像实现拉普拉斯高斯滤波器。我测试了这两种方法,它们给出了完全不同的答案。请告诉我我犯了什么错误。在第一种方法中,我从它的函数实现日志过滤器,在第二种方法中,我使用opencv函数。以下是第一种方法的代码:

img = np.array(Image.open('Bi00069.bmp').convert('I;16')) 
ddepth = cv2.CV_16U
kernel_size = 3 
def gkern(l,sig):

    ax = np.linspace(-(l - 1) / 2., (l - 1) / 2., l)
    xx, yy = np.meshgrid(ax, ax)
    kernel = (-1)/(np.pi*sig**4)*(1-(xx**2+yy**2)/(2*sig**2))* 
    np.exp(-0.5 * (np.square(xx) + np.square(yy)) / np.square(sig))

    return kernel / np.sum(kernel)
img1 = signal.convolve2d(img,gkern(5,5),mode='same', 
boundary='fill', fillvalue=0)

plt.imshow(G_img2,cmap='gray')
我的结果是:

第二个实现是:

src = cv2.GaussianBlur(img, (3, 3), 5,cv2.BORDER_DEFAULT)
img2 = cv2.Laplacian(src, ddepth, ksize=kernel_size)
plt.imshow(img2,cmap='gray')
下面是我的结果:

我认为根据结果,第二张图片应该是正确的。但我不知道我的第一个实现出了什么问题。请帮助我