摘要 图像异常指相对恒定的连续监测图像突然出现异常迹象,其在线辨识广泛应用于治安、环境、交通、生产过程的监测。本文研究异常图像的在线辨识算法和实现技术,提出了基于BP神经网络的图像异常辨识学习算法。
关键词 图像处理,图像分析,图像比较和BP神经网络。
图像处理的流程如图1所示。 (图片)
图1 图像处理流程图 1 图像预处理算法与实现
初始图像是24位真彩色图像,图像的每一像素由其RGB分量来表示,所以图像文件的很长。在对初始图像进行预处理时,要先对图像进行转换。一种方法是将图像转换成相应的256级灰度图像,用一个字节即可表示图像的一个像素。在将图像转换成灰度图像后,根据需要可以对图像进行灰度均衡,目的是增加像素灰度值的动态范围从而达到增强图像整体对比度的效果[4],从而有利于图像的比较。
1.1 24位真彩色图像
一个BMP文件大体上分成4个部分:
· 位图文件头:这部分指定了文件类型bfType,文件大小bfSize和文件头到实际的位图数据的偏移字节数bfOffBits等。
· 位图信息头:这部分包括了图像的一些属性,有宽度biWidth,高度biHeight,深度biBitCount等。
· 调色板:有些位图需要调色板,有些位图,如真彩色图,不需要调色板,它们的位图信息头后面直接是位图数据。
· 实际的图像数据:对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值,对于真彩色图,图像数据就是实际的RGB值。
通常,在表示真彩色图像时,每个像素直接用R,G,B这3个分量字节表示,而不采用调色板技术,故而R,G,B分量的值直接从图像数据中取。一般来说,BMP文件的数据是从下到上,从左到右的。即从文件中最先读到的是图像最下面一行的左边第一个像素,然后是左边第二个像素.,……,接下来是倒数第二行左边第一个像素,左边第二个像素,……,依次类推,最后得到的是最上面一行的最后一个像素。对于真彩色图,图像数据就是实际的R,G,B值,从左到右依次是B,G,R的值。
1.2 初始图像转换成256级灰度图像
灰度图像的每个像素有一个 0(黑色)到 255(白色)之间的亮度值,共256个灰度级。
1.2.1.灰度图
灰度图是指只含亮度信息,不含色彩信息的图像,就像平时看到亮度由暗到明的黑白照片,变化是连续的。因此,要表示灰度图,就需要把亮度值进行量化。通常划分成0到255共256个级别,0最暗(全黑),255最亮(全白)。
但是,BMP格式的文件中并没有灰度图这个概念,但可以很容易地用BMP文件来表示灰度图。方法是用256色的调色板,只不过这个调色板有点特殊,每一项的RGB值都是相同的,也就是说RGB值从(0,0,0),(1,1,1)一直到(255,255,255)。其中,(0,0,0)是全黑色的,(255,255,255)是全白色的,中间的是灰色的。这样,灰色度图就可以用256色图来表示了。对于R=G=B的色彩,带入YIQ或YUV色彩系统转换公式中可以看到其颜色分量都是0,即没有色彩信息[1]。
1.2.2. 真彩色位图转换成灰度图
要将24位真彩色位图转换成灰度图,首先必须计算每种颜色对应的灰度值。灰度和RGB颜色有如下的对应关系:
Y = 0.299R + 0.587G +0.114B
然后,将图像的每一个像素的RGB值替换成相应的灰度值,从而24位真彩色图像也就被转换成灰度图像了。
(图片) (图片)
图2 24位真彩色图像 图3转换后的灰度图像 1.3 将灰度图像均衡化
灰度均衡有时也称直方图均衡,目的是增加像素灰度值的动态范围从而达到增强图像整体对比度的效果[4]。
1.3.1算法设计
按照图像的概率密度函数(PDF,归一化到单位面积的直方图)的定义[1]:
P(x)=H(x)/ A0
其中,x为灰度级,H(x)为直方图,A0为图像的面积。
设转换前图像的概率密度函数为Pr(r),转换后图像的概率密度函数为 Ps(s)。其中r,s分别表示转换前后的灰度级,转换函数为s=f(r)。
由概率论知识,我们可以得到:
Ps(s)=Pr(r)· dr / ds
这样,如果想使转换后图像的概率密度函数为1(即直方图是均匀的),则必须满足:
Pr(r)=ds / dr
等式两边对r积分,可得:
s=f(r)=∫Pr(u)du=∫H(u)du / A0 (u=0~r)
该转换公式被称为图像的累积分布函数(CDF)。
上面的公式是被归一化后推导出的,对于没有归一化的情况,只要乘以最大灰度值(DMax,对于灰度图就是255)即可。灰度均衡的转换公式为:
DB=f(x)=DMax·∫H(u)du / A0 (u=0~x)
对于离散图像,转换公式为:
DB=f(x)=DMax / A0·∑Hi ( i=0~x)
式中x为灰度级,Hi为第i 级灰度的像素个数。
2 图像特征的提取
在数字图像处理中,一种最简单且最有用的工具是灰度直方图。它概括了一幅图像的灰度级内容,任何一幅图像的直方图都包括了可观的信息,某些类型的图像还可由其直方图完全描述。
2.1.灰度直方图
灰度直方图是灰度级的函数,反映的是一幅图像中各灰度级像素出现的频率。它是图像的重要特征,反映了图像灰度分布的情况[5]。
灰度直方图也有另外一种方式的定义[2]:假设有一幅由函数D(x,y)所定义的连续图像,它平滑地从中心的高灰度级变化到边沿的低灰度值。我们可以选择某一灰度级D1,然后定义一条轮廓线,该轮廓线连接了图像上所有具有灰度级D1的点。所得到的轮廓线形成了包围灰度级大于等于D1的区域的封闭曲线。将一幅连续图像中被具有灰度级D的所有轮廓线所包围的面积称为该图像的阈值面积函数A(D)。直方图可定义为:
H(D)=lim (A(D)-A(D+△D)) / △D=-dA(D) / dD (△D→0)
由上式可以得出结论:一幅连续图像的直方图是其面积函数的导数的负值。负号的出现是由于随着D的增加A(D)在减小。如果将图像看成是一个二维的随机变量,则面积函数相当于其累积分布函数,而灰度直方图相当于其概率密度函数。
对于离散函数,我们固定△D为1,则上式变为:
H(D)=A(D)-A(D+1)
2.2. 绘制图像的灰度直方图
以灰度级为横坐标,纵坐标为灰度级的频率,绘制频率同灰度级的关系图就是灰度直方图。在画直方图的时候,先选出象素最多的灰度级作为基准,其余灰度级以适当的比例在图上一一画出。(图片)
图4的灰度直方图 3 图像异常在线辨识算法与实现
经过了上面对初始BMP文件图像的预处理之后,接下来的工作就是对图像进行比较了。图像的比较有多种算法,最简单的一种是对图像的灰度直方图进行粗略的比较,通过计算前后两幅图像的灰度直方图的均方差以大致了解两幅图像的差异程度。但是这种方法在实际实现中的效果不是很理想,这主要有两方面的原因:(1)图像直方图反映不出图像像素的具体位置,更糟糕的情况是两幅完全不一样的图像有可能对应于同一幅灰度直方图;(2)图像像素的多少也会产生影响。
综合以上情况,采用了另一种方法,即计算两幅图像的相关程度,它的基本原则就是通过相关函数的计算来确定图像的相似程度。
3.1. 算法设计
给定两个函数f(t)和g(t),它们的互相关函数定义为:
R(v)=f(t)·g(-t)=∫f(t)·g(t+v)dt
(-∞< t <+∞)
对于离散图像,我们可以用下列相关函数作相似性测度:
R=∑f(t)·g(t)/(sqrt(∑f2(t))·sqrt(∑g2(t)))
其中,函数f(t)和g(t)分别是要比较的两幅图像的某种相同属性,R就是两幅图像的相关系数。
根据施瓦兹不等式可以知道上式中0<R≤1,并且仅在比值f(t)/g(t)为常数时取极大值1。R值越大,说明两幅图像的相似程度越高。
以上在比较两幅图像的时候,采用的是图像的灰度直方图,由于灰度直方图去除了像素的位置特征,这使得在进行图像比较的时候可能会出错。这里提供的一种方法就是先将图像分成几个部分,然后分别对图像进行上面的几步预处理,最后,对两幅图像的相应部分作比较,只要其中的某一部分不相同,即可认为这两幅图像不一致。
4 基于BP神经网络的图像异常辨识学习算法
BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传人,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。
采用BP算法的多层前馈网络是至今为止应用最广泛的神经网络,在多层前馈网的应用中,以图5所示的单隐层网络的应用最为普遍。一般习惯将单隐层前馈网称为三层前馈网或三层感知器,所谓三层包括了输入层、隐层和输出层。
(图片)
图5 单隐层BP网络 当网络设计完成后,要应用设计值进行训练。训练时要对所有样本正向运行一轮并反向修改权值一次称为一次训练。在训练过程中要反复使用样本集数据,但每一轮最好不要按固定顺序取数据。通常训练一个网络需要成千上万次。
网络的性能好坏主要看其是否具有很好的泛化能力,而对泛化能力的测试不能用训练集的数据进行,而要用训练集以外的测试数据来进行检验。一般的作法是,将收集到的可用样本随机地分为两部分:一部分作为训练集,另一部分作为测试集。如果网络对训练集样本的误差很小,而对测试集样本的误差很大,说明网络已被训练得过度吻合,因此泛化能力很差。
在隐节点数一定的情况下,为获得好的泛化能力,存在着一个最佳训练次数。为了说明这个问题,训练时将训练与测试交替进行,每训练一次记录一次训练均方差,然后保持网络权值不变,用测试数据正向运行网络,记录测试均方差。利用这两种误差数据可绘出图6中的两种均方误差随训练次数变化的曲线。
(图片)
图 6 均方误差随训练次数变化曲线 从误差曲线可以看出,在某一个训练次数之前,随着训练次数的增加,两条误差曲线同时下降。当超过这个训练次数时,训练误差继续减小而测试误差则开始上升。因此,该训练次数即为最佳训练次数,在此之前停止训练称为训练不足,在此之后则称为训练过度。
根据以上BP算法的基本思想,我们在进行图像比较时,也可采用类似的算法。先将一些图像分为两组:一组为相似图像,另一组为与第一组不相似的图像;然后,也让计算机进行辨识,把输出结果与预期结果进行比较,从而确定出一个界限范围来,只要满足这个范围,两幅比较图像即相似,否则为不相似。
5. 参考文献
[1] 何斌,Visual C++数字图像处理, 人民邮电出版社, 2001.4
[2] Kenneth R.Castleman, 数字图像处理, 电子工业出版社, 2002.2
[3] 韩力群, 人工神经网络理论、设计及应用, 化学工业出版社, 2000.1
[4] 章毓晋, 图像处理和分析, 清华大学出版社,1999.2
[5] 贾永红, 计算机图像处理与分析, 武汉大学出版社, 2001.9
12/23/2004
|