opencv 中 傅里叶变换 FFT,代码如下:

void fft2(IplImage *src, IplImage *dst)
{   //实部、虚部IplImage *image_Re = 0, *image_Im = 0, *Fourier = 0;//   int i, j;image_Re = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 1);  //实部//Imaginary partimage_Im = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 1);  //虚部//2 channels (image_Re, image_Im)Fourier = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 2);// Real part conversion from u8 to 64f (double)cvConvertScale(src, image_Re);// Imaginary part (zeros)cvZero(image_Im);// Join real and imaginary parts and stock them in Fourier imagecvMerge(image_Re, image_Im, 0, 0, Fourier);// Application of the forward Fourier transformcvDFT(Fourier, dst, CV_DXT_FORWARD);cvReleaseImage(&image_Re);cvReleaseImage(&image_Im);cvReleaseImage(&Fourier);
}void fft2shift(IplImage *src, IplImage *dst)
{IplImage *image_Re = 0, *image_Im = 0;int nRow, nCol, i, j, cy, cx;double scale, shift, tmp13, tmp24;image_Re = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 1);//Imaginary partimage_Im = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 1);cvSplit( src, image_Re, image_Im, 0, 0 );//具体原理见冈萨雷斯数字图像处理p123// Compute the magnitude of the spectrum Mag = sqrt(Re^2 + Im^2)//计算傅里叶谱cvPow( image_Re, image_Re, 2.0);cvPow( image_Im, image_Im, 2.0);cvAdd( image_Re, image_Im, image_Re);cvPow( image_Re, image_Re, 0.5 );//对数变换以增强灰度级细节(这种变换使以窄带低灰度输入图像值映射//一宽带输出值,具体可见冈萨雷斯数字图像处理p62)// Compute log(1 + Mag);cvAddS( image_Re, cvScalar(1.0), image_Re ); // 1 + MagcvLog( image_Re, image_Re ); // log(1 + Mag)//Rearrange the quadrants of Fourier image so that the origin is at the image centernRow = src->height;nCol = src->width;cy = nRow/2; // image centercx = nCol/2;//CV_IMAGE_ELEM为OpenCV定义的宏,用来读取图像的像素值,这一部分就是进行中心变换for( j = 0; j < cy; j++ ){for( i = 0; i < cx; i++ ){//中心化,将整体份成四块进行对角交换tmp13 = CV_IMAGE_ELEM( image_Re, double, j, i);CV_IMAGE_ELEM( image_Re, double, j, i) = CV_IMAGE_ELEM(image_Re, double, j+cy, i+cx);CV_IMAGE_ELEM( image_Re, double, j+cy, i+cx) = tmp13;tmp24 = CV_IMAGE_ELEM( image_Re, double, j, i+cx);CV_IMAGE_ELEM( image_Re, double, j, i+cx) =CV_IMAGE_ELEM( image_Re, double, j+cy, i);CV_IMAGE_ELEM( image_Re, double, j+cy, i) = tmp24;}}//归一化处理将矩阵的元素值归一为[0,255]//[(f(x,y)-minVal)/(maxVal-minVal)]*255double minVal = 0, maxVal = 0;// Localize minimum and maximum valuescvMinMaxLoc( image_Re, &minVal, &maxVal );// Normalize image (0 - 255) to be observed as an u8 imagescale = 255/(maxVal - minVal);shift = -minVal * scale;cvConvertScale(image_Re, dst, scale, shift);cvReleaseImage(&image_Re);cvReleaseImage(&image_Im);
}void CCVMFCView::OnFuliyeTransform()
{IplImage *src;IplImage *Fourier;   //傅里叶系数IplImage *dst ;IplImage *ImageRe;IplImage *ImageIm;IplImage *Image;IplImage *ImageDst;double m,M;double scale;double shift;//src = workImg;if(workImg->nChannels==3)OnColorToGray();src=cvCreateImage(cvGetSize(workImg),IPL_DEPTH_64F,workImg->nChannels);  //源图像imageClone(workImg,&src);cvFlip(src);Fourier = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,2);dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,2);ImageRe = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,1);ImageIm = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,1);Image = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);ImageDst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);fft2(src,Fourier);                  //傅里叶变换fft2shift(Fourier, Image);          //中心化cvDFT(Fourier,dst,CV_DXT_INV_SCALE);//实现傅里叶逆变换,并对结果进行缩放cvSplit(dst,ImageRe,ImageIm,0,0);cvNamedWindow("源图像",0);cvShowImage("源图像",src);             //对数组每个元素平方并存储在第二个参数中cvPow(ImageRe,ImageRe,2);               cvPow(ImageIm,ImageIm,2);cvAdd(ImageRe,ImageIm,ImageRe,NULL);cvPow(ImageRe,ImageRe,0.5);cvMinMaxLoc(ImageRe,&m,&M,NULL,NULL);scale = 255/(M - m);shift = -m * scale;//将shift加在ImageRe各元素按比例缩放的结果上,存储为ImageDstcvConvertScale(ImageRe,ImageDst,scale,shift);cvNamedWindow("傅里叶谱",0);cvShowImage("傅里叶谱",Image);cvNamedWindow("傅里叶逆变换",0);cvShowImage("傅里叶逆变换",ImageDst);//释放图像cvWaitKey(10000);cvReleaseImage(&src);cvReleaseImage(&Image);cvReleaseImage(&ImageIm);cvReleaseImage(&ImageRe);cvReleaseImage(&Fourier);cvReleaseImage(&dst);cvReleaseImage(&ImageDst);Invalidate();
}

