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

图像压缩中的离散余弦变换算法图像压缩是现代计算机技术中非常重要的一个领域。
在传输和存储图像时,为了节省空间和时间,需要对图像进行压缩。
其中,一种常见的压缩技术是使用离散余弦变换算法(DCT)。
本文将介绍离散余弦变换的基本原理和算法实现,并讨论它在图像压缩中的应用。
一、离散余弦变换的基本原理离散余弦变换是一种把时域信号变换到频域的方法。
在数学上,它可以理解为把一个信号分解成若干个正弦函数的加权和。
与傅里叶变换类似,离散余弦变换也可以用来分析和处理信号的频域特性。
离散余弦变换的基本思想是将一个N维向量f看成由N个基函数构成的线性组合,即:f(x)=∑(k=0~N-1) ckφk(x)其中,φk(x)是一组正交基,ck是f(x)在φk(x)上的投影系数。
常用的一组正交基是斯特林函数。
通过计算ck的值,就可以得到信号f在这组基下的频域表示。
二、离散余弦变换的算法实现离散余弦变换可以通过快速傅里叶变换(FFT)的变种算法实现。
具体步骤如下:1. 将N维向量f分成两部分,分别进行离散余弦变换(DCT)得到F0和F1。
2. 将F0和F1通过矩阵乘法与一个Hadamard矩阵相乘,得到新的N维向量F。
3. 重复步骤1和2,直到无法再分割出子向量为止。
离散余弦变换的实现比傅里叶变换更加高效,因为它只需要计算实数变量,而不是复数变量,从而减少了计算的时间和空间复杂度。
三、离散余弦变换在图像压缩中的应用离散余弦变换在图像压缩中被广泛应用。
它的主要思想是把一幅图像分成若干个小块,分别进行离散余弦变换,再选择一定数量的低频分量来表示这个块。
由于图像中的低频分量通常比较重要,选择它们可以保留图像的主要特征,并且同时减小了数据的体积。
在实际应用中,常用的图像压缩格式包括JPEG和MPEG。
其中,JPEG是基于离散余弦变换的压缩格式,具体步骤如下:1. 将一幅图像分成8×8的小块。
2. 对每个小块进行离散余弦变换,得到其频域表示。
数字图像处理DCT变换课程设计

数字图像处理DCT变换课程设计1000字本文是一份数字图像处理DCT变换课程设计,主要针对DCT变换在图像处理中的应用做出设计方案,帮助学生掌握DCT变换的基本原理、算法实现方法,并应用于图像编码、压缩等实际应用场景进行实践操作。
1. 课程目标本课程旨在通过深入学习DCT变换的基本概念、算法原理以及应用场景,培养学生对数字图像处理的理论和实际操作能力,具体目标如下:(1)理解DCT变换的定义、公式和基本性质,了解其在图像处理领域的重要性和应用场景。
(2)掌握DCT变换的算法实现方法,学会使用Matlab等图像处理工具进行DCT变换和反变换的编程实现。
(3)了解基于DCT变换的图像编码和压缩原理,掌握JPEG编码格式和压缩率的计算方法。
(4)通过实际项目练习,加深学生对DCT变换在图像处理中应用的理解,提高他们的图像处理实践操作技能。
2. 课程内容(1)DCT变换基础知识①DCT的基本概念、定义和公式;②快速DCT计算方法及其优化;③DCT变换的性质和特点。
(2)DCT在图像处理中的应用①DCT编码及其原理、流程;②JPEG编码格式和图像压缩率的计算方法;③DCT反变换及其实现方法。
(3)实践项目①使用Matlab对灰度图像进行DCT变换和反变换,比较不同变换阶数的图像质量和压缩率;②根据JPEG编码基本原理和流程,自己实现一种基于DCT变换的JPEG压缩器;③结合前两部分内容,对彩色图像进行DCT变换、压缩和解压缩,并比较图像质量和压缩率。
3. 教学方法本课程将采用讲授、实践、讨论等教学方法,具体为:(1)讲授:由教师主要讲述DCT变换的基础知识和应用方法,让学生掌握DCT的基本概念、定义、公式和流程等内容。
(2)实践:通过编写Matlab程序,对灰度和彩色图像进行DCT变换、压缩和解压缩,并对不同参数下的结果进行比较和分析。
让学生加深对DCT变换的理解和应用,提高其实际操作能力。
(3)讨论:带领学生共同探讨DCT变换在图像处理领域的应用场景,分析DCT编码及JPEG压缩在图像处理中的优缺点,并比较不同压缩率下图像质量的差异,促进学生对DCT变换的深入理解和思考。
整数离散余弦变换

