1

イメージにガウス フィルターのラプラシアンを実装したいと思います。この 2 つの方法をテストすると、まったく異なる答えが得られます。どちらを間違えたか教えてください。最初の方法では、その関数から LOG フィルターを実装し、2 番目の方法では 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')

私の結果は次のとおりです。 ここに画像の説明を入力

2番目の実装は次のとおりです。

src = cv2.GaussianBlur(img, (3, 3), 5,cv2.BORDER_DEFAULT)
img2 = cv2.Laplacian(src, ddepth, ksize=kernel_size)
plt.imshow(img2,cmap='gray')

ここに私の結果があります: ここに画像の説明を入力

結果に基づいて、2番目の画像が正しいはずだと思います。しかし、最初の実装で何が問題なのかわかりません。助けてください。

4

0 に答える 0