祁峥东 ,阎 妍,杨正颖,常合轩,殷海金,姜欣怡,陈 果,陈麒光
(1.南京晓庄学院 信息工程学院、人工智能学院,江苏 南京 211171;2.南京晓庄学院 电子工程学院,江苏 南京 211171)
“图像处理和机器视觉”课程广泛开设于计算机科学与技术、数据科学与大数据技术等相关专业,该课程内容抽象、理论严谨、矩阵公式繁多、逻辑性强。同时该课要求可视化程度高,属于一门实践性很强的课程,学生接触初期难以调动学习积极性[1]。教师在授课过程中不但需要讲解算法基本知识,还需带领学生展开数字图像处理实验,此设计性实验对学生实践能力和创新能力的培养有着不可替代的作用。因此,设计开发一套图像处理教学辅助系统有着极为重要的现实意义。
近年来,将Matlab软件应用于数字图像处理教学实验的范例不断增多[2-6]。此类实验课程要求学生在前期对模式识别、图像处理以及计算机视觉相关领域有一定的知识储备,后期掌握和运用数字图像的修复、增强、去噪等处理技术。为加强理论与实际结合,提高教学质量,本文基于Matlab环境下的图形用户接口(GUI)建立了图像处理与计算机视觉一体化辅助教学平台用于课堂实验,进一步指导学生对演示的现象进行观察和分析。另外该系统特别强调了模块化工程,将每块实现图像处理的代码分别进行function函数定义,有利于老师在授课过程中对图像处理技术相关算法进行讲解,也有利于学生的理解和自主学习。
基于Matlab GUI的图像处理教学辅助演示系统利用Matlab提供的GUI平台来设计人机交互的图形用户界面,集成了“图像处理和机器视觉”课程理论教学和实验教学的三个主要模块:图像修复、图像增强、图像去噪。图像处理所用的算法拆分出各个子function函数(图1),利用中英文标签特定按钮在程序运行过程中自动调用特定的函数,实现独立的图像处理功能。
图1 各子function函数
系统的开发环境选定为Matlab的2018a 64位版本,由GUI构建的操作界免对应两个子功能文件,其一是包含回调函数的Main.m文件,另一个是包含图窗文件的Main.fig文件,Main.m文件用来编程,进行相应功能的修改,Main.fig文件的设定则是显示GUI功能按钮,进行界面布局的修改和按钮的增减。
图2 辅助教学演示系统设计框架
设计GUI用户界面一般分为以下四个步骤:
① 明确辅助教学系统需要实现的主要功能以及通过哪些子function函数可实现这些功能;
② 勾勒出用户界面草图,避免一些潜在的缺点,并确立最终方案;
③ 利用Matlab GUI完成操作界面设计;
④ 在GUI界面中创建控件,实现图像处理时子function函数的调用;
辅助教学系统的总体设计框架如图2所示。
系统包括图像修复、图像增强、图像滤波三部分内容,主界面如图3所示。
图3 主界面
该系统包含三个方面的图像处理功能,每一块功能可由GUI界面上1—3个按钮实现,可以通过对控件的删改或function子函数的修改对图像处理功能进行精简或扩充。学生通过点击图1中Main.m打开主界面的功能集成区,点击对应处理按钮即可实现相应的图像处理功能。
图像修复技术即指通过某些技术重建图像中损坏或丢失的部分。例如在敦煌壁画修复过程中,这项工作常由有一定历史知识积累和考古经验的艺术品修复师来完成。数字图像技术领域中,图像修复则涵盖图像插值技术范畴,指利用复杂的人工智能、机器学习算法来替换已缺失的图像内容,主要替换图像中的指定内容。
本辅助教学平台中图像修复功能由集成的Criminisi算法实现。该算法由Criminisi等人[7]于本世纪初提出,此算法是现阶段最为经典的纹理图像修复算法,知网中相关文献多达444篇,教学平台中集成此类经典算法对学生理解图像修复技术具有积极引导意义。
该算法寻找匹配样本区域过程中借鉴了纹理生成这一思路,并定义边缘附近(此处蕴含较多结构信息)的修复块具有较高的修复优先级,此操作借鉴了结构修复中的扩散方式,这一流程旨在对结构信息保留的同时对纹理信息进行修复。
经典Criminisi算法包含下述三个步骤:
(1) 确定修复块的优先级。在确定优先权高低时,考虑两个因素:①待修复部分是否包含与其周围闭合成一个连续线性结构的信息。②待修复部分内像素的置信度高低。
(2) 利用目标块信息寻找匹配块进行填充。当确定待修复部分边界上所有匹配块的优先级高低后利用最佳匹配块进行填充。
(3) 更新置信度。目标部分修复工作完成后,原修复部分中的点变为边界点或已知点,原修复部分中的边界点变为已知点,此时重新获得边界点的优先权和各已知点的置信度。
以佛教壁画为修复对象,结果如图4。function函数部分如下:
图4 图像修复效果
function Xiufu=Criminisi(zx,zy,img,Figure,Region_source) %zx,zy为图像的大小
Figure=rgb2gray(Figure);aa=size(Figure,1);bb=size(Figure,2);%得到待修复块的实际大小
sx=zx-aa+1;sy=zy-bb+1;%确定搜索范围的最大值
min=1.0000e+10;p=0;%赋初值
for i=1:sx %计算找到的匹配块与待修复块在已知像素点处的距离
for j=1:sy
mpatch=img(i:i+aa-1,j:j+bb-1,:);%得到图像中和待修复块同样大小的块
for x=i:i+aa-1;
for y=j:j+bb-1;
if Region_source(i,j)==0
p=1;
end
end
end
if any(p(:))%说明有破损点,不作为待修复块的最佳匹配块
continue;
end
E=0;r=mpatch(:,:,1);g=mpatch(:,:,2);b=mpatch(:,:,3);
R=Figure(:,:,1);G=Figure(:,:,2);B=Figure(:,:,3);
rc=r-R;gc=g-G;bc=b-B;E=rc.^2+gc.^2+bc.^2;
if E min=E;%取使得误差最小的块,并记住它们在图像中的起始位置 hk=i;lk=j; end end end rows=hk:hk+aa-1;cols=lk:lk+bb-1;%误差最小的块就是最佳匹配块 Xiufu=form_patch(rows,cols,zx); 图像增强功能在本实验平台中指通过某种图像处理算法对某些待加强的图像特征,如对比度、局部细节、颜色等进行处理,以提升图片的视觉效果,从而适用于在特定场合展示。 2.2.1 直方图均衡化技术 若一张图片具有n个离散灰度级,则灰度值变化范围应固定在[0,2n-1]之间。假设每一个灰度级以等概率状态出现,则此图片灰度级丰富且覆盖范围较大,可展示出多变的灰度色调和较高的对比度。直方图均衡化技术的核心思想是对待处理图像的灰度级设计某种映射的规则,并用相应的映射函数来表示,从而提升待处理图片灰度级范围,即使得图片灰度级的概率密度变换为均匀分布。 图5 全局直方图均衡化结果 在全局直方图均衡化部分,Matlab自带函数histeq可以实现这一功能。调用格式为:Out=histeq(Img,n)。其中Img表示待变换的灰度图片,Out表示具有n个离散灰度级的图像。近似的像素数被映射到Out中的n个离散灰度级中的每一个,使得Out的直方图近似平坦,若Img中的离散层数量远高于n,则Out的直方图更为平坦。 以图4修复后的佛教壁画为全局直方图均衡化对象,结果如图5。function函数部分如下: function In=Global_Histogram_Equalization(Img, flag) if nargin<2 flag=1; end R=Img(:,:,1);G=Img(:,:,2);B=Img(:,:,3); M=histeq(R);N=histeq(G);L=histeq(B);In=cat(3, M, N, L); if flag figure; subplot(1, 2, 1); imshow(Img); title('原始图片', 'FontWeight', 'Bold'); subplot(1, 2, 2); imshow(In); title('算法效果', 'FontWeight', 'Bold'); end end 图6 局部直方图均衡化结果 在局部直方图均衡化部分,函数adapthisteq可以实现这一功能。调用格式为:Out=adapthisteq(Img,param1,val1,param2,val2)。其中Img为输入图像,Out为输出图像,parm/val为可选标量或字符串。此Matlab 2018a自带函数表示适应直方图均衡化对比度限制器,通过转换强度图像中的值来提升图像的对比度。 以图4修复后的佛教壁画为局部直方图均衡化对象,结果如图6。function函数部分如下: function In=Local_Histogram_Equalization(Img, flag) %对灰度图像,进行局部直方图均衡化 % I——图像矩阵;g——结果图像 %调用库函数adapthisteq,执行局部均衡化增强 if nargin<2 flag=1; end g1=adapthisteq(Img(:,:, 1),'clipLimit',0.02,'Distribution','rayleigh'); g2=adapthisteq(Img(:,:, 2),'clipLimit',0.02,'Distribution','rayleigh'); g3=adapthisteq(Img(:,:, 3),'clipLimit',0.02,'Distribution','rayleigh'); %集成局部直方图均衡化的分量得到结果图像 In=cat(3, g1, g2, g3); %结果显示 if flag figure; subplot(1, 2, 1); imshow(Img); title('原始图片', 'FontWeight', 'Bold'); subplot(1, 2, 2); imshow(In); title('处理后的图像', 'FontWeight', 'Bold'); end 2.2.2 Retinex算法 依据Retinex色彩[8]原理,长、中、短三个波段光线的反射情况共同决定了物体显示的颜色,物体的反射能力与光源并不存在依赖关系,属于物体本身固有的特性。算法通过计算各自波段条件下的像素间的明暗关系,利用长、中、短三个波段内的相对明暗关系从而获得该像素的颜色。此算法的优点包括: 图7 经Retinex图像增强算法处理后的效果 ① 图片中各个像素的相对明暗关系受到光源的影响较小,因此当处理对比度很小的图片(如总体偏暗或偏亮的照片)时,该算法使物体的色彩不受光照非均匀性的影响,此提升图像的对比度的方式,可大幅改善图像质量。 ② 对于光源偏色导致常见的失真现象,利用该算法可得到理想的纠正效果。 Retinex算法运行主要包括以下三个步骤: ① 准备数据阶段。假设输入数字图像为彩色制式,先将其划分为三个波段(分别是R,G,B),再将每个像素的值做浮点数化处理。 ② 获得各自波段内各像素之间的相对明暗关系。 ③ 数据显示部分。将上步骤中确定的色彩值变化为RGB值。 以图4中修复后的佛教壁画做为Retinex图像增强算法的实验对象,算法处理后的效果如图7,function函数部分如下: function Out=Retinex(Img, flag) % 输入参数:f——图像矩阵;flag——显示标记;输出参数:In——结果图像 if nargin<2 flag=1; end fr=Img(:,:, 1);fg=Img(:,:, 2);fb=Img(:,:, 3); %数据类型归一化 mr=mat2gray(im2double(fr));mg=mat2gray(im2double(fg));mb=mat2gray(im2double(fb)); alpha=1300;%定义alpha参数 n=138;%定义模板大小 n1=floor((n+1)/2);%计算中心 for i=1:n for j=1:n %高斯函数 b(i,j)=exp(-((i-n1)^2+(j-n1)^2)/(4*alpha))/(pi*alpha); end end %卷积滤波 nr1=imfilter(mr,b,'conv', 'replicate');ng1=imfilter(mg,b,'conv', 'replicate'); nb1=imfilter(mb,b,'conv', 'replicate');ur1=log(nr1);ug1=log(ng1);ub1=log(nb1); tr1=log(mr);tg1=log(mg);tb1=log(mb);yr1=(tr1-ur1)/3;yg1=(tg1-ug1)/3;yb1=(tb1-ub1)/3;beta=67;%定义beta参数 x=43;%定义模板大小 x1=floor((n+1)/2);%计算中心 for i=1:n for j=1:n %高斯函数 a(i,j)=exp(-((i-n1)^2+(j-n1)^2)/(4*beta))/(6*pi*beta); end end %卷积滤波 nr2=imfilter(mr,a,'conv', 'replicate');ng2=imfilter(mg,a,'conv', 'replicate'); nb2=imfilter(mb,a,'conv', 'replicate');ur2=log(nr2);ug2=log(ng2);ub2=log(nb2); tr2=log(mr);tg2=log(mg);tb2=log(mb);yr2=(tr2-ur2)/3;yg2=(tg2-ug2)/3;yb2=(tb2-ub2)/3; eta=15000;%定义eta参数 l=600;%定义模板大小 l1=floor((n+1)/2);%计算中心 for i=1:n for j=1:n %高斯函数 e(i,j)=exp(-((i-n1)^2+(j-n1)^2)/(4*eta))/(4*pi*eta); end end %卷积滤波 nr3=imfilter(mr,e,'conv', 'replicate');ng3=imfilter(mg,e,'conv', 'replicate'); nb3=imfilter(mb,e,'conv', 'replicate');ur3=log(nr3);ug3=log(ng3);ub3=log(nb3); tr3=log(mr);tg3=log(mg);tb3=log(mb);yr3=(tr3-ur3)/3;yg3=(tg3-ug3)/3;yb3=(tb3-ub3)/3;dr=yr1+yr2+yr3;dg=yg1+yg2+yg3;db=yb1+yb2+yb3;cr=im2uint8(dr);cg=im2uint8(dg);cb=im2uint8(db); Out=cat(3, cr, cg, cb);% 集成处理后的分量得到结果图像 if flag figure; subplot(1, 2, 1); imshow(Img); title('原始图片', 'FontWeight', 'Bold');%结果显示 subplot(1, 2, 2); imshow(Out); title('算法效果', 'FontWeight', 'Bold'); end 图像滤波技术旨在尽可能保留图像的原始视觉特征信息并对图像的噪声进行剥离或抑制。该功能模块可叠加的噪声分为椒盐噪声和高斯噪声。 ① 椒盐噪声。属于图像处理中常见到的噪声,也称为脉冲噪声,视觉特征展示为一种随机出现的黑点或白点,在数字图片的黑暗部分出现白色像素以及在明亮的区域有黑色像素出现。椒盐噪声的产生多为影像信息受到无法预测的强干扰所致、如高温和不良照明等。此噪声多出现在灰度图片中。本系统中,将原有灰度图中的像素值叠加上噪声分量,即可产生对应的图片。 ② 高斯噪声。此噪声密度函数服从高斯分布(正态分布),是目前应用最为广泛的一种噪声模型,具有在空间和频域上易处理的特点。 生成椒盐噪声与高斯噪声使用Matlab自带的imnoise( )函数。 本系统使用均值滤波(线性滤波算法)、中值滤波(非线性数字滤波器)和维纳滤波(最优的线性滤波器)三种滤波方式实现滤除噪声的功能。三种滤波器特点如下: ① 均值滤波技术。使用模板(如中心像素点和周围8个像素点组成模板)均值代替原位置中的各个像素值。该滤波技术可使用Matlab函数imfilter( )以实现。 ② 中值滤波。与上步骤相似,同样是模板概念,计算模板除中心点外的其余像素点的中值,假设中心点是孤立的噪声点,周围像素点的中值将取代该像素点的值。该滤波技术可使用Matlab函数medfilt2( )以实现。 ③ 维纳滤波器的输出与期望输出之间的均方误差为最小,可以有效滤除平稳噪声。该滤波技术可使用Matlab函数wiener2 ( )以实现。 在椒盐和高斯噪声条件下,以图4中修复后的佛教壁画做为算法的实验对象,上述三种滤波方式的优化结果分别如图8、9所示。通过将多图融合到一张图上的表现形式,学生可以直观的对比到三种技术对噪声的滤除效果。 图8 椒盐噪声条件下,中值等三种滤波方式处理结果 图9 高斯噪声条件下,中值等三种滤波方式处理结果 基于Matlab GUI的图像处理教学辅助演示系统具有以下特点: (1) 系统内容丰富。该辅助教学平台涵盖了图像处理和机器视觉课程的大部分重点内容,包含了图像修复、增强和去噪功能。三类功能是目前图像处理技术的重要组成部分,有着现实的研究与应用价值。 (2) 系统界面简洁友好、操作简单。通过界面按钮可实现图像处理功能,无需对.m文件或在命令行窗口进行编译。同时在同一界面显示原始图片和算法处理后的图片,学生可直观对比算法优化后的结果。 (3) 具有良好的可视性。系统将每个模块实现图像处理的代码分别进行function函数定义,有利于老师授课期间清晰地讲解,提升教学效果,也有助于学生对图像处理知识的理解。 (4) 系统灵活性强、模块化程度高。学生可以根据教学进度,以变动Main.m和Main.fig的方式来优化系统界面,或对现有6个子功能文件进行改写、精简或扩充以增加预期的图像处理算法,模块化设计有利于提升学生自主学习的积极性,加深对图像处理和机器视觉课程内容的认知。 针对现有的图像处理和机器视觉实验系统存在的程序结构复杂、命令行编程在教学直观性方面表现力弱、学生在课程学习中无法理解机器视觉相关算法的基本原理、不适合在课程学习的初级阶段推广等缺点,本文提出基于Matlab GUI的图像处理和机器视觉辅助教学平台,此系统实现了理论教学与实验教学的融合,具有内容丰富、界面简洁友好、操作简单、良好的可视性、灵活性强、模块化程度高等优点。在教学过程中,此系统有利于老师的教学讲解和学生的理解与自主学习,进而提升课堂的教学效率和学习效率,也有助于培养计算机、大数据相关专业学生的创新能力与实践能力。2.2 图像增强
2.3 图像滤波
3 系统特征分析
4 结 语