反二维离散余弦弦变换

正向离散余弦变换
(3)正向离散余弦变换(FDCT):对每个单独的彩色图像,把整个分量图像分成8@8的图像块,并作二维离散余弦变换DCT的输入。
基于118个网页-
forward discrete cosine transform
...换的顺序基本图像处理模式的JPEG压缩算法主要分为三个步骤:
(1)使用正向离散余弦变换(forward discrete cosine transform,FDCT)把空间域表示的图变换成频率域表示的图;
(2)使用加权函数对DCT系数进行量化,这个加权函数对于人...
基于6个网页-
Forward DCT
...豆丁网 余信息 JPEG压缩编码-解压缩算法框图 35 数字媒体处理与检索实验室 4.6.2主要步骤 ? 使用正向离散余弦变换(Forward DCT, FDCT)把空 间域表示的图像变换到频率域表示的图像 ? 使用加权函数对DCT系数进行量化,这个加权函数对 于...
基于3个网页-
forward discrete cosine transfer
正向离散余弦变换
基于2个网页-
forward discrete cosine transform
$firstVoiceSent
- 来自原声例句
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!29416人阅读
C/C++(100)
DCT变换和FFT变换都属于变换压缩方法(TransformCompression),变换压缩的一个特点是将从前密度均匀的信息分布变换为密度不同的信息分布。在图像中,低频部分的信息量要大于高频部分的信息量,尽管低频部分的数据量比高频部分的数据量要小的多。例如删除掉占50%存储空间的高频部分,信息量的损失可能还不到5%。
变换编码有很多种。K–L变换的压缩效率很高,但算法实现困难;FFT变换算法实现简单,但压缩效率不是很理想。经过多方面的比较,最终胜出的算法是DCT,一种源自FFT的变换编码。
与FFT变换同时使用正弦和余弦函数来表达信号不同,DCT只使用余弦函数来表达信号。DCT变换有多个版本,有一种常用的DCT实现过程是这样的:对一个长度为129(0到128)的信号进行DCT变换。首先,复制点127到点1,使整个信号变为:
0, 1, 2, .., 127, 128, 127, …, 2, 1
这串长度为256的时间域信号经过FFT变换后会生成一个长度为129的信号。生成的信号长度之所以129,而不是256,是因为时间域的信号对称,根据二元性(duality),对应的频率域信号的虚数部分全部为0。也就是说,我们输入的长度为129的时间域信号经过DCT变换后,产生一个长度为129的频率域信号,并且频率域完全由余弦函数组成。
在图像处理中,每副图像都会被切成8×8的小块,块的大小可以是任意,只是因为历史原因人们习惯于切为8×8的块。二维的图像处理与一维的信号处理原理是一致的,只是一些计算公式不一样,在二维图像中,基函数的公式如下:
公式中x和y指像素在空间域(对应一维的时间域)的坐标,u和v指基函数频率域中的坐标。这个基函数公式基于8×8的块,x,y, u, v的取值范围都是0–7。
图像经DCT变换后,低频信息集中在矩阵的左上角,高频信息则向右下角集中。直流分量在[0,0]处,[0,1]处的基函数在一个方向上是一个半周期的余弦函数,在另一个方向上是一个常数。[1,0]处的基函数与[0,1]类似,只不过方向旋转了90度。
图3-1 DCT变换中使用的基函数
图3-1是一个8×8的基函数示意图,从中拿出了6个基函数并做出其在二维平面上的示意图。这些基函数是不变的,在DCT变换中,这些基函数将与空间域中的每一个元素进行分别相乘,并将结果累加起来,就完成了空间域到频率域的初步变换。此时还需要两步就可以完成DCT变换:1.将第0行和第0列的值除以2(也就是说,[0,0]要除以4)。2.所有64个元素都除以16。
DCT反变换(InverseDCT)更为容易,将频率域中的基函数分别与对应的振幅(spectrum)相乘并累加,即可得到相应的空间域元素的值。
图3-2 JPEG中DCT转换示例
& & & 在图3-2中,最右侧的那一栏表示使用不同比特数来表达频率域的效果。原始频率域需要64个bit来存储,而g对应的频率域使用10个bit来存储频率域中的单个元素,h和i对应的频率域分别使用8个bit和5个bit。然后对d,e和f分别进行InverseDCT变换,g,h和i分别是使用原始空间域的值来减掉反变换(IDCT)后得到的残差。从图g可以看出,使用DCT压缩将一个32bit的块压缩为10bit,但信息损失很小,几乎可以忽略。从图h和i可以看出,随压缩率的增大,信息损失也逐渐变大。
& & & 经过DCT变换,压缩还可以通过丢弃64个振幅(Spectrum)中的一些信息量较小的元素来实现,这样即可以实现压缩,还可以尽可能最大地保持信息。
& & & 图3-3显示了使用不同数量的频率域振幅(Spectrum)所得的重建图像(a,b和c)与原始图像d的对比效果。从图c可以看出,即使弃掉占总数3/4的高频振幅(Spectrum),使用占总数1/4的低频振幅(Spectrum)也可以得到与原始图像很接近的结果。而且误差看起来是随机分布的,可以看作是随机噪声。
图3-3使用不同数量的Spectrum重建JPEG的效果
下面使用JPEG的压缩过程来介绍DCT变换在图像处理中的应用。JPEG的压缩过程可以分为以下几步:1.将整副图像分解为8×8的小块。2.对每个小块做DCT变换。3.对变换后得到的频率域使用前面所介绍的方法进行压缩:减少每个元素的bit值以及丢弃一些元素。通过量化表(QuantizationTable),这两个压缩操作可以一步实现。
图3-4是两个JPEG量化表的示例,频率域中的每个振幅(Spectrum)与量化表中对应的元素想除,即可得到压缩后的频率域。量化表a的压缩率较低,表b的压缩率比较高。例如a中最右下角的值为16,将对应振幅(Spectrum)的取值范围由-127–
127缩小为-7– 7。而在图b中右下角的值为256,将其清零,相当于将对应的高频信息删除。
图3-4 JPEG量化表
JPEG压缩的第四步,8×8的块被扫描为线性序列,扫描顺序如图3-5所示。对块进行量化处理后,再进行游程编码,那些振幅(Spectrum)为0的元素就被删除掉了。
图3-5线性扫描顺序
& & &JPEG压缩第五步是对线性序列进行游程编码,第六步是对游程编码后的序列进行Huffman编码。
& & &JPEG的压缩率可以设定,图3-6显示不同压缩率的图像与原始图像的对比。
图3-6不同压缩率的JPEG对比
为什么DCT变换对图像的压缩效果要比DFT好?主要原因是DCT中使用了半周期的基函数,而DFT使用的是整周期基函数。图像中大部分像素的变化都是渐变的,因此DCT可以更好地表达图像,从而获得更高的压缩效率。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2129286次
积分:22998
积分:22998
排名:千里之外
原创:406篇
转载:253篇
译文:21篇
评论:256条
(7)(3)(10)(3)(5)(2)(5)(6)(15)(8)(7)(5)(5)(2)(13)(25)(14)(18)(13)(38)(9)(26)(29)(30)(29)(31)(11)(7)(5)(14)(13)(17)(15)(13)(1)(10)(3)(10)(4)(5)(10)(13)(25)(16)(6)(21)(14)(16)(10)(7)(4)(9)(3)(10)(15)(15)君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
图像二维整数离散余弦变换(DCT)变换算法
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口离散余弦变换---dct2函数
已有 5314 次阅读
|个人分类:|系统分类:|关键词:title
RGB=imread('autumn.tif');
figure(1);imshow(RGB);title('原始图像');
I=rgb2gray(RGB);D=dct2(I);
figure(2);imshow(log(abs(D)),[]);colormap(jet(64));title('离散余弦变换结果');
注记:1.二维离散余弦变换为
这里 a(u),a(v) 定义类似,当 u=0 时, a(u)=(1/M)^0.5; 当 u=1 到 M-1 时, a(u)=(2/M)^0.5.
2. 离散余弦变换具有将图像的重要信息集中在变换的少数系数上(见上图3,主要就在左上角),而可用于图像压缩中。如 JPEG 图像压缩算法就采用了 DCT。
转载本文请联系原作者获取授权,同时请注明本文来自张祖锦科学网博客。链接地址:
上一篇:下一篇:
当前推荐数:0
评论 ( 个评论)
扫一扫,分享此博文
作者的其他最新博文
热门博文导读
Powered by
Copyright &使用Matlab实现离散余弦变换(DCT)_emergency_rose_新浪博客
使用Matlab实现离散余弦变换(DCT)
原文地址:使用Matlab实现离散余弦变换(DCT)作者:一世情缘
%通过矩阵形式实现离散余弦变换,Y=M*X*N'
%参数:X是二维图像矩阵,Y是变换后的系数矩阵
function Y = dct21(X)
[m,n] = size(X);
AM = zeros(m,m);
�T系数,当m=n=8时,AM(AN)就是JPEG中常用的8*8的变换矩阵
AN = zeros(n,n);
for i = 0:m-1
for j = 0:m-1
AM(i+1,j+1) = sqrt(1/m)*cos(((2*j+1)*i*pi)/(2*m));
AM(i+1,j+1) = sqrt(2/m)*cos(((2*j+1)*i*pi)/(2*m));
for i = 0:n-1
for j = 0:n-1
AN(i+1,j+1) = sqrt(1/n)*cos(((2*j+1)*i*pi)/(2*n));
AN(i+1,j+1) = sqrt(2/n)*cos(((2*j+1)*i*pi)/(2*n));
X = double(X); %注意变换后的矩阵数据类型为double
Y = AM*X*AN'; %实现DCT逆变换仅仅将本行换为Y = AM'*AN即可
%%%%%%%%%%%�T变换函数完成后,读入图像,然后调用即可
img = imread('marog.bmp');
imgdct = dct21(img); �T正向变换
imgidct = dct22(imgdct); �T逆变换
figure (1)
subplot(131);
imshow(img);
title('原始图象')
subplot(132);
%imshow(imgdct,[]);
imshow(uint8(imgdct))
title('DCT变换图象');
subplot(133);
%imshow(imgidct,[]);
imshow(uint8(imgidct));
title('DCT逆变换图象');
emergency_rose
博客等级:
博客积分:0
博客访问:1,805
关注人气:0
荣誉徽章:

我要回帖

更多关于 反二维离散余弦 的文章

 

随机推荐