傅里叶变换【2】:傅里叶幅度谱与相位谱
//快速傅里叶变换
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】:傅里叶幅度谱与相位谱相关推荐
- 案例解释图像傅里叶变换的幅度谱和相位谱的以及反变换
目的:读取图像 A(lena.tiff)和B(rice.tif),显示这两幅图像,对图像作傅立叶变换,显示图像的傅里叶幅度谱和相位谱.做傅立叶逆变换,显示重建图像. 图像的频率是表征图像中灰度变化剧烈 ...
- 【MATLAB图像处理】傅里叶变换--幅度谱、相位谱、逆变换
fft2() 傅里叶正变换 fftshift() 频谱搬移-直流量(f=0)搬移至频谱中心 I=imread('exp2.tif'); %读入原图像 I1=I(:,:,1:3); %四通道转为三通 ...
- 图像傅里叶变换的幅度谱和相位谱的以及反变换
目的:读取图像 A(lena.tiff)和B(rice.tif),显示这两幅图像,对图像作傅立叶变换,显示图像的傅里叶幅度谱和相位谱.做傅立叶逆变换,显示重建图像. 图像的频率是表征图像中灰度变化剧烈 ...
- 图像傅里叶变换的幅度谱、相位谱以及双谱重构原图像
简单的求取下灰度图像的幅度谱和相位谱并进行双谱重构: 直接上代码: clear all Picture = imread('E:\others\Picture\Library.jpg');Pictur ...
- 交换两幅图像的幅度谱和相位谱,并重构图像
转载自:http://blog.sina.com.cn/s/blog_909778ea0100y8ju.html 博主:科技狸的博客: 来源:新浪博客: 交换两幅图像的幅度谱和相位谱,并重构图像!!! ...
- 线性调频信号(LFM)的形式及幅度谱、相位谱特性
线性调频信号在SAR系统中非常重要,其瞬时频率是时间的线性函数.该信号常用于信号的发射,以获得均匀的信号带宽,在接收信号中则来自传感器运动.本篇博客主要讨论线性调频信号的形式,及在matlab仿真中的 ...
- matlab求雷克子波相位谱,求雷克子波的振幅谱和相位谱的MATLAB程序,谢谢 !!!!!...
%% 自己写了如下程序,望采纳! clc;clear;close all; %Ricker子波 f=40;dt=0.004; nw=6./f/dt; nw=2*floor(nw/2)+1; nc=fl ...
- 使用matlab读取图像并通过matlab自带的fft2,fftshift,ifftshift,ifft2等函数获取该图像的傅里叶频谱图,幅度图,相位谱图,幅度图,相位谱图,幅度谱重建图以及相位谱重建
%% 读取图像.预处理 Picture1 = imread('Cameraman.tif');tryPicture1=rgb2gray(Picture1); % 如果是RGB图像,转成灰度图 catc ...
- 图像傅里叶变换,幅度谱,相位谱
<span style="font-size:18px;">cl; img=imread('lena.jpg'); %img=double(img); f=fft2(i ...
- 图像二维离散傅里叶变换、幅度谱、相位谱
clear, clc I = imread('...');F = fftshift(fft2(I)); % 对图像进行二维 DFT(fft2),并移至中心位置 magn = log(abs(F)); ...
最新文章
- 阿里云前端周刊 - 第 29 期
- PG 9.4 行冻结信息的测试
- python官网下载步骤linux-linux 安装 python 最全教程
- 妙用Telnet快速收发电子邮件(转载)
- 菜鸟教程:C++ 的关键字(保留字)完整介绍
- Yolo-v2 Visual Studio 2015安装时报错Team Explorer for Microsoft Visual Studio 2015解决办法
- 机器学习:AdaBoost算法及其实现
- 《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(11)
- WCF中几个容易忽略的知识点
- 详述一条SQL引发的高CPU故障处理过程
- Python稳基修炼的经典案例6(计算机二级、初学者必须掌握的例题)
- 拒绝空谈 AI 设想!手把手教你构建实时、高可用的 AI 调度平台
- Ehcache 的简单使用
- Lucid Dream
- 小学计算机教师集体备课计实,小学科学集体备课记录(年.doc
- ckeditor4 自定义组件之文字格式组件,类加粗,类下划线(vue项目)
- linux解压该文件,linux上解压缩文件
- android传屏器怎么获取热点,手机做热点怎么投屏 为你介绍投屏的方法
- Nodejs:ESModule和commonjs,傻傻分不清
- php空间自动发邮件,PHP 发送QQ邮件【实例】