基于MATLAB GUI的图像处理系统的设计

2022-05-09 13:53孙鹏崴王树军李亚丽徐平平
计算机技术与发展 2022年4期
关键词:灰度滤波图像处理

孙鹏崴,王 俊,王树军,李亚丽,徐平平

(1.南京工业大学浦江学院 计算机与通信工程学院,江苏 南京 211200;2.东南大学 移动通信国家重点实验室,江苏 南京 210096;3.福州大学 电气工程与自动化学院,福建 福州 350108)

0 引 言

“数字图像处理”课程广泛开设于通信、电器、计算机等相关专业,该课程内容抽象、数学公式复杂、推导难度大、理论性强。同时可视化程度高,实践性较强,很难调动学生积极性[1]。通常教师不但需要讲授理论知识,而且还需要带领学生实验,以培养学生的实践能力、创新能力。因此,开发一套适用于教学环境的图像处理系统尤为重要[2]。

近年来,基于MATLAB的数字图像处理实验教学在不断地推进和优化。该课程要求学生熟悉掌握图像处理的理论和方法,实现对图像的变换、增强、滤波、边缘检测和分割等基础图像处理功能的掌握和运用[3]。为提高课堂教学质量,增强学生对理论的理解,该系统基于MATLAB环境下的图形用户接口(GUI)建立了更加详细的图像处理平台[4],用于课堂演示与实验操作。另外该系统特别新增了算法显示区域,将每个模块实现图像处理的代码进行集成展示,使得课堂更加形象化和具体化,更有利于老师对图像处理原理进行讲解,也有利于学生的自主学习和理解,让学生真正学懂这门课程。

1 系统总体设计

1.1 图像处理演示系统总体框架设计

基于MATLAB GUI的图像处理演示系统利用MATLAB提供的GUI平台来设计人机交互的图形用户界面,集成了“数字图像处理”课程理论教学和实验教学的5个主要模块:图像变换、图像增强、图像滤波、边缘检测和图像分割。各模块拆分出对应的子模块,在相应的子界面中展示,通过修改界面中控件的参数,编写回调函数,实现主界面与子界面间的切换及图像处理和处理功能的增添或修改。

系统的开发环境为MATLAB R2018a,在通过GUI构建图像界面时,GUI会生成两个文件,一个是包含图形设计面板的.fig文件,一个是包含回调函数的.m文件。这两个文件是一一对应关系,.m文件用来编程,进行相应控件功能的修改,.fig文件则是显示GUI组件的设定,进行控件的增添和布局的修改。

设计GUI用户界面一般分为五步:

①明确系统所要实现的主要功能,应该具有哪些模块;

②绘出基本的用户界面草图;

③根据最终确定的方案,利用MATLAB GUI制作用户操作界面;

④通过在界面中添加控件,实现演示内容的参数修改和函数调用;

⑤进行回调函数的编写,实现界面之间的切换和调用操作。

该演示系统总体设计框架如图1所示。

图1 图像处理演示系统设计框架

1.2 系统界面设计

该系统包括图像变换、图像增强、图像滤波、边缘检测和图像分割等五部分内容,主界面如图2所示,具体操作流程如图3所示。

图2 主界面

图3 基于MATLAB GUI图像处理演示系统操作说明

2 功能模块的设计与实现

该系统包含五个方面的图像处理功能,每一个功能都对应一个子界面而且都拥有独立的用户可视化窗口,可以进行控件的删改或者代码的修改。用户通过登陆界面进入系统后点击进入系统即可到达主界面的模块集成区,点击对应处理模块即可到达相应子界面。

以打开图像变换子界面为例,程序如下:

function pushbutton1_Callback(hObject, eventdata, handles)

s=bianhuan %打开图像变换界面

Close(gcf);%关闭主界面

操作按钮是每个界面相连的桥梁,是实现功能的关键。在每个子界面中,导入图像、清除图像、算法展示、存储图像、关闭界面等操作按钮代码相同。具体介绍如下:

(1)导入图片。由于该系统每个子模块之间是独立的,因此在不同模块中处理同一图像,需要重新导入一次。该按钮代码实现如下所示:

[file path]=uigetfile('*.bmp;*.jpg;*.png','请选择一幅图像');

I=imread(fullfile(path,file)); %读取图片

axes(handles.axes1);

imshow(I);title('原图像');

handles.I=I;

end

%Update handles structure

guidata(hObject,handles);

(2)清除图像。清除图像按钮是针对处理之后的图像和可编辑文本框中的文字进行上一步处理的撤销。代码实现如下:

cla(handles.axes2,'reset'); %handles.axes2为已处理图片窗口,reset即清除

set(handles.edit1,'string','');%handles.edit1为要清除文字的文本框

(3)算法显示。算法显示是该系统新增的区别于常见图像处理的板块,主要是对每个功能模块所采用的图像处理算法和其他可达到同样处理效果的算法进行对比展示。以图像变换为例进行算法显示,如图4所示。

