二维离散余弦变换(2D-DCT)
图像处理中常用的正交变换除了傅里叶变换以外,还有一些其它常用的正交变换,其中离散余弦变换DCT就是一种,这是JPEG图像压缩算法里的核心算法,这里我们也主要讲解JPEG压缩算法里所使用8*8矩阵的二维离散余弦正变换。
一维离散余弦变换
一般表达式
要弄懂二维离散余弦变换,首先我们需要先了解它在一维下的情况,具体表达式如下:

式中F(u)是第u个余弦变换值,u是广义频率变量,u=1,2,….,N-1;f(x)是时域N点序列。x= 1,2,….,N-1;
矩阵表示法
更为简洁的定义离散余弦变换是采用矩阵式定义。根据以上公式定义可知,我们可以来推导一下,DCT变换可以用矩阵的形式表示出来,例当N=8时一维离散余弦变换的表达式展开可以得到如下表达式: u=1,2,...7

当u=0,1,...,7时,我们可以根据上述公式计算出离散余弦变换时每一个f(x)前面的变换系数如下:

上式可以用矩阵的形式表达出来

F(u)为变换域矩阵,是时域f(x)与A矩阵计算的结果;A为变换系数矩阵,当N取定值时,A就是一个常量矩阵;f(x)为时域数据矩阵,即需要转换到变换域的原始数据,则一维离散余弦变换的矩阵定义式可写成下方表达式:

二维离散余弦变换
二维离散余弦变换可由下列表达式表示

6是二维离散余弦变换的正变换公式,其中f(x,y)是空间域一个N*N的二维向量元素,即一个N*N的矩阵,x,y = 0,1,2,…,N-1;F(U,V)是经计算后得到的变换域矩阵,u,v = 0,1,2,….,N-1.求和可分性是二维离散余弦变换的一个重要特征,因此我们可以用下式表示6:

由一维和二维的离散余弦变换公式性质可以推导得到二维离散余弦变换也可以写成矩阵相乘形式

A为一维离散余弦变换的变换系数矩阵,AT是A的转置矩阵
对图像进行二维离散余弦变换(2D-DCT)的步骤
1.获得图像的二维数据矩阵f(x,y);
2.求离散余弦变换的系数矩阵A;
3.求系数矩阵对应的转置矩阵AT;
4.根据公式F=A[f(x,y)]AT计算离散余弦变换;
二维离散余弦变换(2D-DCT)的更多相关文章
- Unity 用户手册用户指南二维纹理 (Texture 2D)
http://www.58player.com/blog-2327-953.html 二维纹理 (Texture 2D) 纹理 (Textures) 使您的 网格 (Meshes).粒子 (Parti ...
- 二维纹理 Texture 2D
Textures bring your Meshes, Particles, and interfaces to life! They are image or movie files that yo ...
- C++实现离散余弦变换(参数为二维指针)
C++实现离散余弦变换(参数为二维指针) 写在前面 到目前为止已经阅读了相当一部分的网格水印等方面的论文了,但是论文的实现进度还没有更上,这个月准备挑选一些较为经典的论文,将其中的算法实现.在实现论文 ...
- 二维DCT变换 | Python实现
引言 最近专业课在学信息隐藏与数字水印,上到了变换域隐藏技术,提到了其中的DCT变换,遂布置了一个巨烦人的作业,让手动给两个\(8\times8\)的矩阵做二维DCT变换,在苦逼的算了一小时后,我决定 ...
- 二维DCT变换
DCT(Discrete Consine Transform),又叫离散余弦变换,它的第二种类型,经常用于信号和图像数据的压缩.经过DCT变换后的数据能量非常集中,一般只有左上角的数值是非零的,也就是 ...
- 第47章 QR-Decoder-OV5640二维码识别—零死角玩转STM32-F429系列
第47章 QR-Decoder-OV5640二维码识别 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.y ...
- 又是新动作!微信小程序专属二维码出炉
又到了晚上,微信又给我们带来了惊喜,并这次不是新的能力,而是把大家再熟悉不过的二维码换了新的造型. 正式揭晓:微信特制的小程序码.扫一扫新二维码 只要你的微信升级到了 6.5.7 版本,就可以扫码或者 ...
- [LeetCode] 251. Flatten 2D Vector 压平二维向量
Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...
- [LeetCode] Range Sum Query 2D - Mutable 二维区域和检索 - 可变
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...
随机推荐
- MQ测试
2015年8月13日23:14:52 测试RabbitMq ====================== 千兆局域网:send ≍10000/s receive ≍7000/s 百兆局域网:send ...
- [问题记录]libpomelo的安装
1. 描述: 按照github上的操作完成 Windows in your libpomelo project root directory open git bash and type in mkd ...
- vue + element-ui 制作下拉菜单(可配置路由、可根据路由高亮list、可刷新自动展开定位路由)
本篇文章分享一篇关于 vue制作可路由切换组件.可刷新根据路由定位导航(自动展开).可根据路由高亮对应导航选项 一.实现的功能如下: 1.可折叠导航面板 2.点击导航路由不同组件 ...
- Oracle 内存使用建议性能视图
下面三个查询结果均可查询出随着内存参数设置的变化性能的变化情况,对oracle数据库内存的设置有一定的建议和指导作用. select t.SGA_SIZE,t.ESTD_DB_TIME_FACTOR ...
- [转]Android开源项目收藏分享
转自:http://blog.csdn.net/dianyueneo/article/details/40683285 Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 St ...
- tftp传输可执行程序问题
昨天搭建了板子从nfs系统启动,这样只要在开发机上编写程序编译,就可以在板子上测试运行了,编写了hello world 程序,用arm编译器编译,在主板上运行,提示出错:什么exception ((什 ...
- 修改WSAD的默认工作区(转)
如果要一直用某个目录作为工作区,可以在启动WSAD的时候将该目录设为默认工作区,这样启动时直接启动,方便.快捷.但是如果设置后在想换工作区就比较麻烦了,因为没有可供选择的界面了,跟网上搜了一下总结共有 ...
- JSFUtils
import java.util.Iterator; import java.util.Locale; import java.util.Map; import java.util.MissingRe ...
- HashMap和Hashtable的详细区别
1.Hashtable是线程安全,HashMap是非线程安全 HashMap的性能会高于Hashtable,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用 ...
- CssSelector之selenium元素定位
CssSelector是我最喜欢的元素定位方法,Selenium官网的Document里极力推荐使用CSS locator,而不是XPath来定位元素,原因是CSS locator比XPath loc ...