代碼實現
clc;clear;close all;
%讀取圖片,展示圖片
I=imread('p3.jpg');
figure('Name','原圖','NumberTitle','off');imshow(I);
I=rgb2gray(I); %I = rgb2gray(RGB) 將真彩色圖像 RGB 轉換爲灰度圖像 I。
I=im2double(I); %I = im2double(I) 將圖像 I 轉換爲雙精度。
figure('Name','灰度圖','NumberTitle','off');imshow(I,[0,1]);%展示原灰度圖像
F=fft2(I); %Y = fft2(X) 使用快速傅里葉變換算法返回矩陣的二維傅里葉變換,這等同於計算 fft(fft(X).').'。如果 X 是一個多維數組,fft2 將採用高於 2 的每個維度的二維變換。輸出 Y 的大小與 X 相同。
Fm=abs(F);%得到變換後的模
T=log(Fm+1);%求自然對數
figure('Name','傅里葉變換頻譜圖','NumberTitle','off');imshow(T,[]);%展示傅里葉變換後的圖
Ff=fftshift(F);%快速傅里葉變換 Y = fftshift(X) 通過將零頻分量移動到數組中心,重新排列傅里葉變換 X。
Fm=abs(Ff);
T=log(Fm+1);
figure('Name','中心偏移後的傅里葉變換頻譜圖','NumberTitle','off');imshow(T,[]);
r=log(abs(real(Ff)));
i=log(abs(imag(Ff)));
figure('Name','中心偏移後的傅里葉變換頻譜圖實部','NumberTitle','off');imshow(r,[]);
figure('Name','中心偏移後的傅里葉變換頻譜圖虛部','NumberTitle','off');imshow(i);
J=ifft2(F);%X = ifft2(Y) 使用快速傅里葉變換算法返回矩陣的二維離散傅里葉逆變換。
figure('Name','傅里葉逆變化得到的灰度圖','NumberTitle','off');imshow(J,[0,1]);
open fftshift
open ifft2
open fft2
結果:
原圖
灰度圖
傅里葉頻譜圖
中心偏移後的傅里葉頻譜圖
中心偏移後頻譜圖的實部
中心偏移後頻譜圖的虛部
傅里葉逆變換得到的灰度圖