傅里叶变换

傅里叶变换

1、傅里叶变化公式

    F(u, v) = symsum(symsum(f(x, y) * exp(- j * 2 * pi * (u * x / M + v * y / N))))

 

2、根据公式所写代码

    这个代码的时间复杂度为 O(n^2), 算一幅 512 * 512 的图像的时间大概是2个小时,没有实际应用价值,应该要采用快速傅里叶变换。

%% 锐化空间滤波器 频率滤波 二维离散傅里叶变换 傅里叶变换的代码自己实现
% 作者:杨宇东
% 日期:2014.09.30
% 参数:imgFile 源图像文件
% 输出:
% fourierResult 进行傅里叶变换之后的结果;
% centeredFourierResult 进行傅里叶变换之后进行中心平移和取对数增强之后的记过
%%
function [fourierResult, centeredFourierResult] = FourierTransformation(imgFile)
im = imread(imgFile);
[nHeight, nWidth, nDim] = size(im);
if nDim == 3
    im = rgb2gray(im);
end
subplot(1, 3, 1), imshow(im);


% 进行傅里叶变换
j = sqrt(-1);
M = nHeight;
N = nWidth;
img = zeros(M, N);
for u = 1:nHeight
    for v = 1:nWidth
        % 直接套用公式 F(u, v) = symsum(symsum(f(x, y) * exp(- j * 2 * pi * (u * x / M + v * y / N))))
        sumF = 0;
        for x = 0:M-1
            for y = 0:N-1
                sumF = sumF + double(im(x + 1, y + 1)) * exp(- j * 2 * pi * (u * x / M + v * y / N));
            end
        end
        img(u, v) = sumF;
    end
end


fourierResult = log(abs(img));
subplot(1, 3, 2), imshow(fourierResult, []);
% 中心变换和取对数增强
centeredFourierResult = 0.5 * log(1 + abs(fftshift(fourierResult)));
subplot(1, 3, 3), imshow(centeredFourierResult, []);


    为了看到是不是达到效果,做了一个 10 * 10 的图像来测试,上图为上述代码的效果,下图为调用系统函数的效果。

 

 

3、调用系统函数 FFT2

    通过调用 Matlab 的系统函数 FFT2 实现二维的傅里叶变换。

%% 锐化空间滤波器 频率滤波 二维离散傅里叶变换
% 作者:杨宇东
% 日期:2014.09.29
% 参数:imgFile 源图像文件
% 输出:
% fourierResult 进行傅里叶变换之后的结果;
% centeredFourierResult 进行傅里叶变换之后进行中心平移和取对数增强之后的记过
%%
function [fourierResult, centeredFourierResult] = MatlabFourier(imgFile)
im = imread(imgFile);
[nHeight, nWidth, nDim] = size(im);
if nDim == 3
    im = rgb2gray(im);
end
subplot(1, 3, 1), imshow(im);
% 进行傅里叶变换
img = fft2(im);
fourierResult = log(abs(img));
subplot(1, 3, 2), imshow(fourierResult, []);
% 中心变换和取对数增强
centeredFourierResult = 0.5 * log(1 + abs(fftshift(fourierResult)));
subplot(1, 3, 3), imshow(centeredFourierResult, []);

 


 

4、达到 PPT 中效果版的

    达到了像 PPT 中那样的效果的代码

function f = MatlabFFT(imgFile)
im = imread(imgFile);
[nHeight, nWidth, nDim] = size(im);
if nDim == 3
    im = rgb2gray(im);
end
% 二维离散傅里叶变换
f = fft2(im);
% 将直流分量移到频谱中心
f = fftshift(f);
% 取傅立叶变换的实部
RRfdp1=real(f);
% 取傅立叶变换的虚部
IIfdp1=imag(f);
% 计算频谱幅值
a=sqrt(RRfdp1.^2+IIfdp1.^2);
% 归一化
f=(a-min(min(a)))/(max(max(a))-min(min(a)))*255;
subplot(1, 2, 1), imshow(im);
subplot(1, 2, 2), imshow(real(f));


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值