发明内容
本发明所要解决的技术问题是,克服现有技术中的帧率控制方法的不足,提出一种当图像传感器输出的帧率和/或目标帧率发生变化时,不会造
成丢帧过多现象的实时帧率控制方法及其帧率控制装置。
为了解决上述问题,本发明提供一种实时帧率控制方法,其特征在于,根据帧率控制因子更新原则周期性更新帧率控制因子FC,并使用包含的放行帧标识个数与FC相同的、长度为B的帧率控制寄存器值更新帧率控制寄存器;依次循环使用帧率控制寄存器的每一位作为判别位分别判别接收到的每一图像帧:当图像帧对应的判别位为放行帧标识时,放行该帧;否则丢弃该帧;
所述帧率控制因子更新原则为:使用新的帧率控制因子,使其与B的比值等于Ftarget和Fsensor的比值,或较更新前的帧率控制因子与B的比值更接近于Ftarget和Fsensor的比值;Ftarget和Fsensor分别为目标帧率和图像传感器输出帧率;放行帧标识为1或0。
此外,该方法包含周期性执行的帧率控制寄存器更新流程,所述帧率控制寄存器更新流程包含如下步骤:
A)若满足帧率控制因子更新条件则执行下一步,否则结束本次帧率控制寄存器更新流程;
B)按照所述帧率控制因子更新原则更新FC值;
C)通过查表获取帧率控制寄存器值,使该值包含的放行帧标识个数等于上述FC值;
D)使用上述帧率控制寄存器值更新帧率控制寄存器;
所述帧率控制因子更新条件为以下条件之一:
1)Fsensor×FC/B>Ftarget;或
2)Fsensor×FC/B<Ftarget,且FC<B;或
3)Fcurrent>Ftarget;或
4)Fcurrent<Ftarget,且FC<B;其中,Fcurrent为放行帧率。
此外,在所述步骤B)中采用如下公式之一和约束操作更新FC值:
公式一:FC=Ftarget×B/Fsensor;
公式二:若Fcurrent/Ftarget<1/4,则FC=4×FC_OLD;
若1/4≤Fcurrent/Ftarget<1/2,则FC=2×FC_OLD;
若1/2≤Fcurrent/Ftarget<3/4,则FC=4/3×FC_OLD;
若3/4≤Fcurrent/Ftarget<1,则FC=FC_OLD+1;
若1<Fcurrent/Ftarget≤4/3,则FC=FC_OLD-1;
若4/3<Fcurrent/Ftarget≤2,则FC=3/4×FC_OLD;
若2<Fcurrent/Ftarget≤4,则FC=1/2×FC_OLD;
若4<Fcurrent/Ftarget,则FC=1/4×FC_OLD;
其中,FC_OLD为更新前的帧率控制因子;
对使用上述计算公式获得的帧率控制因子还需进行以下约束操作:
若FC>B,则令FC=B;若FC<1,则令FC=1;若FC不是整数,则对其进行向下取整操作。
此外,该方法包含帧率控制流程,当接收到一图像帧时进行如下操作:
a)对当前帧率控制寄存器的判别位进行判断:若该判别位为放行帧标识,则放行该图像帧;否则丢弃该图像帧;
b)将帧率控制寄存器进行指定方向的循环移位操作;
所述判别位对应帧率控制寄存器的最低位或最高位或其它任意指定位。
此外,该方法包含帧率控制流程,当接收到一图像帧时进行如下操作:
a’)对当前帧率控制寄存器的判别位进行判断:若该判别位为放行帧标识,则放行该帧;否则丢弃该帧;
b’)令计数器n=n+1;对帧率控制寄存器进行指定方向的移位操作;
c’)若n>B,使用帧率控制备份寄存器恢复帧率控制寄存器原值;令n=1;
所述步骤D)之后还包含如下步骤:使用所述帧率控制寄存器值更新帧率控制备份寄存器;并令n=1;
所述判别位为帧率控制寄存器最低位,且所述移位操作为右移1位;或判别位为帧率控制寄存器最高位,且所述移位操作为左移1位。
本发明还提供一种实时帧率控制装置,用于对图像传感器输出的图像帧进行帧率控制,其特征在于,该装置包含:统计单元,帧率控制因子更新单元,帧率控制寄存器更新单元,帧率控制寄存器和帧率控制单元;其中,
统计单元,用于实时统计图像传感器的输出帧率Fsensor;
帧率控制因子更新单元,用于从统计单元获取Fsensor值,根据帧率控制因子更新原则周期性更新帧率控制因子FC;
帧率控制寄存器更新单元,用于从帧率控制因子更新单元获取FC值,使用包含的放行帧标识个数与FC相同的、长度为B的帧率控制寄存器值更新帧率控制寄存器;
帧率控制单元,用于依次循环使用帧率控制寄存器的每一位作为判别位分别判别从图像传感器接收到的每一图像帧:当图像帧对应的判别位为放行帧标识时,放行该帧;否则丢弃该帧;
所述帧率控制因子更新原则为:使用新的帧率控制因子,使其与B的比值等于Ftarget和Fsensor的比值,或较更新前的帧率控制因子与B的比值更接近于Ftarget和Fsensor的比值;Ftarget和Fsensor分别为目标帧率和图像传感器输出帧率;放行帧标识为1或0。
此外,所述帧率控制因子更新单元还用于对帧率控制因子更新条件进行判断,当满足帧率控制因子更新条件时更新FC值;所述帧率控制因子更新条件为以下条件之一:
1)Fsensor×FC/B>Ftarget;或
2)Fsensor×FC/B<Ftarget,且FC<B;或
3)Fcurrent>Ftarget;或
4)Fcurrent<Ftarget,且FC<B;其中,Fcurrent为帧率控制单元的输出帧率;
所述统计单元还用于实时统计所述帧率控制单元的输出帧率Fcurrent。
此外,所述帧率控制因子更新单元采用如下公式之一和约束操作更新FC值:
公式一:FC=Ftarget×B/Fsensor;
公式二:若Fcurrent/Ftarget<1/4,则FC=4×FC_OLD;
若1/4≤Fcurrent/Ftarget<1/2,则FC=2×FC_OLD;
若1/2≤Fcurrent/Ftarget<3/4,则FC=4/3×FC_OLD;
若3/4≤Fcurrent/Ftarget<1,则FC=FC_OLD+1;
若1<Fcurrent/Ftarget≤4/3,则FC=FC_OLD-1;
若4/3<Fcurrent/Ftarget≤2,则FC=3/4×FC_OLD;
若2<Fcurrent/Ftarget≤4,则FC=1/2×FC_OLD;
若4<Fcurrent/Ftarget,则FC=1/4×FC_OLD;
其中FC_OLD为更新前的帧率控制因子;
对使用上述计算公式获得的帧率控制因子还需进行以下约束操作:
若FC>B,则令FC=B;若FC<1,则令FC=1;若FC不是整数,则对其进行向下取整操作。
此外,所述帧率控制单元当接收到一图像帧时对当前帧率控制寄存器的判别位进行判断:若该判别位为放行帧标识,则放行该帧;否则丢弃该帧;判断完成后将帧率控制寄存器进行循环移位操作;
所述判别位对应帧率控制寄存器的最低位或最高位或其它任意指定位。
此外,该装置还包含帧率控制备份寄存器;所述帧率控制寄存器更新单元还用于在更新所述帧率控制寄存器时使用相同的值更新帧率控制备份寄存器,并令计数器值n=1;所述帧率控制单元当接收到一图像帧时对当前帧率控制寄存器的判别位进行判断:若该判别位为放行帧标识,则放行该帧;否则丢弃该帧;判断完成后令n=n+1;对帧率控制寄存器进行移位操作;并且当n>B时,使用帧率控制备份寄存器恢复帧率控制寄存器原值,并令n=1;
所述判别位为帧率控制寄存器最低位,且所述移位操作为右移1位;或判别位为帧率控制寄存器最高位,且所述移位操作为左移1位。
由以上描述可知,采用本发明的实时帧率控制方法及其装置,可以将图像传感器始终设置在最大帧率的工作条件,并且随着Fsensor/Fcurrent和Ftarget的实时变化通过更新帧率控制寄存器实时调整帧通过率,实现了实时帧率控制的目的。
具体实施方式
本发明的基本思路是,使用帧率控制寄存器对图像传感器输出的图像进行帧率控制,并根据图像传感器输出帧率和/或目标帧率的变化实时更新帧率控制寄存器的值,以达到帧率实时控制的目的。
下面将结合附图和实施例对本发明的实时帧率控制方法进行详细描述。
图1是本发明第一实施例实时帧率控制方法流程图。如图1所示,本发明的实时帧率控制方法包含3个流程:统计流程,帧率控制寄存器更新流程和帧率控制流程;各流程可以在不同的线程中同步执行,具体包含如下步骤:
统计流程:
101:实时统计图像传感器的输出帧率Fsensor值;
以T为周期,重复执行以下帧率控制寄存器更新流程:
102:获取并根据Fsensor和Ftarget的当前值,判断是否满足帧率控制因子更新条件,若满足,则执行下一步;否则,帧率控制因子更新流程结束。
本实施例中,帧率控制因子更新条件为:
(1)Fsensor×FC/B>Ftarget;或
(2)Fsensor×FC/B<Ftarget,且FC<B;
其中B为帧率控制寄存器长度(即,位数),FC为帧率控制因子。
当***启动后第一次执行帧率控制寄存器更新流程时,帧率控制因子的初始值FC=B。
103:进行帧率控制因子FC的更新,令:
FC=Ftarget×B/Fsensor;
对于采用以上公式计算得到的FC,还需进行以下约束操作:若FC>B,则令FC=B;若FC<1,则令FC=1;若FC不是整数,则对其进行向下取整操作。
104:使用更新的帧率控制因子FC进行查表操作,从帧率控制寄存器表中获取对应的帧率控制寄存器值FCB。
帧率控制寄存器表的第一列为帧率控制因子,第二列为与帧率控制因子对应的帧率控制寄存器值。
其中,每一个帧率控制寄存器值满足如下条件:
值为1的位数的总和(即帧率控制寄存器值的各位的和)等于对应的帧率控制因子FC。(3)
表中给出的各帧率控制寄存器值并不唯一,使用其它值也可以,但需要满足上述条件(3)。
帧率控制寄存器表如下,本实施例中,B=64。
FC | FCB | FC | FCB |
1 | 0x0400 0000 0000 0000 | 33 | 0x5555 5555 5555 5557 |
2 | 0x0400 0000 0400 0000 | 34 | 0x5555 5557 5555 5557 |
3 | 0x0400 0000 0400 0400 | 35 | 0x5555 5557 5557 5557 |
4 | 0x0400 0400 0400 0400 | 36 | 0x5557 5557 5557 5557 |
5 | 0x0400 0400 0400 0404 | 37 | 0x5557 5557 5557 5757 |
6 | 0x0400 0404 0400 0404 | 38 | 0x5557 5757 5557 5757 |
7 | 0x0004 0404 0404 0404 | 39 | 0x5557 5757 5757 5757 |
8 | 0x0404 0404 0404 0404 | 40 | 0x5757 5757 5757 5757 |
9 | 0x0404 0404 0404 0444 | 41 | 0x5757 5757 5757 5777 |
10 | 0x0404 0444 0404 0444 | 42 | 0x5757 5777 5757 5777 |
11 | 0x0404 0444 0444 0444 | 43 | 0x5757 5777 5777 5777 |
12 | 0x0444 0444 0444 0444 | 44 | 0x5777 5777 5777 5777 |
13 | 0x0444 0444 0444 4444 | 45 | 0x5777 5777 5777 7777 |
14 | 0x0444 4444 0444 4444 | 46 | 0x5777 7777 5777 7777 |
15 | 0x0444 4444 4444 4444 | 47 | 0x5777 7777 7777 7777 |
16 | 0x0444 4444 4444 4444 | 48 | 0x7777 7777 7777 7777 |
17 | 0x4444 4444 4444 4444 | 49 | 0x7777 7777 7777 777F |
18 | 0x4444 4445 4444 4445 | 50 | 0x7777 777F 7777 777F |
19 | 0x4444 4445 4445 4445 | 51 | 0x7777 777F 777F 777F |
20 | 0x4445 4445 4445 4445 | 52 | 0x777F 777F 777F 777F |
21 | 0x4445 4445 4445 4545 | 53 | 0x777F 777F 777F 7F7F |
22 | 0x4445 4545 4445 4545 | 54 | 0x777F 7F7F 777F 7F7F |
23 | 0x4445 4545 4545 4545 | 55 | 0x777F 7F7F 7F7F 7F7F |
24 | 0x4545 4545 4545 4545 | 56 | 0x7F7F 7F7F 7F7F 7F7F |
25 | 0x4545 4545 4545 4555 | 57 | 0x7F7F 7F7F 7F7F 7FFF |
26 | 0x4545 4555 4545 4555 | 58 | 0x7F7F 7FFF 7F7F 7FFF |
27 | 0x4545 4555 4555 4555 | 59 | 0x7F7F 7FFF 7FFF 7FFF |
28 | 0x4555 4555 4555 4555 | 60 | 0x7FFF 7FFF 7FFF 7FFF |
29 | 0x4555 4555 4555 5555 | 61 | 0x7FFF 7FFF 7FFF FFFF |
30 | 0x4555 5555 4555 5555 | 62 | 0x7FFF FFFF 7FFF FFFF |
31 | 0x4555 5555 5555 5555 | 63 | 0x7FFF FFFF FFFF FFFF |
32 | 0x5555 5555 5555 5555 | 64 | 0xFFFF FFFF FFFF FFFF |
表1:帧率控制寄存器表
105:使用FCB值更新帧率控制寄存器和帧率控制备份寄存器,令计数器n=1。
至此,帧率控制寄存器更新流程执行完毕。需要注意的是,对于帧率控制寄存器更新流程的重复执行周期T,若T值过小,可能会使帧率控制寄存器的值更新过于频繁,加大***的资源消耗;而如果T值过大,则减小了帧率控制精度,帧率控制的实时性差。通常T值至少要大于图像传感器输出B帧所需的时间。本实施例中T=2秒。
当接收到图像传感器输出的新图像帧时,执行以下帧率控制流程:
106:对当前帧率控制寄存器的特定判别位进行判断,若该判别位值为1,则执行步骤107;若该判别位值为0,则执行步骤108;
本实施例中,上述判别位为帧率控制寄存器的最低位(LSB,LeastSignificant Bit)。
107:将当前接收到的图像帧放行,即输出至图像处理模块作进一步处理;跳转至109;
108:将当前接收到的图像帧丢弃;
109:令计数器n=n+1;帧率控制寄存器右移一位;
110:若n>B,则执行下一步;否则,本流程结束;
111:使用帧率控制备份寄存器恢复帧率控制寄存器原值;令n=1。
由于帧率控制寄存器值中值为1的位数总和与帧率控制寄存器值总位数(长度)的比值就是本发明进行帧率控制所使用的帧通过率,因此通过以T为周期,重复执行帧率控制寄存器更新流程,使得帧率控制寄存器值,也就是帧通过率,可以根据Fsensor和/或Ftarget的变化实时进行调整;而在帧率控制流程中,根据当前帧率控制寄存器的最低位决定丢弃或放行接收到的新图像帧,并将帧率控制寄存器右移一位;当接收到的图像帧的数量大于帧率控制寄存器的位数时,恢复帧率控制寄存器原值,重复使用。
此外,帧率控制寄存器值中,如果值为1/0的位的分布不均匀,可能造成连续丢帧的现象,一定程度上会影响图像的连续性。例如,若帧率控制寄存器值的高32位为1,低32位为0,则使用该值更新帧率控制寄存器后将会连续丢弃32帧,将对图像的连续性造成一定影响。而如果将帧率控制寄存器值设置为101010...的包含32个1的二进制值,图像的连续性将会得到保证。因此,对于帧率控制寄存器表中的各帧率控制寄存器值,除了必须满足条件(3)外,最好还能满足上述均匀性分布要求。若使用满足均匀性分布要求的帧率控制寄存器值,将会避免出现连续丢帧,影响图像质量的问题。
图2是本发明第二实施例实时帧率控制方法流程图。如图2所示,对帧率进行实时控制包含如下步骤:
统计流程:
201:实时统计实际输出帧率(即帧率控制单元的放行帧率)Fcurrent值;
实际输出帧率即为经帧率控制后放行的图像帧的帧率。
以T为周期,重复执行帧率控制寄存器更新流程:
202:判断是否满足帧率控制因子更新条件,若满足,则执行下一步;否则,帧率控制因子更新流程结束。
本实施例中,帧率控制因子更新条件为:
(4)Fcurrent>Ftarget;或
(5)Fcurrent<Ftarget,且FC<B;
203:进行帧率控制因子的更新;
记当前的帧率控制因子为FC_OLD,
若Fcurrent/Ftarget<1/4,则FC=4×FC_OLD;
若1/4≤Fcurrent/Ftarget<1/2,则FC=2×FC_OLD;
若1/2≤Fcurrent/Ftarget<3/4,则FC=4/3×FC_OLD;
若3/4≤Fcurrent/Ftarget<1,则FC=FC_OLD+1;
若1<Fcurrent/Ftarget≤4/3,则FC=FC_OLD-1;
若4/3<Fcurrent/Ftarget≤2,则FC=3/4×FC_OLD;
若2<Fcurrent/Ftarget≤4,则FC=1/2×FC_OLD;
若4<Fcurrent/Ftarget,则FC=1/4×FC_OLD。
若根据上述公式计算所得FC>B,则令FC=B;若FC<1,则令FC=1;若FC不是整数,则对其进行向下取整操作。
上述帧率控制因子的更新方法采用的是区间更新法,即当fcurrent和ftarget的对比关系处于某一区间时,用FC_OLD按照对应的公式更新FC。需要注意的是,上述帧率控制因子的更新所使用的区间及其对应的计算公式不是唯一的,可根据***实际情况进行调整。
注意到,虽然本实施例使用的帧率控制因子的更新公式与第一实施例相比,在形式上有很大的差别,但是它们的目的是完全一致的。分析如下:
由于Fcurrent≈Fsensor×FC_OLD/B,
以分支:若Fcurrent/Ftarget<1/4,则FC=4×FC_OLD;为例,该更新公式分支变为:
若FC_OLD/B<1/4×Ftarget/Fsensor,则FC=4×FC_OLD,即当FC_OLD/B值过小时,使用新的FC,使其满足:
FC/B<Ftarget/Fsensor。
而第一实施例的更新公式为:FC=Ftarget×B/Fsensor,即新的FC满足:
FC/B=Ftarget/Fsensor。
也就是说,FC的更新原则是:使用新的帧率控制因子,使其与B的比值较原先使用的帧率控制因子更接近于或等于Ftarget和Fsensor的比值。
204:使用更新的帧率控制因子FC进行查表操作,从上述帧率控制寄存器表中获取对应的帧率控制寄存器值FCB。
205:使用FCB值更新帧率控制寄存器;
当接收到图像传感器输出的新图像帧时,执行以下帧率控制流程:
206:对当前帧率控制寄存器的特定判别位进行判断,若该判别位值为1,执行步骤207;若该判别位值为0,执行步骤208;
上述判别位可以是帧率控制寄存器的最低位、最高位或其它任意指定位。
207:将当前接收到的图像帧放行,即送入图像处理模块进行处理;
208:将当前接收到的图像帧丢弃;
209:将帧率控制寄存器进行循环移位操作;
本实施例中,帧率控制寄存器采用环形移位寄存器,循环移位操作就是向左/右移一位,并将移出的位放入该帧率控制寄存器的最低位/最高位(MSB)。当然,使用任何寄存器都可以进行循环移位操作。
进行循环移位操作可以省去第一实施例步骤109中的计数器加1的操作和步骤110,111的恢复帧率控制寄存器原值的操作。
基于本发明的基本原理,在上述实施例的基础上,本发明还可进行如下变换,例如:
在步骤106中使用帧率控制寄存器的最高位作为判别位,同时在步骤109中对帧率控制寄存器左移一位;
此外,上述实施例中使用1作为放行帧标识,0作为丢弃帧标识,当帧率控制寄存器的判别位为1时,放行当前帧;也可以使用0作为放行帧标识。同时,帧率控制寄存器表中的各帧率控制寄存器值应相应修改,条件(3)也应修改为:值为0的位数的总和等于对应的帧率控制因子FC。
下面将结合附图和实施例对本发明的实时帧率控制装置进行详细描述。
图3为本发明实施例实时帧率控制装置的结构示意图。如图3所示,实时帧率控制装置用于对图像传感器输出的图像帧进行帧率控制,包含:统计单元,帧率控制因子更新单元,帧率控制寄存器更新单元,帧率控制寄存器,帧率控制备份寄存器和帧率控制单元。其中,
统计单元,用于实时统计图像传感器的输出帧率Fsensor值和帧率控制单元的输出帧率(即放行帧率)Fcurrent值;
帧率控制因子更新单元,用于从统计单元获取Fsensor值,对帧率控制因子更新条件进行判断,当满足帧率控制因子更新条件时更新FC值;
帧率控制因子更新条件为以下条件之一:
1)Fsensor×FC/B>Ftarget;或
2)Fsensor×FC/B<Ftarget,且FC<B;或
3)Fcurrent>Ftarget;或
4)Fcurrent<Ftarget,且FC<B;
此外,帧率控制因子更新单元采用步骤103或步骤203中的公式和约束操作更新FC。
帧率控制寄存器更新单元,用于从帧率控制因子更新单元获取FC值,使用包含的放行帧标识个数与FC相同的、长度为B的帧率控制寄存器值更新帧率控制寄存器和帧率控制备份寄存器,并同时令计数器值n=1;
帧率控制单元,用于当接收到一图像帧时对当前帧率控制寄存器的判别位进行判断:若该判别位为放行帧标识,则放行该帧;否则丢弃该帧;判断完成后将帧率控制寄存器进行循环移位操作;
在另一实施例中,帧率控制单元用于当接收到一图像帧时对当前帧率控制寄存器的判别位进行判断:若该判别位为放行帧标识,则放行该帧;否则丢弃该帧;判断完成后令n=n+1;对帧率控制寄存器进行移位操作;并且当n>B时,使用帧率控制备份寄存器恢复帧率控制寄存器原值,并令n=1。