离散傅里叶变换(Discrete Fourier Transform,缩写为DFT)

核心函数:

cvDFT

程序:

代码:

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <iostream>
int DFT(int argc,char** argv)  //离散傅里叶变换(Discrete Fourier Transform,缩写为DFT)
{
IplImage* src=cvLoadImage("e:\\picture\\4.jpg",0);
IplImage* Src32F=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* Src32F_one=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* Dst32F=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* Dst32F_one=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* Dst2_32F=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* Dst2_32F_one=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* Src232F=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* dst=cvCreateImage(cvGetSize(src),8,1);
IplImage* src2=cvCreateImage(cvGetSize(src),8,1);
cvZero(Src32F);
cvZero(Dst32F);
//把uchar转换为32F类型,以便于归一化和计算变换
cvConvertScale(src,Src32F);
//归一化处理[0,255]
double MinVal=0;
double MaxVal=0;
cvMinMaxLoc(Src32F,&MinVal,&MaxVal);
double min=MinVal;
double max=MaxVal;
double scale=255/(MaxVal-MinVal);
double shift=-MinVal*scale;
cvConvertScale(Src32F,Src32F_one,scale,shift);
cvMinMaxLoc(Src32F_one,&MinVal,&MaxVal);
std::cout<<MinVal<<MaxVal<<std::endl;
//傅里叶变换
cvDFT(Src32F_one,Dst32F,CV_DXT_FORWARD);
//对傅里叶变换结果进行归一化[0,255]
MinVal=0;
MaxVal=0;
cvMinMaxLoc(Dst32F,&MinVal,&MaxVal);
scale=255/(MaxVal-MinVal);
shift=-MinVal*scale;
cvConvertScale(Dst32F,Dst32F_one,scale,shift);
//把归一化的傅里叶变换结果转换为8位,以便显示
cvConvertScale(Dst32F_one,dst);
cvMinMaxLoc(Dst32F_one,&MinVal,&MaxVal);
std::cout<<"DEF result MinVal:"<<MinVal<<" MaxVal:"<<MaxVal<<std::endl;
//傅里叶逆变换
cvDFT(Dst32F,Dst2_32F,CV_DXT_INVERSE);
//归一化傅里叶逆变换结果[0,255]
MinVal=0;
MaxVal=0;
cvMinMaxLoc(Dst2_32F,&MinVal,&MaxVal);
scale=255/(MaxVal-MinVal);
shift=-MinVal*scale;
cvConvertScale(Dst2_32F,Dst2_32F_one,scale,shift);
//还原源图像,逆归一化
scale=(max-min)/255;         //归一化是先乘后加,还原是先加后乘,所以shift要等于min而不是min*scale
shift=min;
cvConvertScale(Dst2_32F_one,Src232F,scale,shift);
//把还原的图像转换为8位图像
cvConvertScale(Src232F,src2);
cvNamedWindow("src");
cvNamedWindow("dst");
cvNamedWindow("src2");
cvShowImage("src",src);
cvShowImage("dst",dst);
cvShowImage("src2",src2);
cvWaitKey(0);
cvDestroyWindow("src");
cvDestroyWindow("dst");
cvDestroyWindow("src2");
cvReleaseImage(&src);
cvReleaseImage(&dst);
cvReleaseImage(&Src32F);
cvReleaseImage(&Dst32F);
cvReleaseImage(&src2);
cvReleaseImage(&Src32F_one);
cvReleaseImage(&Dst32F_one);
cvReleaseImage(&Dst2_32F_one);
return 0;
}

离散傅里叶变换(Discrete Fourier Transform,缩写为DFT)

时间: 2024-11-06 05:48:51

离散傅里叶变换(Discrete Fourier Transform,缩写为DFT)的相关文章

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— Discrete Fourier Transform

