- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《算法设计与分析》课程报告
姓名:文亮
学号:201322220254
学院:信息与软件工程学院
老师:屈老师;王老师
算法实现与应用——《算法设计与分析》课程报告
基本要求
题目: 图像压缩
问题描述
掌握基于DCT变换的图像压缩的基本原理及其实现步骤;对同一幅原
始图像进行压缩,进一步掌握DCT和图像压缩。
算法基本思想
图像数据压缩的目的是在满足一定图像质量的条件下,用尽可能少的比特数来表示原始图像,以提高图像传输的效率和减少图像存储的容量,在信息论中称为信源编码。图像压缩是通过删除图像数据中冗余的或者不必要的部分来减小图像数据量的技术,压缩过程就是编码过程,解压缩过程就是解码过程。压缩技术分为无损压缩和有损压缩两大类,前者在解码时可以精确地恢复原图像,没有任何损失;后者在解码时只能近似原图像,不能无失真地恢复原图像。
假设有一个无记忆的信源,它产生的消息为,其出现的概率是已知的,记为。则其信息量定义为:
由此可见一个消息出现的可能性越小,其信息量就越多,其出现对信息的贡献量越大,反之亦然。
信源的平均信息量称为“熵”(entropy),可以表示为:
对上式取以2为底的对数时,单位为比特(bits):
根据香农(Shannon)无噪声编码定理,对于熵为H的信号源,对其进行无失真编码所可能达到的最低比特数为,这里为一任意小的正数,因此可能达到的
最大压缩比为:
?????? 其中B是原始图像的平均比特率。 在图像压缩中,压缩比是一个重要的衡量指标。可以定义压缩比为:
其中B:原始数据的平均压缩比;H:压缩数据的平均比特率
图像压缩的基本模型 图像编码包括两个阶段,前一个阶段就是利用预测模型或正交模型对图像信号进行变换;后一个阶段是利用已变换信号的统计特性,对其分配适当的代码来进行编码传输。 编码器与解码器的结构分别如图(a)、(b)。
图(a))function b = blkproc(varargin)
[a, block, border, fun, params, padval] = parse_inputs(varargin{:}); [ma,na] = size(a);
mpad = rem(ma,block(1)); if mpad0, mpad = block(1)-mpad; end
npad = rem(na,block(2)); if npad0, npad = block(2)-npad; end
if (isa(a, uint8))
if (padval == 1)
aa = repmat(uint8(1), ma+mpad+2*border(1),na+npad+2*border(2));
else
aa = repmat(uint8(0), ma+mpad+2*border(1),na+npad+2*border(2));
end
elseif isa(a, uint16)
if (padval == 1)
aa = repmat(uint16(1), ma+mpad+2*border(1),na+npad+2*border(2));
else
aa = repmat(uint16(0), ma+mpad+2*border(1),na+npad+2*border(2));
end
else
if (padval == 1)
aa = ones(ma+mpad+2*border(1),na+npad+2*border(2));
else
aa = zeros(ma+mpad+2*border(1),na+npad+2*border(2));
end
end
aa(border(1)+(1:ma),border(2)+(1:na)) = a;
m = block(1) + 2*border(1);
n = block(2) + 2*border(2);
mblocks = (ma+mpad)/block(1);
nblocks = (na+npad)/block(2);
arows = 1:m; acols = 1:n;
x = aa(arows, acols);
firstBlock = feval(fun,x,params{:});
if (isempty(firstBlock))
style = e;
b = [];
elseif (all(size(firstBlock) == size(x)))
styl
文档评论(0)