from: http://blog.csdn.net/abcjennifer/article/details/7359952

opencv 中 快速傅里叶变换 FFT相关推荐

  1. python fft库有哪些_Python图像处理库PIL中快速傅里叶变换FFT的实现(一)

    离散傅里叶变换(discrete Fouriertransform)傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心,通过它把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规 ...

  2. Java实现算法导论中快速傅里叶变换FFT迭代算法

    要结合算法导论理解,参考:http://blog.csdn.NET/fjssharpsword/article/details/53281889 FFT的迭代实现,可以实现并行电路,和比较网络中的比较 ...

  3. Java实现算法导论中快速傅里叶变换FFT递归算法

    要结合算法导论理解,参考:http://blog.csdn.net/fjssharpsword/article/details/53281889 代码中算法思路:输入n位(2的幂)向量,分别求值FFT ...

  4. OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测

    OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测 翻译自[OpenCV Fast Fourier Transform (FFT) for blur detection in images ...

  5. Java中实现快速傅里叶变换FFT

    Java中实现快速傅里叶变换FFT 一.概述 1.傅里叶变换(FT) 2.离散傅里叶变换(DFT) 3.快速傅里叶变换(FFT) 1)单位根 2)快速傅里叶变换的思想 3)蝶形图 4)快速傅里叶变换的 ...

  6. matlab cftool光滑曲线导出为什么就不光滑了_快速傅里叶变换(FFT)中为什么要“补零”?...

    为了大家能够复现各个图中的结果,我附上了所有我编写的MATLAB代码. 创作不易,未经允许,禁止转载. 另外,说明一下,用MATLAB做FFT并不要求数据点个数必须为以2为基数的整数次方.之所以很多资 ...

  7. C语言二维数组范德蒙,浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理...

    浅谈范德蒙德(Vandermonde)方阵的逆矩阵与拉格朗日(Lagrange)插值的关系以及快速傅里叶变换(FFT)中IDFT的原理 标签: 行列式 矩阵 线性代数 FFT 拉格朗日插值 只要稍微看 ...

  8. 浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理...

    浅谈范德蒙德(Vandermonde)方阵的逆矩阵与拉格朗日(Lagrange)插值的关系以及快速傅里叶变换(FFT)中IDFT的原理 标签: 行列式 矩阵 线性代数 FFT 拉格朗日插值 只要稍微看 ...

  9. 【OpenCV 例程200篇】77. OpenCV 实现快速傅里叶变换

    [OpenCV 完整例程]77. OpenCV 实现快速傅里叶变换 欢迎关注 『OpenCV 完整例程 100 篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更 ...

最新文章

  1. 成为“首席AI架构师”的全流程方法论
  2. MM模块操作流程及相关建议代码
  3. hbuilder打包ios_免费获得苹果证书,HBuilderX打包IPA文件
  4. 将有序数组转为二叉搜索树
  5. 学会了Python之后,我的职业生涯突飞猛进
  6. 复习:线性表——顺序表
  7. 从婵媛的围脖上看到做产品的三个矛盾,思考ing......
  8. 雷军说马云骗子、柳传志弃投百度、王兴骂滴滴垃圾…14位大佬悔不当初
  9. Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
  10. 【若依框架】代码生成详细教程
  11. 手撸Mybatis源码-基础版
  12. 什么是base64?
  13. 易语言鼠标移动到桌面计算机图标上,易语言桌面图标提示源码
  14. 父元素上是mousedown.prevent,子元素会被携带方法,还阻止不了怎么办?
  15. 小智机器人型号_小智类人型机器人
  16. 看小姐姐用动图展示 10 大 Git 命令
  17. 【Unity学习】Unity GetCurrentAnimatorStateInfo方法判断动画播放
  18. 建木持续集成平台v2.2.1发布
  19. java计算机毕业设计水果商城源代码+数据库+系统+lw文档
  20. vue3 + element-plus组件的国际化

热门文章

  1. linux下的%zu
  2. 阿里王坚:机器比人做得好的事,那这件事就不该由人来做
  3. Redis-13Redis发布订阅
  4. Oracle查询优化-05元数据查询
  5. linux怎么运行cli,linux脚本 直接用cli模式运行脚本
  6. python编程设计大学ppt_Python程序设计-清华大学出版社-董付国第5章-函数的设计和使用PPT...
  7. 射影几何笔记5:齐次坐标(Homogeneous coordinates)
  8. Halcon初学者知识【17】如何将零件提取dxf图
  9. css中光标的设置,CSS Cursors(光标)
  10. 厦大的计算机博士好考吗,2018双非学姐的厦大考博逆袭之路——本硕求学生涯历程...