代码转自:https://my.oschina.net/VenusV/blog/1797459


#include <time.h>#define WIDTH 5
#define HEIGHT 5struct Complex_{double real;//实部double imagin;//虚部
};
typedef struct Complex_ DFT_Complex;#define VALUE_MAX 255
#define M_PI 3.1415926535897932int Initdata(double (*src)[WIDTH],int size_w,int size_h){srand((int)time(0));for(int i=0;i<size_w;i++){for(int j=0;j<size_h;j++){src[i][j]=rand()%VALUE_MAX;printf("%lf ",src[i][j]);}printf(";\n");}return 0;
}//2维傅里叶变换函数
int DFT2D(double (*src)[WIDTH],DFT_Complex (*dst)[WIDTH],int size_w,int size_h){for(int u=0;u<size_w;u++){for(int v=0;v<size_h;v++){double real=0.0;double imagin=0.0;for(int i=0;i<size_w;i++){for(int j=0;j<size_h;j++){double I=src[i][j];double x=M_PI*2*((double)i*u/(double)size_w+(double)j*v/(double)size_h);real+=cos(x)*I;imagin+=-sin(x)*I;}}dst[u][v].real=real;dst[u][v].imagin=imagin;if(imagin>=0)printf("%lf+%lfj ",real,imagin);elseprintf("%lf%lfj ",real,imagin);}printf(";\n");}return 0;
}//2维逆傅里叶变换函数
int IDFT2D(DFT_Complex (*src)[WIDTH],DFT_Complex (*dst)[WIDTH],int size_w,int size_h){for(int i=0;i<size_w;i++){for(int j=0;j<size_h;j++){double real=0.0;double imagin=0.0;for(int u=0;u<size_w;u++){for(int v=0;v<size_h;v++){double R=src[u][v].real;double I=src[u][v].imagin;double x=M_PI*2*((double)i*u/(double)size_w+(double)j*v/(double)size_h);real+=R*cos(x)-I*sin(x);imagin+=I*cos(x)+R*sin(x);}}dst[i][j].real=(1./(size_w*size_h))*real;dst[i][j].imagin=(1./(size_w*size_h))*imagin;if(imagin>=0)printf("%lf+%lfj ",dst[i][j].real,dst[i][j].imagin);elseprintf("%lf%lfj ",dst[i][j].real,dst[i][j].imagin);}printf(";\n");}return 0;
}int _tmain(int argc, _TCHAR* argv[])
{double src[WIDTH][HEIGHT];DFT_Complex dst[WIDTH][HEIGHT];DFT_Complex dst_[WIDTH][HEIGHT];Initdata(src, WIDTH, HEIGHT);printf("\n\n");DFT2D(src,dst,WIDTH,HEIGHT);printf("\n\n");IDFT2D(dst,dst_,WIDTH,HEIGHT);system("pause");return 0;
}


对应DCT和IDCT公式可和代码一一对应。
也就是原始图像仅仅是实数,DCT后变为同样大小的复数。
IDCT输入复数,输出也是复数,但是实际虚部都为0
如果要滤波的话就是在DCT后的复数直接和滤波器相乘。

