//快速傅里叶变换
void fft2Image(InputArray _src, OutputArray _dst)
{//得到Mat类型Mat src = _src.getMat();//判断位深CV_Assert(src.type() == CV_32FC1 || src.type() == CV_64FC1);CV_Assert(src.channels() == 1 || src.channels() == 2);int rows = src.rows;int cols = src.cols;//为了进行快速的傅里叶变换,我们经行和列的扩充,找到最合适扩充值Mat padded;int rPadded = getOptimalDFTSize(rows);int cPadded = getOptimalDFTSize(cols);//进行边缘扩充,扩充值为零copyMakeBorder(src, padded, 0, rPadded - rows, 0, cPadded - cols, BORDER_CONSTANT, Scalar::all(0));//快速的傅里叶变换(双通道:用于存储实部 和 虚部)dft(padded, _dst, DFT_COMPLEX_OUTPUT);
}
//求傅里叶变换的幅度谱 amplitude spectrum
void amplitudeSpectrum(InputArray _srcFFT, OutputArray _dstSpectrum)
{//判断傅里叶变换是两个通道CV_Assert(_srcFFT.channels() == 2);//分离通道vector<Mat> FFT2Channel;split(_srcFFT, FFT2Channel);//计算傅里叶变换的幅度谱 sqrt(pow(R,2)+pow(I,2))magnitude(FFT2Channel[0], FFT2Channel[1], _dstSpectrum);
}
//傅里叶谱的灰度级显示
Mat graySpectrum(Mat spectrum)
{Mat dst;log(spectrum + 1, dst);//归一化normalize(dst, dst, 0, 1, NORM_MINMAX);//为了进行灰度级显示,做类型转换dst.convertTo(dst, CV_8UC1, 255, 0);return dst;
}
//求相位谱 phase spectrum
Mat phaseSpectrum(Mat _srcFFT)
{//相位谱Mat phase;phase.create(_srcFFT.size(), CV_64FC1);//分离通道vector<Mat> FFT2Channel;split(_srcFFT, FFT2Channel);//计算相位谱for (int r = 0; r<phase.rows; r++){for (int c = 0; c < phase.cols; c++){//实部 虚部double real = FFT2Channel[0].at<double>(r, c);double imaginary = FFT2Channel[1].at<double>(r, c);// atan2 的返回值范围 [0,180] [-180,0]phase.at<double>(r, c) = atan2(imaginary, real);}}return phase;
}
int main(int argc, char*argv[])
{//输入图像Mat img = imread("lena.jpg", 0);if (!img.data)return -1;//将图像转换为浮点型Mat fImg;img.convertTo(fImg, CV_64FC1, 1.0, 0);//乘以 -1^(r+c)int rows = fImg.rows;int cols = fImg.cols;for (int r = 0; r < rows; r++){for (int c = 0; c < cols; c++){if ((r + c) % 2)fImg.at<double>(r, c) *= -1;}}//快速傅里叶变换Mat fft2;fft2Image(fImg, fft2);//傅里叶变换的幅度谱Mat ampSpec;amplitudeSpectrum(fft2, ampSpec);//幅度谱的灰度级显示Mat graySpec = graySpectrum(ampSpec);imshow("幅度谱的灰度级显示", graySpec);//相位谱Mat phaSpec = phaseSpectrum(fft2);//相位谱的灰度级显示imshow("相位谱", phaSpec);waitKey(0);return 0;
}

原图:

傅里叶图:

中心化的可视化幅度谱:

相位谱:

