采用DCT进行图像压缩

一、实验目的:熟悉变换编码的图像压缩方法

二、实验内容:以所给图像为例,采用dct进行图像压缩编码,通过改变模板矩阵中非零元素的个数,得到不同缩编码图像, 根据公式

,编写程序计算原图像和dct变换后得到的图像之间的均方误差。用到的matlab函数为im2double,dctmtx,blkproc。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

先上实验要用到的图片

下面的程序的模板矩阵是8*8的

 1 I=imread(‘C:/woman_blonde.tif‘);
 2 I=im2double(I);
 3 T=dctmtx(8);%得到一个8*8的离散余弦变化矩阵
 4 B=blkproc(I,[8 8],‘P1*x*P2‘,T,T‘);% x就是每一个分成的8*8大小的块,P1*x*P2相当于像素块的处理函数,p1=T p2=T’,也就是fun=p1*x*p2‘=T*x*T‘的功能是进行离散余弦变换
 5 m=[1 1 1 0 0 0 0 0
 6    1 1 0 0 0 0 0 0
 7    1 0 0 0 0 0 0 0
 8    0 0 0 0 0 0 0 0
 9    0 0 0 0 0 0 0 0
10    0 0 0 0 0 0 0 0
11    0 0 0 0 0 0 0 0
12    0 0 0 0 0 0 0 0 ];
13 B2=blkproc(B,[8 8],‘P1.*x‘,m);%舍弃每个块中的高频系数,达到图像压缩的目的
14 I2=blkproc(B2,[8 8],‘P1*x*P2‘,T‘,T);%进行反余弦变换,得到压缩后的图象
15 cha=abs(I-I2);
16 junfang=mse(cha);
17 figure,imshow(I),title(‘原始图像‘,‘Fontsize‘,18);
18 figure,imshow(I2),title(‘压缩(解压缩)图像‘,‘Fontsize‘,18),
19 xlabel({‘均方误差: ‘;junfang},‘Fontsize‘,18);