图4 图像变换算法展示

(4)存储图片。存储图片按钮也是对处理之后的图像进行存储,当一个图像需要在不同模块进行处理时,每进行一次处理就需要存储一次,因为模块之间是独立的。其代码实现如下:

h=getimage(handles.axes2);%通过handles结构体传递数据

%调用uiputtfile函数,通过对话框获取用户的输入,并返回文件名称和路径

[filename,pathname,filterindex]=uiputfile({'*.jpg','jpg';'*.bmp','bmp';'*.tif','tif';'*.*','All Files'},'Image Save AS');

if (filename ~= 0 & filterindex==1)

imagefile=[pathname filename];

imwrite(h,imagefile);%用imwrite函数实现对图像文件的写入

end

(5)关闭界面。关闭界面是当存储图片之后,由此界面返回到功能选择模块的按键。代码如下:

Close(gcf).

2.1 图像变换

图像变换是将原定义在图像空间的图像以某种形式转换到另外的空间,利用空间的特性进行一定的加工,从而得到所需的效果,常分为几何变换和二维正交变换。该系统选取了图像的平移、灰度变换、旋转、图像镜像等常见的变换方法。

(1)图像平移。平移是对图像进行水平移动和竖直移动的过程,通过imrotate()函数实现。

(2)灰度变换。灰度变换主要通过rgb2gray()函数进行实现,是将RGB彩色图像变为灰度图像的过程。

(3)旋转。即对图像进行几何变换的过程,该模块采用了imrotate()函数。用户可在编辑区自行输入预订旋转角度。

(4)图像镜像。图像镜像是对图像进行水平镜像、垂直镜像和对角镜像的处理。主要通过flipdim()函数实现数据扩充。

以图像镜像为例,相关程序如下:

I=handles.I;

J1=flipdim(I,2);%原图像的水平镜像调用的函数为flipdim()

axes(handles.axes2);

imshow(J1);title('水平镜像');

guidata(hObject,handles);

以水平镜像演示为例,处理结果如图5所示。

图5 水平镜像处理结果

2.2 图像增强

图像增强主要是突出强调图像中重要的部分或者掩盖图像中某些不需要的特征,使图像与视觉响应特性相匹配。该模块主要功能有灰度修正、彩色增强、平滑和锐化。具体描述如下:

(1)灰度修正。灰度修正主要有线性变换[5]和直方图均衡化[6]两种处理方法。以直方图均衡化为例,演示结果如图6所示。具体程序如下:

I=handles.I;

I1=rgb2gray(I);

J=histeq(I1); %直方图均衡化函数

axes(handles.axes4);

imshow(J);

figure(1);

subplot(221);imhist(I,64),title('原始的直方图');

subplot(222);imhist(J,64),title('均衡化的直方图');

图6 直方图均衡化处理结果

(2)彩色增强。彩色增强主要有RGB增强和HVS增强两种方式,主要针对的是彩色图像的处理。彩色增强所用的函数为histeq()。

(3)平滑。图像的平滑是一种实用的数字图像处理技术,该系统是采用中值滤波对模糊图像和含有噪声图像进行处理。其方法是通过某种结构的二维滑动模板,将模板内像素按照素值的大小进行排序,生成单调上升(或下降)的二维数据序列。该模块通过medfilt2()函数实现。

(4)锐化。图像锐化是为了突出图像上地物的边缘、轮廓,或一些线性目标要素的特征。该模块先使用tofloat()函数将图片变为浮点型,然后运用模板对图像的轮廓进行补偿,增强图像的边缘及灰度跳变的部分,使图像变得清晰。

2.3 图像滤波

图像滤波是在尽量保留图像原始特征的基础上对图像的噪声进行抑制或去除。该模块分为生成噪声、噪声的滤除和图像复原三个功能部分。

生成噪声主要为椒盐噪声和高斯噪声。所用函数为imnoise()。

噪声滤除有均值滤波、中值滤波[7]和维纳滤波三种滤波方式。通过实验演示,学生可以观察出三种滤波方式对噪声的处理效果。具体如下:

(1)均值滤波。均值滤波也称线性滤波,是用均值代替原图像中的各个像素值。在操作时有3×3、5×5、7×7、9×9这四个滤波模板供选择,用户可观查窗口的大小变化对滤波效果的影响。该滤波通过调用函数imfilter()来实现。

(2)中值滤波。中值滤波是一种非线性平滑技术,将每一像素点的灰度值设置为该点某邻域窗口内的所有像素灰度值的中值,调用medfilt2()函数进行二维中值滤波实现削弱噪声的功能。实现方法为:

y(i)=Med[x(i-N),…,x(i),…,x(i+N)]

相应程序实现如下所示:

I=handles.I;

I=rgb2gray(I);%转化为灰度图像

J=imnoise(I,'salt & pepper',0.04);%对图像增加椒盐噪声,强度为0.04

axes(handles.axes2); %将加了噪声的图像显示在axex2框中

