发明内容
基于此,本发明的目的是提供一种基于图像序列的自适应运动检测方法。
根据本发明实施例的一种基于图像序列的自适应运动检测方法,该方法的步骤包括:
以预设时间间隔拍摄图像,形成循环图像序列;其中,所述循环图像序列中的图像数量为固定数量;
根据图像梯度和曝光时间预设运动检测的判定阈值;
从所述循环图像序列中提取两张图像,计算两张图像的像素差异均值,并统计两张图像的灰度变化情况;
利用预设运动检测的判定阈值,判断当前帧图像的运动状态,并利用一段连续时间内的统计结果,输出运动或非运动的结果。
其中,在以预设时间间隔拍摄图像,形成循环图像序列的步骤中,每获取到图像后,对图像进行降采样后,更新到所述循环图像序列中。
其中,运动检测的判定阈值为图像差异响应值;其中,图像差异响应值为图像的检测区域像素点灰度差绝对值的平均值。
其中,设定判定阈值时,分两步进行:固定环境亮度进行不同场景的测试,场景选用对应环境亮度下常规的拍摄场景,记录导致人为可见模糊的响应值;改变环境亮度,逐渐增加环境亮度,对不同场景进行测试,记录导致人为可见模糊的响应值;其中,场景复杂度用图像梯度的均值来进行度量;梯度计算在0.5s~1s进行一次,且当前运动状态可延用上一帧的判断;环境亮度则通过AE稳定后的曝光时间来度量,曝光时间从拍摄设备端获取。
其中,在计算两张图像的像素差异均值,并统计两张图像的灰度变化情况的步骤中,包括步骤:
从循环队列中取出时间间隔最大的两帧图像,并进行划分统计区域,将图像分为m*n的矩形框;
逐个区域对应像素进行求差运算,统计出每个区域差异均值,记为S[i];同时统计每个区域内灰度变亮/变暗/几乎不变三种像素点的个数,分别记为H[i],L[i],E[i];其中i指的是统计区域的编号。
其中,利用预设运动检测的判定阈值,判断当前帧图像的运动状态的步骤中,判断方式包括:
对于任意统计区域,当H[i]或L[i]的像素数量大于区域点数量的1/2时,判定对应区域属于光照变化,属于非运动状态;
当对两帧图像进行统计时,如果有超过1/2以上的区域属于光照变化,则判定当前帧属于光照变化,属于非运动状态;
当某E[i]的像素数量超过区域点数量的1/2时,且存在至少一个区域的差异均值S[i]>运动阈值,则判定当前帧图像属于运动状态;相反的,任何一个区域的差异均值均满足S[i]<运动阈值,则判定当前帧属于非运动状态。
其中,为避免判断结果出现过于明显的跳跃,避免判断结果出现过于迟缓,选择0.3~1s的时间间隔来统计周期内连续帧图像序列的运动次数;当运动帧的次数大于预定比例时,则判断当前时段为运动状态,并将运动状态持续到下一个判断周期。
区别于现有技术,本发明的基于图像序列的自适应运动检测方法不需要陀螺仪或加速度计等传感器信息,通过分析图像信息,并以普通拍照是否模糊作为判断标准,做出运动判断,从而为是否自动开启算法防抖提供依据;通过读入一帧图像,跟循环队列中的一帧图像进行比较分析,通过场景复杂度和曝光时间动态调整阈值,判断当前帧是否发生运动,并通过连续多帧的统计结果,输出一段时间的运动状态,为是否自动触发防抖拍照提供依据。当发生随机性的手抖或场景内较大面积物体移动时,可以输出运动状态的判断。本方法简单高效,可以进行SIMD指令优化,可适用于智能手机预览端实时检测。
具体实施方式
为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的若干实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
需要说明的是,当元件被称为“固设于”另一个元件,它可以直接在另一个元件上或者也可以存在居中的元件。当一个元件被认为是“连接”另一个元件,它可以是直接连接到另一个元件或者可能同时存在居中元件。本文所使用的术语“垂直的”、“水平的”、“左”、“右”以及类似的表述只是为了说明的目的。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
请参阅图1,所示为本发明提供的一种基于图像序列的自适应运动检测方法的流程示意图。该方法的步骤包括:
S101:以预设时间间隔拍摄图像,形成循环图像序列;其中,所述循环图像序列中的图像数量为固定数量;
S102:根据图像梯度和曝光时间预设运动检测的判定阈值;
S103:从所述循环图像序列中提取两张图像,计算两张图像的像素差异均值,并统计两张图像的灰度变化情况;
S104:利用预设运动检测的判定阈值,判断当前帧图像的运动状态,并利用一段连续时间内的统计结果,输出运动或非运动的结果。
其中,在以预设时间间隔拍摄图像,形成循环图像序列的步骤中,每获取到图像后,对图像进行降采样后,更新到所述循环图像序列中。
其中,运动检测的判定阈值为图像差异响应值;其中,图像差异响应值为图像的检测区域像素点灰度差绝对值的平均值。
其中,设定判定阈值时,分两步进行:固定环境亮度进行不同场景的测试,场景选用对应环境亮度下常规的拍摄场景,记录导致人为可见模糊的响应值;改变环境亮度,逐渐增加环境亮度,对不同场景进行测试,记录导致人为可见模糊的响应值;其中,场景复杂度用图像梯度的均值来进行度量;梯度计算在0.5s~1s进行一次,且当前运动状态可延用上一帧的判断;环境亮度则通过AE稳定后的曝光时间来度量,曝光时间从拍摄设备端获取。
其中,在计算两张图像的像素差异均值,并统计两张图像的灰度变化情况的步骤中,包括步骤:
从循环队列中取出时间间隔最大的两帧图像,并进行划分统计区域,将图像分为m*n的矩形框;
逐个区域对应像素进行求差运算,统计出每个区域差异均值,记为S[i];同时统计每个区域内灰度变亮/变暗/几乎不变三种像素点的个数,分别记为H[i],L[i],E[i];其中i指的是统计区域的编号。
其中,利用预设运动检测的判定阈值,判断当前帧图像的运动状态的步骤中,判断方式包括:
对于任意统计区域,当H[i]或L[i]的像素数量大于区域点数量的1/2时,判定对应区域属于光照变化,属于非运动状态;
当对两帧图像进行统计时,如果有超过1/2以上的区域属于光照变化,则判定当前帧属于光照变化,属于非运动状态;
当某E[i]的像素数量超过区域点数量的1/2时,且存在至少一个区域的差异均值S[i]>运动阈值,则判定当前帧图像属于运动状态;相反的,任何一个区域的差异均值均满足S[i]<运动阈值,则判定当前帧属于非运动状态。
其中,为避免判断结果出现过于明显的跳跃,避免判断结果出现过于迟缓,选择0.3~1s的时间间隔来统计周期内连续帧图像序列的运动次数;当运动帧的次数大于预定比例时,则判断当前时段为运动状态,并将运动状态持续到下一个判断周期。
本发明的一种基于图像序列的运动检测方法,在步骤S101中,该算法运行在高通820平台的手机上,放在预览端进行。本实施例的输入预览图格式为YUV420,分辨率为1080P(1920*1080)。首先对图像的Y通道进行降采样,倍数可缩小为长、宽均为原来的1/4倍。当输入一帧图像时,要将图像加入到循环队列中,并替换掉最早进入队列的图像。本实施例的队列的长度为4帧。记最新的图像与最早的图像时间差异是3个采样周期,约100ms。
在步骤S102中,本实施例描述计算动态阈值的方法。图像帧间的差异使用检测区域像素点灰度差绝对值的平均值来度量,并将其定义为图像差异响应值。响应值越大,则一定程度反映运动越剧烈(当然也不排除光照变化影响)。图像的复杂度和曝光时间对运动判定的阈值有影响。第一,对于相同持续的抖动幅度,图像场景越复杂,差异响应值越大;第二,对于相同持续的抖动幅度,曝光时间越短,越不易造成模糊;因此,基于上述两条假设,本方法需要动态设置检测阈值。
关于动态阈值的设置方法,本实施例优选一种单一变量的思路对用户常用的拍摄场景进行调试。采用先分梯度,后分曝光的分段方式,梯度均值范围逐渐增加,曝光时间逐渐缩短。构成如下表所示的动态梯度表。当输入图携带其梯度信息和曝光信息时,就通过查表来获取梯度值。同一行,从左到右,阈值T[i,j]逐渐增加,同一列,从上到下,阈值T[i,j]逐渐增加。然后需要选取一些常用的拍摄场景来匹配下表中的梯度和曝光对应关系。在逐个场景下,当普通拍照时会发生人为可感知的模糊,通过多次实验找到这个临界状态,记录下两帧待比较图像产生的差异值,并以此作为该场景下的阈值。需要指出的是,两幅图片的差异比较是分区域进行的,本实施例记录的差异值是各个区域差异值的最大值。
梯度均值\曝光时间 |
1/10s~1/30s |
1/30s~1/100s |
1/100s~1/250s |
1/250s~1/2000s |
0~30 |
T[1,1] |
T[1,2] |
T[1,3] |
T[1,4] |
30~60 |
T[2,1] |
T[2,2] |
T[2,3] |
T[2,4] |
60~100 |
T[3,1] |
T[3,2] |
T[3,3] |
T[3,4] |
100~200 |
T[4,1] |
T[4,2] |
T[4,3] |
T[4,4] |
200以上 |
T[5,1] |
T[5,2] |
T[5,3] |
T[5,4] |
梯度和曝光对应关系
对于每帧输入图像,当AE稳定后,曝光时间可以从手机***端获取。因此曝光时间伴随图像可以一一对应。而梯度的均值则需要进行计算。本实施例基于场景不会突变的假设,规定梯度均值计算0.5s进行一次,且当前帧不再进行运动检测,令运动状态与上一帧的状态相同。优选地,关于梯度均值的计算,本实施例只进行水平梯度的统计,梯度均值等于每行梯度模的均值,每行梯度模的均值定义如下:
其中,i为行号,width是图像宽度,j的范围是[0,width)。
步骤S103中,关于两幅图像的差异统计信息。需要统计各有效区域差异响应值和整体灰度变化情况。
首先,本实施例将图像分为6*5的矩形框,并将最外一圈设置为无效区域(考虑到图像边缘的运动不太重要)。从循环队列中取出两帧图像(从步骤S101可知时间间隔约100ms),逐个区域对应像素进行求差运算,计算绝对值差的均值。即
记为S[k];同时需要统计逐个区域内灰度整体亮暗变化情况,需要排除光照变化对运动判断造成的影响。即光线变化造成的整体灰度变化不算运动。区域内变亮,变暗,几乎不变点的个数分别记为H[k],L[k],E[k]。其中k指的是统计区域的编号。
本实施例提供一种运动检测的判据。利用S103步骤提供的动态阈值,以及S104步骤计算的统计值信息,结合本判据可以判断当前帧是否发生运动。判据由以下几条命令复合组成:
a.对于任意统计区域,当H[k]或L[k]的像素个数超过该区域点的1/2时,则认为该区域属于光照变化,而非运动。
b.当对两帧图像进行统计时,如果有超过1/2以上的区域属于光照变化,则判定当前帧属于光照变化,即非运动状态。
c.当某E[i]的像素个数超过该区域点的1/2时,且存在至少一个区域的差异均值S[k]>Treal(其中Treal指的是权利要求4计算生成的动态阈值),则判定当前帧属于运动状态;相反的,任何一个区域的差异均值均满足S[k]<Treal,则判定当前帧属于非运动状态。
利用该判据可以判断当前帧图像是否处于运动状态。
针对单帧运动状态结果,需要累积连续多帧运动的统计结果,输出运动或非运动状态。可以预见的时,当运动场景处于判定条件的边界时,运动与非运动会有混淆。得出的运动判断结果会出现跳跃。为了避免该情况,本实施例选用了累积多帧图像的结果进行判断。同时为了避免判断结果出现过于迟缓,该统计周期也不宜过长,否则快速而短暂的运动将感知不到,且运动判断出现较慢。经过试验,本实施例选用10帧图像作为一个统计周期,约1/3s的时间周期。当运动帧的次数大于2/3时,则判断当前时段为运动状态,并将运动状态持续到下一个判断周期。直到下一个判断结果出现,则进行结果替换。保证每1/3s的时间出现一次统计结果。
区别于现有技术,本发明的基于图像序列的自适应运动检测方法不需要陀螺仪或加速度计等传感器信息,通过分析图像信息,并以普通拍照是否模糊作为判断标准,做出运动判断,从而为是否自动开启算法防抖提供依据;通过读入一帧图像,跟循环队列中的一帧图像进行比较分析,通过场景复杂度和曝光时间动态调整阈值,判断当前帧是否发生运动,并通过连续多帧的统计结果,输出一段时间的运动状态,为是否自动触发防抖拍照提供依据。当发生随机性的手抖或场景内较大面积物体移动时,可以输出运动状态的判断。本方法简单高效,可以进行SIMD指令优化,可适用于智能手机预览端实时检测。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行***执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或它们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。