Я пытаюсь свернуть и деконвертировать изображение, чтобы воссоздать результат обратной фильтрации в учебнике 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)
С некоторыми исследованиями. Кажется, что свертка на самом деле не равна умножению в частотной области с этим методом. Есть ли другой способ воссоздать результат в учебнике? Спасибо!