Độ lớn và giai đoạn của một Fourier transform F được định nghĩa là:Bắt Fourier Transform từ pha và Magnitude - Matlab
Mag = sqrt(Real(F)^2 + Imaginary(F)^2)
và
Phase = arctan(Imaginary(F)/Real(F))
Ive đã cố gắng để viết mã MATLAB mà mất trong một ma trận hình ảnh thang độ xám, thực hiện fft2() trên ma trận và sau đó tính toán độ lớn và pha từ phép biến đổi. Sau đó tôi muốn tính toán các phần ảo và thực của biến đổi fourier. Này được thực hiện bằng cách sắp xếp lại hai phương trình đầu tiên vào:
Real = Mag/sqrt(1 + tan(Phase)^2)
và
Imaginary = Real*tan(Phase)
và cuối cùng kết hợp và fft2 nghịch đảo:
F = Real + i*Imaginary
image = ifft2(F)
tôi mong đợi để xem hình ảnh tương tự như đầu vào, nhưng tôi nhận được rác. Toán học của tôi có sai không? đang mfile matlab của tôi là như sau:
function y = forwardBackwardFFT(image)
F = fft2(image);
mag = sqrt(real(F).^2 + imag(F).^2);
phase = atan(imag(F)./real(F));
re = sqrt((mag.^2)./(1 + tan(phase).^2));
im = re.*tan(phase);
F = re + i*im;
f = ifft2(F);
subplot(1,2,1);
imshow(image);
Title('Original Image');
subplot(1,2,2);
imshow(f);
Title('Image after forward and backward FFT');
y = f;
thanks a lot :)
ahh cảm ơn một tấn! thats awesome. Sự khác biệt lớn giữa atan (im./re) và atan2 (im, re) là gì? Hôm qua tôi đã cố gắng cùng một loại điều, nhận lại và im từ mag và cos và tội lỗi, nhưng nó vẫn cho tôi thùng rác. với đề xuất của bạn về atan2(), nó hoạt động. Cảm ơn một tấn mặc dù :) –
@Dave: Xem http://en.wikipedia.org/wiki/Atan2#Motivation. –
@ nibot xin lỗi người đàn ông, havent đã ở đây trong một thời gian. chỉ cần chọn nó làm câu trả lời được chấp nhận –