system: [SYSTEM]

user: 4. 地震检测算法 4.1. 基于运动估计的地震分析 本文的地震分析的方法主要运用了运动估计，灰度值分析、目标分割、特征点匹配等计算机视觉技术。在本章我将要介绍本文的核心算法——运动估计算法和运动矢量平滑后处理。我将从宏块的划分到运动矢量的计算来详细的阐述该运动估计算法。最后再阐述运动矢量平滑后处理操作，使得到的运动矢量能够更好的应用于地震分析。 运动估计算法概述 运动估计的基本思想如下：将一副图像划分成一个个不重叠且大小相同的宏块，一个宏块就是一个整体、相对独立的单位，并认为宏块里面每个像素运动矢量都是一样的。在后一帧和前一帧图像内的相对确定范围内进行搜索，采用求和绝对误差(SAD)距离函数(如式1)进行匹配，最相似的块就是匹配块。然后由前一帧的宏块与后一帧的匹配块的相对位置，计算出运动位移。该运动位移就是当前宏块的运动矢量。 SAD ( i ， j ) = ∑ m = 1 M ∑ n = 1 N | f k ( m ， n ) − f k − 1 ( m + i ， n + j ) | (1) 搜索策略是运动估计算法的核心，本文采用菱形搜索算法，使用双模板搜索的方法，分别是大菱形搜索模板(LDSP)和小菱形搜索模板(SDSP)，如图2、图3所示： 图2. 大菱形模板 图3. 小菱形模板 大菱形搜索策略采用中心生长策略，从最佳的起始点开始搜索，先由大菱形模板开始搜索，计算模板中每个宏块的SAD值，根据局部最优的宏块所在的位置(顶点、边和中心)不断生长，将该局部最优块变为下一次大菱形模板的中心继续搜索，直到其局部最优的宏块在大菱形模板的中心。停止生长，换成小菱形模板进行中心周围的4个宏块的搜索，最终确定最佳的匹配块，如图4。 匹配完成后就能获取该视频序列的运动矢量，但是由于图像质量，噪声等问题，会出现一些运动矢量不正常的问题，如图5和图6所示： 这些噪声信息对地震视频判读的准确性影响很大。如图5，会导致算法将其识别为发生地震的视频。图6虽然发生了地震，但是也会影响算法对改视频中地震部分截取的结果不准确，甚至会将整个视频截取下来，这样做就没有意义了。因此对运动矢量进行后处理是十分必要的。 针对一些全程噪声影响的运动矢量序列，先采用每一帧图像减去整个图像序列的运动矢量的平均值如式(2)。这样做可以将整体的运动矢量的向下降。但是如果是正常的运动矢量序列，其大部分帧的矢量 图4. 最终匹配结果 图5. 无震动图像序列的运动矢量 图6. 有震动图像序列的运动矢量 都为0，整个序列的平均值就比较小，对这个操作的就不敏感。 M V i = M V i − 1 n ∑ k = 1 n   M V k (2) 经过该操作处理后如图7和图8所示： 效果显而易见，孤立的噪声向量都被过滤掉了，只剩下发生震动的帧的运动矢量保留了下来。虽然这样的过滤可能会损失掉一些信息，但是在截取和判断该视频是不是地震视频的过程中，这些信息并不这样。后处理操作也有利于获取最大震动的帧的帧号，以便之后的过滤闪光和规律物体运动异常的操作。 图7. 无震动后处理 图8. 过滤孤立噪声后的结果 4.2. 基于灰度值分析与特征点匹配的地震误报滤除 上一小节我们已经获取图像序列的运动矢量以及最大的矢量。但是计算机会将夜间灯光的闪烁，车辆或者行人等物体进行有规律的运动场景识别成地震。因为这些视频场景复杂，内容中全程有物体在运动，其图像序列的运动矢量形式千奇百怪，有些与正常震动的运动矢量千差万别，有些却与其十分相似。所以基于这些因素，我们并不能通过简单的设置个阈值来区分这类异常和正常的震动情况。 4.2.1. 亮度剧烈变化场景 在监控视频中，闪光现象是经常出现的。亮度剧烈变化也存在两种情况，一种是局部亮光的移动(涉及到目标分割，放到下一节中详细讨论)，一种是整个画面的亮度发生剧烈改变。我们将图像统一转化成灰度图，每个像素的灰度值来表示图像的亮度。方法如下： 1) 在获取每一帧的运动矢量的同时，统计该帧的平均灰度值如式(3)。获取该图像序列的灰度值序列List_AVG并求出平均值AVGs。 AVG = 1 n m ∑ x = 1 n ∑ y = 1 m p i x ( x ， y ) (3) p i x ( x ， y ) 为坐标为 ( x ， y ) 的像素点的灰度值，n，m分别是图像的长宽。AVG为该帧的灰度平均值。 2) 获取灰度值最大值MAX以及它对应的序号L。 3) 在最大值对应的序号的前后 λ 帧图像进行像素值的统计，判断这 2 λ 帧中灰度值与平均灰度值的差的绝对值大于 α 的个数所占的比例是否大于 β 以上，是就判断该地震视频很有可能是高亮闪光或者灯光突然暗掉所造成的误判。否则就进行之后的操作。 这样我们就可以过滤掉大部分由于图像亮度突然发生剧烈变换所造成的异常。 4.2.2. 物体规律运动场景 在监控中，物体的规律运动是时常出现的情况，车辆和行人是这一类物体的代表。规律运动指的是物体向着某个特定的目的地运动的。这类物体通常从监控视频中的一端出现然后消失在监控视频的另一端，与正常的震动视频的运动矢量序列分布情况相似。本文从图像的内容出发，观察物体的运动情况。结果发现其运动轨迹大致都是朝着一个方向前进，具有一定的规律。而地震时，画面的震动是上上下下，无规律。以这个为出发点就可以将正常的地震视频和该类异常区分开来。为了计算出物体运动具有一定的规律性，就必须先将该运动目标分割出来，再与相邻帧进行匹配。结合以上的情况，该算法的流程如下： 1) 获取最大运动矢量所对应的序号(即帧序号)，再对其前后λ帧进行遍历，采用背景差分的方法，进行高斯背景建模。 2) 通过建立好的背景模型进行移动目标的分割，再进行SURF特征的提取，匹配。 3) 通过匹配的结果来确认相邻匹配帧之间目标的运动关系，保存并与下一次匹配结果进行联系。最终确定目标的运动方向以及其规律性。 运动目标检测有很多：块匹配法，光流法，帧差法，背景差分法。本文采用背景差分的方法，因为该方法使用于背景基本不变的场景，符合本项目的应用背景。1) 监控摄像头基本是静止的。2) 检测的视频一般较短，不会发生太阳光照亮度的变化。基于以上条件采用背景差分的方法具有快速准确的优势。 背景差分法的核心就是差分，即通过当前帧(先转换为灰度图SOURCE)与建立好的背景(BG)进行相减 [ 13 ]，就可以获得一副灰度值差值图。差值图的灰度值大部分应该是0左右的，还有一部分是绝对值较大的正值和负值。这些正值和负值对应的像素点所在的区域就是运动的目标。由于既有正值又有负值无法设置一个阈值 λ 来把背景和前景区分开来，就将正负灰度值进行取绝对值操作。再将该差值图进行二值化操作，这样我们就获得了一幅灰度值只有0~1的掩膜图(MASK)。0区域代表背景，1区域代表前景。通过将这张掩膜图与原图相乘，就得到运动目标的图像(SEG)。本方法公式可以表示为式(4)，(5)： MASK ( x ， y ) = 1     if   a b s ( SOURCE ( x ， y ) − BG ( x ， y ) < λ )     else   0 (4) SEG ( x ， y ) = MASK ( x ， y ) ∗ SOURCE ( x ， y ) (5) 但是通过观察可以发现，该运动目标不完整，有一小部分缺失。为了保存更多的运动目标的特征，我们要让目标分割出来的图像更加的完整。保存更多的特征就意味着目标匹配的稳定性就会更高。因此我们对掩膜图进行膨胀操作，增加前景部分的面积。但是还是有些缺失。基于以上的情况，我们对每个连通域求取外接矩形，再对矩形进行填充，然后与原图相乘。显然，我们得到了完整的前景图。分割结果如图9所示(从左到右从上到下依次是：背景差分法求得的掩膜图、膨胀处理后图、外接矩形图、目标分割图)： 本文采取特征点匹配的方式采取目标匹配，描述目标的特征采用的是SURF特征。SURF特征是一个多维的向量，它通过计算特征点周围的水平和垂直方向像素的哈尔小波变换，求出特征的方向。再对特征点周围20 × 20的区域进行划分，形成16个子区域，每个区域求取4个特征分量 [ 14 ]。从而，形成了一个64维的SURF特征描述子。它是SIFT特征的衍生版本，不但有着SIFT特征的优点，还有着较快的运算速度和较强的鲁棒性。适合监控视频中，目标物体随着运动的进行发生变大或变小的场景。匹配效果如图10所示： 接下来就是否是规律运动的判断，两帧之间的运动目标中匹配的特征点有 β 个，通过这些特征点可以求出运动目标的运动矢量。在2D图像平面中，物体运动的方向一共有4种： X + ， X − ， Y + ， Y − 。 相邻两张匹配图像的运动目标的相对位置可以用这四个方向中包含X，Y的任意两个方向表示。当前帧物体的运动方向可以由式(6)、(7)表示： 图9. 目标分割过程图 图10. 特征点匹配图 D X = X +     if   c o u n t ( d x o b j 2 − d x o b j 1 > 0 ) S U M < γ     else   X − (6) D Y = Y +     if   c o u n t ( d y o b j 2 − d y o b j 1 > 0 ) S U M < γ     else   Y − (7) DX和DY是运动目标的二维平面上的运动方向， d x o b j 1 ， 2 表示当前帧和前一帧的其中一个特征点的X坐标(以图像左上角为坐标原点)， d y o b j 1 ， 2 表示当前帧和前一帧的其中一个特征点的Y坐标， c o u n t ( d x o b j 2 − d x o b j 1 > 0 ) S U M 这个表达式表示当前帧的目标中特征点的X或者Y坐标大于前一帧的个数占总个 数的比例。如果比例小于 γ 则为运动方向为 X + 或者 Y + ，否则为 X − 或者 Y − 。从而可以确定目标的运动方向为( X ? ， Y ? )。接着获取之后的匹配结果进行分析，当方向序列中有着连续的相同的方向，则将该地震视频判断为物体规律运动场景异常。 4.2.3. 烈度的估计 两种场景都能用以上的方法进行过滤了，接着就是通过已获得的最大的运动矢量来估计加速度和烈度。目前已给出的地震视频中没有给出对应监控摄像头的相关硬件参数和内容的长度的一些标定。所以单单通过运动矢量无法完全准确的计算出地震的加速度。因此我们通过参数的拟合来快速估计地震的烈度。利用10个地震视频拟合出了一个经验函数，如式(8)所示： a = MAX ( MVS ) ∗ 50 30 ∗ Parameter (8) MAX ( MVS ) 为当前地震视频的最大运动矢量，Parameter为烈度系数3。通过这个经验函数来对剩下的地震视频进行预测。