Гауссов режекторный фильтр в Python - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь сконструировать гауссов фильтр нарезки в Python, чтобы удалить периоди c шум. Я попытался реализовать следующую формулу:

Гауссов фильтр нарезки

А вот код:

import numpy as np

def gaussian_bandpass_filter(image):
    image_array = np.array(image)
    #Fourier Transform
    fourier_transform = np.fft.fftshift(np.fft.fft2(image_array)) 

    #Size of Image
    m = np.shape(fourier_transform)[0]
    n = np.shape(fourier_transform)[1]

    u = np.arange(m)
    v = np.arange(n)

    # Find the center
    u0 = int(m/2)
    v0 = int(n/2)

    # Bandwidth
    D0 = 10

    gaussian_filter = np.zeros(np.shape(fourier_transform))

    for x in u:
        for y in v:
            D1 = math.sqrt((x-m/2-u0)**2 + (y-n/2-v0)**2)
            D2 = math.sqrt((x-m/2+u0)**2 + (y-n/2+v0)**2)
            gaussian_filter[x][y] = 1 - math.exp(-0.5 * D1*D2/(D0**2))

    #Apply the filter
    fourier_transform = fourier_transform + gaussian_filter
    image_array = np.fft.ifft2(np.fft.ifftshift(fourier_transform))

    return image_array

предполагается, что эта функция применяет к изображению фильтр Гаусса для меток и возвращает отфильтрованное изображение, но, похоже, оно не работает. Я не знаю, где я ошибся (возможно, я не правильно понял формулу?), Поэтому, если кто-нибудь сможет мне помочь, я буду очень признателен.

Редактировать:

В качестве примера приведем зашумленное изображение . Используя существующую функцию gaussian_filter в библиотеке scipy.ndimage, я получаю this , что приемлемо. Но моя функция возвращает это . (Я использую функцию PIL.Image.fromarray для преобразования массива в изображение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...