DCT和IDCT原始公式计算相关推荐

  1. (附Matlab程序)(二)基于DCT编码的图像压缩:对分解后的每个数据小方块进行DCT及IDCT变换

    问题一:随机选取一幅图像x.jpg,先将图像分解为8x8个数据块,然后分别对分解后的每个数据小方块进行DCT及IDCT变换,分别保留左上角3.10.15.32个系数进行处理,并对结果进行对比分析. c ...

  2. c语言 dct变换,DCT, IDCT变换--C语言实现

    变换矩阵,DCT = IDCT'google static const double MtxDCT[8][8] = { {0.3536, 0.3536, 0.3536, 0.3536, 0.3536, ...

  3. 图像变换——(DFT、DCT变换,IDFT、IDCT重建)

    目的:对图像进行离散傅立叶变换(DFT).离散余弦变换(DCT)变换,并对图像傅立叶变换的结果进行必要解释,使用IDFT.IDCT对图像进行重建,分析重建后的图像.操作过程中获取两帧图像,对这两帧图像 ...

  4. 二维离散余弦变换(DCT)与二维离散反余弦变换(IDCT)C语言实现

    二维离散余弦变换(DCT)与二维离散反余弦变换(IDCT)C语言实现 实验目标 对一个8x8的矩阵进行DCT和IDCT然后在观察前者和后者的变化 实验准备 理论基础 二维离散余弦变换 F ( u , ...

  5. DCT算法的原理及实现简介

    DCT算法的原理及实现简介 DCT算法: DCT变换的全称是离散余弦变换(Discrete Cosine Transform),离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变 ...

  6. DCT如此重要,作者当初竟然不知道?

    点击上方"LiveVideoStack"关注我们 作者 | Alex.赵军 技术审校 | 赵军 Nasir Ahmed 声影传奇 #003# 前段时间,LiveVideoStack ...

  7. 基于DCT变换的JPEG图像压缩原理

    1.为什么要进行图像压缩 众所周知,当今人类社会具有三大支柱,即物质.能量.信息.当下已由物质过渡到信息,从农业现代化到工业现代化,再到当今的信息化时代.信息具有通用性.抽象性.无限性.其通用性表现在 ...

  8. matlab实现图像DCT变换

    实验三 图像的DCT变化及量化 一.问题描述 利用matlab,将road.tif彩色图像的分辨率转换为256*256,将图片转化为double数据类型,再利用T=dctmtx(8)建立一个8*8的D ...

  9. 关于使用dct求解零诺依曼边界条件PDE的一点说明

    关于使用dct求解零诺依曼边界条件PDE的一点说明 DCT的第二型定义 如我的这篇文章中所述,对于纽曼边界条件的偏微分方程,谱方法中,我们一般使用离散余弦变换,即dct来完成.对于fft和dst而言, ...

  10. c语言 dct变换,C语言实现DCT变换编码

    内容 1.离散余弦变换编码 2.mpeg 4中的逆离散余弦变换 3.离散余弦变换研究 4.快速离散余弦变换 离散余弦变换编码 #包括 #包括 #包括 #包括 #定义PI 3. #定义CLK_TCK时钟 ...

最新文章

  1. 统治世界的 10 大算法,你知道几个?
  2. 不仅仅是虚拟化--Windows 7 SP1 Windows 2008R2 SP1解析
  3. 数据挖掘开源项目立项
  4. MSP430F5529 DriverLib 库函数学习笔记(十六)比较器B Comp_B
  5. 剑指offer 第一章 面试的流程
  6. C程序员要学C++吗?
  7. CI框架--加载静态内容
  8. 疯狂java讲义价格_疯狂java讲义
  9. 大大刷新记录!Swin Transformer v2.0 来了,30亿参数!
  10. 用Java描述数据结构之栈和队列,以及栈和队列的常用方法
  11. 如何实现 MySQL 删除重复记录并且只保留一条
  12. 代码生成利器:IDEA 强大的 Live Templates
  13. 怎么用计算机录制mp3的音频,内录音频是什么_如何用电脑内录音频图文步骤
  14. Tabular Editor学习笔记_3:警告标志及解决办法
  15. 用三元组存储稀疏矩阵,实现其快速转置及矩阵相乘
  16. 傅里叶变换的矩阵分析
  17. it高手与it民工区别
  18. 微信7.0.10正式版来了!朋友圈斗图彻底关闭了!
  19. 用Python去除图像的黑色或白色背景
  20. 苹果手机怎么清理喇叭灰尘_手机喇叭声音小怎么办?打电话听不见怎样清灰?...

热门文章

  1. Java筑基34-网络编程02-UDP网络编程网络编程案例
  2. ubtuntu error:E45:‘readonly’ option is set(add ! to override
  3. android用出生日期显示星座代码,根据出生日期自动取得星座的js代码
  4. 手绘图形识别方法(算法)
  5. 如何甄别应聘者简历的包装程度?
  6. RC / RL串联电路计算
  7. OpenCV-学习历程4- 读取图像/读取像素/修改像素值方法(包含灰度+rgb图像像素处理方式)
  8. 嗜血法医第一二三季/Dexter全集迅雷下载
  9. 稳压二极管原理、参数、动态电阻特性
  10. Oracle EBS系统维护工具