具体实施方式
为使本发明的目的、技术方案和优点更加清楚,以下举实施例对本发明进一步详细说明。
本发明总的思想是在活动视频处理的基础上进行简化,通过控制量化系数的变化来实现反应时间、流量分布的动态调整。举例来说:如果量化系数设为1,则变化的画面内容马上全部被编码,后续不变化的画面编码数据除了帧头外为零,这样的效果相当于静态图片压缩,数据流量集中在变化画面;如果把量化系数在画面切换时设为一个最大值,在后续一系列画面中按一定策略逐步减小量化系数,则变化的画面中编码的是框架部分,后续画面中编码是细节,在接收端重放的效果就是切换画面逐步清晰,数据流量分布在切换画面后的一系列帧中。可以看出,这种实现方式下的JPEG与MPEG是相通的,控制量化因子的变化策略就可以实现从JPEG到MPEG的渐变。因此,本发明实施例主要在MPEG标准算法架构上进行了修改、调整,形成一种适合KVM应用的视频压缩方法。
相对于常规的MPEG等视频压缩方法,实施例中描述的方法具有如下特点:
1、压缩编码类型设置。第一帧按帧内编码处理,后续帧按帧间编码处理。
2、设定实际速率控制。比如400kbit/s,此速率是1024×768分辨率下的目标速率,如果用于其它尺寸大小的图像序列,则换算为相应的速率,例如对704×576分辨率图像的控制目标速率是200kbit/s。速率控制的目标是优先保证编码速率恒定为设定值。例如,可以实现从100kbit/s至400kbit/s之间任何目标速率的控制,具有较大的灵活性。
3、帧变化检测。对前后相邻两帧进行比较,即将对应位置像素值相减,统计出像素值不同的像素数,并计算出占整幅画面的比例。可以将变化比例与预先设定的门限值相比较,当该比例大于门限值时得出发生画面切换,否则得出未发生画面切换,从而判断出画面变化形式。例如,门限值为50%,如果只有小于50%的几十个变化样点且分布区域相对集中,则可能是鼠标移动;如果变化比例超过50%且分布区域为矩形,则可能是画面切换操作。也可以用其它方法判断是否发生画面切换操作。进一步,可以根据变化比例确定量化步长控制的调整程度。
4、量化步长控制。有画面切换时量化因子设为最大的上限值,后续帧的量化因子在满足速率控制的前提下逐渐变小;由于KVM显示的特征,大部分前后连续的画面是相同的,随着量化因子变小,画面也逐步清晰。由此可以实现高帧频率、快速切换、逐次清晰的KVM视频压缩、传输机制。另外,鼠标移动可以不影响量化步长的变化控制。
5、增加量化级数。在实际仿真验证过程中,发现31级量化有些少,因为要得到很清晰的画面效果,最小量化因子不宜太大,画面切换时编码帧的数据量又要控制在平均速率的4~5倍以下,最大量化因子要选得很大,所以31级量化就有些少,要适当增加。所以在本发明实施例中优选使用增加的量化级数,也就是加长量化因子指示位的长度。
6、关闭运动估计。优选地,所有运动估计的运动矢量都强制为零。计算机屏幕滚动的概率较低,不进行运动估计可以大幅度降低计算量。另外,预测补偿处理过程可以不作变化。
7、强制块内编码控制。第一帧之外的帧全部为P帧,对P帧的编码除了遵循标准的处理过程外,还可以增加一项附加控制,即在一规定的时间间隔内,图像中每个位置的宏块都应有一次块内编码,如果某位置的宏块在规定时间间隔内没有做块内编码,就在超出时间间隔的第一时间对其强制做块内编码,这些强制做块内编码宏块(不包括按编码控制策略做块内编码的宏块)的时间参考点在时间轴上的分布是均匀的。上述规定的时间间隔是预先设置的,并且可以调节,例如可以根据传输网络质量来调节该时间间隔,即在传输网络质量较好时降低时间间隔,在传输网络质量较差时提高时间间隔。
8、码流格式。可以保留标准码流格式的一些参数设置,但是还可以借鉴H.264码流的优点对码流格式进行必要精简。
上面提出的1~5点是实现计算机屏幕压缩实现逐次清晰、流量平滑必须实现的几处算法处理,6~8点则可以进一步提升其性能。
接着,参照图1描述输入的视频序列。通过交互式数字视频系统(DVI)接口以帧为单位输入计算机屏幕的视频数据,每帧的大小为计算机显示的分辨率,例如640×480、800×600、1024×768、1152×864、1280×1024或1600×1200。输入的视频数据可以使用符合CCIR601规定的YUV 4:2:0格式或者其它格式。
图2为本发明实施例的原理框图。在图2中最上面几个模块是压缩处理的主流程,其中离散余弦变换(Discrete Cosine Transform,DCT)模块用于进行离散余弦变换,量化(Quant,Q)模块用于对DCT变化的结果进行量化;逆量化(Inverse Quant,IQ)模块和DCT反变换(Inverse Discrete CosineTransform,IDCT)模块用于重建参考图像,其中IQ模块用于对量化的结果进行逆量化,IDCT模块用于对逆量化的结果进行DCT反变换。图2中的各功能模块完成视频压缩的整个处理流程,所有的控制方法或过程在框图中没有画出,将在后面详细描述。
下面参照图3描述本发明实施例的方法。参考图3,本实施例的视频压缩流程包括以下步骤:
步骤110,输入当前帧数据。
下面举例描述所输入数据的码流格式。KVM压缩编码码流格式可以采用与MPEG系列标准类似的序列格式,为了使得码流开销达到最小,可以对其中可选位域作尽可能的精简。
图4表示压缩编码算法处理的图像数据的层次结构,图5表示图像数据的编码码流,参考图示结构本领域技术人员可以很好地了解压缩码流的分层嵌套结构以及理解码流精简原则和实施措施。
编码码流分五个层次:系列层、图像组(Group of Picture,GOP)层、图像(picture)层、片(slice)层、宏块(Micro Block,MB)层。
其中系列层包括一个序列头和若干个图像组。序列头只在压缩码流中出现一次,它包含起始码、图像水平尺寸、图像垂直尺寸、像素长宽比、帧频率、码流速率、块内编码量化矩阵、非块编码量化矩阵等,这些信息对接收端解码处理是至关重要的,除了在码流开始时传送外,如果有多个终端用户后续加入对码流的接收时,也应把这些信息发送给后续加入用户。
图像组层包括一个图像组头和若干个图像。图像组头可能在压缩码流中出现多次,出现频率就是图像组重复频率,它包括一个起始码、一个时间码,其重要性一般,起始码在数据传输出现错误时能帮助尽快找到下一起始位置,时间码在对被监控设备进行录像时起很重要的作用。由于图像组头较短,重复频率很低(1~2次/秒)。
图像层是包括一个图像头和若干个片单元。图像是压缩最重要的层次结构,许多处理都是基于图像或图像内宏块的处理。
片层是在图像层和宏块层之间起承上启下作用的一个结构,它包括一个片头和若干个宏块。片层的头部包括一个起始码、量化扩展码,十分简单。
宏块层的结构比较复杂,内容也比较多,由于业务应用的特点,可以不支持一些宏块的编码模式,但块内编码、块间编码、块跳过、量化因子等模式都是必需的。
步骤120,宏块编码类型确定。
对KVM视频来说,显示内容的移动特征并不明显,做复杂的运动估计将是一个很大的浪费,所以KVM视频的运动估计是无运动检测的块编码类型估计。
KVM视频压缩方法中的估计处理完成三项处理:(1)如图6所示,将当前帧与参考帧重建图像逐点比较,统计像素值不同的像素点占整帧图像的比例,如果比例大于预先设定的门限值则认为发生画面切换,否则认为没有发生画面切换,例如所述门限值为50%;(2)如图6所示,按宏块计算参考帧重建图像与当前帧的对应两个宏块之间的均方差,并与当前帧的宏块方差进行比较,确定是块间编码还是块内编码,例如超过当前帧的宏块方差时则采用块内编码,否则采用块间编码;(3)为了增加抗网络传输错误的能力,增加了强制块内编码控制措施,此措施在确定宏块编码模式时实施。
参照图7,描述强制块内编码控制的具体实现。在某规定的时间间隔内,图像中每个位置的宏块都应有一次块内编码;如果某块在规定间隔内没有做块内编码,就在超出时间间隔的第一时间强制做块内编码,这些强制做块内编码的宏块(不包括按标准编码控制策略做块内编码的宏块)的时间参考点在时间轴上的分布是均匀的。规定的时间间隔(tn-t0)是可以调节的,它的调节与传输网络质量紧密相关,可以根据操作者的需求人为设定。例如,如图7所示,在某时刻t3图像块(i3,j3)被强迫块内编码。
例如,强制块内编码控制的一种实现方法是下标映射查表法。该方法的过程如下:首先把0到
的数做一个一维随机排列表,其中H和V分别表示长度和宽度,在整个编码过程都固定使用此表;根据预先计算出的每帧应当强迫块内编码的宏块数目,从与上一帧最后一个读取位置相连的下一个位置开始,连续从随机排列表中顺序读出数据,这些数据用作强迫块内编码块的位置下标。简言之,将帧内各宏块的位置信息随机排列,在对当前帧编码的过程中,顺序读取预定数目的位置信息,对与所读取的位置信息对应的宏块强迫进行块内编码。下标映射查表的设计可以做出多种特技效果。
另外,估计只对亮度分量Y数据进行处理,不涉及色度分量U和V,后继处理环节都处理YUV三个分量。
步骤130,帧间前向预测。
如图8所示,KVM视频压缩方法中的帧间预测处理是简单的数据复制过程,即:块间编码块宏块直接复制重建参考帧的数据;块内编码宏块不需要预测数据,但可以把块内编码宏块预测设为值128的灰色数据,以减少数据量。
步骤140,DCT变换。
宏块二维DCT变换的目的是使能量集中,便于变长编码(Vary lengthcode,VLC)。如图9所示,将参考帧的预测数据与当前帧相减,对差值进行二维DCT变换。
如图10所示,宏块中亮度块Y的尺寸是16×16,划分为4个8×8的块,色度块U和V各有一个8×8的块。在本步骤中,每个8×8的块单独作二维DCT变换。
步骤150,量化,其中至少包括速率控制。
如图11所示,对DCT变换后的系数进行量化处理,系数除以量化因子Q就是量化值。量化因子由两部分组成,一个是量化矩阵,另一个是可变量化因子mquant,即Q=default_intra(inter)_quantizer_matrix×mquant。不同编码模式的宏块量化使用不同的量化矩阵,量化矩阵可以自行定义,也可以使用缺省的量化矩阵,自定义量化矩阵需要写入码流中。mquant由速率控制模块根据速率控制目标和图像复杂程度确定,随着图像变换和时间推移而变化,同一帧图像某块的mquant与本块和所有块平均复杂度的比值密切相关。可变量化因子mquant的取值可以是2、4、6、8...62等31个偶数值。系数量化后的值如果超出范围,则进行削波处理。
步骤160,VLC编码,写入码流序列。
图像量化后的数据编码包括:把量化数据按宏块为单位进行编码并组成一个相对独立的码流片段,打成一个或多个数据包进行传输。图12是视频压缩处理的简单框图,图中标出各个处理环节需要编码的数据信息:块编码模式、块是否编码标志、可变量化因子、块量化数据等,这些数据采用可变长编码方式。也可以采用其它编码方式,如游程编码(RLC)等。
宏块编码有块内(Intra)编码和块间(Inter)编码两种模式,块内编码没有CBP指示,块间编码有CBP指示。表1表示一个简单的参数组合,其中MQUANT为量化因子,CBP指示未被跳过的宏块的那几块有编码数据,TCOEFF为变换系数(Transform coefficient)。当宏块类型为块内编码时,一个宏块内的6个块的TCOEFF都需要编码进行传送,当宏块类型为块间编码时,则由CBP决定哪些块有TCOEFF需要传送。可以理解为宏块层的数据。
| MQUANT | CBP | TCOEFF |
Intra | | | y |
Intra | y | | y |
Inter | | y | y |
Inter | y | y | y |
表1 简单参数组合
如果一个或多个邻接宏块不需编码,则宏块被跳过,后接宏块的地址增加指示域大于1,表示此块前面有数个宏块被跳过而没有编码数据,被跳过宏块在解码时使用参考块的数据作为解码数据。宏块的地址增加指示域是描述本宏块的位置比前一宏块的增加值,采用变长编码。
可变量化因子的编码是5位定长二进制编码,值从1到31,0值禁用,分别代表量化因子2、4、6、8...62。如果可变量化因子mquant值与前面一个宏块的可变量化因子不同,则该可变量化因子写入码流,否则没有可变量化因子域;解码时遇到无可变量化因子域,则延用前面一宏块的可变量化因子的值Mquant。
每个8×8的块再按如图13所示的“Z”字形顺序读出进行游程编码。其中,第一个数据是直流(DC)系数,单独编码处理,后面的交流(AC)系数使用VLC表进行编码。
DC系数编码使用如图14(A)所示的映射表;而AC系数编码使用如图14(B)和图14(C)所示映射表。
码流序列中的序列头和图像组头包含的数据大部分是参数,可以在初始化或参数配置修改时一次生成,以后每次用到时直接复制,个别随时间变化的域值在调用时单独生成。
步骤170和步骤180为重建新参考图像的主要过程。其中步骤170为逆量化,步骤180为DCT反变换。
如图15所示。图像重建包括两个环节,一个是逆量化,另一个是DCT反变换并与预测图像相加。
另外,二维DCT反变换后要对数据进行削波处理,使反变换结果不超出正负255的限定范围。
步骤190,处理指标计算。主要是经过逆量化以及DCT反变换后的图像数据与原始图像之间的信噪比。本步骤不是必须的。
下面参照图16着重描述速率控制的过程。
KVM视频压缩的目标是固定、平稳、低速率的码流传输,要求快速的画面切换反映、清晰的画面质量,这几方面本身就是互相矛盾的,唯一的处理办法在几方面寻求一个可调动态平衡。对高画质的大数据流量控制,只能是压缩突发流量,也就是用较长的时间传输大量的编码数据;画面切换前后帧差别极大,信息量很大,不可能在保证高画质的前提下压缩到一个很小数据量。大数据量必然意味着长的传输时间和很慢的反映速度,如果要保证画面切换的反映时间,只有减少编码数据量、降低图像质量,但降低图像质量是不为最终用户接受认可的。在保证较快的切换画面反映时间时,只能是压缩数据量和图像质量,但在切换后的一段后续时间里如果画面不变化,则传输信道是空闲的,那么应当用空闲带宽提升图像的质量,也就是用后续空余带宽补偿切换画面的质量。这种补偿也就是另外一种形式的压缩切换画面产生的突发数据量,即把大量数据平滑到较长的一段时间内传输的方法;它的优点是响应速度快,画面切换后马上给出较差质量的粗糙画面,让用户看到操作反应,然后画面逐渐清晰,让用户看清细节,这个过程在一定程度上符合用户通常的操作习惯;它另一优点是对带宽的自适应能力,当带宽加大时,可以马上提高每帧的编码数据量,缩短屏幕切换后画面清晰过程的持续时间,当传输带宽降低时,可以加长屏幕切换后画面清晰过程的持续时间,这种自适应能保证最大程度利用传输带宽,提高用户的视觉效果。自适应特征还体现在另一种可调模式上:通过控制画面切换后第一帧编码的大小,来调节第一帧的传输时间,也就调节了画面切换后的反应时间,也同时调整了切换第一帧的画面质量,这个自适应调节是第一帧画面质量与反应时间快慢之间的调节,它与带宽变化带来的自适应调节是相互独立的,可以分别控制。改变自适应平衡点的修改都会造成序列头的重传,也就是重新开始一个新的码流序列,其中所述自适应平衡点可以是传输速率、第一帧反应时间等。
压缩编码速率控制的原则是在设定最大传输速率下的平稳编码速率控制,控制目标是每帧图像的编码大小尽量接近每帧的平均大小,码率波动范围控制得尽可能小,但不包括无须达到平均数据量的情况,例如长时间画面静止时没有信息需要传送。
速率控制算法的核心是调整量化因子,决定量化因子的是编码波动累计参数d、图像活动度avg_act两个因素。其中,d表示在当前时刻之前已编码帧或宏块实际编码数据量与按固定帧大小计算出来的标准编码数据量之差,它决定要编码的当前帧整体量化水平的高低。avg_act是当前帧图像内容变化剧烈程度的反映,每个宏块的变化剧烈程度指示act都与这个平均值相比,决定在整幅图像量化因子的水平上是调高还是调低,使得整幅图像的信噪比保持在一个较为平均的水平,避免出现部分区域明显比其它区域粗糙的现象。其中,avg_act可以用当前帧与参照帧预测图像的方差来表示,act可以用当前宏块与参考帧重建图像中对应宏块的方差来表示。
速率控制的实际操作步骤如图16所示,包括以下步骤:
步骤210,参数初始化。用比特率(bit_rate)除以帧频率(frame_rate),从而计算出两个基本的门限平均编码数据量r和T。这里为了方便说明使用了r和T两个参数,在实际使用中可以只用一个。在本步骤中,还可以将avg_act赋以初始值,这里以0为例。
步骤220,计算初始量化因子的中间变量d0,这里可以取d0=2×r。
步骤230,计算当前帧图像的初始量化因子以及帧活动度avg_act和宏块活动度act。取参数d等于d0,计算可变量化因子mquant=d×31/r。
步骤240,计算每个宏块的量化因子。以第j个宏块为例,它由两个参数决定,一个是由dj求出的Qj,另一个反映宏块相对于整帧的变化剧烈程度的N_actj,可以取值Qj=dj×31/r,N_actj=(2×actj+avg_act)/(actg+2×avg_act),N_actj是根据宏块j的内容变化剧烈程度和当前帧整体内容变化剧烈程度来调节当前帧量化因子得到宏块j量化因子的参数。Qj和N_actj的乘积就是本宏块的可变量化因子。然后由可变量化因子与量化矩阵相乘就可以得到量化因子。
步骤250,判断当前宏块是否当前帧中最后一个宏块,如果是则执行步骤260,否则执行步骤230,继续处理下一个宏块。
步骤260,处理完一帧后,更新速率控制的相关参数,为下一帧的处理作准备。d的变化量取(S-T)×1.03,其中S为该帧的编码数据量,更新的d等于原来的d与其变化量之和,并取d0为更新后的d。需要说明的是,图中所乘的系数1.03仅仅是为了说明性的,并不用于限制本发明。
步骤270,判断下一帧是否发生画面切换,如果是则执行步骤220,强制修改量化控制变量d0的初始值,否则执行步骤230。本步骤也可以移到步骤210和步骤220之间,执行对当前帧是否切屏判断的相关处理。
从上面的流程可以看出,当前帧可变量化因子与参考帧可变量化因子相比,增加的是(S-T)乘以某一固定的系数。由于量化因子等于可变量化因子乘以量化矩阵,所以当前帧量化因子与参考帧量化因子相比,增加的部分相当于(S-T)乘以一预设的系数。而各宏块的量化因子相当于在当前帧量化因子上乘以N_actj,以实现根据该宏块内容变化剧烈程度和当前帧整体内容变化剧烈程度调整量化因子。
图17是一个实际GOP速率控制的主要参数变化过程图,在图17中T=200000BPS/25f=8000,S是每帧的编码数据量,d0是调整量化因子的主要参数,它与S的变化趋势刚好相反,所以速率控制是一个负反馈调节控制过程。GOP的第一帧因为前一帧假设为空白帧而被判断为画面切换,所以量化因子参数d0被强行设置为使得量化因子最大的值;第一帧是帧内编码,在使用最大量化因子的情况下仍然有较大的编码数据量,且量化时出现较多的削波现象,重建参考图像与第一帧仍存在较大差异;所以第二帧在使用第一帧重建参考图像作为预测、量化因子最大的情况下也还有较大的编码数据量,超出门限T;经过两帧编码后的重建图像才比较接近原图像,第三帧的编码速率控制算法才开始起作用,编码数据量降到门限以下;编码数据量控制在最低水平持续了若干帧之后,开始慢慢恢复到平均编码数据量的水平,以后的编码数据量都在平均水平线上下小范围波动,进入了反馈控制的稳定状态。当后续图像出现画面切换时,又会重复图中的过程。屏幕切换后第一帧有突发数据峰值,可以采取调整块内量化矩阵的方法减少第一帧的编码数据量,降低峰值的高度,这样一来就把峰值数据平滑到稍后的峰谷,达到了更进一步的速率平稳;调整后块内量化矩阵要写入码流中,也就开始一个新的码流序列。
整个平稳速率控制过程的大致如上所述,实际应用中的控制是以上几种控制参数调整的组合使用,按终端用户不同使用习惯可以采用合适的组合控制策略。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。