整数离散余弦变换(Integer Discrete Cosine Transform,IDCT)是一种在信号处理和图像处理中常用的变换方法。
它可以将离散余弦变换(DCT)的结果转换为整数形式,从而方便存储和传输。
整数离散余弦变换的过程可以分为以下几个步骤:
1. 对输入信号进行N点离散余弦变换(DCT),得到N个复数系数的输出。
2. 将DCT输出中的复数系数转换为实数形式。
3. 对实数系数进行量化和截断,将较大的系数保留,较小的系数置为零。
4. 对量化和截断后的实数系数进行逆变换,得到N点离散余弦反变换(IDCT)的输出。
整数离散余弦变换的公式可以表示为:
$$X[k] = \sum_{n=0}^{N-1} x[n] \cdot \cos\left(\frac{\pi k (2n + 1)}{2N}\right)$$
其中,$x[n]$是输入信号,$X[k]$是输出信号,$N$是变换点数。
整数离散余弦变换的逆变换公式可以表示为:
$$x[n] = \frac{2}{N} \sum_{k=0}^{N-1} X[k] \cdot \cos\left(\frac{\pi k (2n + 1)}{2N}\right)$$
整数离散余弦变换的优点在于它可以将信号的能量集中在少量的系数上,从而实现高效的压缩和存储。
同时,由于其输出为整数形式,因此可以方便地进行数字信号处理和计算机编程实现。
一种用dsp实现离散余弦变换的方法

一种用dsp实现离散余弦变换的方法离散余弦变换(DiscreteCosineTransform)是一种数字图像处理和数字信号处理技术,它对最近一段时间范围内的一系列数据(例如帧)进行变换,以得到它们的频谱,并以此构建相应的滤波器。
DCT 的应用特别广泛,从图像处理的JPEG编码/解码到语音信号处理的量化和编码/解码,都用到了DCT。
随着数字信号处理(DSP)技术的发展,DCT的实现变得更加容易。
DSP技术使DCT更加有效,可以在更少的时间内实现更多复杂的操作,使特定的应用程序更加高效。
文将介绍一种使用DSP实现DCT的方法。
一种使用DSP实现DCT的方法是基于离散余弦重构(DCR)算法,它可以提高DCT的运行速度多倍。
DCR算法将DCT的复杂运算量分解成一系列简单的数学运算,如乘法和加法,其中每一步都可以单独实现,以便更快地执行此操作。
DCR算法的基本思想是,“将同一帧里的点分解成多个小帧,再将每个小帧进行一次DCT变换”。
先,将要处理的源数据划分成若干幅图像,称为子图。
每一幅图像都可以单独处理,对其进行DCT变换。
然后,将这些子图合并成一幅变换后的DCT图像。
这样就可以获得较高的变换速度。
与常规的DCT算法相比,DCR算法的复杂性较小,因为只需要考虑简单的乘法和加法操作,从而大大提高了DCT的运行效率。
DCR算法的变换速度要比常规的DCT算法快得多,因为只需要处理较少的子图像,而不是处理完整图像。
为了在DSP中实现DCT,我们需要考虑优化技术。
优化技术很重要,可以帮助提高DCT的运行效率。
例如,使用DCR算法,可以有效地优化计算,帮助提高DCT运行效率。
外,也可以使用其他优化技术,如抖动和矢量重新排列,以更有效地执行DCT变换。
总的来说,DCT的实现受到DSP技术的贡献,使之更加易于实现。
使用DCR算法,将DCT的复杂运算量分解为简单的数学运算。
此外,优化技术也有助于提高DCT的运行效率。
离散余弦变换原理特点及程序

