if (nargin > 4)%如果输入参数个数大于4,那么还要进行动态模糊处理
h = fspecial('motion',len,theta);%指定动态模糊算子
maskImage = imfilter(maskImage,h);%进行模糊滤波处理
%figure,imshow(maskImage,[]);
end
outputMaskImage = maskImage;%保存随机雪花团的动态模糊结果图像
%---------------------------------------------------------------------------------------------------------------------------------------
原始图像和某一层雪花团图像的合成相对比较简单,只需先提取出原始图像的R、G、B三个通道,然后将每个通道均和雪花团图像进行融合即可,参考下面的代码段3:
%---------------------------------------------------------------------------------------------------------------------------------------
%代码段3
function [output] = sub_mixImage(img,maskimg)
%函数功能:
% 原始图像和随机雪花团图像进行合成
%参数说明:
% 输入参数:
% img:原始图像
% maskimg:随机雪花团图像
% 输出参数:
% output:保存合成的结果图像
%--------------------------------------------------------------------------
rChannel = img(:,:,1);%获得原始图像的R通道数据
gChannel = img(:,:,2);%获得原始图像的G通道数据
bChannel = img(:,:,3);%获得原始图像的B通道数据
%转化成double类型,以避免uint8类型数据相加产生溢出
rChannel = double(rChannel);
gChannel = double(gChannel);
bChannel = double(bChannel);
maskimg = double(maskimg);
%将R、G、B通道分别加上随机雪花团图像
rChannel = rChannel + maskimg;
gChannel = gChannel + maskimg;
bChannel = bChannel + maskimg;
%保存三个新的通道图像到合成图像
img(:,:,1) = rChannel;
img(:,:,2) = gChannel;
img(:,:,3) = bChannel;
output = img;
%---------------------------------------------------------------------------------------------------------------------------------------
三、程序
由于我们希望程序能有更大的灵活性和交互性,那么构造一个相对友好的图形用户界面显得尤为重要。值得庆幸的是,为了开发出这样界面,可以使用Matlab内建的集成开发环境GUIDE(Matlab’s Graphical User Interface Development Enviroment)。GUIDE是一个界面设计工具集,Matlab将所有的GUI支持的用户控件都集成到这个环境中,并提供界面外观、属性和行为相应方式的设置方法。为了实现一个基于GUIDE的演示程序,需要做两项工作:GUI界面设计和GUI控件编程。其中,界面设计的结果保存在一个FIG资源文件中,而为了进行GUI控件编程,我们需要对系统自动生成的M文件进行代码编写。我们下面将首先介绍界面设计部分,并将在GUI控件编程里面对第2节的Step1、2、3和5予以实现。
1.程序的界面设计
(1)在命令窗口输入guide命令,回车后在弹出的窗口中选择BlankGUI(Default)并点击确定按钮。这时,系统会弹出界面设计编辑窗口,同时新建一个fig文件(默认名为untitled.fig)。
(2)在用户界面设计窗口添加相应的控件:我们的程序需要添加1个坐标轴(Axes)、1个大的面板(Panel)、3个小的面板(Panel)、18个静态文本(Static Text)以及18个编辑文本框(Edit Text)。其中3个小面板均放在大面板内,而18个静态文本和18个编辑文本框中的每6个一组放在一个小面板中。添加控件的方法是在控件面板中选中需要的控件然后往设计窗口中拖动。另外,常常还需要借助于控件对齐辅助工具(Align Objects)来帮助进行控件布局。
(3)在用户界面设计窗口的工具栏中选择菜单编辑器(Menu Editor)来进行菜单设计。需要两个一级菜单目录分别是【文件】和【处理】。在【文件】一级菜单下设计两个二级菜单,分别是【打开】和【保存】。在【处理】一级菜单下设计一个二级菜单【合成】。
(4)控件/菜单属性的修改:为了简化程序的设计,有必要对相应控件的默认属性进行修改。为了增加面板控件和静态文本空间的提示性,需要对面板控件修改其<Title>属性,对静态文本控件修改其<String>属性,修改的值一般为提示性的字符串;编辑文本框控件需修改其<String>属性,在该属性对应的位置输入数值以做为控制各层雪花图像默认的参数值。另外,为了编程的方便,往往对那些在编程中需要交互访问的控件修改其<Tag>属性。限于篇幅,这里没有将空间的相关属性值列出。 另外,需要修改二级菜单【打开】、【保存】和【合成】的<Tag>属性为FileOpen,FileSave和MixAll。
|