图像二维整数离散余弦变换(DCT)_变换算法和DSP实现课程设计

上传人:ni****g 文档编号:469638778 上传时间:2023-07-17 格式:DOCX 页数:14 大小:303.37KB
返回 下载 相关 举报
图像二维整数离散余弦变换(DCT)_变换算法和DSP实现课程设计_第1页
第1页 / 共14页
图像二维整数离散余弦变换(DCT)_变换算法和DSP实现课程设计_第2页
第2页 / 共14页
图像二维整数离散余弦变换(DCT)_变换算法和DSP实现课程设计_第3页
第3页 / 共14页
图像二维整数离散余弦变换(DCT)_变换算法和DSP实现课程设计_第4页
第4页 / 共14页
图像二维整数离散余弦变换(DCT)_变换算法和DSP实现课程设计_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《图像二维整数离散余弦变换(DCT)_变换算法和DSP实现课程设计》由会员分享,可在线阅读,更多相关《图像二维整数离散余弦变换(DCT)_变换算法和DSP实现课程设计(14页珍藏版)》请在金锄头文库上搜索。

1、课 程 设 计 课程名称 光电图像处理综合课程设计题目名称 图像二维整数离散余弦变换 (DCT) 变换算法和DSP实现2013年11月26日目录一、离散余弦变换21、概念2、离散余弦变换用于图像处理3、量化二、流程图5三、程序中实现6四、输出结果11一、离散余弦变换1、概念离散余弦变换(DCT for Discrete Cosine Transform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFT for Discrete Fourier Transform),但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为

2、一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。最常用的一种离散余弦变换的类型是下面给出的第二种类型,通常我们所说的离散余弦变换指的就是这种。它的逆,也就是下面给出的第三种类型,通常相应的被称为反离散余弦变换,逆离散余弦变换或者IDCT。有两个相关的变换,一个是离散正弦变换(DST for Discrete Sine Transform),它相当于一个长度大概是它两倍的实奇函数的离散傅里叶变换;另一个是改进的离散余弦变换(MDCT for Modified Discrete Cosine Transfo

3、rm),它相当于对交叠的数据进行离散余弦变换。离散余弦变换,尤其是它的第二种类型,经常被信号处理和图像处理使用,用于对信号和图像(包括静止图像和运动图像)进行有损数据压缩。这是由于离散余弦变换具有很强的能量集中特性:大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分,而且当信号具有接近马尔科夫过程(Markov processes)的统计特性时,离散余弦变换的去相关性接近于K-L变换(Karhunen-Love 变换-它具有最优的去相关性)的性能。2、离散余弦变换用于图像处理:图像数据一般有较强的相关性,若所选用的正交矢量空间的基矢量与图像本身的主要特征相近,在该正交矢量

4、空间中描述图像数据则会变得更简单。 经过正交变换,会把原来分散在原空间的图像数据在新的坐标空间中得到集中。对于大多数图像,大量变换系数很小,只要删除接近于零的系数,并且对较小的系数进行粗量化,而保留包含图像主要信息的系数,以此进行压缩编码。 在重建图像进行解码时,所损失的将是一些不重要的信息,几乎不会引起图像的失真。在变换编码中,首先要将图像数据分割成子图像,然后对子图像数据块实施某种变换,如DCT变换,那么子图像尺寸取多少好呢?根据实践证明子图像尺寸取44、88、1616适合作图像的压缩,这是因为: 如果子图像尺寸取得太小,虽然计算速度快,实现简单,但压缩能力有一定的限制。 如果子图像尺寸取

5、得太大,虽然去相关效果变好,因为象DFT、DCT等正弦型变换均具有渐近最佳性,但也渐趋饱和。若尺寸太大,由于图像本身的相关性很小,反而使其压缩效果不显示,而且增加了计算的复杂性。8*8FDCT和IDCT的普通算法如下:其中:离散余弦变换(Discrete Cosine Tranform,简称DCT)是一种与傅立叶变换紧密相关的数学运算。在傅立叶级数展开式中,如果被展开的函数式是偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化可导出余弦变换,因此称之为离散余弦变换。时间域中信号需要许多数据点表示;在x轴表示时间,在y轴表示幅度。信号一旦用傅立叶变换转换到频率域,就只需要几点就可以表示这个相同

6、的信号。如我们已经看到的那样,原因就是信号只含有少量的频率成分。这允许在频率域中只用几个数据点就可以表示信号,而在时间域中表示则需要大量数据点。这一技术可以应用到彩色图像上。彩色图像有像素组成,这些像素具有RGB彩色值。每个像素都带有x,y坐标,对每种原色使用8x8或者16x16矩阵。在灰度图像中像素具有灰度值,它的x,y坐标由灰色的幅度组成。为了在JPEG中压缩灰度图像,每个像素被翻译为亮度或灰度值。为了压缩RGB彩色图像,这项工作必须进行三遍,因为JPEG分别得处理每个颜色成分,R成分第一个被压缩,然后是G成分,最后是B成分。而一个8x8矩阵的64个值,每个值都带有各自的x,y坐标,这样我

