基于MATLAB的JPEG压缩编码.docx
《基于MATLAB的JPEG压缩编码.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的JPEG压缩编码.docx(11页珍藏版)》请在冰豆网上搜索。
基于MATLAB的JPEG压缩编码
信息科学与工程学院
课程设计报告
(2010—2011学年第一学期)
课程名称:
综合课程设计____
班级:
电子0702
学号:
07
姓名:
指导教师:
2010年11月
课程设计题目:
基于MATLAB的JPEG压缩编码
目的与任务:
1.从BMP格式图像的文件中(未压缩)读出图像,并能显示。
2.将BMP图像数据以JPEG标准压缩,保存为*.JPG文件。
3.要求能读出jpg文件,并显示在界面上
内容和要求:
把一张BMP格式的图象进行JEPG编码,压缩成以二进制形式保存的文件并显示出来。
设计内容
一、设计思路
本次设计中将JPEG图像编码过程分为四个部分,即:
颜色模式转换及采样,DCT变换,量化,编码。
首先对BMP图像进行读取,得到RGB三基色数据,由于人眼对图片上的亮度Y的变化远比色度UV的变化更敏感,因此要对RGB进行色彩转换,通过RGB到YUV的转换公式,将RGB转化为YcbCr色彩空间,得到亮度分量Y和色差分量UV。
此后,对得到的YUV数据进行DCT,通过此步骤可以降低图像数据的相关性。
然后,对变换后的数据进行量化,量化采用数据与标准量化表相除的方法。
由于量化表在高频的位置取了较大的值,数据的高频部分便得到了许多的“0”值。
之后,进行Zigzag扫描,将量化后的数据中更多的“0”值排列到数据的末端。
然后进行Huffman编码,最终形成压缩后的二进制数据码流,完成图像压缩编码。
二、
系统框图
根据设计思想画出系统流程图如下
简单说明:
要将一幅彩色图像进行压缩编码,首先将图像RGB分量转化为亮度分量和色差分量,然后将图像分成8×8的象素块,用正向二维DCT把每个块转变成64个DCT系数值,其中1个数值是直流(DC)系数,即8×8空域图像子块的平均值,其余的63个是交流(AC)系数,接下来对DCT系数进行Zig-Zag扫描和Huffman编码,实现了图像压缩。
三、程序模块框图
1.基于DCT变换
基于DCT变换的程序流程图
此部分可分为三个过程:
原始图像的载入,颜色模式转换及采样以及DCT变换
(1)图像文件的读取。
MATLAB中利用函数imread来实现图像文件的读取操作。
其语法格式为:
A=imread(filename,fmt)
[X,map]=imread(filename,fmt)
[…]=imread(filename)
Filename:
图像文件名;fmt:
图像文件格式。
(2)颜色模式转换及采样
(3)DCT变换
对整幅图像进行DCT变换,具体程序实现:
RGB=imread(autumn.BMP);%从内存中读取BMP格式的真彩色图像
I=rgb2gTay(RGB);%将真彩色图像RGB转换为灰度级亮度图像I
I=im2double(I);%将I变换为双精度格式
I1=idct2(I);%对I进行二维DCT,返回的I1包含DCT系数
12=idct2(I1);%求二维DCF逆变换,重构图像
subplot(2,2,1);imshow(I);
subplot(2,2,2);imshow(I2);
subplot(2,2,3);imsho'a,(I1);
subplot(2,2,4);imshow(abs(I—I2);
figrue,mesh(I1);title('变换谱三维彩色图')_
colorbar(vert)%在垂直轴旁增加一颜色等级条
2.量化
量化过程的程序流程图
图像文件的显示。
在MATLAB中,可以调用image函数来显示图像,其语法格式为:
Image(C)
image是用来显示附标图像,即显示的图像上有x、y坐标轴的显示,可以看到图像的像素大小。
量化过程是控制JPEG压缩比的关键。
这个步骤除掉了一些高频量,损失了很高细节。
但事实上人眼对高空间频率远没有低频敏感。
所以处理后的视觉损失很小。
另一个重要原因是所有的图片的点与点之间会有一个色彩过渡的过程。
大量的图象信息被包含在低空间频率中。
经过量化处理后,在高空间频率段,将出现大量连续的零。
3.“Z”字扫描
Zig-Zag程序流程图
矢量中有许多连续的0,可以使用RLE来压缩掉这些0。
假设有一组矢量(64个的后63个,已按z字形扫描得到)是57,45,0,0,0,0,23,0,-30,-16,0,0,1,0,0,0,0,0,0,0,……,0
经过RLC压缩后就是(0,57);(0,45);(4,23);(1,-30);(0,-16);(2,1);EOB,EOB是一个结束标记,表示后面都是0了,用(0,0)表示EOB.但是,如果这组数字不以0结束,那么就不需要EOB。
4.huffman编码
Huffman编码程序流程图
在初始化时候可以用以下程序:
data=double(image);
[w,h]=size(data);
hist=imhist(image);
hist=hist.*1.0./(w*h);
哈夫曼编码部分:
fori=1:
num
res{i}=blanks(260);
cd=blanks(260);
start=num;
c=i;
p=ht(c).pare;
while(p>0)
if(ht(p).lch==c)
cd(start)='0';
else
cd(start)='1';
endc=p;
p=ht(c).pare;
start=start-1;
end
四、设计总结
本设计主要介绍了JPEG的编码。
该程序的编码部分能把一张BMP格式的图象进行JEPG编码,压缩成以二进制形式保存的文件。
论文叙述的图像压缩编码算法,采用了JPEG的核心离散余弦变换算法。
DCT是正交变换,它可以将8*8图像的空间表达式转换为频率域,只需要用少量的数据点表示图像;DCT产生的系数很容易被量化,因此能获得好的块压缩;DCT算法的性能很好,它有快速算法,因此它在软件中容易实现;而且DCT算法是对称的,所以利用逆DCT算法可以用来解压缩图像。
在这次课程设计的整个过程中,收获主要有以下几点:
1)开始编程前,一定要了解系统意图,做好规划。
2)很好地实现了理论知识与实践的结合。
把以往所学的专业知识和编程思想应用到了实际设计当中,比较顺利地解决了综合设计中遇到的一些问题。
同时对所学的理论知识也有了更深刻、更系统的了解。
同时也增强了运用所学知识解决实际问题的能力。
3)通过这次课程设计,很好的领会了程序设计的思想。
4)这次课程设计中,虚心向老师和其它同学请教,与其团结协作,很好地培养了我的团队精神和协作能力。
通过学习和交流,看到了别人的优点,也发现了自己的不足,以后要进一步完善自己,总的说来,通过这次课程设计锻炼了自己查阅资料、阅读和使用软件的能力,对各种软件的应用和操作能力,以及编程能力。
确实学到不少知识,得到很好的锻炼。
指导教师意见
内容及要求
评定等级
优
良
中
及格
不及格
独立完成全部工作量
课程设计报告质量
课程设计内容
创新性
出勤率
综合得分
教师评语:
指导教师:
年月日
《综合课程设计》教学大纲
教学环节名称
综合课程设计
英文名称
CourseDesign
课程编码
周数
3周
学分
3学分
理
论
基
础
电子技术基础、电子线路、微机系统原理与接口技术、单片机原理等。
教
学
目
的
对大学期间所学的电子专业基础知识和专业知识进行一次综合运用,为下一步毕业实习和毕业设计做好准备。
学生通过本课程设计可以进一步理解电子技术、电路理论、微机等方面的相关知识,并可综合运用这些知识解决一定的实际问题,使学生在所学知识的综合运用能力上以及分析问题、解决问题能力上得到一定的提高。
知
识
、
素
质
和
能
力
要
求
基本素质、能力要求:
掌握专业基础理论以及系统设计的能力。
综合素质、能力要求:
要求具备综合运用已有知识,设计完整实用电路系统的能力。
创新素质、能力要求
根据设计要求,创新设计出具有特色的系统的能力。
教
学
内
容
、
方
法
及
课
时
安
排
教学内容
方法及课时安排
课程设计动员,提出要求,布置任务,学生查阅资料;选择总体方案,设计单元电路;选择元器件,计算参数;考核;审图,画出总体电路图,完成设计报告。
教师指导,学生完成设计任务。
第一周:
动员,提出要求,布置任务。
查阅资料,选择总体方案。
第二周:
设计单元电路,选择元器件,计算参数。
第三周:
审图,画出总体电路图,考核,完成实习报告。
优
良
中
及格
不及格
考
核
评
分
标
准
整体设计思路正确;单元电路设计正确;原理说明正确;参考文献完备;设计报告清晰。
整体设计思路正确;单元电路设计基本正确;原理说明正确;参考文献较完备;设计报告合格。
整体电路设计完整;原理说明基本正确;参考文献较完备;设计报告合格。
整体电路设计尚存问题;原理说明不够清晰;列出参考文献;设计报告合格。
电路设计不完整;原理说明不清楚;参考文献不具备;设计报告不合格。