1 离散余弦变换(Discrete Cosine Transform ,DCT)原理1)离散余弦变换定义(1)一维离散余弦变换的定义由下式表示:式中F(u)是第u 个余弦变换系数,u 是广义频率变量,u=1,2,3.....N-1,f(x)是时域N 点序列,x=0,1,2...N-1(2)一维离散余弦反变换由下式表示:(3)二维离散余弦变换的定义由下式表示:最后的式子是正变换公式。
其中f(x,y)是空间域二维向量之元素,其中x,y=0,1,2...N-1, F(u,v)是变换系数阵列之元素。
式∑-==10)(1)0(N x x f N F N u x x f N u F N x 2)12(cos )(2)(10π+=∑-=N u x u F N F N x f N u 2)12(cos )(2)0(1)(11π++=∑-=Nv y N u x y x f N v u F Nu x y x f N u F N v y y x f N v F y x f N F N x N y N y N x N x N y N x N y 2)12(cos 2)12(cos ),(2),(2)12(cos ),(2)0,(2)12(cos ),(2),0(),(1)0,0(1010101010101010ππππ+⋅+=+=+⋅==∑∑∑∑∑∑∑∑-=-=-=-=-=-=-=-=中表示的阵列为N ×N 。
(4)二维离散余弦反变换由下式表示:2) 性质: (1)余弦变换是实数、正交。
(2)离散余弦变换可由傅里叶变换的实部求得(3)对高度相关数据,DCT 有非常好的能量紧凑性(4)对于具有一阶马尔可夫过程的随机信号,DCT 是K-L 变换的最好近似2 离散余弦变换Matlab 实现(1)二维离散余弦变换f=imread('trees.tif');f=im2double(f);F=dct2(f);subplot(121),imshow(f,[]);subplot(122),imshow(log(1+20*abs(F)),[])Nv y N u x v u F N N u x u F N N v y v F N F N y x f N u N v N u N v 2)12(cos 2)12(cos ),(22)12(cos )0,(22)12(cos ),0(2)0,0(1),(11111111ππππ+⋅++++++=∑∑∑∑-=-=-=-=图1 原图以及进行离散变换后图对比再进行逆变换:I=idct2(F);subplot(121),imshow(f);subplot(122),imshow(I)图2 原图与恢复后的图对比将数据进行压缩再逆变换:CLFf=imread('cameraman.tif');F=dct2(f);F(abs(F)<50)=0;k=idct2(F);subplot(121),imshow(f,[]);subplot(122),imshow(k,[])图3 对比图(2)将输入图像分解成8×8的图像块,然后对每个图像块进行DCT 变换,保留64个DCT系数部分,然后通过压缩保存数据。
二维离散余弦变换解法

二维离散余弦变换(2D-DCT)是一种在图像处理中常用的技术,尤其在图像压缩领域,如JPEG压缩算法中。
其基本思想是将二维信号(如图像)分解为不同频率的余弦函数的叠加。
二维离散余弦变换的数学表达式通常如下:X(u,v) = C(u)C(v) ∑∑ x(m,n)cos((2m+1)uπ/(2M))cos((2n+1)vπ/(2N))其中,X(u,v)表示变换后的系数,x(m,n)表示原始信号的像素值,C(u)和C(v)是归一化因子,M和N分别表示原始信号的宽度和高度,u和v表示频域的坐标。
但是,上述公式并没有提供具体的解法步骤,因为它本身就是定义了二维离散余弦变换的计算方式。
在实际应用中,我们通常会使用特定的算法或库函数(如Python中的numpy.fft.dct2)来计算二维离散余弦变换。
对于具体的计算步骤,以下是一种可能的简化描述:1.获取输入图像(或二维信号)的所有像素值,即x(m,n)。
2.初始化输出矩阵X(u,v)为零矩阵,其大小与输入图像相同。
3.对输入图像的每一个像素位置(m,n),计算其对应的余弦项cos((2m+1)uπ/(2M))cos((2n+1)vπ/(2N))。
4.将步骤3中计算得到的余弦项乘以该像素位置的像素值x(m,n)。
5.对步骤4中得到的乘积进行累加,累加到输出矩阵X(u,v)的对应位置。
6.对输出矩阵X(u,v)的每一个元素,乘以对应的归一化因子C(u)C(v)。
以上步骤描述了如何计算二维离散余弦变换的一种可能方法,但请注意这并非唯一的实现方式。
具体的实现可能会根据具体的应用场景和优化需求进行调整。
另外,对于二维离散余弦变换的逆变换(即从频域系数恢复原始图像),其计算过程与上述过程类似,但方向相反。
具体来说,就是将频域系数乘以对应的归一化因子,然后进行反余弦变换,最后得到恢复后的图像。
数字图像处理DCT变换课程设计

目录1.相关知识DCT变换在数字图像应用数字图像处理的主要方法 (1)DCT在MATLAB的实现 (1)2. 课程设计分析 (3)DCT 的基本原理 (3)3. 程序 (6)4. 仿真结果 (7)压缩前后图像对比 (7)DCT变换三维投影 (8)5. 结果分析 (9)6.结论 (11)7.参考文献 (12)1.相关知识DCT变换在数字图像应用在JPEG各类图像压缩算法中,基于离散余弦变换(DCT ,Discrete Cosine Transform) 的图像压缩编码过程称为基本顺序过程,它应用于绝大多数图像压缩场合, 并且它能在图像的压缩操作中获得较高的压缩比。
另外,重构图像与源图像的视觉效果基本相同。
DCT变换是在最小均方误差条件下得出的最佳正交变换,且已获得广泛应用, 并成为许多图像编码国际标准的核心。
DCT变换的变换核心为余弦函数,计算速度较快, 有利于图像压缩和其他处理。
MATLAB是由美国Math2Works公司推出的用于数值计算和图形处理的科学计算软件, 它集数值分析、矩阵计算、信号处理和图形显示多种功能于一体,构成了一个方便的界面,友好的用户环境。
本文主要应用中发布的影像处理工具箱中的相关函数和命令来实现基于DCT的图像压缩编码理论算法的仿真。
数字图像处理的主要方法空域法和变换域法。
a.空域法把图像看作是平面中各个象素组成的集合,然后直接对这个二维函数进行相应的处理。
b. 频域法(变换域法)首先对图像进行正交变换,得到变换域系数阵列,然后再实行各种处理,处理后再反变换到空间域,得到处理结果。
这类处理包括:滤波、数据压缩和特征提取等。
DCT在MATLAB的实现第一种方法是使用函数dct2,该函数使用一个基于FFT的快速算法来提高当输入较大的输入方阵时的计算速度。
dct2函数的调用格式如下:dct2 B=(A,[M N])或B=dct2(A,M,N)其中,A表示要变换的图像,M和N是可选参数,表示填充后的图像矩阵大小。
DCT变换的原理及算法

DCT变换的原理及算法DCT(Discrete Cosine Transform,离散余弦变换)是一种数学变换方法,广泛应用于图像和音频信号处理领域。
DCT变换可以将输入信号从时域转换到频域,以便在频域中进行分析和处理。
在本文中,将介绍DCT 变换的原理和算法。
DCT的原理:DCT变换是一种线性变换,它将输入信号表示为一系列基本正弦函数的加权和。
这些基本正弦函数的频率和幅度决定了输入信号在频域中的特征。
通过DCT变换,我们可以将信号从时域转换到频域,并获得不同频率分量的能量信息。
DCT变换有多种不同算法实现方法,其中最常用的是基于快速离散余弦变换(Fast Discrete Cosine Transform,FDCT)的算法。
FDCT算法使用了快速傅里叶变换(FFT)的思想,通过分解和合并的方式实现高效的DCT变换。
FDCT算法的基本思想是将输入信号划分为多个块,每个块包含一定数量的样本点。
然后对每个块进行DCT变换。
对于长度为N的块,DCT变换可以表示为以下公式:X(k) = Σ[n=0 to N-1] x(n) * cos[(π/N) * (n + 0.5) * k], k = 0, 1, ..., N-1其中,x(n)表示输入信号的第n个样本点,X(k)表示变换后的频域系数,N表示每个块的样本点数量。
通过计算不同k值对应的X(k),我们可以得到信号在频域中不同频率分量的能量分布。
为了提高计算效率,FDCT算法采用了系数对称性和重复性的性质,使用快速傅里叶变换(FFT)的思想对DCT变换进行高效实现。
具体来说,FDCT算法将DCT变换拆分为多个较小的子问题,通过递归地对子问题进行分解和合并来实现高速计算。
FDCT算法的步骤如下:1.将输入信号划分为多个块,每个块包含N个样本点。
2.对每个块进行DCT变换,计算得到频域系数。
3.对频域系数进行进一步处理,如量化、压缩等。
4.反变换:将处理后的频域系数转换回时域,以获取最终的输出信号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计课程名称光电图像处理综合课程设计题目名称图像二维整数离散余弦变换(DCT)变换算法和DSP实现2013年11月26日目录一、离散余弦变换 (2)1、概念2、离散余弦变换用于图像处理3、量化二、流程图 (5)三、程序中实现 (6)四、输出结果 (11)一、离散余弦变换1、概念离散余弦变换(DCT for Discrete Cosine Transform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFT for Discrete Fourier Transform),但是只使用实数。
离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。
最常用的一种离散余弦变换的类型是下面给出的第二种类型,通常我们所说的离散余弦变换指的就是这种。
它的逆,也就是下面给出的第三种类型,通常相应的被称为"反离散余弦变换","逆离散余弦变换"或者"IDCT"。
有两个相关的变换,一个是离散正弦变换(DST for Discrete Sine Transform),它相当于一个长度大概是它两倍的实奇函数的离散傅里叶变换;另一个是改进的离散余弦变换(MDCT for Modified Discrete Cosine Transform),它相当于对交叠的数据进行离散余弦变换。
离散余弦变换,尤其是它的第二种类型,经常被信号处理和图像处理使用,用于对信号和图像(包括静止图像和运动图像)进行有损数据压缩。
这是由于离散余弦变换具有很强的"能量集中"特性:大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分,而且当信号具有接近马尔科夫过程(Markov processes)的统计特性时,离散余弦变换的去相关性接近于K-L变换(Karhunen-Loève 变换--它具有最优的去相关性)的性能。
2、离散余弦变换用于图像处理:图像数据一般有较强的相关性,若所选用的正交矢量空间的基矢量与图像本身的主要特征相近,在该正交矢量空间中描述图像数据则会变得更简单。
经过正交变换,会把原来分散在原空间的图像数据在新的坐标空间中得到集中。
对于大多数图像,大量变换系数很小,只要删除接近于零的系数,并且对较小的系数进行粗量化,而保留包含图像主要信息的系数,以此进行压缩编码。
在重建图像进行解码时,所损失的将是一些不重要的信息,几乎不会引起图像的失真。
在变换编码中,首先要将图像数据分割成子图像,然后对子图像数据块实施某种变换,如DCT变换,那么子图像尺寸取多少好呢?根据实践证明子图像尺寸取4×4、8×8、16×16适合作图像的压缩,这是因为:<1> 如果子图像尺寸取得太小,虽然计算速度快,实现简单,但压缩能力有一定的限制。
<2> 如果子图像尺寸取得太大,虽然去相关效果变好,因为象DFT、DCT等正弦型变换均具有渐近最佳性,但也渐趋饱和。
若尺寸太大,由于图像本身的相关性很小,反而使其压缩效果不显示,而且增加了计算的复杂性。
8*8FDCT和IDCT的普通算法如下:其中:离散余弦变换(Discrete Cosine Tranform,简称DCT)是一种与傅立叶变换紧密相关的数学运算。
在傅立叶级数展开式中,如果被展开的函数式是偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化可导出余弦变换,因此称之为离散余弦变换。
时间域中信号需要许多数据点表示;在x轴表示时间,在y轴表示幅度。
信号一旦用傅立叶变换转换到频率域,就只需要几点就可以表示这个相同的信号。
如我们已经看到的那样,原因就是信号只含有少量的频率成分。
这允许在频率域中只用几个数据点就可以表示信号,而在时间域中表示则需要大量数据点。
这一技术可以应用到彩色图像上。
彩色图像有像素组成,这些像素具有RGB彩色值。
每个像素都带有x,y坐标,对每种原色使用8x8或者16x16矩阵。
在灰度图像中像素具有灰度值,它的x,y坐标由灰色的幅度组成。
为了在JPEG中压缩灰度图像,每个像素被翻译为亮度或灰度值。
为了压缩RGB彩色图像,这项工作必须进行三遍,因为JPEG分别得处理每个颜色成分,R成分第一个被压缩,然后是G成分,最后是B成分。
而一个8x8矩阵的64个值,每个值都带有各自的x ,y 坐标,这样我们就有了一个像素的三维表示法,称作控件表达式或空间域。
通过DCT 变换,空间表达式就转化为频谱表达式或频率域。
从而到达了数据压缩的目的。
DCT 式目前最佳的图像变换,它有很多优点。
DCT 是正交变换,它可以将8x8图像空间表达式转换为频率域,只需要用少量的数据点表示图像;DCT 产生的系数很容易被量化,因此能获得好的块压缩;DCT 算法的性能很好,它有快速算法,如采用快速傅立叶变换可以进行高效的运算,因此它在硬件和软件中都容易实现;而且DCT 算法是对称的,所以利用逆DCT 算法可以用来解压缩图像。
为什么采用8x8的图像块,其原因是由于计算量和像素之间关系的数量,许多研究表明,在15或20个像素之后,像素间的相关性开始下降。
就是说,一列相似的像素通常会持续15到20个像素那么长,在此之后,像素就会改变幅度水平(或反向)。
模拟图像经采样后成为离散化的亮度值然后分成一个个宏块,而一个宏块有分成8x8大小的块,可以用一个矩阵来表示这个块。
在这里,N=8,矩阵中元素f (i ,j )表示块中第i 行、第j 列像素的亮度值。
把该矩阵看作一个空间域,显然,块中这些亮度值的大小有一定的随机性,无序性,或者说亮度值的分布没有什么特征;DCT 变换就是来解决这个问题的,把这些随机的数据变的有序,便于对数据进行编码压缩。
∑∑-=-====101,0 , ),(1)0,0(N x N y v u y x f NF∑∑-=-=-==⎥⎦⎤⎢⎣⎡+=1011,,2,1 0, , )12(2cos ),(2)0,(N x N y N u v u x N y x f Nu F π∑∑-=-=-==⎥⎦⎤⎢⎣⎡+=1011,,2,1 0, , )12(2cos ),(2),0(N x N y N v u v y N y x f Nv F π1,,2,1,)12(2cos )12(2cos ),(2),(1010-=⎥⎦⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡+=∑∑-=-=N v u v y N u x N y x f N v u F N x N y ππ3、量化量化过程实际上就是对 DCT 系数的一个优化过程。
它是利用了人眼对高频部分不敏感的特性来实现数据的大幅简化。
量化过程实际上是简单地把频率领域上每个成份,除以一个对于该成份的常数,且接着四舍五入取最接近的整数。
这是整个过程中的主要有损运算。
以这个结果来说,经常会把很多高频率的成份四舍五入而接近0,且剩下很多会变成小的正或负数。
整个量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。
量化是图像质量下降的最主要原因。
因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。
总体上来说,DCT 变换实际是空间域的低通滤波器。
对 Y 分量采用细量化,对 UV 采用粗量化。
量化表是控制 JPEG 压缩比的关键,这个步骤除掉了一些高频量;另一个重要原因是所有图片的点与点之间会有一个色彩过渡的过程,大量的图像信息被包含在低频率中,经过量化处理后,在高频率段,将出现大量连续的零。
二、流程图基于DCT的图像压缩编码的程序实现的流程图如图3-1所示。
开始图3-1程序流程图三、程序中实现/************************************************************************/ /* 学号:姓名: *//************************************************************************/ #include <stdio.h>#include <math.h>#define N 8#define PI 3.1415926int f1[N][N]={{139,144,149,153,155,155,155,155},{144,151,153,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 q1[N][N]= //定义色度量化系数{{17,18,24,47,99,99,99,99},{18,21,26,66,99,99,99,99},{24,26,56,99,99,99,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 q2[N][N]= //定义亮度量化系数{{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},{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 F[N][N]={0}; //初始化输出数组int f_1[N][N]={0}; //初始化逆变换的输出数组int f2[N][N]={0}; //自定义输入数组的数据int fq[N][N]={0}; //定义量化后的数组。