傅立葉變換頻譜圖怎麼看?

I = imread("rice.png");
figure;
subplot(1, 2, 1);
imshow(I);
title("原圖");
f = fft2(I);
f = fftshift(log(1+abs(f)));
subplot(1, 2, 2);
imshow(f, []);
title("頻譜圖");

f= imread("rice.png");
f=im2double(f);
F=fft2(f,256,256);
F2=fftshift(F);
F3=log(1+abs(F2));
figure(2)
subplot(1,2,1);
imshow(f);
title("源圖像");
subplot(1,2,2);
imshow(F3);
title("傅里葉頻譜");

上面代碼得到的頻譜圖該怎麼看?

圖像的log頻譜又是指什麼?


謝邀。

第一張圖展示了頻譜,注意:

0) fft2() 函數得到的傅里葉變換是低頻在四周的。為了獲得更好的直觀的感受,人們經常用fftshift() 調整結果以使得低頻在中央。

1) 頻譜是複數,為了用二維圖像展示頻譜,就取了絕對值;

2) 由於頻譜的動態範圍太大,而顯示器的動態範圍有限,所以用log變換降低頻譜的動態範圍。

3) MATLAB的imshow函數,第二個輸入變數是"[]"的時候,imshow會自動拉伸動態範圍使得圖像對比度提升。

看頻譜一般看:

1) 幅度譜。即第一張圖的右圖,觀察圖像的頻率分布,哪裡亮哪裡暗。

2) 相位譜。用得不多,一般在需要對比的時候會用到。

第二張圖顯示的也是頻譜,與第一張的唯一區別就是imshow中第二個輸入變數不是"[]",而是預設。這時候MATLAB會不自動進行動態範圍拉伸,而以[0,1]為顯示區間。而大部分頻譜的絕對值都是大於1的,所以得到的結果大部分都是白色的。

兩張圖從信號處理的角度看沒有任何區別,只是imshow用得不一樣,就產生了看上去不一樣的結果。


推薦閱讀:

圖像配准問題…也就是如何用C++編程實現在一個大矩陣里尋找一個與它一個子矩陣最為相似的一個等維小矩陣?
FPGA圖像處理的前景如何?
照相的時候,三維世界映射到二維圖像,丟失了哪些信息?
請問超像素(Superpixel)的大致原理?
如何將下圖中孔的區域精確的找出來?用圖像處理的方法

TAG:數學 | 圖像處理 | MATLAB | 傅里葉變換FourierTransform | 傅立葉 |