Я пытаюсь псевдослучайно изменить фазу изображения в области Фурье, сохраняя при этом ту же величину, чтобы получить зашумленное изображение. Вот код для этого:
import numpy as np
import matplotlib.pyplot as plt
import cv2
img_orig = cv2.imread("Lenna.png", 0)
plt.imshow(img_orig, cmap="gray");
f = np.fft.fft2(img_orig)
mag_orig, ang_orig = np.abs(f), np.arctan2(f.imag, f.real)
np.random.seed(42)
ns = np.random.uniform(0, 6.28, size = f.shape)
ang_noise = ang_orig+ns
img_noise = np.abs(np.fft.ifft2(mag_orig*np.exp(ang_noise*1j)))
plt.imshow(img_noise, cmap="gray");
Но когда я пытаюсь восстановить исходное изображение, удаляя шум так, как я его добавил, я получаю зашумленную версию исходного изображения. Вот код:
f_noise = np.fft.fft2(img_noise)
mag_noise, ang_noise = np.abs(f_noise), np.arctan2(f_noise.imag, f_noise.real)
ang_recover = ang_noise-ns
img_recover = np.abs(np.fft.ifft2(mag_noise*np.exp(ang_recover*1j)))
plt.imshow(img_recover, cmap="gray");
Реконструированное изображение
Любая идея о том, почему это происходит и как это удалить? Я буду признателен за любую помощь, которую я могу получить. Благодарю вас