基于MATLAB视频处理系统的设计
2022-08-02陈红于旭茂聂小燕
陈红,于旭茂,聂小燕
(电子科技大学成都学院 信息与通信工程系,四川成都,611731)
0 引言
随着信息技术的发展,基于视频图像中对感兴趣的目标提取,已经逐渐渗透到人们生活的方方面面,吸引越来越多的学者和研究机构参与该领域的研究。基于视频图像中对感兴趣的目标提取已广泛应用于监控视频、人脸识别、车道线识别、安全帽佩戴情况检测、行星探测等领域。目前,对视频图像中感兴趣的目标提取的研究方法有很多,如:基于FPGA的实时视频采集预处理系统设计[1]、基于OpenCV的运动目标检测与跟踪[2]、基于Zynq-7000的视频处理系统框架设计[3]、基于DM642视频采集处理系统硬件设计[4]。
本文主要研究基于MATLAB GUI界面视频处理系统设计。通过编写MATLAB GUI界面的回调函数,以实现视频处理系统的搭建,用户在使用过程中无需了解程序是如何编写的,只需掌握具体操作步骤。
1 系统总体方案设计
1.1 方案设计
视频处理系统方案设计框架如图1所示。该系统主要由4个模块组成分别为:
图1 视频处理系统的方案设计框架
(1)导入并读取视频模块:将视频导入MTALAB GUI系统;
(2)读取视频模块:读取视频信息;
(3)分帧模块:将视频通过函数拆解为帧;
(4)分帧图像处理模块:对拆解的帧图像进行二值化、边缘化、降噪处理;
(5)显示视频模块:将输出的每一帧显示在MATLAB GUI界面中。
1.2 界面设计
MATLAB GUI(Graphical User Interface)图形用户界面是指采用图形形式显示的计算机操作界面,是MATLAB用户可视化交互式的工具。
1.2.1 界面设计方法
MATLAB GUI界面操作流程如图2所示,最终通过GUI设计形成两个文件: 其一,是对GUI中各组件的描述,后缀名为“.fig”文件;其二,是控制GUI组件的程序代码,后缀名为“.m”文件[5]。该系统界面设计分为引导界面和主界面两部分,用户点击引导界面的“进入”按钮,即可进入主界面,点击“退出”按钮,即可退出系统;当用户进入主界面后,可以看到该界面分为视频区域和控制面板区域两部分,其中视频区域实现视频的播放;控制面板区域实现视频的导入、暂停、继续、停止等控制操作。
图2 MATLAB GUI界面操作流程图
1.2.2 界面美化
在MATLAB软件背景中,如果只是简单的背景颜色难免会显得单调乏味,而在背景的适当位置嵌入优美的背景图片即可解决这个问题。实现原理是在初始化函数OpeningFcn中建立一个和窗口大小相同的axes并在其中显示图片,最终该系统界面优化效果如图3、4所示。
图3 视频处理系统引导界面
2 各模块功能实现
该系统包含5个基本视频处理模块和其他模块,每个模块既相互独立,又相互关联。在MATLAB视频及图像处理工具箱中[6],通过调用不同的功能函数即可实现不同模块的不同功能。
图4 视频处理系统主界面
2.1 导入视频
将视频导入视频处理系统。其基本原理是通过对话框获取用户的输入,并返回路径和文件名字符串,然后对获取的视频数据进一步处理。其实现方法为调用uigetfile函数创建文件名和处理对话框,然后获取文件名信息。需要注意的是,仅当文件存在时才成功返回。如果用户选择了一个不存在的,就会显示错误信息。
2.2 读取视频
对导入的视频进行读取。视频读取的内容包含:视频文件名、视频文件路径以及视频总帧数等。随着MATLAB软件的不断创新,如今可以满足多种视频文件的读取,其中常用的视频读取函数包含Aviread函数和VideoReader函数,由于Aviread函数只能读取avi格式的视频文件,而VideoReader函数可以读取多格式视频文件,因此为满足不同用户的需求,该系统选用VideoReader函数读取视频文件。
2.3 分帧处理
视频的本质是由静止的画面组成,这些静止的画面被称为帧[7]。当帧率大于15帧/秒时,连续播放的图像就会形成视频。概括来说,视频是每一帧图像经过连续播放而形成的视觉效果。由于帧的本质是一张图片,所以对图片的二值化、边缘化、降噪处理方法也应用于视频处理中。该系统采用逐帧提取的方式实现视频的分帧。通过调用for循环函数将连续的帧图像拆分为每一帧图像。
2.4 分帧图像处理
分帧图像处理是该视频系统的核心模块,主要目的是采用不同的方式提取视频中感兴趣的目标,满足不同用户的需求。
2.4.1 分帧图像二值化
在数字图像处理中,二值化图像不仅可以使图像变得简单,还可以凸显出感兴趣的目标轮廓。图像的二值化是指将图像上的像素点的灰度值通过阈值化处理设置为0或255[8],其中灰度值为0的像素点所组成的集合为背景区域,灰度值为255的像素点所组成的集合为目标区域,最终使图像呈现出黑白效果的过程。其中阈值化处理的关键取决于阈值的选择,通常阈值的选择方式有Otus(最大类间方差自动阈值法)、迭代法和最小误差法。三种方式的原理和实现方法如下:
(1)Otus(最大类间方差自动阈值法)[9]:其基本思想是根据灰度特性将图像分为背景和目标两部分,然后计算目标和背景的类间方差;最后对比每个方差的大小。若类间方差越大,则说明错分的概率越小,因此,需要选择其中类间方差最大的值,并将其设置为阈值。主要实现的函数有graythresh()和im2bw()。
(2)迭代法:基本思想是将阈值的初始值设置为图像最大和最小灰度值的平均值,根据初始阈值将图像分为目标和背景,求灰度值的平均值 ,然后判断新的平均值是否等于如果初始阈值相等,则阈值为新的平均值; 否则,将阈值设为目标和背景的平均灰度值之和的一半,继续迭代,直到计算出阈值。
(3)最小误差法[10]:最小误差法,也称为KITTLER算法,是一种对直方图进行阈值分割的方法。 基本思想是假设灰度图像由目标和背景组成并满足高斯混合分布,分别计算目标和背景的均值和方差,根据最小分类得到最小误差目标函数。目标函数最小时的阈值为最佳阈值。经过测试发现,三种阈值分割方法得到的二值化图像大致相同,但迭代法和最小误差法运行速度过慢,因此为减轻系统负担,本文采用Otus法进行阈值分割。
2.4.2 分帧图像边缘化
在计算机视觉与机器视觉中,为减少数据量,并去除不相关的信息,保留图像主要语义与形状信息,需要对图像进行边缘化处理。图像边缘化是指其周围像素点变化不连续的像素点的集合[11],即图像中亮度明显且急剧变化的地方。其基本思想是通过计算像素点的梯度,反映图像灰度分布,通过局部微分技术,获得边缘检测算子。常见的边缘算子有Canny边缘检测算子、Roberts边缘检测算子、Laplacan边缘检测算子和Sobel边缘检测算子等[12]。由于Roberts边缘检测算子和Laplacan边缘检测算子定位精确度高Laplacan,但对噪声敏感;Sobel边缘检测算子抗噪声好,但计算量大而且定位精度不高。而Canny边缘检测算子具有提取效率高、抗噪能力强和边缘定位准确等优点,因此该系统采用Canny边缘检测算子和函数edge()结合的方式实现分帧图像边缘化。
2.4.3 分帧图像降噪
由于视频在采集的过程中难免会受到光线、传感器、摄影机等综合因素的影响,造成图像含有噪点,质量较差,需要对图像进行降噪处理,才可以获取清晰的目标。图像的降噪处理又称为滤波。常用的滤波器有均值滤波器、拉普拉斯滤波器、中值滤波器和最大值/最小值滤波器等。本文采用中值滤波器。
中值滤波是基于排序统计理论的一种非线性信号处理技术[13]。不仅可以消除杂散的孤立点,还可以有效的保留图像的边缘信息。其基本原理是将其每个像素点的值用该点领域中各点的中间值代替,让周围像素点灰度值的差比较大的像素点与周围像素点的灰度值接近,从而实现消除孤立点的噪声。主要实现的函数是medfilt2()函数。
2.5 显示视频
由于图片的本质是由像素点组成的集合,因此采用坐标轴函数axes()和inshow()函数实现图片的显示。而视频的本质是连续播放的图片,因此在坐标轴中逐帧播放分帧图片即可实现视频的显示。
2.6 其他模块
(1)打开视频文件
采用uigetfile()函数,通过对话返回路径和文件名字符串。主要实现代码片段如下:
[filename ,pathname]=uigetfile({'*mp4';'*.avi';'*.*';},''打开视频');
(2)暂停与继续
在视频播放过程中,往往需要暂停视频并观察某一帧的变化,此时需要采用uiwait()和uiresume()函数,其基本原理是当程序执行到uiwait函数时,程序会暂停等待,直到遇到uiresume函数,才会停止等待继续执行程序。
(3)停止
由于图像的显示是通过for循环逐帧输出,因此停止视频的本质是终止for循环。其实现步骤是:首先,定义全局变量flag的初始值为0;然后,当停止按钮按下时,flag的值变为1;最后,在for循环中调用if语句检测flag的值,若flag的值为1,则调用break函数跳出循环,若flag的值为0,则继续执行循环。
(4)清除数据
当视频播放完成时,需要对控件的数据进行清理。在MATLAB GUI界面中只需更改axes的相关属性。主要代码实现如下:
axes(handles.axes); cla ;axis on; box on;
其中cla:清除坐标区,axis on:关闭坐标轴;box on:关闭图像的边框。
(5)退出系统
该系统采用提问对话框,当用户点击退出系统按钮时,在用户界面会自动跳出退出系统对话框,如图5所示,用户只需点击确定按钮即可实现退出系统。
图5 退出系统对话框
3 仿真系统操作过程及结果展示
视频处理系统操作过程如下:在控制面板区域中选择点击“打开视频文件”按钮,选择需要处理的视频文件,然后在视频区域中依次选择“播放视频”按钮、“二值化处理”按钮、“边缘化处理”按钮和“去噪处理”按钮,即可分别显示处理后的结果,如图6所示。
图6 视频处理系统处理结果
4 结论
该系统通过导入视频,采用MATLAB软件可实现视频分帧处理,对每一帧进行二值化处理,边缘化处理,降噪处理,设计交互式GUI界面,可直接显示处理后的视频。实验结果显示,经过处理的视频拥有较好的视觉效果。