- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JPEG压缩编解码程序
%%使用matlab 2013b软件进行仿真测试。测试图片在文档最后方。
function jpegCompress
%以离散余弦变换(DCT)为基础,对灰度图像进行有损压缩及重建jpeg算法
%该算法过程主要包括以下几个部分:1.读取图像;2.DCT变换;3.量化;4.Z形扫描;5.huffman编码;
% 6.huffman解码;7.反Z形扫描;8.反量化;9.反DCT变换;10.输出图像;11.计算压缩性能。
clear all;
%设定量化因子quality。
%quality 为量化因子,默认值为1。决定了截去的系数和压缩比,增加quality 的值,可增大压缩比,使压缩编码后的图像占用存储空间更小。
quality = input(请输入量化参数(数值型,默认为1)= );
if isempty(quality)
quality =1;
end
if quality = 0
error(请输入大于0的数字!);
end
%1.获取图像
tic
I=imread(coin128.tif);
%I=imread(cameraman128.tif);
%I=imread(cameraman256.tif);
%I=imread(finger256.bmp);
%I=imread(fingerprint256.bmp);
%I=imread(lena512.bmp);% 读入读一幅灰度图像
disp(读取图像时间:);
toc
%2.DCT 变换
tic
OriginalImage=double(I); % 图像数据类型转换
[am,an]=size(OriginalImage);% 得到图像的大小
ImageSub=OriginalImage-128;% 为实现DCT 变换, 每个像素值都减去128,即像素层次移动-128
fun1=@dct2;
TCM=blkproc(ImageSub,[8,8],fun1); % 使用dct2函数进行二维DCT变换,得到变换系数矩阵TCM
disp(DCT变换时间:);
toc
%3.量化
tic
Q=[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 101 113 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99]*quality;% 亮度量化表
TCM_Q=blkproc(TCM,[8,8],round( x./P1),Q);% 对图像进行量化,得到量化后的TCM,即TCM_Q。
disp(量化时间:);
toc
%4.Z形扫描
tic
TCM_Q_col=im2col(TCM_Q,[8,8],distinct); % 将每个8*8 数据块的量化系数排成列向量,得到64* 数据块总数大小的矩阵TCM_Q_col。
Num_col=size(TCM_Q_col,2);% 得到TCM_Q_col的列数,即数据块的个数Num_col。
order=[1 9 2 3 10 17 25 18 ...
11 4 5 12 19 26 33 41 ...
34 27 20 13 6 7 14 21 ...
28 35 42 49 57 50 43 36 ...
29 22 15 8 16 23 30 37 ...
44 51 58 59 52 45 38 31 ...
24 32 39 46 53 60 61 54 ...
47 40 48 55 62 63 56 64];
TCM_Q_colZ=TCM_Q_col(order,:);% 用z 型扫描方式对变换系数重新排列
disp(Z形扫描时间:);
toc
%5.编码
tic
%5.1直流编码,dc为直流系数表,dcdpcm为直流差值编码表
dc=zeros(Num_col,1);
dcdpcm=zeros(Num_col,1);
for j=1:Num_col
dc(j)=TCM_Q_colZ(1,j); % 将DC 系数排列到一个矢量中
end
dcdpcm(1)=dc(1);
for j=2:Num_col
dcdpcm(j)=dc(j)-dc(j-1); % 求DC 系数的DPCM 编码
end
dcdmax=max(dcdpcm); %最大直流
dcdmin=min(dcdpcm); %最小直流
dch=histc(dcdpcm,[dcdmin:dcdmax]); %统计各个值的直方
文档评论(0)