资源简介
C语言的卷积/相关程序代码,本人图像处理工程中使用的代码,正确可靠!

代码片段和文件信息
/**************************************************************************
* 文件名:CONV&CORR.cpp
*
* 函数:
*
* CONV() - 快速卷积
* CORR() - 快速相关
* CONV2() - 图像快速卷积
* CORR2() - 图像快速相关
*
*************************************************************************/
#include “stdafx.h“
#include “CONV&CORR.h“
#include “FFT&IFFT.h“
#include
#include
using namespace std;
// 常数π
#define PI 3.1415926535
/*************************************************************************
*
* 函数名称:
* CONV()
*
* 参数:
* complex * TD1 - 指向时域序列数组1的指针
* complex * TD2 - 指向时域序列数组2的指针
* complex * TDout - 指向时域结果数组的指针
* M - 序列1的长度
* N - 序列2的长度
*
* 说明:
* 该函数利用FFT实现快速卷积。
*
************************************************************************/
void CONV(complex * TD1 complex * TD2 complex * TDout int M int N)
{
// 卷积结果长度
int count = M+N-1;
// 便于使用FFT,把count扩展为2的幂
int Lcount;
int r=0; // 2的幂数,即FFT迭代次数,2的r次方=Lcount
int temp;
if (log(count)/log(2)-int(log(count)/log(2))==0)
temp = log(count)/log(2);
else
temp = log(count)/log(2)+1;
r = temp;
Lcount = 1<
// 分配运算所需存储器
complex *X1 *X2 *FD1 *FD2 *FD12 *TD12;
X1 = new complex[Lcount]; //补齐后的序列1
X2 = new complex[Lcount]; //补齐后的序列2
FD1 = new complex[Lcount]; //序列1的傅立叶变换结果
FD2 = new complex[Lcount]; //序列2的傅立叶变换结果
FD12 = new complex[Lcount]; //序列12的频域相乘结果
TD12 = new complex[Lcount]; //序列12的傅立叶反变换结果
//将序列补齐为Lcount长度
complex *X *Y;
X = new complex[M]; //临时存储器
Y = new complex[N];
// 将时域点写入XY
memcpy(X TD1 sizeof(complex) * M);
memcpy(Y TD2 sizeof(complex) * N);
// 循环变量
int i;
for (i=0; i {
X1[i] = complex(X[i].real() X[i].imag());
}
for (i=M; i {
X1[i] = complex(0 0);
}
for (i=0; i {
X2[i] = complex(Y[i].real() Y[i].imag());
}
for (i=N; i {
X2[i] = complex(0 0);
}
// 释放内存
delete X;
delete Y;
//序列1的FFT
FFT(X1 FD1 r);
//序列2的FFT
FFT(X2 FD2 r);
//序列12的频域相乘
for (i=0; i {
FD12[i] = complex(FD1[i].real()*FD2[i].real()-FD1[i].imag()*FD2[i].imag() FD1[i].real()*FD2[i].imag()+FD1[i].imag()*FD2[i].real());
}
//序列12的频域相乘的IFFT
IFFT(FD12 TD12 r);
//TD12中的前M+N-1项为真正卷积结果写入TDout
memcpy(TDout TD12 sizeof(complex)*count);
// 释放内存
delete X1;
delete X2;
delete FD1;
delete FD2;
delete FD12;
delete TD12;
}
/***********************
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 14465 2006-09-26 10:25 CONV&CORR\CONV&CORR.cpp
文件 501 2006-09-15 10:51 CONV&CORR\CONV&CORR.h
目录 0 2013-03-23 23:36 CONV&CORR
----------- --------- ---------- ----- ----
14966 3
- 上一篇:mfc 物业管理系统
- 下一篇:图书管理系统MFC+SQL+VC
相关资源
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- ADRC相关技术资料
- 数据结构实验——赫夫曼树相关
- 如何在Visual StudioVS里使用libsvm工具箱
- C++ 排课程序源代码
- tiny4412裸机相关程序
- 深度学习之卷积神经网络CNN用于人脸
- 畅捷通T+相关插件CellWeb5
- 深度学习之卷积神经网络CNN模式识别
- 卷积神经网络代码c++
- 图像识别算法,相关matlab编程
- 运用opencv的c++图像单点相关系数匹配
- C# To C++ Converter 17.10.2 (最新破解版
- 蓝桥杯C语言历年真题及相关资料
- deep learning卷积神经网络CNN在C++环境下
- 图像FFT卷积
- 利用相关系数匹配法完成左右相片的
- openCV纹理图像特征提取,比较两幅图
- duilib相关(duilib库及源码、duilib的M
- 信计专业C++期末大作业 银行排队叫号
- c-c++写的卷积神经网络
- VS工程中zlib.h、png.h相关文件
- DSP2812的C语言例程及开发板相关资料
- 《数据结构(c语言版)》pdf(附算法
- KCF跟踪算法(C++)146187
- 相关系数影像匹配
- 简易C语言词法分析程序
- VC 实现窗口状态栏显示鼠标坐标信息
- VC gethostname获取计算机名和IP地址.
- 卷积码硬判决 含编解码.zip
评论
共有 条评论