1、 保密类别 _ 编 号 _ 数字电视系统设计 课程项目报告 基于 MATLAB GUI 的数字图像处理程序设计 院 别 传媒技术学院 专 业 电子信息工程 班 级 10 电信 姓 名 第二组 指导教师 何光威 中国传媒大学南广学院 2013 年 10 月 29 日 摘 要 基于数字信号处理原 理,在数字滤波器设计理论和 Matlab 编程技术及其GUI 图形用户界面设计的基础上,开发了具有交互式特点的数字图像处理 GUI软件,界面操作简单方便。 MATLAB既是一种直观、高效的计算机语言 ,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。
2、根据它提供的 500 多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。 MATLAB 中集成了功能强大的图像处理工具箱。由于 MATLAB 语言的语法特征与 C 语言极为相似,而且更 加简单、更加符合科技人员对数学表达式的书写格式,而且可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以 MATLAB 在图像处理的应用中具有很大的优势。 关键词: Matlab GUI;数字图像处理;图形用户界面1 目 录 摘 要 . I 一、设计基本原理 . 2 (一)、 GUIDE 操作界面的使用方法 . 2 二、 GUI 程序总体设计 . 3 (一) M
3、ATLAB GUI 程序要 实现的功能: . 3 三、具体设计与实现 . 4 3.1、文件操作 . 4 3.1.1、打开 . 4 3.1.2、保存 . 4 3.1.3、退出 . 4 3.2、编辑 . 4 3.2.1、灰度 . 4 3.2.2、亮度 . 5 3.2.3、截图 . 7 3.2.4、缩放 . 7 3.3、旋转 . 8 3.3.1、上下翻转 . 8 3.3.2、左右翻转 . 9 3.3.3、任意角度翻转 . 9 3.4、加入噪声 . 10 3.5、滤波 . 10 3.6、直方图统计 . 11 3.7、频谱分析 . 12 3.7.1、频谱图 . 12 3.7.2、通过高通滤波器 . 13
4、 3.7.3、通过低通滤波器 . 13 3.8、灰度图像处理 . 14 3.8.1、二值图像 . 14 3.8.2、创建索引图像 . 14 3.9、颜色模型转换 . 15 3.10、操作界面设计 . 15 四、程序调试及结果分析 . 16 (一)在程序设计过程中遇到的问题 . 16 结 语 . 17 参考文献 . 18 附 录 . 19 2 一、设计基本原理 图形用于界面( GUI)是提供人机交互的工具和方法。 GUI 是包含图形对象(如窗口、图标、菜单和文本)的用户界面。 MATLAB 的 GUI 为开发者提供了一个不脱离 MATLAB 的开发环境,有助于 MATLAB 程序的 GUI 集成
5、。在MATLAB 中的 GUIDE 就是图形用户 界面开发环境( Graphical User Interface Development Environment),它向用户提供了一系列的创建用户 图形界面的工具。这些工具大大简化了 GUI 设计和生成的过程。 (一)、 GUIDE 操作界面的使用方法 下面对 GUIDE 的操作界面及使用方法做一简单介绍。 在命令窗口中直接键入 guide, 启动 GUIDE, 利用 GUIDE 模板创建 GUI,或者打开已经存在的 GUI, GUIDE 把 GUI 设计的内容保存在两个文件中,它们在第一次保存或运行时生成。一个是 FIG 文件,扩展名为 Fi
6、g,它包含对GUI 和 GUI 组件的完整描述;另外一个是 M 文件,扩展名为 .M,它包含控制GUI 的代码和组件的回 调事件代码。这两个文件与 GUI 显示和编程任务相对应。在版面设计器中创建 GUI 时, 内容保存在 FIG 文件中;对 GUI 编程时,内容保存在 M 文件中。用 GUIDE 版面设计器,根据设计需要:首先拖拽两个图形窗口( Axes),一个作为待处理图片区域,另一个作为已处理图片区域;其次,拖拽五个电子按钮( Radio Button),作为边缘检测操作按钮;第三,拖拽五个按钮( Push Button),作为输入等的按钮;最后,将上面的所有按钮及图形窗口合理的布局,达
7、到美观工整的效果,然后运行一下 GUI,系统会自动生成 GUI 文件。 信息化社会中,计算机在各种信息处理中发挥着重要的作用。我们可以借助计算机,对数字图像进行处理,以达到不同的效果。根据题目的要求,除了实现要求的功能外,还有很多的功能需要用到。 ( 1)、将一个 RGB 图像转换为灰度图像。 ( 2)、 可以对图像做各种变换 , 如旋转等 。 ( 3)、有时并不需要图像显示其细节部分,只要其轮廓, 这时候 不要很 高的灰度级。 可以把图像转换为二值图像,进行图像腐蚀,或是创建索引图像等。 ( 4)、分析一个图像的频谱特征,利用傅里叶变换,将图像从空间域变换到频域,然后进行各种处理,经过高 通
8、滤波器或是低通滤波器。 ( 5)、为了科学地定量描述和使用颜色,人们提出了各种颜色模型,按用途可分为三类:计算颜色模型,视觉颜色模型和工业颜色模型。有时为了不同的需要,要对颜色模型进行转换。 3 二、 GUI 程序总体设计 (一) MATLAB GUI 程序要 实现的功能: 将一个 RGB 图像转换为灰度图像。 可以对图像做各种变换 , 如旋转等 。 可以对图像进行任意的亮度和对比度调整,显示和对比变换前后的图像。 通过最近邻插值和双线性插值 算法, 将 用户所选取的图像区域,进行 放大和缩小整数倍 ,并保存,比较几种插值的效果。 对颜色模型进行转换。为了科学地定量描述和使用颜色,人们提出了各
9、种颜色模型,按用途可分为三类:计算颜色模型,视觉颜色模型和工业颜色模型。有时为了不同的需要,要对颜色模型进行转换。 4 在调节亮度时,虽然可以用对话框的形式输入调节的比例系数,但是这样效果不好,不容易调节。因此这里考虑用滚动条来调节。总设计界面如上图所示。 三、具体设计与实现 3.1、文件操作 3.1.1、打开 为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择 uigetfile 函数来实现, uigetfile 函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个 GUI 程序的操作对象是图像文件,所以设置这里的缺省后缀名为“ .bmp”。
10、 Uigetfile 函数的调用格式为 name,path=yigetfile( ), 在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“ name”和“ path”中。如果按下取消按钮或是发生错误,则返回值是 0。 根据返回值的情况,如果是 0,则弹出提示错误的对话框,否则,通过 imread 函数读出图像数据,把图像数据赋值给全局变 量 handles.img。 3.1.2、保存 同样也通过对话框的形式来保存图像数据,通过 uigetfile 函数选择文件名和路径,用 getimage( gca)取出坐标 2变换后的图像数据保存到变量 i,最后用 imwrite函数,
11、把数据 i存到指定的文件。 3.1.3、退出 退出比较简单,程序如下所示: clc; close all; close(gcf); 3.2、编辑 3.2.1、灰度 由于 RGB 图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实 现方法程序为: y=(handles.img(:,:,1); %当然也可以选择 (:,:,2) 或 (:,:,3) imshow(y); 但是这样的话,根据程序所选的不同,图像数据也不同,显示也就不一样。 另一种方法就是,运用 rgb2gray 函数实现彩色图像到灰度图像的转换。程序5 为: y=rgb2gra
12、y(handles.img); imshow(y); 这个程序只能用于 RGB 图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些, 为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。所以在开始时应该要有一个 RGB 图像或是灰度图像的判断过程。完整的程序如下: if isrgb(handles.img) y=rgb2gray(handles.img); imshow(y); else msgbox(这已经是灰度图像 ,转换失败 ); end 如果原图是 RGB,执行该操作的结果如下图: 如果原图本身
13、已经是灰度图像了,执行该操作弹出如 右图所示的提示对话框 3.2.2、亮度 用 imadjust 函数,其调用格式如下: g=imadust(f,low_in high_in,low_out high_out),gamma) gamma 表示映射性质,默认值是 1 表示线性映射。 由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给 low_in high_in,low_out high_out,gamma 这五个参数,如下一组命令建立了如图所示 的输入对话框: 6 prompt=输入参数 1,输入参数 2,输入 gamma; defans
14、=0 0.7,0 1,1; p=inputdlg(prompt,输入参数 ,1,defans); 但是,这种方法并不能很好的让用户能够对图像进行任意的亮度和对比度变化调整,有时并不事先知道参数的值要多少,也不关心,而是任意调节的,直到满意为止。所以应该用滑动条来调节图像的亮度和对比度,这样更适合用户的使用习惯。 由于 imadjust 函数有五个参数,所以原则上 需要设计五个滑动条来调节对比度,这对用户来说显然比较麻烦,因此在设计的时候固定其中的三个参数,通过调节两个参数的值来改变亮度和对比度。 0 handles.beta,0 1,handles.gm,这里的变量 handles.beta
15、和 handles.gm 就通过滑动条得到,滑动条设计如下图: 亮度调整的 tag 名为 ld,取值范围 01, gamma 值的 tag 名为 gamma,取值范围为 05。获取滑动条参数的程序如下: handles.beta=get(handles.ld,value); handles.gm=get(handles.gamma,value); 执行该操作,调节滑动条到上图所示位置,结果如下图: 7 3.2.3、截图 在 MATLAB 中,用函数 imcrop 实现对图像的剪切操作。该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形
16、。 Imcrop 函数的调用格式如下: y=imcrop(handles.img); 不管 handles.img 是三维的还是二维数据,该函数都能进行操作。下图就是对三维图像的截图: 3.2.4、缩放 在 MATLAB 中,用函数 imresize 来实现对图像的放大或缩小。插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。 该函数的调用格式如下: B imresize(A, m, method) 其中: 参数 method 用于指定插值的方法,可选的值为“ nearest”(最近邻法 ),“ bilinear”(双线性插值 )、“ bicubic” (双三次插值 ),缺省值为“
17、nearest”。 B imresizee(A m, method)表示返回原图 A 的 m 倍放大图像 (m 小于 1 时实际上是缩小 ); 下 图就是采用邻近插值法的放大和缩小图像,参数值保持默认设置: 虽然处理后看不出放大的效果,这是由于坐标轴限制的原因,如果把处理后的图片保存起来,再把处理后的文件打开,就可以看到比较明显的放大效果。 8 缩小后的结果如下: 3.3、旋转 3.3.1、上下翻转 函数 flipud 是实现一个二维矩阵的上下翻转,如 a=1 2;3 4,经过该函数处理后,原矩阵变为 3 4;1 2;所以利用该函数也可以对图像进行上下翻转处理,但由于该函数针对二维数据的处理,所以在写程序时,要对 RGB图像 和灰度图像分开处理,这就要用到 isrgb函数来判断,如果是灰度图像,则可以直接用这个函数进行处理,否则就要对 RGB图像进行降维处理, for k=1:3 y(:,:,k)=flipud(x(:,:,k); end 处理结果如图: