背景技术
在现有的摄像系统中,由于传输带宽的限制,处理后的图像数据经常要经过压缩后再送出显示。比较常用的一种图像压缩方法是JPEG(JointPhotographic Experts Group,联合图像专家组)格式的图像压缩方法。如图1所示,为现有技术中JPEG图像压缩摄像系统的原理框图,该系统包括图像获取单元、图像处理单元、JPEG编码器单元、先入/先出(FIFO,First Input/FirstOutput)数据缓存单元以及计算机单元,通过JPEG编码器单元中包含的Q值调整单元来实现的对压缩图片的比特率控制。
对于压缩后的图像数据通常要进行缓存。由于压缩后图像数据的码率是不断变化的,如果送入缓存的码率过高却无法及时取出,则会发生溢出,从而导致坏帧的出现。
在JPEG图像压缩处理技术中,包括以下几个重要的参数,具体如下:
量化系数(Q,Quantization):影响JPEG压缩率的关键参数,Q值越大,压缩率越高,图像质量也下降越多;
压缩率(CR,Compression Ratio):指当前帧压缩后得到的实际压缩率。
目标压缩率(TCR,Target Compression Ratio):希望下一帧达到的压缩率。
交流系数(AC,Alternating Current):JPEG编码时每个8*8块经过离散余弦变换后得到的63个AC系数,表征图像的高频分量,该系数保留的个数越少,高频分量损失越多,图像质量越差。
现有的JPEG编码器中常常会包含Q值调整单元,根据当前的Q值、CR以及TCR计算出下一帧将采用的Q值,从而实现比特率控制。例如,可以利用如下的公式求得下一帧的Q值,也就是目标Q值(TQ,Target Quantization):
TQ=TCR/CR*(Q+b)-b
其中b为一常数,通常的取值为4.27。
这种方法采用固定的TCR,如果TCR设置过高,会使图像质量下降,而TCR设置过低又会导致溢出时有发生。
现有摄像技术中的压缩图像比特率控制方法,多采用上述固定的目标压缩率,不利于在避免溢出和保证图像质量之间达到较好的平衡。
发明内容
本发明实施例提供一种压缩图像比特率控制方法及装置,用以实现在保证图像质量的前提下避免缓存的图像数据发生溢出。
一种压缩图像比特率控制方法,该方法包括:
A、获取数据缓存中存储的压缩后图像数据的数据量;
B、当所述数据量超过预先设定的数据量阈值时,降低当前保留交流AC系数的个数并提高待压缩图像数据的目标压缩率。
较佳地,按设定的周期执行所述步骤A和步骤B;并在所述步骤A中记录获取的所述数据量。
较佳地,若当前获取的所述数据量没有超过预先设定的数据量阈值时,统计出连续N次记录的所述数据量中的最大值,如果该最大值小于预先设定的数据缓存低阈值,将当前目标压缩率减小;如果该最大值大于预先设定的数据缓存高阈值,将当前目标压缩率增大。
较佳地,所述步骤B中,降低当前保留AC系数的个数并提高待压缩图像数据的目标压缩率,包括:
将当前保留AC系数的个数设为预先设定的AC系数个数最小值,并将目标压缩率设为预先设定的目标压缩率初始值。
较佳地,所述步骤B之前,进一步包括:
确定当前保留AC系数的个数;
如果当前保留AC系数的个数为预先设定的AC系数个数最大值,执行步骤B;
如果当前保留AC系数的个数为预先设定的AC系数个数最小值,统计出连续N次记录的所述数据量中的最大值,当所述最大值小于预先设定的数据缓存比较值时,将当前保留AC系数的个数设为预先设定的AC系数个数最大值。
较佳地,当确定所述最大值小于预先设定的数据缓存比较值时,进一步包括:
判断当前的量化系数是否小于预先设定的量化系数设定值,如果是,将当前保留AC系数的个数设为预先设定的AC系数最大值;否则,结束流程。
较佳地,该方法进一步包括:
确定出当前的图像亮度小于预先设定的亮度设定最小值或大于预先设定的亮度设定最大值时,中止对压缩图像比特率控制中的量化系数调整,并将当前保留AC系数的个数设为预先设定的针对自动曝光过程的AC系数的个数。
较佳地,该方法进一步包括:
当确定出当前的图像亮度大于等于预先设定的亮度设定最小值且小于等于预先设定的亮度设定最大值时,且当前的压缩图像比特率控制中的量化系数调整中止时,启动压缩图像比特率控制中的量化系数调整,并将当前保留的AC系数的个数设为预先设定的AC系数最小值,将目标压缩率设为预先设定的目标压缩率初始值。
较佳地,该方法进一步包括:
当确定所述数据缓存溢出后,将当前保留的AC系数的个数设为预先设定的AC系数个数最小值,并将目标压缩率设为预先设定的目标压缩率初始值。
一种压缩图像比特率控制装置,该装置包括缓存数据量获取单元、控制单元、溢出判断单元、AC系数单元和目标压缩率单元,其中,
所述缓存数据量获取单元,用于获取数据缓存中的数据量,并发送给所述控制单元;
所述控制单元,用于将接收的缓存数据量发送给所述溢出判断单元;并接收所述溢出判断单元返回的判断结果,根据判断结果控制所述AC系数单元调整AC系数的个数,控制所述目标压缩率单元调整目标压缩率;
所述溢出判断单元,用于根据接收的缓存数据量,判断所述缓存数据量是否大于预先设定的阈值,将判断结果返回所述控制单元;
所述AC系数单元,用于根据所述控制单元的控制,调整当前保留的AC系数的个数;
所述目标压缩率单元,用于根据所述控制单元的控制,调整目标压缩率的值。
较佳地,所述装置还包括:
缓存数据量统计单元,用于统计在一定的时间长度内,数据缓存中数据量最大值,并返回所述控制单元;
所述控制单元,还用于比较数据缓存中数据量最大值与预先设定的数据缓存低阈值、数据缓存高阈值或数据缓存比较值的大小,根据比较结果控制所述AC系数单元调整AC系数的个数,控制所述目标压缩率单元调整目标压缩率。
较佳地,所述装置还包括:
图像亮度判断单元,用于判断当前图像的亮度是否小于预先设定的亮度设定最小值或大于预先设定的亮度设定最大值,并将判断结果返回所述控制单元;
所述控制单元,还用于根据图像亮度的判断结果,确定中止或启动压缩图像比特率控制中的量化系数调整。
较佳地,所述溢出判断单元还用于判断当前数据缓存是否已经溢出,如果是,向所述控制单元发送溢出消息;
所述控制单元,还用于根据溢出消息,控制所述AC系数单元调整AC系数,控制所述目标压缩率单元调整目标压缩率。
本发明实施例首先获取数据缓存中的数据量;当所述数据量超过预先设定的数据量阈值时,降低当前保留AC系数的个数并提高目标压缩率。本发明实现了动态目标压缩率调整,同时结合AC系数个数的调整,在保证较好图像质量的同时最大限度地避免了溢出的发生,从而提高了压缩图像的质量。
具体实施方式
由于现有技术中的压缩图像比特率控制方法,大多采用固定的目标压缩率,不利于在避免溢出和保证图像质量之间达到较好的平衡,因而本发明实施例提供一种动态的压缩图像比特率控制方法,将在现有技术的基础上加入对TCR的动态改变,同时结合对AC系数个数的调整,最终达到在保证图像质量的同时最大限度地避免溢出的发生。
本发明实施例中,以JPEG格式的图像压缩技术为例,实际应用中,本发明所提供的方法,可以应用于任何包含离散余弦变换和量化过程的图像或视频压缩方法,例如MPEG格式、H.26x格式等。
本发明实施例中所指的数据缓存,包括但不限于FIFO数据缓存。
本发明实施例中涉及的各项参数,一般结合图像质量的好坏与较为复杂场景下系统缓存是否溢出两个方面综合考虑,具体参数的设定数值与实际的压缩图像系统相关,需要根据实际系统运行状况具体设定。
本发明实施例是在压缩图像系统运行的过程中,每经过时间长度T,进行一次中断,对压缩图像的比特率进行控制。时间长度T的取值在不影响整体系统性能的前提下应尽量取得小些。时间长度T可以根据实际需要进行调整。
下面结合各个附图对本发明实施例技术方案的主要实现原理、具体实施方式及其对应能够达到的有益效果进行详细的阐述。
如图2A所示,为本发明实施例主要实现流程的图像亮度判断分流程图,具体如下:
步骤101,计算当前图像的平均亮度Ymean。
这里,当环境突然变得很亮或很暗,图像亮度会有相应的变化,在自动曝光的调整过程中可能会发生明显的溢出,这与图像突然变为全黑或全白,使得压缩率CR很大,从而导致TQ值降得过低有关。为减少这种溢出的发生,需要对很暗或很亮的图像做处理。
步骤102,判定当前的图像的平均亮度Ymean是否过大或过小,即Ymean是否小于亮度设定最小值Ymean_thd_low或大于亮度设定最大值Ymean_thd_high,如果是,执行步骤103,否则,执行流程A。Ymean_thd_low与Ymean_thd_high均根据图像的亮度对系统的影响来设定,并且,Ymean_thd_low要远低于自动曝光锁定范围的下限,而Ymean_thd_high要远高于自动曝光锁定范围的上限。针对自动曝光过程的AC系数的个数AC_AE与AC系数个数最小值AC_low接近。
步骤103,停止Q值调整,也即中止压缩图像比特率控制中的量化系数调整,同时将当前保留AC系数的个数设为针对自动曝光过程的AC系数的个数AC_AE。
相应的,上述的方法中,进一步包括:如果当前的图像的平均亮度Ymean没有过大或过小,需要执行流程A,如图2B所示,为本发明实施例主要实现流程的Q值调整启动分流程,具体如下:
步骤104,判定当前的Q值调整是否处于停止状态,如果是,执行步骤105,否则,执行流程B。
步骤105,重新启动Q值调整,同时设AC系数的个数为AC_low,目标压缩率TCR为TCR初始值TCR_init。
相应的,在当前的Q值调整没有处于停止状态时,需要继续执行流程B。如图2C所示,具体如下:
步骤106,获取FIFO中的数据量并记录。
在压缩图像传输系统中,由于发送图像与接受并显示图像的速率并不匹配,因而需要设置一个数据缓存,一般采用FIFO方式。在压缩图像传输过程中的数据移出,往往也发生在FIFO数据缓存中。在获取了FIFO中的数据量后,相应的进行记录。
如果当前的AC系数的个数为AC系数个数最大值AC_high,执行步骤107,如果当前的AC系数的个数为AC系数个数最小值AC_low,执行步骤110。
这里,AC系数个数最小值AC_low与AC系数个数最大值AC_high均为AC系数个数的预先设定值,根据系统的实际运行情况设定。通常保留AC_high个AC系数对图像质量无明显影响,而保留AC_low个AC系数可以在非常复杂的场景下避免数据缓存的溢出。
步骤107,如果当前的AC系数的个数为AC系数个数最大值AC_high时,判断FIFO中的数据是否将会溢出,如果是,执行步骤108,否则执行步骤109。
当判定当前保留的AC系数的个数为AC_high时,需要进一步判断FIFO是否将会溢出。判断的方法有很多种,例如,可以设定一个FIFO溢出的数据量阈值FIFO_overflow,如果当前FIFO中的数据量超过FIFO_overflow,则认为将要发生溢出,否则不会发生溢出。
这里的FIFO_overflow的具体取值与FIFO的大小以及系统的传输比特率等因素有关,一般的取值为FIFO总容量的80%左右,当FIFO中的数据量大于FIFO_overflow时,很可能会发生FIFO的溢出。
步骤108,在判定FIFO将要溢出时,将当前保留的AC系数的个数降到AC_low,同时设目标压缩率TCR为初始值TCR_init。
这里的TCR_init为TCR的初始值,也即是系统最初运行时TCR的取值,一般根据系统的性能设定。
步骤109,如果并未判断出FIFO有将会溢出的迹象,则统计N次连续的中断中,通过记录得到的FIFO数据量的值,找出其中的最大值FIFO_N,如果FIFO_N小于FIFO数据缓存低阈值FIFO_thd_low,则目标压缩率TCR减1;如果FIFO_N大于FIFO数据缓存高阈值FIFO_thd_high,则目标压缩率TCR加1,如果FIFO_N大于等于FIFO_thd_low而小于等于FIFO_thd_high,则不做调整。
这里,连续中断的次数N根据系统实际运行情况设定。而FIFO_thd_high的取值一般为FIFO总容量的60%~70%左右,应小于FIFO_overflow,而FIFO_thd_low的取值一般为FIFO总容量的30%~40%左右。
特别的,在对目标压缩率TCR进行调整时,应该限于TCR的取值范围[TCR_min,TCR_max]内,也就是TCR的取值最小等于TCR_min,最大应等于TCR_max。TCR最小值TCR_min与TCR最大值TCR_max的取值依据对图像质量的要求和系统的实际运行状况设定,一般认为,在TCR取值为TCR_min时,不会造成一般场景下图像质量的明显下降,在TCR取值为TCR_max时,允许图像质量有一定程度的下降,需保证在较复杂场景下不会发生溢出。上述的TCR_init通常介于TCR_min和TCR_max之间,例如可以取值为(TCR_max+TCR_min)/2。
步骤110,如果当前保留的AC系数的个数为AC_low,则从连续N次中断中,找出记录的最大FIFO数据量的值FIFO_N,并判定FIFO_N是否大于FIFO数据缓存比较值FIFO_compare,如果是,不做调整并结束流程,否则,执行步骤111。
步骤110中的中断次数N与步骤109中的中断次数N可以取值相同,也可以取值不同。
上述FIFO数据缓存比较值FIFO_compare是一个预先设定的值,其取值根据FIFO的数据容量以及实际系统运行情况设定,FIFO_compare与FIFO_thd_low较为接近。一般认为,当FIFO中的数据量在一定的时间内没有超过FIFO_compare时,FIFO的利用率较低,可以采取措施提高FIFO的利用率。
步骤111,判断量化系数Q是否小于量化系数比较值Q_thd,如果是,执行步骤112,否则,不做调整并结束流程。
这里的量化系数比较值Q_thd,根据系统的实际运行情况设定,通常小于100。
步骤112,将当前保留的AC系数的个数由AC_low修改为AC_high。
较佳地,上述的方法中,如果仍然未能保证FIFO不发生溢出,则在发生了FIFO溢出之后,把当前保留AC系数的个数设为AC_low,将目标压缩率TCR设为初始值TCR_init。这样可以在图像数据缓存发生溢出后确保系统及时回到正常运行状态。
上述实施例提供的方法,实现了动态目标压缩率调整,同时结合AC系数个数的调整,在保证较好图像质量的同时最大限度地避免了溢出的发生。
相应地,本发明实施例还提供了一种压缩图像比特率控制装置,如图3所示,该装置包括缓存数据量获取单元21、控制单元22、溢出判断单元23、AC系数调整单元24和目标压缩率调整单元25,具体如下:
缓存数据量获取单元21,用于获取数据缓存中的数据量,并发送给控制单元22;
控制单元22,用于将接收的缓存数据量发送给溢出判断单元23;并接收溢出判断单元23返回的判断结果,根据判断结果控制AC系数调整单元24调整AC系数的个数,控制目标压缩率调整单元25调整目标压缩率;
溢出判断单元23,用于根据接收的缓存数据量,判断缓存是否将要溢出,将判断结果返回控制单元22;
AC系数调整单元24,用于根据控制单元22的控制,调整当前保留的AC系数的个数;
目标压缩率调整单元25,用于根据控制单元22的控制,调整目标压缩率的值。
较佳地,如图4所示,上述的压缩图像比特率控制装置进一步包括缓存数据量统计单元26,用于统计在一定的时间长度内,数据缓存中数据量最大值,并返回控制单元22;
控制单元22,还用于判断数据缓存中数据量最大值与预先设定的数据缓存低阈值、数据缓存高阈值或数据缓存比较值的大小,根据比较结果控制AC系数调整单元24调整AC系数的个数,控制目标压缩率调整单元25调整目标压缩率。
较佳地,如图5所示,上述的压缩图像比特率控制装置进一步包括图像亮度判断单元27,用于判断当前图像的亮度是否过大或过小,并将判断结果返回控制单元22;
控制单元22,还用于根据图像亮度的判断结果,确定中止或启动对压缩图像比特率控制中的量化系数调整。
较佳地,上述各个实施例中的溢出判断单元23,还用于判断当前数据缓存是否已经溢出,如果是,向控制单元22发送溢出消息;
控制单元22,还用于根据溢出消息,控制AC系数调整单元24调整AC系数的个数,控制目标压缩率调整单元25调整目标压缩率。
较佳地,基于图3所示的装置,图4与图5中附加的辅助单元可以相互结合,得到功能更为全面的压缩图像比特率控制装置。
综上所述,本发明实施例实现了动态目标压缩率调整,同时结合AC系数个数的调整,在保证较好图像质量的同时最大限度地避免了溢出的发生,从而提高了压缩图像的质量。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。