2010-09-16 28 views
11

Tôi muốn đảo ngược biến đổi Fourier của một hình ảnh trong MATLAB, nhưng kết quả không phải là hình ảnh gốc (vì nó phải là). Rõ ràng là một số chi tiết triển khai mà tôi không biết về điều đó gây ra vấn đề. Dưới đây là các mã:Tại sao biến đổi Fourier nghịch đảo này không cho kết quả chính xác?

img = imread('img.jpg'); 
fft = fft2(img); 
inv = ifft2(fft); 
imshow(inv); 

Trả lời

14

Kể từ FFT2IFFT2 cả hỗ trợ đầu vào duy nhất của loại doublesingle, 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 fftinv vì các hàm có tên đã tồn tại trong MATLAB.

2

Ngoài ra nếu bạn đang cố gắng làm FFT trên hình ảnh màu (24-bit) - lưu ý rằng imread() sẽ trả về mảng M x N x 3. Vì vậy, bạn nên thực hiện FFT trên mỗi kênh R/G/B riêng biệt.

See this để biết chi tiết.

+3

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

+0

+1 để chia sẻ tính năng này ... –

Các vấn đề liên quan