• 大小: 303KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: 其他
  • 标签: 图像  

资源简介

图像傅里叶变换简单代码实现,对应blog:http://blog.csdn.net/u011630458/article/details/52503647

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include  
#include 
#include 
#include 
#include 
#include 

using namespace cv;
using namespace std;

Mat initFFT2(Mat &src){
Mat out = Mat::zeros(cvSize(src.cols src.rows) CV_32FC1);
int i j;

for(i=0;i float *ptr1 = out.ptr(i);
uchar *ptr2 = src.ptr(i);
for(j=0;j ptr1[j] = ptr2[j];
}
}

for(i=0;i float *ptr1 = out.ptr(i);
for(j=0;j ptr1[j] = ptr1[j] * pow(-1i+j);
}
}

return out;
}

void myshow(Mat &src Mat &initMat Mat &dst Mat &dst2){
imshow(“src“ src);

Mat tmp;
initMat.convertTo(tmp CV_8UC1);
imshow(“initMat“ tmp);

dst.convertTo(dst CV_8UC1);
imshow(“dst“ dst);

dst2.convertTo(dst2 CV_8UC1);
imshow(“dst2“ dst2);
}

void FFT2(Mat &TD Mat &FD){
// 循环变量
int i j m n;
int width = TD.cols;
int height = TD.rows;
Mat tmpFd = Mat::zeros(cvSize(width height) CV_32FC2);
double _2Pi = 2 * 3.1415926;
double angle;

//灰度
for(i=0;i float *ptr1 = tmpFd.ptr(i);
for(j=0;j for(m=0;m float *ptr2 = TD.ptr(m);
for(n=0;n angle = _2Pi * ((double)i*m / width + (double)j*n/height);
ptr1[j*2]   += ptr2[n] * cos(angle);
ptr1[j*2+1] += ptr2[n] * sin(angle);
}
}
}
printf(“i:%d\n“ i);
}
FD = tmpFd;
}

void myMod(Mat &src Mat &dst){
int i j;
double normmax min=0;
float data;

Mat tmpMat = Mat::zeros(src.size() CV_32FC1);
for(i=0;i for(j=0;j norm = src.at(i j*2) * src.at(i j*2) 
+ src.at(i j*2+1) * src.at(i j*2+1);
norm = sqrt(norm);
if(norm!=0){
norm = log(1+abs(norm));
if(min==0){
min = norm;
}
}else{ 
norm = 0;
}
tmpMat.at(i j) = (float)norm;
if(norm>max){
max = norm;
}
if(norm min = norm;
}
}
}
for(i=0;i for(j=0;j norm = (tmpMat.at(i j)-min)*255/(max-min);
if(norm>255){
norm = 255;
}else if(norm<0){
norm = 0;
}
tmpMat.at(ij) = norm;
}
}
dst = tmpMat;
}

void IFFT2(Mat &src Mat &dst){
// 循环变量
int i j m n;
int width = src.cols;
int height = src.rows;
Mat tmpFd = Mat::zeros(cvSize(width height) CV_32FC1);
double _2Pi = 2 * 3.1415926;
double angle;
double norm;

for(i=0;i for(j=0;j for(m=0;m for(n=0;n angle = _2Pi * ((double)i*m / width + (double)j*n/height);
tmpFd.at(ij) += src.at(width-m(height - n)*2) * cos(angle) 
- src.at(width-m (height-n)*2+1) * sin(angle);
}
}
tmpFd.at(i j) = tmpFd.at(i j) / width / height;
}
printf(“i:%d\n“ i);
}
dst = tmpFd;
}

int main(int argc char* argv[]){  
Mat sr

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..A..H.     24576  2016-09-06 10:20  2_test\.1.cpp.swp

     文件       3287  2016-09-06 10:19  2_test\1.cpp

     文件      17462  2016-09-06 10:20  2_test\lena.bmp

     文件      66616  1997-01-07 10:40  2_test\lena2.BMP

     文件        299  2016-09-05 17:08  2_test\Makefile

     文件     231216  2016-09-06 10:20  2_test\myBin

     文件     172235  2016-09-05 17:08  2_test\tmp - 副本.jpg

     文件       4393  2016-09-06 09:22  2_test\tmp.jpg

     目录          0  2016-09-06 11:20  2_test

----------- ---------  ---------- -----  ----

               520084                    9


评论

共有 条评论