我在做实验室分配时遇到问题,不知道如何实现这个:
在灰度图像上使用fft2
并进行傅里叶变换,然后计算功率谱。到目前为止,这是我的代码:
>> Pc = imread('pckint.jpg');
>> whos Pc;
Name Size Bytes Class Attributes
Pc 256x256 65536 uint8
>> imshow(Pc);
>> result = fft2(Pc);
我的问题来自结果。如何计算机功率谱?
答案 0 :(得分:4)
尝试:
psd=abs(fftshift(fft2(Pc))).^2;
以dB为单位:
psd=immultiply(log10(abs(fftshift(fft2(Pc)))), 20);
答案 1 :(得分:3)
我猜你正在寻找FFT的对数形式,因为这是表达傅立叶级数的功率谱的更好方法之一,因为频谱的动态范围与8位相比是如此之大。显示中心的亮值控制结果,这个难度通过对数转换处理。
这是在MATLAB中的做法:
I = imread('cameraman.tif');
imshow(I)
F = fft2(I);
shF = fftshift(F);
Log = log2(1 + abs(shF));
imshow(Log, []);
imshow表达式末尾的空括号对于在指定范围内显示图像是必要的,对于这种情况,这意味着[min(I(:))max(I(:))];这是I中的最小值显示为黑色,最大值显示为白色。