Свернуть изображение, а затем свернуть с тем же ядром, что не приведет к получению исходного изображения - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь свернуть и деконвертировать изображение, чтобы воссоздать результат обратной фильтрации в учебнике DIP . По сути, обратная фильтрация не может инвертировать шумное изображение.

Вот исходное изображение .

Мои функции свертки и деконволюции (умножение в частотной области):

def convolve(src, kernel):
    kernel = kernel_pad(src, kernel)
    src_fft = fftpack.fftshift(fftpack.fftn(src))
    kernel_fft = fftpack.fftshift(fftpack.fftn(kernel))
    return fftpack.fftshift(fftpack.ifftn(fftpack.ifftshift(src_fft*kernel_fft)))

def deconvolve(src, kernel):
    kernel = kernel_pad(src, kernel)
    src_fft = fftpack.fftshift(fftpack.fftn(src))
    kernel_fft = fftpack.fftshift(fftpack.fftn(kernel))
    return fftpack.fftshift(fftpack.ifftn(fftpack.ifftshift(src_fft/kernel_fft)))

Фильтр представляет собой масштабированное диагональное ядро.

# Create the diagonal kernel
kernel_size = 70
kernel = np.zeros((kernel_size, kernel_size))
# Fill the diagonal with ones
np.fill_diagonal(kernel, 1)
# Normalize
kernel /= kernel_size

Я сворачиваю исходное изображение с ядром. Создание размытого изображения .

mb = convolve(img, kernel)

Затем я разлагаю размытое изображение ядром. Но даже без шума результат не выглядит точно так же, как исходное изображение .

recovered = deconvolve(mb, kernel)

С некоторыми исследованиями. Кажется, что свертка на самом деле не равна умножению в частотной области с этим методом. Есть ли другой способ воссоздать результат в учебнике? Спасибо!

...