Kể từ FFT2 và IFFT2 cả hỗ trợ đầu vào duy nhất của loại double
và single
, bạn image data (đó là khả năng loại uint8
) được chuyển đổi sang loại double
đầu tiên trước khi được xử lý bởi FFT2. do đó bạn sẽ phải chuyển đổi hình ảnh đầu ra của bạn inv
trở lại một số nguyên 8-bit unsigned sử dụng chức năng UINT8 để khôi phục lại hình ảnh ban đầu:
>> img = imread('peppers.png'); %# Load a sample image
>> fft = fft2(img); %# Get the Fourier transform
>> inv = ifft2(fft); %# Get the inverse Fourier transform
>> inv = uint8(inv); %# Convert to uint8
>> imshow(inv); %# Show the image
>> isequal(img,inv) %# Test if inv matches the original image img
ans =
1 %# It does!
LƯU Ý: Là một mũi bổ sung, tôi sẽ tránh đặt tên biến của bạn fft
và inv
vì các hàm có tên đã tồn tại trong MATLAB.
Thực ra, có vẻ như FFT2 xử lý điều đó cho bạn. Nếu bạn gõ 'type fft2' vào Command Window, bạn có thể thấy rằng một đầu vào 3-D' x' dẫn đến hoạt động 'fft (fft (x, [], 2), [], 1)', thực hiện một FFT trên thứ hai sau đó thứ nguyên đầu tiên, trong khi một đầu vào 2-D 'x' (nếu bạn đang vượt qua mỗi mặt phẳng màu riêng biệt) kết quả trong một cuộc gọi đến [FFTN] (http://www.mathworks.com/help/techdoc /ref/fftn.html). So sánh từng phương pháp, sự chênh lệch điểm ảnh tuyệt đối tối đa tuyệt đối giữa các kết quả là khoảng 5,6e-10, có thể do sự khác biệt về thứ tự hoạt động. Trong ngắn hạn, hai là gần như tương đương. – gnovice
+1 để chia sẻ tính năng này ... –