7、们就有了一个像素的三维表示法,称作控件表达式或空间域。通过DCT变换,空间表达式就转化为频谱表达式或频率域。从而到达了数据压缩的目的。DCT式目前最佳的图像变换,它有很多优点。DCT是正交变换,它可以将8x8图像空间表达式转换为频率域,只需要用少量的数据点表示图像;DCT产生的系数很容易被量化,因此能获得好的块压缩;DCT算法的性能很好,它有快速算法,如采用快速傅立叶变换可以进行高效的运算,因此它在硬件和软件中都容易实现;而且DCT算法是对称的,所以利用逆DCT算法可以用来解压缩图像。为什么采用8x8的图像块,其原因是由于计算量和像素之间关系的数量,许多研究表明,在15或20个像素之后,像素间

8、的相关性开始下降。就是说,一列相似的像素通常会持续15到20个像素那么长,在此之后,像素就会改变幅度水平(或反向)。模拟图像经采样后成为离散化的亮度值然后分成一个个宏块,而一个宏块有分成8x8大小的块,可以用一个矩阵来表示这个块。在这里,N=8,矩阵中元素f(i,j)表示块中第i行、第j列像素的亮度值。把该矩阵看作一个空间域,显然,块中这些亮度值的大小有一定的随机性,无序性,或者说亮度值的分布没有什么特征;DCT变换就是来解决这个问题的,把这些随机的数据变的有序,便于对数据进行编码压缩。3、量化量化过程实际上就是对 DCT 系数的一个优化过程。它是利用了人眼对高频部分不敏感的特性来实现数据的大

9、幅简化。量化过程实际上是简单地把频率领域上每个成份,除以一个对于该成份的常数,且接着四舍五入取最接近的整数。这是整个过程中的主要有损运算。以这个结果来说,经常会把很多高频率的成份四舍五入而接近0,且剩下很多会变成小的正或负数。整个量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。量化是图像质量下降的最主要原因。因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。总体上来说,DCT 变换实际是空间域的低通滤波器。对 Y 分量采用细量化,对 UV 采用粗量化。量化表是控制 JPEG 压缩比的关键,这个步骤除掉了一些高频量;另一个重要原因是所有图片的点与点

10、之间会有一个色彩过渡的过程,大量的图像信息被包含在低频率中,经过量化处理后,在高频率段,将出现大量连续的零。二、流程图基于DCT的图像压缩编码的程序实现的流程图如图3-1所示。开始输入图片分成8*8像素块,DCT变换输入量化表,对变换系数量化对量化系数进行扫描选择一幅图对其进行不同的压缩比变换反量化反DCT变换显示所选图像的信噪比结束图3-1 程序流程图三、程序中实现/*/* 学号:姓名: */*/#include #include #define N 8#define PI 3.1415926int f1NN=139,144,149,153,155,155,155,155,144,151,1

11、53,156,159,156,156,156,150,155,160,163,158,156,156,156,159,161,162,160,160,159,159,159,159,160,161,162,162,155,155,155,161,161,161,161,160,157,157,157,162,162,161,163,162,157,157,157,162,162,161,161,163,158,158,158,;int q1NN=/定义色度量化系数17,18,24,47,99,99,99,99, 18,21,26,66,99,99,99,99, 24,26,56,99,99,9

12、9,99,99, 47,66,99,99,99,99,99,99, 99,99,99,99,99,99,99,99, 99,99,99,99,99,99,99,99, 99,99,99,99,99,99,99,99, 99,99,99,99,99,99,99,99,;int q2NN=/定义亮度量化系数16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,

13、49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99;void showMat_d(double *matShow);void showMat_i(int *matShow);/显示函数,输出为整形数据void DCT(int *f,double *F);/经过FDCT变换,f为输入数据,F为输出数据void IDCT(int *f,int *F);/经过逆变换,f为输入数据,F为输出数据void quant(double *f,int *F);/量化过程,f为传进的DCT数据,F为量化后的数据void iQuant(int *f,int *F);/逆量化过程,f为量化后的数据,F为消除了量化的数据void main()double FNN=0;/初始化输出数组int f_1NN=0;/初始化逆变换的输出数组int f2NN=0;/自定义输入数组的数据int fqNN=0;/定义量化后的数组。int fq_1NN=0;/定义经

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 幼儿教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号