具体实施方式
本发明提供一种快速提取关键帧的方法和装置,它能够在保证查准率的前提下,快速提取关键帧。下面结合附图对本发明作详细描述。
一方面,本发明提供一种快速提取关键帧的方法,它包含有两种技术方案,此处分别采用实施例一和实施例二对该两种技术方案进行介绍。
实施例一
如图2所示,本实施例快速提取关键帧的方法,包括:
步骤201:确定视频的帧序列中首帧与尾帧的特征值之差大于设定的阈值;
现有技术中,帧特征值的计算方法有直方图、RGB颜色分量和边缘(轮廓)特征值等方法。本实施例中,特征值以RGB颜色分量为例。
如果首帧与尾帧的特征值之差大于设定的阈值,则说明该帧序列包含有多个镜头,因此,为了在各镜头中提取关键帧,还需要进行后续步骤。
步骤202:将帧序列分割为两个帧序列,并记录分割位置,所述两个帧序列中前一帧序列的尾帧与后一帧序列的首帧为同一帧;
该步骤202中,将帧序列分割为两个帧序列,该两个帧序列中前一帧序列的尾帧与后一帧序列的首帧为同一帧的原因是:在分割后,通常会存在这种情况,即,相邻的两个帧序列属于同一个镜头。由于该步骤202中的分割位置是随机选取的,所以可能会在一个镜头帧序列的中间某个位置进行了分割,此时,经过后续分割后,就会出现相邻帧序列属于同一镜头的情况。因此,为了保证所提取的关键帧属于不同的镜头,就需要识别出这种情况。该步骤中的分割时使相邻帧序列包含有同一帧,因此,如果已知相邻帧序列都只包含有一个镜头,则不用进行额外的比较,就能够推知该相邻帧序列属于同一镜头。而如果分割时使相邻帧序列不包含有同一帧,则还需要进行额外的比较,来判断它们是否属于同一个镜头,这样就会增加计算量,耗费较多时间。
步骤203:在分割后的所有帧序列中,根据相邻帧序列的首帧与尾帧的特征值之差情况,处理所记录的分割位置,并找出首帧与尾帧的特征值之差大于所述阈值的帧序列,执行步骤202,如果未找出所述帧序列,则执行步骤204;
该步骤203中,首先根据相邻帧序列的首帧与尾帧的特征值之差情况,处理所记录的分割位置,这主要是用于判断出相邻帧序列属于同一镜头的情况,然后对这种情况下相邻帧序列的相邻位置所对应的分割位置进行处理。处理的目的是为了保证后续提取关键帧时的查准率。此处的处理可以是标记该相邻位置所对应的分割位置与相邻的两个帧序列各自的首尾帧均属于同一镜头,或者直接将该分割位置删除从而合并该相邻两个帧序列。
另外,该步骤203中还找出了首帧与尾帧的特征值之差大于所述阈值的帧序列,执行步骤202,从而使得包含多个镜头的帧序列都会被不断的进行再分割,直至所有的帧序列中仅包含一个镜头。需要说明的是,本发明方法尽管会在一个镜头的中间某些位置对该镜头的帧序列进行分割,但最后在镜头的边界处必然会进行了分割(不然的话,就会不断的执行步骤202),最终实现了镜头分割,因此,所记录的分割位置中,包括与镜头的边界帧相对应的分割位置,另外还包括与镜头内某些帧相对应的分割位置,而与镜头内某些帧相对应的分割位置已经经过处理,因此,根据处理后的分割位置,就能够方便的提取出关键帧。
步骤204:根据处理后的分割位置,提取关键帧。
经过前面的步骤后,此时根据处理后的分割位置,就能够方便的提取出关键帧。
本实施例是将帧序列的首尾帧特征值之差与设定的阈值进行比较,判断其是否包含多个镜头,然后将包含多个镜头的帧序列不断进行分割,直至其只包含一个镜头,从而最终实现了镜头分割。本实施例没有进行逐帧比较,大大减少了运算量,节省了时间,并且能够保证所提取的关键帧属于不同的镜头,因此,本发明能够在保证查准率的前提下,快速提取关键帧。
本实施例中,步骤202对帧序列进行分割的位置可以选择帧序列中的任意位置,均能实现本发明的技术方案。为了使分割过程更加方便和快速,分割的位置优选为帧序列的中间位置,即对帧序列采用二分法处理,具体如下:
如果帧序列的帧个数为n,并且n为偶数,则分割位置为n/2,分割后形成的两个帧序列的帧个数分别为n/2和n/2+1;
如果帧序列的帧个数为n,并且n为奇数,则分割位置为(n+1)/2,分割后形成的两个帧序列的帧个数均为(n+1)/2。
另外,步骤203中根据相邻帧序列的首帧与尾帧的特征值之差情况,处理所述分割位置,具体为:如果存在两个相邻的帧序列,其首帧与尾帧的特征值之差均小于所述阈值,则从所记录的分割位置中,删除该两个帧序列相邻位置所对应的分割位置。在经过至少两次分割后,会产生相邻帧序列属于同一个镜头的情况,因此,为了使所提取的关键帧属于不同的镜头,确保查准率,则删除该两个帧序列相邻位置所对应的分割位置。删除之后,所记录的分割位置中,就只包含有与镜头的边界帧相对应的分割位置,此时,就可以根据所记录的分割位置,直接提取边界帧作为关键帧。而如果需要在一个镜头内提取多个关键帧的话,则可以根据所述边界帧的位置,计算并提取出镜头内部位置的帧作为关键帧。
并且,本发明中为了更快速的提取关键帧,所述方法进一步包括:预先设定分割次数,当所述分割的次数达到预先设定的分割次数时,结束步骤203,执行步骤204。如果对关键帧查全率要求不高,比如只需要获取少量关键帧时,那么使用较少的分割次数,使步骤203尽早结束,这样就能更快速的提取关键帧。
实施例二
如图3所示,本实施例快速提取关键帧的方法,包括:
步骤301:确定视频的帧序列中首帧与尾帧的特征值之差小于设定的阈值;
步骤302:从所述帧序列的任意位置,提取关键帧。
本实施例中首帧与尾帧的特征值之差小于设定的阈值,说明该视频仅包含一个镜头,此时,可以从视频帧序列的任意位置提取关键帧。由于在步骤301中已经获取了首尾帧的数据,因此,优选提取首尾帧作为关键帧,以提高速度。本实施例仅用到了一次比较,就能够提取关键帧,大大减少了运算量,节省了时间,并且能够保证所提取的关键帧属于不同的镜头,因此,本发明能够在保证查准率的前提下,快速提取关键帧。
上述实施例一是针对视频中包含多个镜头的情况,该情况实际应用中较为常见;实施例二是针对视频中仅包含一个镜头的情况,该情况较为少见。下面结合对一具体视频提取关键帧的过程,对上述实施例一作进一步描述。
为了更容易理解本发明,先简要说明一下现有技术中关键帧的提取方法。
如图4所示的一部视频,各帧用小方块表示,黑色方块代表一个镜头的开始帧,其中,第1帧和第2帧组成了第一个镜头,第3帧至第6帧则组成了第二个镜头,第7帧到第N帧则组成了其它多个镜头。
现有技术中,为了提取关键帧,采用的方法是:使用逐帧比较的方法检测出镜头的边界,然后在各个镜头中提取关键帧。逐帧比较需要比较各帧的特征值(特征值以RGB颜色分量为例),首先计算各帧的RGB分量值,第x帧的特征值记为f(x),然后计算相邻两帧的帧差|f(x)-f(x-1)|,如果大于预先设定的阈值F的话,那么就认为在第x帧处发生了镜头转换。这种方法需要对各帧的特征量都要计算一次共n次计为Un,每对相邻帧都要比较一次帧差共计算n-1次计为Vn,那么总计算量为Un+Vn=2n-1。
现有技术中提取关键帧时,是将视频的关键帧记录到xml(可扩展标记语言)文件中进行打点,当需要提取关键帧时直接读取xml文件中帧的位置,来获取关键帧。本发明中,对帧序列的分割也是通过在文件中打点来实现的,打点位置即为分割位置。
下面结合图5详细说明使用本发明实施例方法对图4所示的视频提取关键帧的过程,该过程使用二分分割法并通过打点来实现对帧序列的分割,并且本实施例视频的帧序列中帧个数n为偶数,各帧分别以I1-In来表示。
如图5所示,首先,在首尾两帧I1和In处打点并判断|f(n)-f(1)|>F是否成立,如果成立,说明帧序列中包含有多个镜头,那么在中间位置In/2处打点,从而使帧序列分割为I1-In/2和In/2-In两个帧序列,该两个帧序列中前一帧序列的尾帧与后一帧序列的首帧为同一帧,均为In/2;然后再分别计算分割形成的两个帧序列的首尾帧特征值之差,即|f(n/2)-f(1)|>F和|f(n)-f(n/2)|>F是否成立,如果成立,说明该两个帧序列仍然包含有多个镜头,那么继续在I1与In/2的中间位置以及In/2与In的中间位置打点,分别记为In/4和In/2+n/4,接着计算|f(n/4)-f(1)|>F和|f(n/2)-f(n/4)|>F以及|f(3n/4)-f(n/2)|>F和|f(n)-f(3n/4)|>F是否成立,成立的话,以此类推向下进行,直到该不等式不成立为止。不成立时,说明对应的帧序列中只包含有一个镜头,这样就最终实现了镜头分割。
假如在第k次划分之后,在m帧处打的点使得|f(m)-f(m-n/2 k)|>F不成立的话,说明这两帧之间为同一个镜头,那么在xml文件上标记m和(m-n/2 k)这两个点,在第k+1次二分时就不再向这两帧中间打点。
一段帧数为n的视频由于每个镜头最少含有两帧,所以最多只有必要进行log2n次二分打点,在每次划分之后,如果帧差不大于阈值F,则在打点记录本片段,使得在下一次二分时不再插入中间帧以减少计算量。在最后一次划分后,中间帧与上次划分的前后帧帧数差只会是2或者3,那么到这一层为止,如果帧差大于阈值F的话,则打点记录两帧,如果小于阈值F,则只取两帧中的前面一帧位置。
在上述判断不等式是否成立的过程中,可以同时判断出相邻帧序列属于同一镜头的情况,确定出现该情况后,删除相邻帧序列之间的打点位置。如图6所示的打点过程中,第一次打点位置为第q帧,第二次打点位置为第p帧;由于p和q之间包含多个镜头,因此会有第三次打点,打点位置为第u帧;由于p和u之间只包含一个镜头,因此p和u之间不再打点,而u和q之间还包含多个镜头,因此会继续在u和q之间打点,打点位置为第v帧。由图6可知,p和u之间的帧序列与u和v之间的帧序列为相邻的帧序列,该相邻帧序列就属于同一个镜头,因此,删除u帧的打点记录。
最后,处理后的打点位置中就仅包含各镜头的边界帧,因此,根据处理后的打点位置,即可提取关键帧。
结合上述过程,分析两种极限情况:
第一种极限情况是每个镜头只含两帧,直到第log2n-1次划分为止才有帧差不大于阈值F的情况,此时,需要计算特征量的帧数为n/2,计算量为Un/2,帧差对比计算的次数为Vn=20+21+22+……+2^(log2n-1)=20(2^log2n-1)/(2-1)=n-1。
这种情况是计算量最大的情况,总计算量为Un/2+Vn=1.5n-1。
第二种极限情况是整部视频只由一个镜头组成(即实施例二),那么只需计算首尾帧特征值即Un=2,而帧差对比次数只需一次即Vn=1。
这种情况是计算量最小的情况,总计算量为Un+Vn=2+1=3。
由以上分析可知,即使在最差情况下本发明方法也会比传统的逐帧比较法的计算量(2n-1)小,节省时间。
以上分析是针对帧序列中帧个数n为偶数的情况,当n为奇数时同样也会减少计算量,节省时间。并且当n为奇数时,分割过程可以有两种处理方式:一种方式是,分割位置选择为(n+1)/2,其余步骤与上述步骤相同;另一种方式是,舍去帧序列中的某个帧,使n变为偶数后,再采用上述步骤进行处理。
以上过程重点描述了使用本发明方法中对帧序列的分割及其有益效果。在每次分割后,都会记录分割位置(即打点位置),为了清晰、方便的记录各分割位置,并便于后续步骤从中提取关键帧,本发明中,优选结合所述分割过程,使用二叉树结构进行记录。
下面将详细介绍本发明方法如何使用二叉树记录所述分割位置。
使用二叉树记录分割位置的过程如下:
将第一次分割时的分割位置记录为二叉树的根节点;在后续分割过程中,获得当前要分割的帧序列以及在上一次分割过程中该帧序列所对应的分割位置,按照该两者的位置关系,将该帧序列的分割位置记录为上一次分割过程中分割位置所对应节点的左子节点或右子节点。如图7所示,为本发明中利用二叉树结构记录图6所示分割位置的示意图。图6中,q为第一次分割时的分割位置,因此将q记录为二叉树的根节点;后续分割过程中,根据帧序列的位置关系,构建二叉树的各节点,所以在第二次分割时,由于p所要分割的帧序列位于q的左侧,因此将p记录为q的左子节点;第三次分割时,由于u所要分割的帧序列位于p的右侧,因此将u记录为p的右子节点;同理,第四次分割时,v记录为u的右子节点。
在分割过程中,如果存在一个帧序列,其首帧与尾帧的特征值之差小于所述阈值(即首尾帧处于同一镜头内),并且其首尾位置所对应的两个节点中,一个节点为另一节点的子节点,则所述子节点将不具有与另一节点同侧的下层节点。参见图6和图7,在进行第三次分割时,由于u与p处在同一镜头中,且p在u的左侧,所以对应的二叉树中u将不再具有左子节点。同理,v也不具有左子节点。
在所述二叉树中,对于某一节点,其具有父节点和子节点,如果该节点不具有与其父节点同侧的下层节点,并且其子节点也不具有与该节点同侧的下层节点,则删除该节点,使其父节点与子节点直接相连。参见图6和图7,对于节点u,它具有父节点p和子节点v,由于u将不具有与p同侧的左节点,v也不具有与u同侧的左节点,因此,说明p、u和v处于同一镜头中,这种情况下,为了使提取的关键帧属于不同的镜头,确保查准率,则删除u节点,使p与v直接相连。
整棵树建立完毕后,参见图5,整部视频的中间帧n/2将为根节点,其左子节点为n/4帧号,右子节点为3n/4帧号,依次类推,最后整部视频的首帧号1位于左子树末尾左叶子节点处,尾帧n处在右子树末尾右叶子节点处,那么对整棵树进行中序遍历,根据遍历结果,即可获得按时间顺序排列的关键帧序列。由于中序遍历是首先遍历左子树,然后访问根结点,最后遍历右子树;并且在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树,所以,进行中序遍历后,根据遍历结果,就能够获得按时间顺序排列的关键帧序列。
上述过程介绍了本发明如何使用二叉树结构记录所述分割位置,使用二叉树的好处在于,二叉树的结构能够与本发明的分割过程相配合,分割过程中所记录的分割位置正好构成二叉树的节点,因此,使用二叉树能够非常清晰、方便的记录各分割位置。并且,最后对整棵树进行中序遍历,根据遍历结果,还能够获得按时间顺序排列的关键帧序列,方便关键帧的使用。
本发明实施例中,由于删除了同一镜头内的分割位置,只保留了镜头首尾位置的分割位置,因此,最后根据处理后的分割位置,所提取的关键帧是各镜头的首帧或尾帧。本发明实施例在保证查准率的前提下,快速的提取了关键帧。
另外,本发明方法还可以让用户设定分割次数k(1<k<log2n)的大小,使分割步骤尽早结束,以自由控制二叉树的深度。如果对关键帧查全率要求不高,比如只需要获取少量关键帧时,那么可以把分割次数k设定的小一些,这种情况下会更快速的完成关键帧提取。但这种情况最后没有实现镜头分割,因此,所提取的关键帧就不再是各镜头的首帧或尾帧,但是,本发明在所记录的分割位置中,将属于同一镜头的相邻关键帧之间的分割位置进行了处理(标记或是删除),因此能够保证最终根据处理后的分割位置,所提取出的关键帧属于不同的镜头,确保查准率。
综上,本发明的方法,是将帧序列的首尾帧特征值之差与设定的阈值进行比较,判断其是否包含多个镜头,然后将包含多个镜头的帧序列不断进行分割,直至其只包含一个镜头,最后根据分割位置,来提取关键帧。本发明没有进行逐帧比较,大大减少了运算量,节省了时间,并且能够保证所提取的关键帧属于不同的镜头,因此,本发明能够在保证查准率的前提下,快速提取关键帧。
另一方面,与上述方法相对应,本发明提供一种快速提取关键帧的装置,该装置也有两种技术方案,此处分别采用实施例三和实施例四对其进行介绍。
实施例三
如图8所示,本实施例快速提取关键帧的装置,包括:
第一确定单元801:用于确定视频的帧序列中首帧与尾帧的特征值之差大于设定的阈值;
分割和记录单元802:用于将帧序列分割为两个帧序列,并记录分割位置,所述两个帧序列中前一帧序列的尾帧与后一帧序列的首帧为同一帧;
处理和查找单元803:用于在分割后的所有帧序列中,根据相邻帧序列的首帧与尾帧的特征值之差情况,处理所记录的分割位置,并找出首帧与尾帧的特征值之差大于所述阈值的帧序列,发送给分割和记录单元802,如果未找出所述帧序列,则启动第一提取单元804;
第一提取单元804:用于根据处理后的分割位置,提取关键帧。
本发明的装置,是将帧序列的首尾帧特征值之差与设定的阈值进行比较,判断其是否包含多个镜头,然后将包含多个镜头的帧序列不断进行分割,直至其只包含一个镜头,最后根据分割位置,来提取关键帧。本发明没有进行逐帧比较,大大减少了运算量,节省了时间,并且能够保证所提取的关键帧属于不同的镜头,因此,本发明能够在保证查准率的前提下,快速提取关键帧。
实施例四
如图9所示,本实施例快速的关键帧提取装置,包括:
第二确定单元901:用于确定视频的帧序列中首帧与尾帧的特征值之差小于设定的阈值;
第二提取单元902:用于从所述帧序列的任意位置,提取关键帧。
本发明中首帧与尾帧的特征值之差小于设定的阈值,说明该视频仅包含一个镜头,此时,可以从视频帧序列的任意位置提取关键帧,以用于表示镜头的内容。本发明仅用到了一次比较,大大减少了运算量,节省了时间,并且能够保证所提取的关键帧属于不同的镜头,因此,本发明能够在保证查准率的前提下,快速提取关键帧。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。