下面的程序的模板矩阵是16*16的

 1 I3=imread(‘C:/woman_blonde.tif‘);
 2 I3=im2double(I3);
 3 T2=dctmtx(16);
 4 B3=blkproc(I3,[16 16],‘P1*x*P2‘,T2,T2‘);
 5 m2=[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
 6    1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
 7    1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 8    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 9    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
10    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
13    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
14    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
15    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
21 B4=blkproc(B3,[16 16],‘P1.*x‘,m2);
22 I4=blkproc(B4,[16 16],‘P1*x*P2‘,T2‘,T2);
23 cha1=abs(I3-I4);
24 junfang2=mse(cha1);
25 figure,imshow(I3),title(‘原始图像‘,‘Fontsize‘,20);
26 figure,imshow(I4),title(‘压缩(解压缩)图像‘,‘Fontsize‘,20),
27 xlabel({‘均方误差: ‘;junfang2},‘Fontsize‘,20);

对比运行结果:

8*8

16*16

对比还是容易发现,第二个代码的运行结果图片损失程度还是比较大的,因程序二模板的0个数占比更多,使更多的高频像素被压缩,而该压缩是不可逆的,所以图二损失程度更大。

下面是程序中几个函数的说明

dctmtx

MATLAB图像处理工具箱实现离散余弦变换有两种方法:dct2和dctmtx(1)使用函数dct2,该函数用一个基于FFT的算法来提高当输入较大的方阵时的计算速度。
(2)使用由dctmtx函数返回的DCT变换矩阵,这种方法较适合于较小的输入方阵(例如8×8或16×16)。

①函数:dct2
实现图像的二维离散余弦变换。调用格式为:
B = dct2(A)
B = dct2(A,[M N])
B = dct2(A,M,N)
式中A表示要变换的图像,M和N是可选参数,表示填充后的图像矩阵大小,B表示变换后得到的图像矩阵。

②函数:dctmtx
D = dctmtx(N)
式中D是返回N×N的DCT变换矩阵,如果矩阵A是N×N方阵,则A的DCT变换可用D×A×D’来计算。这在有时比dct2计算快,特别是对于A很大的情况。 

blkproc

功能:对图像进行分块处理
函数调用形式:B = blkproc(A,[m n],fun, parameter1, parameter2, ...)
B = blkproc(A,[m n],[mborder nborder],fun,...)
B = blkproc(A,‘indexed‘,...)
参数解释:[m n] :图像以m*n为分块单位,对图像进行处理(如8像素*8像素)
          Fun:   应用此函数对分别对每个m*n分块的像素进行处理
          parameter1, parameter2: 要传给fun函数的参数
          mborder nborder:对每个m*n块上下进行mborder个单位的扩充,左右进行nborder个单位的扩充,扩充的像素值为0,fun函数对整个扩充后的分块进行处理。

mse

等价于sum(a.^2)/lenght(a);

MSE和RMSE都是网络的性能函数。MSE是(神经)网络的均方误差,叫"Mean Square Error"。比如有n对输入输出数据,每对为[Pi,Ti],i=1,2,...,n.网络通过训练后有网络输出,记为Yi。那MSE=(求和(Ti-Yi)^2(i=1,2,..n))/n,即每一组数的误差平方和再除以数据的对数。RMSE叫“Root Mean Square Error”,即在MSE基础上要开根号,中文译为“均方根误差”,MSE=MSE开根号。亦即RMSE是MSE的平方根。

原文地址:https://www.cnblogs.com/henuliulei/p/10957001.html

时间: 2024-10-17 13:44:00

采用DCT进行图像压缩的相关文章

视频编码格式全面解析

我们在详解各种主流的视频格式之前,先抛开各种视频格式的定义,来讨论这样一件事情:你觉得目前的视频格式编码混乱吗?相信这个问题问出来,许多..不同知识层次的人有不同的思考,但是答案却都有一个共同点就是:"混乱". 从我们在接触网络上面看电影以来,就会遇到从原先我们熟知的RMVB格式的视频到后来接触的MP4.3GP等格式的视频就会感到为什么同样是AVI的视频,我的MP4却不支持,而别人的就可以呢?这里就涉及到了视频编码与封装格式的问题.本文主要是针对视频编码进行讨论,以后会在下次为大家讲解

H.264的优势和主要特点

H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准.这个标准通常被称之为H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明确的说明它两方面的开发者. H264 标准各主要部分有Access Unit delimiter(访问单元分割符),SEI(附加增强信息)

paper 132:图像去噪算法:NL-Means和BM3D

这篇文章写的非常好,确定要~认真~慎重~的转载了,具体请关注本文编辑作者:http://wenhuix.github.io/research/denoise.html   我不会告诉你这里的代码都是free! 图像去噪是非常基础也是非常必要的研究,去噪常常在更高级的图像处理之前进行,是图像处理的基础.可惜的是,目前去噪算法并没有很好的解决方案,实际应用中,更多的是在效果和运算复杂度之间求得一个平衡,再一次验证了我老师的一句话: 所有的工程问题最后都是最优化问题. 噪声模型 图像中噪声的来源有许多

视频通讯 视频技术H.264与AVS的比较

视频编码技术在过去几年最重要的发展之一是由ITU和ISO/IEC的联合视频小组 (JVT)开发了H.264/MPEG-4 AVC[8]标准.在发展过程中,业界为这种新标准取了许多不同的名称.ITU在1997年开始利用重要的新编码工具处理H.26L(长期),结果令人鼓舞,于是ISO决定联手ITU组建JVT并采用一个通用的标准.因此,大家有时会听到有人将这项标准称为JVT,尽管它并非正式名称.ITU在2003年5月批准了新的H.264标准.ISO在2003年10 月以MPEG-4 Part 10.高

气象业务数据格式的介绍

一.Net-CDF数据格式 1.1 Net-CDF概述  NetCDF全称为network Common Data Format,中文译法为"网络通用数据格式",对程序员来说,它和zip.jpeg.bmp文件格式类似,都是一种文件格式的标准.netcdf文件开始的目的是用于存储气象科学中的数据,现在已经成为许多数据采集软件的生成文件的格式.  从数学上来说,netcdf存储的数据就是一个多自变量的单值函数.用公式来说f(x,y,z,...)=value, 函数的自变量x,y,z等在ne

图像压缩基本原理

信息论一些基础 自信息I(s) 信息熵H(s) 在信源中,考虑的不是某一单个符号发生的不确定性,而是要考虑这个信源所有可能发生情况的平均不确定性.若信源符号有n种取值:U1…Ui…Un,对应概率为:P1…Pi…Pn,且各种符号的出现彼此独立.这时,信源的平均不确定性应当为单个符号不确定性-logPi的统计平均值(E),可称为信息熵,即 式中对数一般取2为底,单位为比特 香农采样定理 香农第一定理(可变长无失真信源编码定理) 设离散无记忆信源X包含N个符号{x1,x2,…,xi,..,xN},信源

JPEG压缩原理与DCT离散余弦变换——有实际的数据演示

http://blog.csdn.net/newchenxf/article/details/51719597 1 前言 JPEG是joint Photographic Experts Group(联合图像专家组)的缩写,文件后辍名为".jpg"或".jpeg". jpg图片可以说是最常见的图片格式了,基本上你的自拍照,要么是png的,要么就是jpeg的了.(有关jpeg和png的区别,请参考我的另一博文[jpeg 与 png 图片格式的区别]) 但它是一种有损压缩

【原创】Libjpeg 库使用心得(一) JPEG图像DCT系数的获取和访问

[原创]继续我的项目研究,现在采用Libjpeg库函数来进行处理,看了库函数之后发现C语言被这些人用的太牛了,五体投地啊...废话不多说,下面就进入正题. Libjpeg库在网上下载还是挺方便的,这里就不附上来了,当然如果找不到的话,也可以发邮件给我,我的邮箱是[email protected]. 打开库函数会看到有很多很多的文件,里面有两个解决方案,一个是apps,一个是jpeg.apps里面有5个工程,分别是用于压缩,解压,转换,读取JPEG中COM段,写入JPEG中COM段,COM段可以看

没有对比就没有伤害——AT、DCT、CVT、AMT到底怎么选

在国内的汽车消费市场的高端领域,几乎是清一色的自动变速箱.除了少数的钢炮还坚持着MT以外,全是自动档的天下.随着自动变速箱的发展,无论是动力响应,还是可参与度都大大提高,也简化了驾驶员的手脚负担.家用车如何选择AT/DCT/CVT/AMT四种变速箱,它们到底有什么优劣势呢?作为消费者又该如何选择呢?我们逐一分析. 自动变速箱(AT) AT变速箱是采用液力变矩器来替代离合器工作,液力变矩器的工作原理就像是船的螺旋桨一样在水中驱动,而液力变矩器则是通过泵轮.涡轮.导轮三组叶片.液力变矩器最大的特点在