2.8 离散的傅立叶变换 目标 我们要寻找以下问题的答案: 1.什么是傅立叶变换,为什么我们要用这个? 2.在OpenCV中如何做到? 3.例如copyMakeBorder(),merge(),dft(),getOptimalDFGSize(),log()以及normalize()函数的用法. 源代码 你可以从这里下载或者从samples/cpp/tutorial_code/core/discrete_fourier_transform/discrete找到代码. #include "openc

OpenCV Tutorials &mdash;&mdash; Discrete Fourier Transform

The Fourier Transform will decompose an image into its sinus and cosines components. In other words, it will transform an image from its spatial domain to its frequency domain. 将图像从空域转换到频域,使其由 sin 和 cos 成分构成 The idea is that any function may be appro

短时傅里叶变换(Short Time Fourier Transform)原理及 Python 实现

原理 短时傅里叶变换(Short Time Fourier Transform, STFT) 是一个用于语音信号处理的通用工具.它定义了一个非常有用的时间和频率分布类, 其指定了任意信号随时间和频率变化的复数幅度. 实际上,计算短时傅里叶变换的过程是把一个较长的时间信号分成相同长度的更短的段, 在每个更短的段上计算傅里叶变换, 即傅里叶频谱. 短时傅里叶变换通常的数学定义如下: 其中, DTFT (Decrete Time Fourier Transform) 为离散时间傅里叶变换.  其数学公

离散傅里叶变换2 用标记方法而不是归一化

核心函数:cvDFT 程序: 代码: #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> int DFT2(int argc,char** argv)  //离散傅里叶变换(Discrete Fourier Transform,缩写为DFT) { IplImage* src=cvLoadImage("e:\\picture\

[傅里叶变换及其应用学习笔记] 二十. 离散傅里叶变换的定义

DFT 离散傅里叶变换有定义如下 有离散信号$\underline{f}=\left( \underline{f}[0],\underline{f}[1],…,\underline{f}[N-1] \right)$,它的DFT是离散信号$\underline{\mathcal{F}f}\left( \underline{\mathcal{F}f}[0],\underline{\mathcal{F}f}[1],…,\underline{\mathcal{F}f}[N-1] \right)$ $\u

Personal reminder (or CheetSheet) about Fourier Transform

Recently, I'm studying Fourier Transform by watching the lectures from Stanford University. I felt that I already forget the math basics that I've learnt in college. So, to set up a quick lookup table for myself, I decide to write something to memori

浅谈快速离散傅里叶变换的实现

在运用之前我们需要知道他是什么?是怎么来的?怎么去应用. 傅立叶变换是一种分析信号的方法,它可分析信号的组成成分,也可用这些成分合成信号.许多波形可作为信号的成分,比如正弦波.方波.锯齿波等,傅立叶变换用正弦波作为信号的组成成分,在时域他们是相互重叠在一起的,我们需要运用傅里叶变换把他们分开并在频域显示出来. 连续傅里叶变换(Fourier Transform)如下: 连续傅里叶变换的反变换为: 满足傅里叶变换的条件是f(t)在整个定义域是绝对可积的(不发散),只有这样积分才有效. 快速傅里叶变

Opencv 实现图像的离散傅里叶变换(DFT)、卷积运算(相关滤波)

我是做Tracking 的,对于速度要求很高.发现傅里叶变换可以使用.于是学习之! 核心: 最根本的一点就是将时域内的信号转移到频域里面.这样时域里的卷积可以转换为频域内的乘积! 在分析图像信号的频率特性时,对于一幅图像,直流分量表示预想的平均灰度,低频分量代表了大面积背景区域和缓慢变化部分,高频部分代表了它的边缘,细节,跳跃部分以及颗粒噪声.  因此,我们可以做相应的锐化和模糊的处理:提出其中的高频分量做傅里叶逆变换得到的就是锐化的结果.提出其中的低频分量做傅里叶逆变换得到的就是模糊的结果.

灰度图像--频域滤波 傅里叶变换之离散傅里叶变换(DFT)

学习DIP第23天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 开篇废话 一如既往的开篇废话,今天介绍离散傅里叶变换(DFT),学习到这,不敢说对傅里叶有多了解,