как разложить изображение на величину и фазу и снова восстановить его с помощью Matlab?

Как я могу разложить изображение (например, Лена) на изображение величины и фазовое изображение и снова восстановить его из этих двух изображений с помощью Matlab?

Вот код, который я написал в Matlab, но я не знаю, почему восстановленное изображение слишком темное или слишком яркое!

I = imread('lena.png');
I_fft = fft2(I);
I_amp = abs(I_fft);
I_phase = angle(I_fft);

I_fft_recon = I_amp .* exp(I_phase);
I_recon = ifft2(I_fft_recon);
imshow(I_recon)

person MJay    schedule 18.05.2017    source источник


Ответы (1)


Вы забыли умножить фазу на комплексную единицу j:

I_fft_recon = I_amp .* exp(j * I_phase);

Все остальное должно быть просто отлично.

Кстати, вы можете преобразовать изображение в double перед обработкой

I = im2double(I);
person Shai    schedule 18.05.2017
comment
если я вычисляю ошибку реконструкции, I_error = I - I_recon; на изображении есть значения. кто они такие? - person MJay; 18.05.2017
comment
@MJay ​​убедитесь, что эти значения очень малы. Они, вероятно, из-за числовых проблем. См., например, эту тему. - person Shai; 18.05.2017