资源描述
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2012年秋季学期
图像处理 综合训练
题 目: 图像压缩编码
专业班级:
姓 名:
学 号:
指导教师:
成 绩:
22
目 录
摘 要 1
一、前言 2
二、算法分析与描述 3
三、详细设计过程 5
四、调试过程中出现的问题及相应解决办法 7
五、程序运行截图及其说明 8
六、简单操作手册 11
设计总结 14
参考资料 15
致谢 16
附录 17
摘 要
本实验是在根据图像压缩基本原理的基础上,独立设计图像的有损压缩编码算法,并在MATLAB编程环境中编程实现。 其目的是理解有损压缩的概念,特别是通过K-L变换或DCT变换,掌握压缩编码的基本原理、算法,并通过编程给予实现,对原始图像数据和解压后的图像数据进行失真估计,了解压缩性能及其重建效果的影响、作用,给出适当的理论分析。
关键词:
Matlab;图像压缩;解码;行程编码。
一、 前言
人类正在实践的21世纪是一个信息时代。今天的社会,信息技术已经全面服务 于社会生产和生活的方方面面,人们所做工作的相当一部分就是对信息的处理和传输,其中图像是人类获取信息、表达信息和传递信息的重要手段,是人类感知和认识世界的基础。有关研究表明,日常生活中人们所接受的各种信息中图像信息占总信息量的80%左右,从这一角度看,“百闻不如一见”正是图像处理重要性的形象表达和经验总结。因此,数字图像处理技术无论是对于21世纪的科学理论研究,还是工程应用都将具有重要的影响。国内外许多有识之士指出,从某种意义上讲,数字图像处理是实现智能计算机、智能机器人或多媒体信系统的基础,未来计算机及智能机器人的发展与进步将在一定程度上依赖于机器视觉信息处理理论和技术的突破。虽然相对于经典学科,数字图像处理还很年轻,但日趋成熟的数字图像处理技术已经在很多方面得到深入而广泛的应用,一定程度上改变了人类的生活,给人们的日常生活、学习、工作带来极大的方便。例如,Internet上的视频广播、现代卫星或遥感照片的合成和处理、工业产品的自动检测、各种医学影像和图像的处理、远程医疗诊断及手术以及视频会议、视频电话等都采用了图像处理技术实现实时信息交互。 如果说1964年美国喷气推进实验室首次处理了由太空船“徘徊者七号”发回的月球照片,拉开了数字图像处理技术进入普遍应用的序幕,那么CT的发明、应用及诺贝尔奖的获得,则使得数字图像处理技术大放异彩,并迅速进入了广泛应用阶段。目前,数字图像处理技术已在工程科学、计算机科学、信息科学、遥感、遥测、采矿、地质勘探、工业探伤、自动控制、机器人、军事、公安、生物学、医学、视频、多媒体、统计学甚至社会科学等领域得到了广泛应用,并显示出了更加诱人的前景,成为了包括计算机科学与技术、信息科学、航空航天和生物医学工程等在内的多学科的研究重点和热点。这些学科的研究成果又促使了图像处理技术向更高水平发展,数字图像处理技术正是在这种应用的迫切需要和自身的不断发展之中逐步完善的新兴学科。未来,图像处理技术的发展及应用与经济建设联系之紧密、影响之深远是不可估量的。
二、 算法分析与描述
编码是方法建立在图像统计特性的基础上的。例如,在传真通信中的文件大多是二值图像,即每个像素的灰度值只有0和1两种取值。将一行中颜色值相同的相邻象素用一个计数值和该颜色值来代替。例如aaabccccccddeee可以表示为3a1b6c2d3e,,即有3个a,1个b,6个c,2个d,3个e。如果一幅图象是由很多块颜色相同的大面积区域组成,那么采用行程编码的压缩效率是惊人的。然而,该算法也导致了一个致命弱点,如果图象中每两个相邻点的颜色都不同,用这种算法不但不能压缩,反而数据量增加一倍。因此对有大面积色块的图像用行程编码效果比较好。
行程编码的可行性讨论:行程编码的压缩方法对于自然图片来说是不太可行的,因为自然图片像素点错综复杂,同色像素连续性差,如果硬要用行程编码方法来编码就适得其反,图像体积不但没减少,反而加倍。鉴于计算机桌面图,图像的色块大,同色像素点连续较多,所以行程编码对于计算机桌面图像来说是一种较好的编码方法。
2.1 图像的调入:
function yc
%行程编码算法
%例如aaabccccccddeee才可以表示为3a1b6c2d3e
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%读图
I=imread('Lena.bmp');
[m n l]=size(I);
fid=fopen('yc.txt','w');%yc.txt是行程编码算法的灰度级及其相应的编码表
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2.2 行程编码算法:
sum=0;
for k=1:l
for i=1:m
num=0;
J=[];
value=I(i,1,k);
for j=2:n
if I(i,j,k)==value
num=num+1;%统计相邻像素灰度级相等的个数
if j==n
J=[J,num,value];
end
else J=[J,num,value];%J的形式是先是灰度的个数及该灰度的值
value=I(i,j,k);
num=1;
end
end
col(i,k)=size(J,2);%记录Y中每行行程行程编码数
sum=sum+col(i,k);
Y(i,1:col(i,k),k)=J;%将I中每一行的行程编码J存入Y的相应行中
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输出相关数据
[m1,n1,l1]=size(Y);
disp('ÔͼÏñ´óС:')
whos('I');
disp('ѹËõͼÏñ´óС:')
whos('Y');
disp('ͼÏñµÄѹËõ±È:');
disp(m*n*l/sum);
2.3 图像显示和保存:
subplot(1,2,1),imshow(I),title('原图像')
subplot(1,2,2),imshow(Y),title('行程编码解码后的图像')
save('Y')%存储,以便解码用
save('col')
fclose(fid);
三、详细设计过程
3.1算法流程图
读入图像
将行程编码写入 yc.txt中
行程算法
计算压缩比
3.2 由I=imread('Lena.bmp')把图像调入等待处理,再由行程编码算法进行计算和压缩。实现具体的压缩功能。最后输出原图像和压缩后的像和输出压缩比例。
3.2行程编码算法
sum=0;
for k=1:l
for i=1:m
num=0;
J=[];
value=I(i,1,k);
for j=2:n
if I(i,j,k)==value
num=num+1;%统计相邻像素灰度级相等的个数
if j==n
J=[J,num,value];
end
else J=[J,num,value];%J的形式是先是灰度的个数及该灰度的值
value=I(i,j,k);
num=1;
end
end
col(i,k)=size(J,2);%记录Y中每行行程行程编码数
sum=sum+col(i,k);
Y(i,1:col(i,k),k)=J;%将I中每一行的行程编码J存入Y的相应行中
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输出相关数据
[m1,n1,l1]=size(Y);
disp('原图像大小:')
whos('I');
disp('压缩图像大小:')
whos('Y');
disp('图像的压缩比:');
disp(m*n*l/sum);
四、调试过程中出现的问题及相应解决办法
首先,我们的代码不完全是自己写出来的,所以刚开始调式时出现很多错误。比如;代码中的函数matlab软件不认识,不能实现函数的功能。还有函数变量定义不符合,但更多的是调入图像显示不出结果。经过研究和修改,功夫不负有心人,大部分错误都改正了。可是很纠结的是只输出图像压缩的数据和压缩比例,没有输出原图像和压缩后的图像。最后经过同学的帮忙和自己的努力,发现代码缺少输出图像语句。最终顺利完成了本次的课程设计。
五、程序运行截图及其说明
图5.1 图像的大小和压缩比例
图5.2 图像原图和压缩后图像
图5.3行程编码表
六、简单操作手册
1. 首先我们完成代码部分。经过查找资料和网上查询,完整的把代码的功能能在matlab软件上是先出来。
2. 文档部分比较繁琐,需要结合代码的功能一步一步经过说明实现图像的行程压缩编码。在经过matlab软件运行输出图像,把图像截图放在文档部分加以说明。
3. 界面制作;
图6.1画出两个axes1、axes2图像显示框
图6.2 把对应的程序添加到界面
图6.3 显示出原图像
设计总结
涉及到图像压缩的算法很多,我所用的是行程编码算法。这种算法是无损压缩,利用统计的方法,最终建立了数据与编码的关系,即利用了编码冗余实现压缩。在这两周的图像处理的综合训练中,通过对图象处理的设计过程,我加深了对图像压缩的理解,对DCT变换和行程编码和哈夫曼有所掌握,对课本中所学的各种图像知识的进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。
在这次的综合训练中我认识到了自己的不足。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。
通过对此次图象处理综合训练的实际操作及分析,加深对图像的理解及增强实际动手能力,锻炼了我们分析与编写软件代码的能力及团结协作的能力。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各科知识融会,组织,来配合学习,为以后的发展打下坚实的基础。
参考文献
[1] 张志涌,杨祖樱. MATLAB 教程. 北京:北京航空航天大学出版社,2006,9-201.
[2] 刘卫国. MATLAB 程序设计教程[M]. 北京:中国水利水电出版社,2005, 101-150
[3] 章毓晋.图像工程(上册)——图像分析.第二版.北京:清华大学出版社,2005,7-30
[4] 章毓晋.图像工程(中册)——图像分析.第二版.北京:清华大学出版社,2005,30-87
[5] 黄爱民,安向京,骆力.数字图像处理与分析基础. 北京:中国水利水电出版社,2005,7-50
致谢
本课程设计的选题、材料来源、程序设计和制作和内容的安排、总体篇章的写作等都得到了指导老师徐志刚的真诚指导和关注,以至于我的课程设计能够按时顺利的完成。因此,特别感谢指导老师徐志刚,他以热心和耐心成全了我的课程设计,为我制作的全过程提出了许多宝贵的意见,特别是在编程方面给我很大程度的指导,辅助我尝试了各种函数的应用,使我掌握了许多宝贵的知识。所以真的很感谢徐志刚老师的指导!另外,我也很感谢班里的很多同学给我提出的意见和想法,对我的课程设计提供了很多的帮助!最后,我希望同学们能获得更多的收获!
附录
function yc
%%行程编码算法
%例如aaabccccccddeee才可以表示为3a1b6c2d3e
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%读图
I=imread('Lena.bmp');
[m n l]=size(I);
fid=fopen('yc.txt','w');
%yc.txt是行程编码算法的灰度级及其相应的编码表
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%行程编码算法
sum=0;
for k=1:l
for i=1:m
num=0;
J=[];
value=I(i,1,k);
for j=2:n
if I(i,j,k)==value
num=num+1;
%统计相邻像素灰度级相等的个数
if j==n
J=[J,num,value];
end
else J=[J,num,value];
%J的形式是先是灰度的个数及该灰度的值
value=I(i,j,k);
num=1;
end
end
col(i,k)=size(J,2);
%记录Y中每行行程行程编码数
sum=sum+col(i,k);
Y(i,1:col(i,k),k)=J;
%将I中每一行的行程编码J存入Y的相应行中
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输出相关数据
[m1,n1,l1]=size(Y);
disp('ÔͼÏñ´óС:')
whos('I');
disp('ѹËõͼÏñ´óС:')
whos('Y');
disp('ͼÏñµÄѹËõ±È:');
disp(m*n*l/sum);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%将编码写入yc.txt中
for k=1:l1
for i=1:m1
for j=1:col(i,k)
fprintf(fid,'%d',Y(i,j,k));
fwrite(fid,' ');
end
end
fwrite(fid,' ');
end
subplot(1,2,1),imshow(I),title('原图像)%¶Á³öÔͼ
subplot(1,2,2),imshow(Y),title('行程编码解码后的图像')
save('Y')%存储,以便解码用
save('col')
fclose(fid);function varargout = yc(varargin)
% YC MATLAB code for yc.fig
% YC, by itself, creates a new YC or raises the existing
% singleton*.
%
% H = YC returns the handle to a new YC or the handle to
% the existing singleton*.
%
% YC('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in YC.M with the given input arguments.
%
% YC('Property','Value',...) creates a new YC or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before yc_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to yc_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help yc
% Last Modified by GUIDE v2.5 11-Jan-2013 11:24:40
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @yc_OpeningFcn, ...
'gui_OutputFcn', @yc_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before yc is made visible.
function yc_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to yc (see VARARGIN)
% Choose default command line output for yc
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes yc wait for user response (see UIRESUME)
% uiwait(handles.figure_yc);
% --- Outputs from this function are returned to the command line.
function varargout = yc_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --------------------------------------------------------------------
function m_file_Callback(hObject, eventdata, handles)
% hObject handle to m_file (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function m_file_open_Callback(hObject, eventdata, handles)
% hObject handle to m_file_open (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename, pathname] = uigetfile( ...
{'*.bmp;*.jpg;*.png;*.jpeg', 'Image Files (*.bmp, *.jpg, *.png, *.jpeg)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick an image');
axes(handles.axes1);%用axes命令设定当前操作的坐标轴是axes_src
fpath=[pathname filename];%将文件名和目录名组合成一个完整的路径
img_src=imread(fpath);
imshow(img_src);%用imread读入图片,并用imshow在axes_src上显示
setappdata(handles.figure_yc,'img_src',img_src);
title('原图');
% --------------------------------------------------------------------
function m_file_save_Callback(hObject, eventdata, handles)
% hObject handle to m_file_save (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename, pathname] = uigetfile( ...
{'*.bmp;*.jpg;*.png;*.jpeg', 'Image Files (*.bmp, *.jpg, *.png, *.jpeg)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick an image');
axes1(handles.axes1);%用axes命令设定当前操作的坐标轴是axes_src
fpath=[pathname filename];%将文件名和目录名组合成一个完整的路径
img_src=imwrite(fpath);imshow(img_src);
img_src=getappdata(handles.figure_yc,'img_src');
% --------------------------------------------------------------------
function m_file_exit_Callback(hObject, eventdata, handles)
% hObject handle to m_file_exit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close(handles.figure_yc);
% --------------------------------------------------------------------
function tuxiangyasuo_Callback(hObject, eventdata, handles)
% hObject handle to tuxiangyasuo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function hangchengyasuo_Callback(hObject, eventdata, handles,mymainfunction)
% hObject handle to hangchengyasuo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究
2. 基于单片机的嵌入式Web服务器的研究
3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究
4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制
5. 基于MCS-51系列单片机的通用控制模块的研究
6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器
7. 单片机控制的二级倒立摆系统的研究
8. 基于增强型51系列单片机的TCP/IP协议栈的实现
9. 基于单片机的蓄电池自动监测系统
10. 基于32位嵌入式单片机系统的图像采集与处理技术的研究
11. 基于单片机的作物营养诊断专家系统的研究
12. 基于单片机的交流伺服电机运动控制系统研究与开发
13. 基于单片机的泵管内壁硬度测试仪的研制
14. 基于单片机的自动找平控制系统研究
15. 基于C8051F040单片机的嵌入式系统开发
16. 基于单片机的液压动力系统状态监测仪开发
17. 模糊Smith智能控制方法的研究及其单片机实现
18. 一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制
19. 基于双单片机冲床数控系统的研究
20. 基于CYGNAL单片机的在线间歇式浊度仪的研制
21. 基于单片机的喷油泵试验台控制器的研制
22. 基于单片机的软起动器的研究和设计
23. 基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究
24. 基于单片机的机电产品控制系统开发
25. 基于PIC单片机的智能手机充电器
26. 基于单片机的实时内核设计及其应用研究
27. 基于单片机的远程抄表系统的设计与研究
28. 基于单片机的烟气二氧化硫浓度检测仪的研制
29. 基于微型光谱仪的单片机系统
30. 单片机系统软件构件开发的技术研究
31. 基于单片机的液体点滴速度自动检测仪的研制
32. 基于单片机系统的多功能温度测量仪的研制
33. 基于PIC单片机的电能采集终端的设计和应用
34. 基于单片机的光纤光栅解调仪的研制
35. 气压式线性摩擦焊机单片机控制系统的研制
36. 基于单片机的数字磁通门传感器
37. 基于单片机的旋转变压器-数字转换器的研究
38. 基于单片机的光纤Bragg光栅解调系统的研究
39. 单片机控制的便携式多功能乳腺治疗仪的研制
40. 基于C8051F020单片机的多生理信号检测仪
41. 基于单片机的电机运动控制系统设计
42. Pico专用单片机核的可测性设计研究
43. 基于MCS-51单片机的热量计
44. 基于双单片机的智能遥测微型气象站
45. MCS-51单片机构建机器人的实践研究
46. 基于单片机的轮轨力检测
47. 基于单片机的GPS定位仪的研究与实现
48. 基于单片机的电液伺服控制系统
49. 用于单片机系统的MMC卡文件系统研制
50. 基于单片机的时控和计数系统性能优化的研究
51. 基于单片机和CPLD的粗光栅位移测量系统研究
52. 单片机控制的后备式方波UPS
53. 提升高职学生单片机应用能力的探究
54. 基于单片机控制的自动低频减载装置研究
55. 基于单片机控制的水下焊接电源的研究
56. 基于单片机的多通道数据采集系统
57. 基于uPSD3234单片机的氚表面污染测量仪的研制
58. 基于单片机的红外测油仪的研究
59. 96系列单片机仿真器研究与设计
60. 基于单片机的单晶金刚石刀具刃磨设备的数控改造
61. 基于单片机的温度智能控制系统的设计与实现
62. 基于MSP430单片机的电梯门机控制器的研制
63. 基于单片机的气体测漏仪的研究
64. 基于三菱M16C/6N系列单片机的CAN/USB协议转换器
65. 基于单片机和DSP的变压器油色谱在线监测技术研究
66. 基于单片机的膛壁温度报警系统设计
67. 基于AVR单片机的低压无功补偿控制器的设计
68. 基于单片机船舶电力推进电机监测系统
69. 基于单片机网络的振动信号的采集系统
70. 基于单片机的大容量数据存储技术的应用研究
71. 基于单
展开阅读全文