首页 理论教育镜头突变检测实现方法

镜头突变检测实现方法

【摘要】:目前为止,众多学者已经对镜头突变检测进行了深入的研究和实验验证,并且大都取得了令人较为满意的检测结果。根据YUV模型各分量可分离的特点,利用Y分量分块直方图对镜头进行突变检测,利用U分量对光照的不敏感性排除由光照引起的误检。在本节的后续描述中将重点介绍4种较为经典的镜头突变检测方法。

镜头突变是最常用的镜头转换类型。镜头突变时在前一镜头的最后一帧和后一镜头的第一帧之间,视觉特征会发生较为显著的变化,故镜头突变是一种较容易检测的镜头转换类型。目前为止,众多学者已经对镜头突变检测进行了深入的研究和实验验证,并且大都取得了令人较为满意的检测结果。例如,文献[1]提到了一种基于网络模型的镜头突变检测算法,该算法通过对线性特征空间进行由粗到细的两步模糊聚类实现镜头突变的检测。文献[2]提到了一种新的基于BP神经网络的视频镜头突变检测算法,该算法选取模板匹配二次差分和直方图二次差分作为特征,利用神经网络的自组织和自学习能力实现镜头突变检测,通过闪光检测提高检测的可靠性。为有效避免光照及视频四周插入的广告字幕对镜头检测的影响,文献[3]提到了一种基于YUV颜色空间的镜头突变检测方法。根据YUV模型各分量可分离的特点,利用Y分量分块直方图对镜头进行突变检测,利用U分量对光照的不敏感性排除由光照引起的误检。在本节的后续描述中将重点介绍4种较为经典的镜头突变检测方法。

4.1.2.1 基于模板匹配的算法

基于模板匹配的算法通过计算相邻两视频帧之间相应像素的亮度或色调的差值来检测视频镜头[4]。最简单的处理方法是首先计算相应像素间差值的绝对值和的平均值D(i,i+1),然后把D(i,i+1)与设定的阈值T进行比较,确定是否存在视频镜头转换,即

式中,i和i+1是相邻的两帧图像,其大小为H·W;pi(x,y)和pi+1(x,y)分别是第i帧和第i+1帧像素(x,y)的亮度值。

如果两帧的平均值D(i,i+1)比设定的阈值T大,那么我们可以认为第i帧和第i+1帧之间存在镜头转换。这类镜头边界检测算法对基于简单的相邻帧之间的平均亮度差异进行比较,不能区分运动发生的位置及方向,不能确定是大体积目标的小幅度运动,还是小体积目标的大幅度运动。此外,这类算法对物体运动和摄像机运动都非常敏感。

4.1.2.2 基于直方图差异的算法

基于直方图差异的算法首先将相邻视频帧的像素颜色、亮度或者灰度划分为N个等级,然后统计每个等级的像素数,绘制直方图,最后通过比较相邻帧的直方图的差异确定场景边界。相邻帧之间的直方图差异计算公式如下:

式中,i和i+1是相邻的两帧图像,其大小均为H·W;hi(k)和hi+1(k)分别是第i帧和第i+1帧图像的直方图;N为灰度级数或颜色数。

基于直方图差异的算法是当前应用最广泛的镜头边界检测算法,它不仅实现简单、方便,而且适用性强,对于大多数视频都能取得较好的检测效果。这类算法通过统计图像帧的颜色、亮度或者灰度分布的总体数量,对摄像机的全局慢速运动、场景内目标的运动具有良好的鲁棒性,但是对于场景内目标的快速变化和镜头渐变情况可能会漏检或者误检。其原因在于这类算法没有考虑镜头内部局部运动所引起的内容变化。

为了消除或者降低局部运动、干扰等对边界检测结果造成的影响,就可以对每一图像帧进行分块处理,舍弃直方图差异最大的子块,利用剩余子块的直方图差值来确定边界,改进后的算法对于检测包含摄像机镜头推移和缩放等视频,效果明显[4]

以上算法都是通过比较相邻帧之间的直方图差异Z(i,i+1)与设定的单一阈值T来确定分割边界的,若Z(i,i+1)>T,则把此处视作分割边界。这些算法能够很好地处理镜头突变情况,但是镜头渐变是一个持续的过程,并且相邻帧之间的直方图差异Z(i,i+1)比镜头突变要小很多,因此采用单一阈值T很难准确检测镜头渐变。为此,文献[5]提到了使用双阈值分割算法来检测镜头突变和渐变。这种算法设定3个阈值Th、Tl和Tk。如果相邻帧直方图差异Z(i,i+1)>Th,则视作发生了镜头突变;如果Th>Z(i,i+1)>Tl,则视作镜头开始渐变,此时开始累积相邻帧之间的直方图差值,当累积帧差值达到Tk后,视作镜头渐变过程结束。若累积过程中Z(i,i+1)下降到Tl以下,则视作无视频镜头转换。这种算法对视频镜头的突变和渐变分别用不同的设定阈值进行检测,能够取得比较好的视频分割效果。但是也存在一些不足,视频内容变化不明显的镜头渐变,可能会出现累积差值没达到Tk之前就停止累积的情况;镜头渐变过程中如果出现Z(i,i+1)>Tl的相邻帧,则也会导致累积过程结束。这两种情况都会造成镜头渐变的漏检。

4.1.2.3 基于运动补偿的算法(www.chuimin.cn)

为了消除同一视频镜头内的目标运动以及摄像机运动对视频边界检测带来的影响,文献[6]提到了一种基于运动补偿的算法。这种算法首先对视频中各图像帧进行分块处理,假设第k帧的第i块为bi(k),第k+1帧的相应块为bj(k+1),则这两帧之间的差异Dk,k+1(i)定义为

式中,D[bi(k),bj(k+1)]是通过比较2个对应图像块的像素亮度值来计算得到的。

假设N对应第k帧的块bi(k)的第k+1帧的预测块数量,且计算所有图像块的差异值作归一化处理得到dk,k+1(i),那么两帧之间的差值可以由式(4-1-4)计算得到:

式中,ci为各个块的权重

这种算法先对相邻两帧的各个块进行运动补偿,再通过计算各个子块的差值得到相邻两帧的差值,可以有效避免由视频帧内部的快速运动引起的错误检测。但是这种算法只能减小同一镜头内的摄像机运动和目标运动对边界检测的影响,并不能消除这些影响。其原因在于这种算法对图像帧的块内的局部运动不起作用。

4.1.2.4 基于DCT系数的算法

基于DCT系数的算法主要应用于压缩域视频分割,目前此类算法多是针对MPEG格式的视频设计的。文献[7]提到了基于DCT系数的场景变化检测算法。这种算法首先把图像帧分割成8×8个子块,然后任选图像帧的ρ个子块和每个子块中的α个DCT系数,用这ρ×α个DCT系数组成向量:

式中,Vi表示第i帧图像的特征;k=ρα。

相邻两图像帧之间的差异由式(4-1-6)计算得到:

如果D(i,i+1)大于设定阈值,则视作镜头边界存在,反之则不存在。这种算法只是粗略计算两帧之间的差异,对于视频镜头突变可以达到较好的检测效果。