基于MATLAB的数字图像处理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MA TLAB的数字图像处理系统
摘要:数字图像处理技术是20世纪60年代发展起来的一门新兴学科,随着图像处理理论和方法的进
一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。
MATLAB中集成了功能强大的图像处理工具箱。由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。
关键词:MATLAB,数字图像处理,GUI,
一、课程设计目的
综合运用MA TLAB工具箱实现图像处理的GUI程序设计。
二、课程设计要求
1)熟悉和掌握MA TLAB 程序设计方法
2)掌握MA TLAB GUI 程序设计
3)学习和熟悉MA TLAB图像处理工具箱
4)学会运用MA TLAB工具箱对图像进行处理和分析
三、课程设计的内容
学习MA TLAB GUI程序设计,利用MA TLAB图像处理工具箱,设计和实现自己的Photoshop 。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。
以下几点是程序必须实现的功能。
1)图像的读取和保存。
2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。
3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域进行截图,并显示该选择区域。
5)图像直方图统计,要求显示直方图统计。
四、题目分析
信息化社会中,计算机在各种信息处理中发挥着重要的作用。我们可以借助计算机,
对数字图像进行处理,以达到不同的效果。根据题目的要求,除了实现要求的功能外,还有
很多的功能需要用到。
(1)、将一个RGB图像转换为灰度图像。
(2)、可以对图像做各种变换,如旋转等。
五、总体设计
由于要实现的功能并不是很多,所以在排版的过程中,把各个功能都安排在目录栏上,整体安排如下图5-1所示:
图5-1 整体安排
总体的设计界面如下图5-2所示:
图5-2 总体设计界面
六、具体设计
6.1、文件
6.1.1、打开
为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个GUI程序的操作对象是图像文件,所以设置这里的缺省后缀名为“.bmp”。
Uigetfile函数的调用格式为[name,path]=yigetfile(…), 在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“name”和“path”中。如果按下取消按钮或是发生错误,则返回值是0。根据返回值的情况,如果是0,则弹出提示错误的对话框,否则,通过imread函数读出图像数据,把图像数据赋值给全局变量handles.img。
6.1.2、保存
同样也通过对话框的形式来保存图像数据,通过uigetfile函数选择文件名和路径,用getimage(gca)取出坐标2变换后的图像数据保存到变量i,最后用imwrite
函数,把数据i存到指定的文件。
6.1.3、退出
退出比较简单,程序如下所示:
clc;
close all;
close(gcf);
6.2、旋转
6.2.1、上下翻转
函数flipud是实现一个二维矩阵的上下翻转,如
a=[1 2;3 4],经过该函数处理后,原矩阵变为[3 4;1 2];所以利用该函数也可以对图像进行上下翻转处理,但由于该函数针对二维数据的处理,所以在写程序时,要对RGB图像和灰度图像分开处理,这就要用到isrgb函数来判断,如果是灰度图像,则可以直接用这个函数进行处理,否则就要对RGB图像进行降维处理,
for k=1:3
y(:,:,k)=flipud(x(:,:,k));
end
处理结果如图 6.2-1:
图 6.2-1 图像上下翻转前后
6.2.2、左右翻转
对图像的左右翻转也可以用fliplr函数来处理,同样的,也要对灰度和彩色图像分开处理,处理结果如图6.2-2:
图6.2-2 图像左右翻转前后
6.2.3任意角度翻转
用函数imrotate来实现对图像的插值旋转。
该函数的调用格式如下:
B=imrotate(A,angle,method,’crop’)
其中,参数method用于指定插值的方法,可选的值可以有三种,分别为邻近插值,双线性插值,双三次插值,缺省时为邻近插值,参数angle代表旋转的角度。
一般来说,旋转后的图像会比原图大,用户可以指定“crop”参数对旋转后的图像进行剪切(取图像的中间部分),使返回的图像与原图大小相同。执行结果为如图 6.2-.3:
图6.2-3 图像45度翻转前后
6.3、直方图统计
用imhist函数对图像数据进行直方图统计,
x=imhist(handles.img(:,:,1));
bar(horz,x);
其中,x矩阵的数据是0~255灰度值的统计个数,如果直接对x矩阵数据进行图形图显示,由于有256个数据,在坐标系中就会很密集,为了更清楚的显示条形图,所以在程序设计时,把x数据进行部分提取,
x1=x(1:10:256);
horz=1:10:256;
bar(horz,x1);
直方图显示图像分别如图6.3-1,6.3-2,6.3-3所示
图 6.3-1R直方图
6.4、编辑
6.4.1、灰度
由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度