离散余弦变换(英语:discrete cosine transform, DCT)是与傅里叶变换相关的一种变换,类似于离散傅里叶变换,但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。

最常用的一种离散余弦变换的类型是下面给出的第二种类型,通常我们所说的离散余弦变换指的就是这种。它的逆,也就是下面给出的第三种类型,通常相应的被称为"反离散余弦变换","逆离散余弦变换"或者"IDCT"。

有两个相关的变换,一个是离散正弦变换,它相当于一个长度大概是它两倍的实奇函数的离散傅里叶变换;另一个是改进的离散余弦变换,它相当于对交叠的数据进行离散余弦变换。

  离散余弦变换,尤其是它的第二种类型,经常被信号处理和图像处理使用,用于对信号和图像(包括静止图像和运动图像)进行有损数据压缩。这是由于离散余弦变换具有很强的"能量集中"特性:大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分,而且当信号具有接近马尔可夫过程的统计特性时,离散余弦变换的去相关性接近于K-L变换(Karhunen-Loève变换——它具有最优的去相关性)的性能。

例如,在静止图像编码标准JPEG中,在运动图像编码标准MJPEG和MPEG的各个标准中都使用了离散余弦变换。在这些标准制中都使用了二维的第二种类型离散余弦变换,并将结果进行量化之后进行熵编码。这时对应第二种类型离散余弦变换中的n通常是8,并用该公式对每个8x8块的每行进行变换,然后每列进行变换。得到的是一个8x8的变换系数矩阵。其中(0,0)位置的元素就是直流分量,矩阵中的其他元素根据其位置表示不同频率的交流分量。

一个类似的变换, 改进的离散余弦变换被用在高级音频编码,Vorbis和MP3音频压缩当中。

离散余弦变换也经常被用来使用谱方法来解偏微分方程,这时候离散余弦变换的不同的变量对应着数组两端不同的奇/偶边界条件。

  公式定义:

形式上来看,离散余弦变换是一个线性可逆函数其中R实数集,或者等价的说一个方阵。离散余弦变换有几种变形的形式, 它们都是根据下面的某一个公式把个实数x_{n-1}}变换到另外个实数的操作。

DCT-I

有些人认为应该将乘以,相应的将乘以。这样做的结果是这种DCT-I矩阵变为了正交矩阵(再乘一个系数的话),但是这样就不能直接和一个实偶离散傅里叶变换对应了。

一个的对实数abcde的DCT-I型变换等价于一个8点的对实数abcdedcb(偶对称)的DFT变换,结果再除以2(对应的,DCT-II~DCT-IV相对等价的DFT有一个半个抽样的位移)。需要指出的是,DCT-I不适用于的情况(其它的DCT类型都适用于所有的整数n)。

所以,DCT-I暗示的边界条件是:相对于点偶对称,并且相对于点偶对称; 对的情况也类似。

DCT-II

DCT-II大概是最常用的一种形式,通常直接被称为DCT。

有些人更进一步的将再乘以(参见下面的DCT-III型的对应修改)。这将使得DCT-II成为正交矩阵(再乘一个系数的话),但是这样就不能直接和一个有半个抽样位移的实偶离散傅里叶变换对应了。

所以,DCT-II暗示的边界条件是:相对于点偶对称,并且相对于点偶对称; 对相对于点偶对称,并且相对于点奇对称。

DCT-III

因为这是DCT-II的逆变换(再乘一个系数的话),这种变形通常被简单的称为逆离散余弦变换。

有些人更进一步的将再乘以(参见上面的DCT-II型的对应修改),这将使得DCT-III成为正交矩阵(再乘一个系数的话),但是这样就不能直接和一个结果有半个抽样位移的实偶离散傅里叶变换对应了。

所以,DCT-III暗示的边界条件是:相对于点偶对称,并且相对于点奇对称; 对相对于点偶对称,并且相对于点偶对称。

DCT-IV

DCT-IV对应的矩阵是正交矩阵(再乘一个系数的话)。

一种DCT-IV的变形,将不同的变换的数据重叠起来,被称为改进的离散余弦变换

DCT-IV暗示的边界条件是:相对于点偶对称,并且相对于点奇对称;对类似。

DCT V~VIII

上面提到的DCT I~IV是和偶数阶的实偶DFT对应的。原则上,还有四种DCT变换(Martucci, 1994)是和奇数阶的实偶DFT对应的,它们在分母中都有一个的系数。但是在实际应用中,这几种变型很少被用到。

最平凡的和奇数阶的实偶DFT对应的DCT是1阶的DCT(1也是奇数),可以说变换只是乘上一个系数{\displaystyle a}而已,对应于DCT-V的长度为1的状况。

反变换

DCT-I的反变换是把DCT-I乘以系数。 DCT-IV的反变换是把DCT-IV乘以系数。 DCT-II的反变换是把DCT-III乘以系数,反之亦然。

离散傅里叶变换类似,变化前面的归一化系数仅仅是常规而已,改变这个系数并不改变变换的性质。例如,有些人喜欢在DCT-II变换的前面乘以,这样反变换从形式上就和变换更相似,而不需要另外的归一化系数。

每日名言: 自知者不怨人,知命者不怨天,怨人者穷,怨天者无志-----------荀子

参考文档:

1 https://zh.wikipedia.org/wiki/%E7%A6%BB%E6%95%A3%E4%BD%99%E5%BC%A6%E5%8F%98%E6%8D%A2

高数复习--什么是DCT的更多相关文章

  1. 期权定价公式:BS公式推导——从高数和概率论角度

    嗯,自己看了下书.做了点笔记,做了一些相关的基础知识的补充,尽力做到了详细,这样子,应该上过本科的孩子,只要有高数和概率论基础.都能看懂整个BS公式的推导和避开BS随机微分方程求解的方式的证明了.

  2. Contest 高数题 樹的點分治 樹形DP

    高数题 HJA最近在刷高数题,他遇到了这样一道高数题.这道高数题里面有一棵N个点的树,树上每个点有点权,每条边有颜色.一条路径的权值是这条路径上所有点的点权和,一条合法的路径需要满足该路径上任意相邻的 ...

  3. linux 服务器所支持的最大句柄数调高数倍(与服务器的内存数量相关)

    https://github.com/alibaba/p3c/blob/master/阿里巴巴Java开发手册(详尽版).pdf 2. [推荐]调大服务器所支持的最大文件句柄数(File Descri ...

  4. 又是一年NOIP然鹅我考的是高数(虽然我没打并且内容与NOIP无关)(手动滑稽)

    好长时间没有写过总结了.也是高三结束,自招结束.成功的由国宝变为四害,整个人也是完全放松的,或者说是放肆的. 整个暑假都是游戏睡觉,游戏睡觉,也没有干什么有意义的事.有人说别人都在学习大一课程的时候我 ...

  5. [动态规划]高数Umaru系列(9)——哈士奇(背包问题)

    高数Umaru系列(9)——哈士奇 http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/3358.ht ...

  6. 高数解题神器:拍照上传就出答案,这个中国学霸做的AI厉害了 | Demo

    一位叫Roger的中国学霸小哥的拍照做题程序mathAI一下子火了,这个AI,堪称数学解题神器. 输入一张包含手写数学题的图片,AI就能识别出输入的数学公式,然后给出计算结果. 不仅加减乘除基本运算, ...

  7. C语言之:结构体动态分配内存(利用结构体数组保存不超过10个学生的信息,每个学生的信息包括:学号、姓名和三门课(高数、物理和英语 )的成绩和平均分(整型)。)

    题目内容: 利用结构体数组保存不超过10个学生的信息,每个学生的信息包括:学号.姓名和三门课(高数.物理和英语 )的成绩和平均分(整型). 编写程序,从键盘输入学生的人数,然后依次输入每个学生的学号. ...

  8. hdu 4870 Rating(可能性DP&高数消除)

    Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  9. [数学]高数部分-Part VII 微分方程

    Part VII 微分方程 回到总目录 Part VII 微分方程 微分方程的概念 一阶微分方程求解-变量可分离型 一阶微分方程求解-齐次型 一阶微分方程求解-一阶线性型 二阶常系数齐次D.E.求解: ...

随机推荐

  1. linux 7安装telnet,设置telnet自启动,使用root telnet登录

    1.安装启动服务 # yum install telnet-server # yum install xinetd # systemctl enable xinetd.service # system ...

  2. 20172306 2018-2019-2 《Java程序设计与数据结构》第六周学习总结

    20172306 2018-2019-2 <Java程序设计与数据结构>第六周学习总结 教材学习内容总结 概述(了解一下树的一些概念) 树是一种非线性结构.树由一个包含结点和边的集构成,其 ...

  3. 29. pt-table-usage

    pt-table-usage --query="select * from t01 join t02 on t01.id=t02.id where t01.code=2" pt-t ...

  4. jmeter用Windows电脑分布式部署

    当然,java环境.jmeter安装我这里就不说了. 使用1个controller(imac电脑),2个agent(Windows7 系统) 一.agent配置(Windows7系统) 1.电脑环境变 ...

  5. 20165213 Exp1 PC平台逆向破解

    PC平台逆向破解 实验内容 1.了解掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:NOP指令即"空指令".执行到NOP指令时,CPU什么也不做,仅仅当做 ...

  6. java 日志体系(四)log4j 源码分析

    java 日志体系(四)log4j 源码分析 logback.log4j2.jul 都是在 log4j 的基础上扩展的,其实现的逻辑都差不多,下面以 log4j 为例剖析一下日志框架的基本组件. 一. ...

  7. JavaSE 集合类HashSet保证自定义对象唯一性

    首先我们自定义Person类,只有姓名和年龄两个属性 class Person{ private String name ; private int age ; public Person(Strin ...

  8. [原创]networkx 画中文节点

    一直想分享一些自己遇到的坑,但确实很多时候走的太快 很多想做的事情会被快节奏的生活冲淡, 在公司做事反而比学校还自在, 因为是悠闲的实习期... 几点小建议写在前头--xdj: 遇到问题,大多数人首先 ...

  9. 【转】Android总结篇系列:Activity生命周期

    [转]Android总结篇系列:Activity生命周期 Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity ...

  10. 洛谷P1386座位安排

    座位安排 今天,在机房里做了这道题目,我来整理一下思路. 首先读懂题意,这n个人是不需要按1到n来一次安排的,也就是说你可以先安排任意一个人. 那么有一种很好排除的情况,那就是对于大于等于i的作为的需 ...