import numpy as np
import cv2 as cv
N = 512
wave = 6328e-10
d = 0.1
Lo = np.sqrt(N * d * wave)
k = 2 * np.pi / wave
L = Lo
im = cv.imread("feiji.jpg", 0)
init_phase = np.exp(1j * np.random.rand(N, N) * 2 * np.pi)
cv.imshow("Input", im)
x = np.linspace(-L / 2, L / 2, N)
y = np.linspace(-L / 2, L / 2, N)
x, y = np.meshgrid(x, y)
fx = x / (wave * d)
fy = y / (wave * d)
H = np.exp(1j * k * d * (1 - (wave ** 2 / 2 * (fx ** 2 + fy ** 2))))
for i in range(5):
U = np.fft.ifft2((np.fft.fft2(init_phase)) * (1 / H))
Angle = np.exp(1j * np.angle(U)) * im
U1 = np.fft.ifft2((np.fft.fft2(Angle) * H))
init_phase = np.exp(1j * np.angle(U1))
print(i)
U1 = np.fft.ifft2(np.fft.fft2(init_phase) * (1 / H))
I = U1 * np.conjugate(U1)
cv.imshow("GS", np.abs(I / I.max()))
cv.waitKey(1)
pass
cv.waitKey()