Tôi tải và hiển thị hình ảnh của một số gạo trong Matlab:
g = imread('rice.png');
imshow(g);
Tôi lấy FFT của hình ảnh này và thay đổi nó:
G = fft2(g);
imshow(log(abs(fftshift(G)) + 1), []);
Nếu tôi đặt trục rìu và trục y vào tâm của hình ảnh; Tôi thấy rằng hình ảnh là đối xứng g (-x, -y) = g (x, y). Đối với tín hiệu 1D, chúng ta có FFT của tín hiệu thực có phần thực đối xứng và phần ảo không đối xứng. Tôi đoán đó là những gì chúng ta thấy ở đây trong 2 chiều?
Vì ảnh gốc tối hơn ở phía dưới so với ở trên cùng, nên có sự gián đoạn ngang mạnh mẽ ở ranh giới định kỳ gây ra đường thẳng đứng trong FFT.
Tôi muốn thoát khỏi hiệu ứng ranh giới này. Một cách tiếp cận phổ biến cho điều này dường như là cửa sổ .
Tuy nhiên tôi muốn giải quyết vấn đề này bằng một kỹ thuật tôi tìm thấy trong một bài báo gọi là "phản chiếu". Bài viết không cụ thể lắm nên tôi cần sự giúp đỡ của bạn trong việc tìm ra phương pháp này :-).
Đầu tiên tôi tạo một "ô" đối xứng từ ảnh gốc:
tile=[flipdim(g,2) g; flipdim(flipdim(g,1),2) flipdim(g,1)];
imshow(tile);
Bây giờ tôi lấy FFT của "ô" này:
Tile=fft2(tile);
imshow(log(abs(fftshift(Tile)) + 1), [])
Đường thẳng đứng dường như (gần như) biến mất: tốt. Tuy nhiên, sự phản chiếu dường như đã giới thiệu đối xứng hơn.
Kết quả chính xác là gì: FFT của ảnh gốc hoặc FFT của ảnh "nhân đôi"?
Có cách nào tôi có thể "phản chiếu" để cả hai tôi thoát khỏi các hiệu ứng ranh giới và có được một FFT hoàn toàn thực sự không?
Cảm ơn trước cho bất kỳ câu trả lời!