资源描述
摘要
Matlab是当今最优秀的科技应用软件之一,它一强大的科学计算与可视化功能,简单易用,开放式可扩展环境,特别是所附带的30多种面向不同领域工具箱支持,使得它在许多科学领域中成为计算机辅助设计与分析,算法研究和应用开发的基本工具盒首选平台在图像处理中,Matlab也得到了广泛的应用,例如图像变换,设计FIR滤波器,图像增强,四叉树分解,边缘检测,小波分析等等。不同的颜色空间在描述图像的颜色时侧重点不同。如RGB(红、绿、蓝三原色)颜色空间适用于彩色监视器和彩色摄象机,HSI(色调、饱和度、亮度)更符合人描述和解释颜色的方式(或称为HSV,色调、饱和度、亮度),CMY(青、深红、黄)、CMYK(青、深红、黄、黑)主要针对彩色打印机、复印机等,YIQ(亮度、色差、色差)是用于NTSC规定的电视系统格式,YUV(亮度、色差、色差)是用于PAL规定的电视系统格式,YCbCr(亮度单一要素、蓝色与参考值的差值、红色与参考值的差值)在数字影像中广泛应用。
彩色图像的处理有时需要将图像数据在不同的颜色空间中表示,因此,图像的颜色空间之间的转换成为一项有意义的工作。其中RGB在颜色空间转换中其关键作用,是各个空间转换的桥梁。Matlab中的颜色空间转换只涉及到了RGB、HSV、YCbCr、YIQ等,没有包含lαβ和其它颜色空间的转换。
关键字:Matlab,图像处理,RGB
武汉理工大学本科生能力拓展训练任务书
学生姓名 专业班级:
指导教师 : 工作单位 :自动化学院
题目: 图像颜色RGB调整的MATLAB实现
初始条件: PC机,MATLAB
要求完成的主要任务:
对24bits彩色图像的颜色,使用RGB颜色模型, 来对其进处理。
设计图形界面(GUI)程序,使用三个滑动条实现R,G,B各分量上下可调。调整范围在0到1之间,即:滑动条被拖动时,产生一个0到1之间的系数,乘以该分量的原始值,得到调整后的分量值。显示原始图像,和调整后的图像。同时显示原始的R,G,B三分量的灰度图像。
任务安排:
(1) 设计任务及要求分析
(2) 方案比较及论证说明
(3) 系统原理阐述,写入设计方案及结构图
(4) 软件设计说明:软件思想,流程图,源程序及注释
(5) 调试记录及结果分析
(6) 总结
(7) 参考资料5篇以上
(8) 附录:程序清单
时间安排:
6月25日 安排设计任务
6月28日 收集资料,方案选择
7月1日 程序设计
7月5日-8日 程序调试
7月8日- 撰写报告
9月7日 交设计报告
指导教师签名: 年 月 日
系主任签(或责任教师)签名: 年 月 日
目录
摘要
1.MATLAB简介 1
2.图像处理简介 2
2.1.数字图像处理发展概述 2
2.2.图像处理技术 2
2.3.图像处理的内容 3
3. RGB模型 4
4.GUI界面设定 5
5.仿真处理 9
总结 11
参考文献 12
附录 13
1.MATLAB简介
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix和laboratory两个词的组合,意为矩阵工厂(矩阵实验室
图1-1 MATLAB工作界面
)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
2.图像处理简介
数字图像处理,通俗地讲是指应用计算机以及数字设备对图像进行加工处理的技术。
2.1.数字图像处理发展概述
20世纪20年代,图像处理技术首次应用于改善伦敦到纽约之间的海底电缆传送图片的质量。
1964年,美国喷气推动实验室用计算机成功地对4000多张月球照片进行处理。
70年代中期,随着离散数学理论的创立和完善,数字图像处理技术得到了迅猛的发展,理论和方法不断完善。
90年代,随着个人计算机进入家庭,硬件价格不断下降,数字世界逐渐进入人们的生活。
2.2.图像处理技术
图像处理技术包括:
1.图像信息的获取:为了在计算机上进行图像处理,必须把作为处理对象的模拟图像转换成数字图像信息。图像信息的获取,一般包括图像的摄取、转换及数字化等几个步骤。该部分主要由处理系统硬件实现。
2.图像信息的存储于交换:由于数字图像信息量大,且在处理过程中必须对数据进行存储和交换,为了解决大数据量及交换与传输时间的矛盾,通常除采用大容量机内存存储器进行并行传送,直接存储访问外,还必须采用外部磁盘、光盘及磁带存储方式,从而达到提高处理的目的。该部分组要功能也由硬件完成。
3.数字图像处理:数字图像处理,即把在空间上离散的,在幅度上量化分层的数字图像,在经过一些特定数理模式的加工处理,以达到有利于人眼视觉或某种接收系统所需要的图像过程。
4.数字图像通讯:80年代以来,由于计算机技术和超大规模集成电路技术的巨大发展,推动了通讯技术(包括语言、数据、图像)的飞速发展。因为图像通讯具有形象直观、可靠、高效率等一系列优点,尤其是数字图像通讯比模拟图像通讯更具抗干扰性,便于压缩编码处理和易于加密,因此在图像通讯工程中数字处理技术获得广泛应用。
5.图像的输出和显示:数字图像处理的最终目的是为了提供便于人眼或接收系统解释和社别图像,因此图像的输出和显示很重要。一般图像输出的方式可分为硬拷贝,诸如照相、打印、扫描鼓等,还有所谓的软拷贝,诸如CRT监视器及各种新型的平板监视器等。
3.图像处理的内容
图像处理的内容包括:
1.图像数字化:图像数字化即图像采样和量化,是指把连续的图像信号变为离散的数字信号,以适应计算机的处理。
2.图像编码压缩:把数字化的图像数据按一定规则进行排列或运算过程,称为图像编码。利用图像本身的内在特性,通过某种特殊的编码方式,达到减少原图像数据时空占用量的处理叫做图像压缩编码。
3.图像变换:一般指利用正交变换的性质和特点,将图像转换到变换域中进行处理,并且大部分变换都有快速算法。
4.图像增强:图像增强的目的是突出图像中所感兴趣的部分,如强化图像的高频分量,可使图像中物体轮廓清晰,细节明显。
5.图像复原:图像复原是尽可能恢复图像的本来面貌,是对图像整体而言,而且在复原处理时,往往必须追求降质原因,以便“对症下药”,而增强往往是局部。
6.图像分割:将图像中包含的物体,按其灰度或几何特性分割,并进行处理分析,从中提取有效分量、数据等有用信息。这是进一步进行图像处理如模式识别、机器视觉等技术的基础。
7.图像分类:简单地说就是在图像分割的基础上,进行我体的判决分类。
8.图像重建:它是对一些三维物体,应用x射线、超声波等物理方法,取得物体内部结构数据,再将这些数据进行运算处理而构成物体内部某些部位的图像。目前图像重建最成功的例子是CT技术(计算机断层扫描成像技术)、彩色超声波等。
19
3. RGB模型
RGB模型也称为加色法混色模型。它是以RGB三色光互相叠加来实现混色的方法,因而适合于显示器等发光体的显示。其混色规律是:以等量的红、绿、蓝基色光混合时。 如果是三原色光中的两种色光(注意,不是颜料)进行等比例混合的话,那么,得到的结果是品红、黄、青三色光。
红+绿=黄
红+蓝=品红
绿+蓝=青
红+绿+蓝=白
三种基色光全无=黑
这是色光混合,称为加色混合法。
加色法的混色规律可用图表示。
其配色方程描述:
F(物体颜色)=R(红色的百分比)+G(绿色的百分比)+B(蓝色的百分比)
如果就是这三种颜料相混的话,那么,大体上,红+绿=暗灰红;红+蓝=紫色;绿+蓝=青绿色。
这是色彩混合,称为减色混合法。
切记,色光混合跟颜料混合是不同性质的。
4.GUI界面设定
1.在matlab命令窗口中运行guide命令,来打开GUIDE界面,如下:
图4-1 GUIDE界面
2.然后,选择空模板(Blang GUI),点击OK,即可打开GUIDE 的设计界面,如下:
图4-2 GUIDE设计界面
3.点击工具栏上的菜单编辑器(Menu Editor),打开菜单编辑器,如下:
图4-3 菜单编辑器
4. 在Menu Bar 中新建一个菜单项,名字为“文件”,其他设置请看下图:
图4-4 菜单属性设置
5.在“文件”菜单下添加菜单项:“打开”,“保存”,“退出”。见下图:
图4-5 完成后的菜单编辑器
6.保存我的界面为pjimage.fig. 保存完毕之后,会自动打开pjimage.m 文件,而我们所有的程序都是要写在这个M 文件里面的。在界面上,单击鼠标右键选择“Property Inspector”,即可打开属性窗口。设置当前Figure 窗口的Tag 属性为:figure_pjimage,窗口的标题(Name 属性)为:图像处理图像处理实例,如下:
图4-6 GUI界面属性设置
7.然后点击GUI界面坐侧的Axes按钮在界面设置出两个坐标空间,并用上面的方法将两个坐标空间的Tag属性改为“axes_src”和 “axes_dst”;然后点击GUI界面坐厕的push Button按钮,在界面上设置两个按钮1,并用上面的方法将两个按钮的Tag属性分别设置为 “pushbutton_cf” 和 “pushbutton_hz”,String属性分别设置为 “DCT button”和 “HZ Button”,BabckgroundClor 属性分别设置为黄色和红色。设置完后进行保存,得到界面如下图上所示:
图4-7 设置完成的GUI界面
5.仿真处理
设计好图形界面(GUI)程序,使用三个滑动条实现R,G,B各分量上下可调,即是如下图所示。
图5-1原始图像和调节后的图像
改变其红绿蓝系数,得到如下图
图5-2 改变滑动条后的调整图像
至此,该过程结束,达到题目的要求,使用三个滑动条实现R,G,B各分量上下可调。调整范围在0到1之间,显示原始图像,和调整后的图像。同时显示原始的R,G,B三分量的灰度图像。图像颜色RGB调整的MATLAB实现完成。
总结
本次的基础强化训练结束后,我感触颇深。想到万事开头难,的确是这样的。刚开始接触MATLAB时,感觉什么都不懂,因为这个软件的复杂性远远超出了其他的软件,全英文不说,还比较繁琐。其实本次课程设计的难点就是在程序编程上面和软件的使用上。如果以前没用过这个软件,我们会很难下手,但是通过慢慢的熟悉这个软件后,发现其实主要的难点就是在程序上了。如果没有程序还是很难做出来的。因为本次课设所涉及到的知识相Matlab的GUI界面以及所涉及到的图像处理知识其实都只是皮毛。
在做起来后,发现网上查阅资料是很困难的,因为网上资料不全,所以只好查阅相关资料,查阅相关MATLAB书籍,在有了相关的知识储备后,开始着手设计,一次次是失败中找原因,有时候找不出来真的是很急,这是候我很感谢同学的无私帮助,关于好多问题,我请教的他们,没有同学的帮忙这次基础强化训练真的是很难做出来的。当最后程序写完,把仿真做完时,我终于长长的舒了口气。
本次基础强化训练大大的加强了我对MATLAB软件的熟悉程度和处理问题能力,同时也锻炼了我查阅相关资料的能力和自我思考能力。
参考文献
[1].李显宏 《MATLAB7.x界面设计与编译技巧》 电子工业出版社 2006
[2]. 飞思科技产品研发中心 《MATLAB6.5辅助图像处理》 电子工业出版社 2003
[3]. 罗军辉 冯平 《MATLAB7.0在图像处理中的应用》 机械工业出版社 2007
[4]. 秦襄培 郑贤中 《MATLAB图像处理宝典》 电子工业出版社 2011
[5]. 贺兴华 周媛媛 《MATLAB7.x图像处理》 人民邮电出版社 2006
附录
程序清单:
function varargout = pjimage(varargin)
% PJIMAGE MATLAB code for pjimage.fig
% PJIMAGE, by itself, creates a new PJIMAGE or raises the existing
% singleton*.
%
% H = PJIMAGE returns the handle to a new PJIMAGE or the handle to
% the existing singleton*.
%
% PJIMAGE('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in PJIMAGE.M with the given input arguments.
%
% PJIMAGE('Property','Value',...) creates a new PJIMAGE or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before pjimage_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to pjimage_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 pjimage
% Last Modified by GUIDE v2.5 06-Sep-2013 16:11:48
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @pjimage_OpeningFcn, ...
'gui_OutputFcn', @pjimage_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 pjimage is made visible.
function pjimage_OpeningFcn(hObject, eventdata, handles, varargin)
setappdata(handles.figure_pjimage,'img_src',0);
% 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 pjimage (see VARARGIN)
% Choose default command line output for pjimage
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes pjimage wait for user response (see UIRESUME)
% uiwait(handles.figure_pjimage);
% --- Outputs from this function are returned to the command line.
function varargout = pjimage_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;
% --------------------------------------------------------------------
% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
global R
global G
global B
global val1
global val2
global val3
val1=get(hObject,'Value');
set(handles.text1,'String',num2str(val1));
axes(handles.axes3);
imshow(val1*R);
axes(handles.axes4);
imshow(val2*G);
axes(handles.axes5);
imshow(val3*B);
axes(handles.axes2);
I=cat(3,val1*R,val2*G,val3*B);
imshow(I);
% --- Executes during object creation, after setting all properties.
function slider1_CreateFcn(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
% --- Executes on slider movement.
function slider2_Callback(hObject, eventdata, handles)
% hObject handle to slider2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
global R
global G
global B
global val1
global val2
global val3
val2=get(hObject,'Value');
set(handles.text2,'String',num2str(val2));
axes(handles.axes3);
imshow(val1*R);
axes(handles.axes4);
imshow(val2*G);
axes(handles.axes5);
imshow(val3*B);
axes(handles.axes2);
I=cat(3,val1*R,val2*G,val3*B);
imshow(I);
% --- Executes during object creation, after setting all properties.
function slider2_CreateFcn(hObject, eventdata, handles)
% hObject handle to slider2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
% --- Executes on slider movement.
function slider3_Callback(hObject, eventdata, handles)
% hObject handle to slider3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
global R
global G
global B
global val1
global val2
global val3
val3=get(hObject,'Value');
set(handles.text3,'String',num2str(val3));
axes(handles.axes3);
imshow(val1*R);
axes(handles.axes4);
imshow(val2*G);
axes(handles.axes5);
imshow(val3*B);
axes(handles.axes2);
I=cat(3,val1*R,val2*G,val3*B);
imshow(I);
% --- Executes during object creation, after setting all properties.
function slider3_CreateFcn(hObject, eventdata, handles)
% hObject handle to slider3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
% --------------------------------------------------------------------
function Untitled_1_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_1 (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','ImageFiles(*.bmp,*.jpg,*.png,*.jpeg)';...
'*.*','All Files(*.*)'},...
'Pick an image');
if isequal(filename,0)||isequal(pathname,0),
return;
end
global R
global G
global B
axes(handles.axes1);
fpath=[pathname filename];
w=imread(fpath);
imshow(w);
A=w;
R=A(:,:,1);
G=A(:,:,2);
B=A(:,:,3);
% --------------------------------------------------------------------
function m_file_save_Callback(hObject, eventdata, handles)
[filename,pathname]=uiputfile({'*.bmp','BMP files';'*.jpg;','JPG files'},'Pick an Image');
if isequal(filename,0)||isequal(pathname,0)
return;
else
fpath=fullfile(pathname,filename);
end
img_src=getappdata(handles.figure_pjimage,'img_src');
imwrite(imc_src,fpath);
% 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)
% --------------------------------------------------------------------
function m_file_exit_Callback(hObject, eventdata, handles)
close(handles.figure_pjimage);
% 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 dat
展开阅读全文