imshow(J); title('受椒盐噪声污染图片');

K=medfilt2(J); %调用medfilt2()函数进行二维中值滤波

axes(handles.axes3);

imshow(K);title('二维中值滤波处理后的图片'); %将最后结果显示在axes3框中

以中值滤波为例,处理结果如图7所示。

图7 中值滤波处理结果

(3)维纳滤波。维纳滤波适用范围广,对于平稳随机过程,无论是连续还是离散的,是标量还是向量都可应用。该滤波利用wiener2()函数实现功能。

(4)图像复原。图像彩色复原是将无噪声模糊图像进行清晰化处理的过程,此处以wnrl=deconvwnr(blurred,PSF,0.04);%维纳滤波复原图像进行处理[8]。

2.4 边缘检测

边缘检测演示可以实现对图像边缘的提取,以便针对图像的模糊纹理进行削弱,对较暗的灰度实现增强,使得边缘更加清晰。该平台使用edge()函数进行处理[9],调用不同算子进行不同灰度图像的边缘提取,所用算子主要有Robert、Sobel、Log、Canny和Prewitt[10]。

以Canny算子为例进行图像处理,处理结果如图8所示。

图8 Canny算子处理结果

2.5 图像分割

图像分割是图像处理中的一个重要步骤[11],在于从图像中提取出关键信息进行后续处理。主要根据彩色、明暗等进行提取分割,分割算法众多,该系统采用了阈值分割和区域分割,内容如下:

(1)阈值分割。阈值分割是利用图像中需要提取的目标与背景在灰度上的差异,通过用户设置阈值来把像素分成若干类,从而实现目标与背景分离。所采用的分割方法有迭代式阈值分割、OTSU阈值分割[12]和全局阈值分割。该部分涉及到的函数为garythresh()。

(2)区域分割。区域分割即采用分水岭分割方式[13],可以更好地考查用户对区域生长的理解。所涉及到的函数为watershed()。

代码如下所示:

I=handles.I;

h=fspecial('sobel');

fd=double(I);%double使数据变成双精度

g=sqrt(imfilter(fd,h,'replicate').^2+imfilter(fd,h','replicate').^2);

g2=imclose(imopen(g,ones(3,3)),ones(3,3))

im=imextendedmin(g2,10);

Lim=watershed(bwdist(im)); %watershed·分水岭算法·

em=Lim==0;

g3=imimposemin(g2,im|em);

g4=watershed(g3);

axes(handles.axes2);

imshow(g4); title('分割后图像');

g5=I;

g5(g4==0)=255;

axes(handles.axes3);

imshow(g5); title(‘分割后图像按比例与原图融合’);

以分水岭分割处理为例,处理结果如图9所示。

图9 分水岭分割处理结果

3 系统特征分析

基于MATLAB GUI数字图像处理演示系统具有以下特点:

(1)系统内容丰富[14]。该系统涵盖了数字图像处理课程的大部分重点内容,具有很强的扩展性,老师在课堂教学中可以根据教学内容进行更改,以达到课堂内容丰富、教学效果良好的目的[15]。

(2)系统操作简单,界面友好[16]。通过按钮实现了直接操作,针对已有功能不需要在算法窗口进行编译。同时可以在同一界面显示处理前与处理后的图片,形成可视化对比。以繁化简,节省了老师和学生的时间。

(3)系统灵活性强,可靠性高。该界面简洁,功能稳定,运行速度快。老师和学生可以通过.m文件进行代码的改写或扩充。

(4)系统具有良好的可视性。通过系统算法展示功能,将已经实践过的算法和某些对应的图像处理算法相结合进行对比,以便于老师更清晰地进行讲解,让同学们理解得更加透彻。也可以通过自学,对数字图像处理这门课程作进一步了解掌握[17]。

4 结束语

针对大部分学生对数字图像处理课程感到枯燥,难以掌握其中知识点的现状,基于MATLAB GUI的图像处理演示平台实现了理论教学与实验教学的融合,使得枯燥、抽象的理论变得生动形象,繁杂的理论公式变得直观[18]。在教学课程中,可自行修改模块设置,使学生对该课程的相关理论知识有更深刻的理解。从而提高课堂的学习效率与质量,也能培养学生的实践能力与创新能力。

猜你喜欢
灰度滤波图像处理
航空滤光片阵列多光谱图像条带灰度调整算法
基于HP滤波与ARIMA-GARCH模型的柱塞泵泄漏量预测
基于改进自适应中值滤波的图像降噪方法*
基于线性源法与图像处理的土壤饱和导水率快速测量方法
“课程思政”视域下职业学校《图像处理》课程教学改革实践
构建《Photoshop图像处理》课程思政实践教学路径的探索
基于图像处理与卷积神经网络的零件识别
天津港智慧工作平台灰度发布系统和流程设计
Arduino小车巡线程序的灰度阈值优化方案
基于非下采样剪切波变换与引导滤波结合的遥感图像增强