傅里叶变换【2】:傅里叶幅度谱与相位谱相关推荐

  1. 案例解释图像傅里叶变换的幅度谱和相位谱的以及反变换

    目的:读取图像 A(lena.tiff)和B(rice.tif),显示这两幅图像,对图像作傅立叶变换,显示图像的傅里叶幅度谱和相位谱.做傅立叶逆变换,显示重建图像. 图像的频率是表征图像中灰度变化剧烈 ...

  2. 【MATLAB图像处理】傅里叶变换--幅度谱、相位谱、逆变换

    fft2()  傅里叶正变换 fftshift()  频谱搬移-直流量(f=0)搬移至频谱中心 I=imread('exp2.tif'); %读入原图像 I1=I(:,:,1:3); %四通道转为三通 ...

  3. 图像傅里叶变换的幅度谱和相位谱的以及反变换

    目的:读取图像 A(lena.tiff)和B(rice.tif),显示这两幅图像,对图像作傅立叶变换,显示图像的傅里叶幅度谱和相位谱.做傅立叶逆变换,显示重建图像. 图像的频率是表征图像中灰度变化剧烈 ...

  4. 图像傅里叶变换的幅度谱、相位谱以及双谱重构原图像

    简单的求取下灰度图像的幅度谱和相位谱并进行双谱重构: 直接上代码: clear all Picture = imread('E:\others\Picture\Library.jpg');Pictur ...

  5. 交换两幅图像的幅度谱和相位谱,并重构图像

    转载自:http://blog.sina.com.cn/s/blog_909778ea0100y8ju.html 博主:科技狸的博客: 来源:新浪博客: 交换两幅图像的幅度谱和相位谱,并重构图像!!! ...

  6. 线性调频信号(LFM)的形式及幅度谱、相位谱特性

    线性调频信号在SAR系统中非常重要,其瞬时频率是时间的线性函数.该信号常用于信号的发射,以获得均匀的信号带宽,在接收信号中则来自传感器运动.本篇博客主要讨论线性调频信号的形式,及在matlab仿真中的 ...

  7. matlab求雷克子波相位谱,求雷克子波的振幅谱和相位谱的MATLAB程序,谢谢 !!!!!...

    %% 自己写了如下程序,望采纳! clc;clear;close all; %Ricker子波 f=40;dt=0.004; nw=6./f/dt; nw=2*floor(nw/2)+1; nc=fl ...

  8. 使用matlab读取图像并通过matlab自带的fft2,fftshift,ifftshift,ifft2等函数获取该图像的傅里叶频谱图,幅度图,相位谱图,幅度图,相位谱图,幅度谱重建图以及相位谱重建

    %% 读取图像.预处理 Picture1 = imread('Cameraman.tif');tryPicture1=rgb2gray(Picture1); % 如果是RGB图像,转成灰度图 catc ...

  9. 图像傅里叶变换,幅度谱,相位谱

    <span style="font-size:18px;">cl; img=imread('lena.jpg'); %img=double(img); f=fft2(i ...

  10. 图像二维离散傅里叶变换、幅度谱、相位谱

    clear, clc I = imread('...');F = fftshift(fft2(I)); % 对图像进行二维 DFT(fft2),并移至中心位置 magn = log(abs(F)); ...

最新文章

  1. 阿里云前端周刊 - 第 29 期
  2. PG 9.4 行冻结信息的测试
  3. python官网下载步骤linux-linux 安装 python 最全教程
  4. 妙用Telnet快速收发电子邮件(转载)
  5. 菜鸟教程:C++ 的关键字(保留字)完整介绍
  6. Yolo-v2 Visual Studio 2015安装时报错Team Explorer for Microsoft Visual Studio 2015解决办法
  7. 机器学习:AdaBoost算法及其实现
  8. 《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(11)
  9. WCF中几个容易忽略的知识点
  10. 详述一条SQL引发的高CPU故障处理过程
  11. Python稳基修炼的经典案例6(计算机二级、初学者必须掌握的例题)
  12. 拒绝空谈 AI 设想!手把手教你构建实时、高可用的 AI 调度平台
  13. Ehcache 的简单使用
  14. Lucid Dream
  15. 小学计算机教师集体备课计实,小学科学集体备课记录(年.doc
  16. ckeditor4 自定义组件之文字格式组件,类加粗,类下划线(vue项目)
  17. linux解压该文件,linux上解压缩文件
  18. android传屏器怎么获取热点,手机做热点怎么投屏 为你介绍投屏的方法
  19. Nodejs:ESModule和commonjs,傻傻分不清
  20. php空间自动发邮件,PHP 发送QQ邮件【实例】

热门文章

  1. 二维向量叉乘的简单介绍及应用
  2. Redis入门官方文档
  3. 【树莓派 + 深度学习 + Python】从零开始做一个你画AI猜的小游戏
  4. C语言摇骰子比大小,三个骰子出点规律|玩3个骰子猜大小必赢技巧
  5. matlab 计算相关系数,如何用Matlab计算相关系数和偏相关系数
  6. SREng 使用指南(一)SREng简介
  7. 打开计算机任务栏有桌面没,打开的窗口在任务栏上显示不出来?解决办法
  8. 好用的pdf阅读器(便携)
  9. android开发中常用的Eclipse快捷键详细整理
  10. resin那些事之resin.conf