傅里叶变换学习参考资料

以下是我学习傅里叶变换过程中参考的一些书籍、网站等,记录下来,方便以后查阅:

DFT:Discrete Fourier Transform 离散傅里叶变换

  1. 傅里叶分析之掐死教程(生动形象,入门必备)

  2. 数字图像处理(第二版)-冈萨雷斯(有大量数学公式,严谨,但有点深奥难懂)

  3. (精心整理)图像的傅里叶变换(有例题解释、图像实例介绍和matlab代码)

  4. 二维DFT具体实现算法

  5. 官方文档:离散傅立叶变换(有opencv实现代码)

  6. OpenCV实现基于傅里叶变换的旋转文本校正(傅里叶变换应用)

我参考(4. DFT实现算法)修改了(5. 官方文档)的代码,主要删除了5中“剪切和重分布幅度图象限”这一步。替换的方法是在进行傅里叶变换之前用(-1)^(x+y)乘以输入的图像函数,就可以将傅里叶变换的原点F(0,0)移到(M/2,N/2)上。效果与官方代码类似。

#include <iostream>
#include <math.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>


using namespace std;
using namespace cv;


int main()
{   
    //读入图像灰度图
    Mat I = imread("Spectrum.tif", IMREAD_GRAYSCALE);       

    //判断图像是否加载成功
    if (I.empty())
    {
        cout << "图像加载失败!" << endl;
        return -1;
    }
    else
        cout << "图像加载成功!" << endl << endl;

    //(-1)^(x+y)乘以输入的图像函数,将傅里叶变换的原点F(0,0)移到(M/2,N/2)上。
    Mat padded(I.rows,I.cols,CV_32F);
    for (int i = 0;i < I.rows;i++)
    {
        for (int j = 0;j < I.cols;j++)
        {
            float temp= I.at<uchar>(i, j);
            padded.at<float>(i, j) = temp*pow(-1, i + j);
        }
    }

    //将planes融合合并成一个多通道数组complexI , 初始时实部就是图像
    Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(),CV_32F) };
    Mat complexI;
    merge(planes, 2, complexI);     

    //进行傅里叶变换
    dft(complexI, complexI);

    //计算幅值,planes[0] = Re(DFT(I),planes[1] = Im(DFT(I)) , 即planes[0]为实部,planes[1]为虚部
    split(complexI, planes);        
    magnitude(planes[0], planes[1], planes[
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值