[Python] Laplacian Filter on Python does not work as I expected

Discussão em 'Python' iniciado por Stack, Março 13, 2025.

  1. Stack

    Stack Membro Participativo

    Hello there, hope you are all doing well. I tried to implement a Frequency Domain Laplacian Filter on Python according to this formula, which I found from a lecture note:

    [​IMG]

    This is my Python function:

    import numpy as np
    from matplotlib import pyplot as plt

    # The function takes two dimension inputs for the filter image;
    def highLaplacian(M, N):
    # Initializing the filter with ones; since the filter is a complex function,
    # it has two channels, representing the real and imaginary parts;
    # the data type is float32, since the pixels will take floating point values:
    filter = np.zeros((M, N, 2), dtype=np.float32)

    # Scanning through each pixel and calculating the negative of the sum of the
    # squares of the pixels, and assigning the value to the corresponding pixel
    # in the filter:
    for i in range(M):
    for j in range(N):
    filter[j] = -(i**2 + j**2)

    return filter


    When I use this filter on an image which is transferred to the Fourier Domain; the output image does not change. I successfullly implemented Ideal High Pass, Butterworth High Pass, and Gaussian High Pass filters from this lecture in which I used for Laplacian Filter. However I do not understand why it did not work for the Laplacian.

    This is the main file which uses the Laplacian Filter on a Fourier Domain image:

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt

    img = cv2.imread("airfield-05small-auto.tif")
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    m, n = img.shape

    ft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
    ft_shifted = dft_shift = np.fft.fftshift(ft)

    filter = highLaplacian(m, n)
    filterMag = 20 * np.log(cv2.magnitude(filter[:, :, 0], filter[:, :, 1]))

    applied = ft_shifted * filter
    fshift_mask_mag = 20 * np.log(cv2.magnitude(applied[:, :, 0], applied[:, :, 1]))
    f_ishift = np.fft.ifftshift(applied)
    img_back = cv2.idft(f_ishift)
    img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])

    imgplot = plt.imshow(img_back, cmap="gray")
    plt.show()
    cv2.imwrite("lap_output.png", filterMag)

    Continue reading...

Compartilhe esta Página