系列文章目录
·【基于MATLAB的数字图像处理】第二章·视觉系统与图像处理系统
·【基于MATLAB的数字图像处理】大作业·综合图像处理平台
文章目录
一、背景及研究的目的和意义
在日常的学习和生活中,我们难免会和各种各样的图像打交道,图像是我们获取外界信息最重要的途径,无论是手机中的摄像头,还是专业的数码摄像机,都可以将五彩斑斓的世界定格在一幅图像中,成为我们每个人生阶段美好的回忆。
但是我们获得的图像难免会伴随着很多的噪声,有时会使图像质量下降;有时会干扰我们的视觉,使拍摄出的图像效果不满意;有时甚至会出现一些特殊情况,遮挡住人脸或重要物体。这时我们需要对获得的图像进行一些图像处理,以使我们的图像观感更好,图像质量更优质。
另外,随着机器人领域的快速发展,机器人视觉已经越来越受到人们的关注,越来越多的高校也开设了数字图像处理这门课程,但对于从没接触过相关领域的小白来说,这部分学习起来会很抽象且感觉到难以理解,这款软件可以方便地帮助刚开始学习数字图像处理的学生,以更加通俗具体的方式,观察一幅图像在经过各种不同的变换后呈现的效果,以帮助初学者快速理解数字图像处理的相关知识。
二、主程序介绍
2.1 基本页面介绍
图像的初始操作界面如图所示,大概分为这几个分区:菜单栏、图像显示区、基本图像处理按钮区、RGB三通道灰度频度实时显示区、RGB数值调整及旋转调整区,用户可根据需要进行不同的操作
另外,平台可以自动检测并输出处理后图像的实时熵值以及彩色图像的RGB三通道灰度频度折线图,以及三通道的RGB数值,用户可以根据状态指示灯的颜色,区分不同操作的成功与否。
2.2 菜单栏介绍
2.2.1 文件菜单栏
点击“文件”,点击“打开”,选择一张想要处理的图像,图像将会显示在界面中的“原图像”区域,同时会显示该图像的实时熵值和RGB三通道的灰度频度值,如下图所示为打开一个图像
点击“文件”,点击“保存”,在弹出的对话框中,选择想要保存的位置,并选择想保存的处理后图像的名称,点击“确定”,即可将处理后的图像文件保存。
2.2.2 选项菜单栏
点击“选项”,点击“重做”,可以使图像恢复到刚加载进平台的状态,恢复所有图像处理操作和按钮状。
2.3 基本功能介绍
2.3.1 RGB及旋转调整
本文采用的RGB数值计算方式:
图像旋转使用函数:imrotate(I)
用户可以转动RGB数值调整及旋转调整区的旋钮或输入数值或活动调整条都可以对图像的RGB数值及旋转进行调整
2.3.2 图像翻转
图像上下翻转使用函数:flipud(I)
图像左右翻转使用函数:fliprl(I)
点击基本图像处理按钮区的左右翻转或上下反转按钮,可以实现图像翻转,再次点击恢复到最初的图像
2.3.3 图像直方图
灰度直方图:灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其横坐标是灰度级,纵坐标是该灰度出现的频率(像素的个数,或个数与总数之比)
显示图像直方图使用的函数:imhist(I)
点击基本图像处理按钮区的“直方图”按钮,可以显示RGB图像三通道的灰度直方图,再次点击恢复
2.3.4 图像灰度图
加载进的原始图像为RGB三通道的图像,但是在大多数图像处理的操作中,我们往往需要处理的是灰度图,因此可以使用函数rgb2gray(I)函数将RGB三色图转化为灰度图,方便我们的日常处理。
点击基本图像处理按钮区的“灰度图”,显示图像灰度图和灰度直方图,熵发生相应改变,再次点击恢复
2.3.5 添加噪声
图像中的噪声主要有两种:高斯噪声和椒盐噪声。
高斯噪声:指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。
椒盐噪声:椒盐噪声又称脉冲噪声,它随机改变一些像素值,是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声往往由图像切割引起。
在Matlab中可以使用imnoise( )函数向图像中添加噪声,通过选择不同的传入值,可以选择添加的噪声类型和均值,在平台中,可以通过在输入框中输入数字调节需要添加噪声的均值,如下图所示。
2.3.6 反值和二值化
图像反值操作部分,主要通过线性灰度映射进行实现,线性灰度映射是最简单的一种映射方法,映射函数如下:
通过改变函数中的系数a、b可以对映射进行调整,而反值则是取a=-1,b=1(最大灰度值,因为图像灰度范围已经变为0~1)时的线性灰度映射效果。
二值化则是将图像变为完全由黑和白两种灰度值表示的图像,这类图像在图像的形态学操作(如:腐蚀、膨胀、击中击不中)中应用广泛,在程序中可以通过im2bw(I)函数实现RGB三通道向二值图像的变换
2.3.7 腐蚀和膨胀
腐蚀和膨胀是图像形态学操作中的重要部分。
腐蚀是缩小和细化图像中的物体,可以看做形态学的滤波操作,这种操作是将小于结构元的图像细节从图像中滤除,下面是图像中的结构元,腐蚀实质上就是将结构元在待处理的图像集合上进行与运算的过程。
膨胀与腐蚀不同,腐蚀是一种收缩或细化的操作,而膨胀则会扩张和粗化二值图像中的物体。这两个操作所使用的的结构元是类似的。
在程序中可以通过函数imerode(I)和imdilate(I)函数实现具体操作。
点击基本图像处理按钮区的“腐蚀”或“膨胀”,可以使用使用腐蚀和膨胀,对图像进行形态学操作,再次点击恢复
2.3.8 频域操作
为了有效和快速地对图像进行处理,常常需要将原定义在图像空间的图像以某种形式转换到另外一些空间,并利用在这些空间的特有性质方便地进行一定的加工,最后再转换回图像空间以得到所需的效果。
一般将从图像空间向其他空间的变换称为正变换,而将从其他空间向图像空间的变换称为反变换或逆变换。
一般变换后的图像,大部分能量都分布于低频谱段,这对以后图像的压缩\传输都比较有利。
离散傅里叶变换(DFT)描述了离散信号的时域表示和频域表示,经过傅里叶变换可以将时域上的图像转换为频域空间进行分析,是线性系统分析和信号处理中一种非常有效的数学工具。
傅里叶变换:
Fourier变换是在图像变换中最广泛使用的一种变换,但他也存在一些问题,它的参数都是复数,在数据描述方面是实数的两倍,因此提出了离散余弦变换(DCT),离散余弦变换类似于傅里叶变换,但是只使用实数,减少了一般的计算量。
如果函数f(x)是一个连续的实偶函数,那么在进行傅里叶变换时,后面的复数项为奇函数,积分后其值为0,只剩下实数项,这样就简化了运算。
离散余弦变换:
傅里叶变换的不足之处:利用傅里叶变换只能获得信号的整个频谱,很难获得信号的局部特征,特别是对于突变信号和非平稳信号,都难以获得希望的结果;其次,在图像分析时,有时需要将信号在时域和频域中的特性或空域和频域中的特性结合起来分析,傅里叶变换不能判断某一时间段的频率成分。
为了解决这个问题,1946年Gabor先提出了加窗的Fourier变换,一定程度上克服了该缺陷,但没从根本上解决问题,因为为了提高局部可观察性,就需要加大窗口,导致计算量大增,因此提出了小波变换,小波变换以局部化函数所形成的的小波基为基底展开,它是一个时间和频率的局域变换,可以通过伸缩和平移等运算功能对函数或信号进行多尺度的细化分析。
点击基本图像处理按钮区的“频域操作”下来菜单,可以有多种频域变换供用户选择,在“处理后”图像去显示不同效果,点击“选项”、“重做”或选择“无”恢复
2.3.9 平滑操作
图像平滑处理是空域滤波的一种常见的方法,是利用像素及像素邻域组成的空间进行图像增强的方法,目的是平滑图像或锐化图像,原理是对图像进行模板运算,比如模板卷积,图像平滑操作主要是为了消除图像中的噪声。
点击基本图像处理按钮区的“平滑操作”下来菜单,可以有多种平滑变换供用户选择,在“处理后”图像去显示不同效果,点击“选项”、“重做”或选择“无”恢复
注:平滑操作主要是针对噪声,请先为图像添加一些噪声以保证效果明显且操作图像为必须事先选择为灰度图
2.3.10 锐化操作
图像锐化的主要目的是得到边缘鲜明的图像或者需要得到图像的边缘轮廓,突出图像的边缘信息,加强图像的轮廓特征。
因为边缘和轮廓都位于灰度突变的地方。所以锐化算法的实现是基于微分作用。
对一幅图像施加梯度模算子,可以增强灰度变化的幅度,对于离散函数,可以利用差分来代替微分运算
点击基本图像处理按钮区的“锐化操作”下来菜单,可以有多种锐化操作供用户选择,在“处理后”图像去显示不同效果,点击“选项”、“重做”或选择“无”恢复
注:操作图像为必须事先选择为灰度图
2.3.10 滤波操作
频域增强技术是以卷积定理为基础的,通过卷积运算,将时域空间的图像卷积,变为频域空间的相应频谱的乘积。
常用的有:低通滤波器、高通滤波器、带阻带通滤波器、同态滤波器
点击基本图像处理按钮区的“滤波操作”下来菜单,可以有多种滤波操作供用户选择,在“处理后”图像去显示不同效果,点击“选项”、“重做”或选择“无”恢复
三、子程序介绍
3.1 引言
子程序中主要设计这四个功能:制作Ins图、运动物体识别、特征匹配、人脸识别,属于偏向于应用性,并且接近于中级图像处理的操作。
3.2 使用介绍
3.2.1 打开图像
直接点击“图像1”和“图像2”面板,选择需要进行操作的两张或一张图
注:前三个功能需要选择两张图像,第四个功能只需要选择一张图像
3.2.2 制作Ins风
选择两张图像后,点击“制作Ins风”按钮,使用图像相加,对图像进行二次曝光,以制作Ins风效果,等待片刻后,在下方“结果”显示区,显示制作Ins风后的结果。
使用到的函数为imadd(X,Y)
3.2.3 运动物体检测
图像间的减法运算通常用于提取两图之间的差异,以及去除背景等方面。在图像中运动物的检测中,通过前后两个图像的减法运算,可以了解运动物体移动的程度,计算出运动速度,并画出移动轨迹
选择两张图像后,点击“运动物体检测”按钮,使用图像相减,检测两帧之间的运动物体,等待片刻后,在下方“结果”显示区,显示运动物体检测后的结果。
使用到的函数为imsubtract(X,Y)
3.2.4 特征匹配
一幅图像中包含的信息纷繁复杂,光一个通道的像素就有上千个,图像还包含三个通道,每个通道的灰度级还是8bit量化的,处理起来是十分消耗数据计算和内存的,因此我们通常寻找一些图像中的“具有代表性”的点,通过对这些点进行分析、计算,来反映图像中的信息,寻找几幅图像之间的关联。
特征点有很多种类,可以是角点(如比较著名的Harris角点,图像灰度梯度变化强烈的点)、边缘点等等,但它们都有一个共同的目的:在不同的图像中计算机还可以认识它。所以,还有一些特征点不仅用反映特征点本身和附近点的的灰度变化规律进行不同图像间的识别,还在考虑了图像的旋转和尺度变化后,添加了描述子,其中十分著名的算法是SIFT(尺度不变特征变换),另外还有一些让人们广泛接受的算法,如:SUFT、ORG等等。
在这里因为Matlab没有内嵌SIFT算法,我仅使用Matlab自带的特征检测及匹配算法,进行两幅图像间的特征匹配。
由于篇幅及任务要求,本文对涉及到的算法原理并不给出更深层次的介绍。
选择两张图像后,点击“特征匹配”按钮,使用Matlab自带的特征检测和匹配算法,进行两图像间特征匹配,等待片刻后,在下方“结果”显示区,显示特征匹配后的结果。
3.2.4 人脸识别
整体思路是寻找图片中最大的连通域,将其认定为人脸。
第一个环节均值滤波,是为了减弱图像的相关细节部分,以免毛刺影响后期连通域的形成,二值化方便形态学处理,减少运算量。考虑到人脸有黑人和白人黄种人,黑人肤色较深,在二值化之后面部区域不容易形成较大的连通域,如果采取形态学边界提取的办法,就可以避免这个问题,形态学边界提取,只要结构元素够大,也可以形成较大的封闭连通域。
然后就是纵向闭合操作,这一步我选择采用竖向长条状的结构元素进行闭合运算,因为人的脸部和颈部以及头发和衣物等等都是纵向分布的,在进行形态学边界提取的时候,容易将这些靠近的成分割裂开来,这对连通域的判断极为不利,所以用竖向长条状的结构元素在在纵向进行闭合运算,将脸部上下部的区域重新连接起来。
紧接着我又用横向长条状结构元素进行横向腐蚀运算,这是因为,人的头部以下的身体部分存在有大量连通域的时候,容易对最大连通域的判决产生干扰,又因为下半部分,多半呈纵向分布,通过横向腐蚀可以将这些大块的连通域割裂开来,但是要注意的是,割裂程度不应太大,否则会使得上一步闭合操作丧失意义。
接着,由于背景杂物等因素,同样也会产生大量连通域,这会对最后结果的判决产生干扰,因此要予以剔除。
进行了层层筛选之后,在剩下的连通域里面挑一个最大的连通域,并且尺寸形状满足要求的用矩形框框起来作为人脸检测结果。
总结
本文对图像综合处理平台的功能、使用方法、算法原理等进行了介绍,为用户呈现了一款新型简单易用的图像处理平台,同时也为数字图像处理课程的教学贡献了一份力量。
同时在编写此应用平台的过程中,作者也对本课程学到的大部分知识进行了充分的复习,感觉收获巨大,另外,作者还对图像形态学处理、特征匹配、人脸识别等中级图像处理领域进行了自主学习,拓展了事业,补充了图像处理知识领域的空白,具有十分重要的意义。
本文创新点如下:
- 综合多项图像处理操作
- 图像熵值和RGB三通道灰度值实时显示
- 内嵌中级图像处理操作