具体实施方式
下面将结合附图及较佳实施方式对本发明的技术方案进行详细描述。
在其中一个实施例中,如图1所示,一种自适应MotionJPEG编码方法,包括如下步骤:
S100获取视频序列;
S110根据Huffman说明表对视频序列的当前视频帧进行JPEG编码,生成当前视频帧对应的编码符号;
S120在步骤S110的同时统计当前视频帧对应的编码符号的出现频率;
S130输出当前视频帧的编码码流;
S140根据当前视频帧对应的编码符号的出现频率和范式Huffman编码方法更新Huffman说明表,更新后的Huffman说明表用于当前视频帧的相邻下一视频帧的JPEG编码。
具体地,首先获取视频序列,根据Huffman说明表对视频序列的当前视频帧进行JPEG编码,生成当前视频帧对应的编码符号并统计对应的编码符号的出现频率。在本发明中,所述视频序列的当前视频帧是指视频序列中正在进行JPEG编码的视频帧,而当前视频帧的相邻下一视频帧是相对于所述当前视频帧而言的,指在当前视频帧之后并且与当前视频帧的时间最为接近的下一视频帧,同样地,当前视频帧的相邻上一视频帧指在当前视频帧之前并且与当前视频帧的时间最为接近的上一视频帧,在本发明中为便于技术方案的表述将视频序列在时间顺序上的某些视频帧进行命名,但不应将此作为对本发明技术方案的限制。
其次,根据当前视频帧对应的编码符号的出现频率和范式Huffman编码方法更新Huffman说明表。具体地,更新Huffman说明表的过程包括根据当前视频帧对应编码符号的出现频率,采用范式Huffman编码方法获取对应的编码符号的编码位长,再根据对应的编码符号的编码位长对Huffman说明表进行更新的步骤。
最后,根据更新后的Huffman说明表对当前视频帧的相邻下一视频帧进行JPEG编码,生成相邻下一视频帧对应的编码符号并统计其出现频率,根据出现频率的统计结果和范式Huffman编码方法再次更新Huffman说明表。以此类推,相邻下一视频帧之后的每一个视频帧在进行JPEG编码时所采用的Huffman说明表均为其相邻上一视频帧编码后得到的更新后的Huffman说明表,之后的每一视频帧的具体编码方法与当前视频帧的编码方法相同,此处不再赘述。该实施例中的视频序列的MotionJPEG编码充分利用了相邻视频帧之间的相关性,减少了视频序列编码过程中冗余信息的产生,提高了视频序列的压缩速度和编码效率。
在另一个实施例中,作为实际编码时的一种具体实施方式,如图2所示,包括以下步骤:
S200获取视频序列;
S210判断当前视频帧是否为初始帧;
S220若是初始帧,则根据预设Huffman说明表(通常为标准Huffman说明表)对其进行JPEG编码;若不是初始帧,则根据更新后的Huffman说明表进行JPEG编码;
S230在S220进行的同时统计当前视频帧进行JPEG编码后生成的对应的编码符号的出现频率;
S240根据当前视频帧对应的编码符号的出现频率,采用范式Huffman编码方法对当前视频帧对应编码符号进行编码,获取对应的编码符号的编码位长,根据编码位长来更新Huffman说明表;
S250输出当前视频帧的编码码流。
然后获取相邻下一视频帧,重复步骤S210至S250,对所述视频序列的每一视频帧进行JPEG编码。
本实施例具体的编码过程如下:获取视频序列并判断所获取的当前视频帧是否为初始帧,如上一实施例所述,本发明中的初始帧是指第一次获取到并进行编码的视频帧,并非指视频序列在时间上的绝对第一帧。如果当前视频帧是初始帧,则根据预设Huffman说明表(通常为标准Huffman说明表)对当前视频帧进行JPEG编码,生成初始帧对应的编码符号并统计其出现频率,根据出现频率的统计结果和范式Huffman编码方法,得到当前视频帧对应的编码符号的编码位长,根据编码位长更新Huffman说明表,并输出当前视频帧的编码码流;然后获取相邻下一视频帧,根据更新后的Huffman说明表对相邻下一视频帧进行JPEG编码,之后所有视频帧的编码方法均以此类推。
该实施例结合实际编码过程,对相邻视频帧之间Huffman说明表的自适应性动态变化作出了规律性的解释说明,通过Huffman说明表的动态更新实现了不同视频帧间相关性的充分利用,从而消除冗余信息。但是对于所属技术领域的技术人员而言,在本实施例提出的编码方法的基础之上,可以引申出多种其它的编码方法,本实施例所说明的情况并不能将其他所有情况都囊括进来,因此,本发明所要求保护的范围应以权利要求限定的保护范围为准。
在另一个实施例中,根据Huffman说明表对视频序列的当前视频帧进行JPEG编码,生成当前视频帧对应的编码符号并统计其出现频率时,可以根据编码符号统计比重来统计对应的编码符号的出现概率。由于Huffman说明表是在编码符号的出现频率基础之上构建的,而编码符号的出现频率在一帧图像中的分布具有一定的规律性,往往只统计一帧图像中一部分的编码符号的出现频率,即可近似作为一帧图像的全部编码符号的出现频率,因此,基于上述原理,本实施例通过统计当前视频帧对应的部分编码符号的出现频率,即为编码符号的统计数量设定一个比重(编码符号统计比重),以当前视频帧中对应的部分编码符号的出现频率代替全部编码符号的出现频率,进而以部分编码符号的出现频率为基础构建基于当前视频帧的Huffman说明表,并将该Huffman说明表用于相邻下一视频帧的编码。该优选实施例不仅能够充分利用相邻视频帧之间的相关性,实现视频压缩效率的提高,而且,由于在视频帧编码的过程中无需等待当前视频帧编码结束后再构建相应的Huffman说明表,当前视频帧的编码过程与Huffman说明表构建过程是并行运行的,因而最大程度地发挥了JPEG编码设备的编码效率,在进一步提高视频压缩效率的同时,减小了编码过程中的延迟效应。下面结合图3所示的时序图对该实施例进行说明,由图可知,在当前视频帧结束编码之前,对当前视频帧对应的部分编码符号的出现频率进行统计,统计结束后,基于该统计结果构建Huffman说明表,由于构建Huffman说明表的时间较短,例如,在一款主频为160兆赫兹的32比特CPU上运行构建Huffman说明表的程序,约需要3毫秒,而大部分应用中编码器是按照压缩1帧用时30毫秒设计的,因此构建Huffman说明表的时间远远小于视频帧的编码时间,构建Huffman说明表的时间在时间轴上能够被完全覆盖。当Huffman说明表构建完成时,当前视频帧的编码可能尚未完成,此时需等待JPEG编码设备完成编码后再更新Huffman说明表并将更新后的Huffman说明表用于相邻下一视频帧的编码。同时,当前视频帧对应的部分编码符号统计完成后,根据JPEG编码设备输出的编码比特率和/或控制设备的使用占比设定编码符号统计比重,该编码符号统计比重将用于当前视频帧的相邻下一视频帧的部分编码符号的统计。
优选地,在获取编码符号统计比重时,将亮度分量的DC中间符号作为统计对象,以当前视频帧当前生成的亮度分量的DC中间符号个数与当前视频帧对应的全部亮度分量的DC中间符号个数之比作为编码符号统计比重的值。为能清楚表达本发明中编码符号统计比重的设定,下面结合具体实例对上述内容加以解释:
在MotionJPEG编码领域,每一个视频帧进行JPEG编码时都会生成对应的编码符号,编码符号具体包括DC中间符号和AC中间符号。例如,一个8x8数据块经过离散余弦变换和量化后,位于8x8数据块左上角的数据便是DC系数,DC系数是图像在频域中频率为零的系数值,除DC系数以外的63个系数值便是AC系数,而AC系数是图像在频域中频率不为零的系数值。由于DC系数是一块图像像素的平均值,相邻8x8数据块的DC系数有很大的相关性,所以通常对相邻块的DC系数的差值进行编码,DC中间符号就是由DC系数的差值转化而来的,而AC中间符号也是由AC系数转化而来的。在根据编码符号统计比重对部分编码符号进行统计时,优选地以亮度分量的DC中间符号(Ydc_symbol)作为设定统计比重的对象,其好处在于:一方面,对于大小一定的视频序列或者视频帧而言,Ydc_symbol总数是一定的,并且相对于其他中间符号而言其总数较少(亮度分量的DC中间符号有12种,而亮度分量的AC中间符号则有162种),同时,在根据编码符号统计比重统计部分编码符号的出现频率时,实际上可以利用当前生成的Ydc_symbol的个数作为停止统计出现频率的判定条件,即根据当前视频帧对应的Ydc_symbol总数和编码符号统计比重获得需要统计的Ydc_symbol的个数(相当于为Ydc_symbol的统计个数设置一个阈值),在当前视频帧当前生成的Ydc_symbol的个数达到阈值时,立即结束对编码符号的出现频率的统计,因此,将个数较少的Ydc_symbol用于编码符号统计比重的计算能够提高统计效率;另一方面,由于Ydc_symbol在编码的过程中具有良好的稳定性,因此采用Ydc_symbol作为编码符号统计比重的对象能够保证最终获得的编码符号统计比重的有效性和准确性。在上述实施例中,根据编码符号统计比重统计当前视频帧对应的编码符号,使得视频帧的编码过程和Huffman说明表的构建过程并行进行,从而最大程度地减小了系统延迟,同时,将基于当前视频帧的Huffman说明表应用于相邻下一视频帧的编码,提高了视频的压缩效率,因此本实施例在保留原有编码压缩效率的基础之上,提高了视频编码的灵活性。
对于编码符号统计比重的设定,其中一个实施例如图4所示,编码符号统计比重可以根据JPEG编码设备输出的编码比特率(单位时间内传送的比特数)和控制设备(如CPU等)的使用占比进行设定。下面将以具体的参数为例对根据JPEG编码设备输出的编码比特率和控制设备的使用占比设定编码符号统计比重这一过程进行详细的说明,但应当指出的是,以下说明过程仅以其中几个较为具体的数据或者参数为例进行说明,因而此处的说明不应作为对本发明保护范围的限制。图3所示为根据JPEG编码设备输出的编码比特率和控制设备的使用占比设定编码符号统计比重的过程示意图,当控制设备的使用占比小于或等于第一阈值且编码比特率小于或等于第二阈值时,编码符号统计比重设定为60%;当控制设备的使用占比小于或等于第一阈值且编码比特率大于第二阈值而小于或等于第三阈值时,编码符号统计比重设定为80%;当控制设备的使用占比小于或等于第一阈值且编码比特率大于第三阈值时,编码符号统计比重设定为100%,即对当前视频帧的全部编码符号的出现频率进行统计。特别地,当控制设备的使用占比大于第一阈值时,编码符号统计比重为0%,即意味着不对当前视频帧对应的编码符号进行统计,此时采用预设Huffman说明表(通常为标准Huffman说明表)对相邻下一视频帧进行JPEG编码。根据JPEG编码设备的编码比特率和控制设备的使用占比设定编码符号比重,充分考虑了不同条件下对编码符号进行统计的情况,根据实际情况灵活地调整编码符号统计比重,以提高视频压缩的效率。当然,在实际应用中,完全可以以控制设备的使用占比或JPEG编码设备输出的编码比特率作为设定编码符号统计比重取值的依据。
编码符号统计比重可以是如上所述的预设比重(如60%,80%,100%等),优选地,编码符号统计比重也可以是动态变化的,例如,根据JPEG编码设备输出的编码比特率和/或控制设备的使用占比的具体情况,对每一个视频帧对应的编码符号的统计都设定不同的编码符号统计比重,实现编码符号统计比重的动态变化,而编码符号统计比重的动态变化符合实际编码时对编码符号进行统计的实际情况,因此具有较强的实用性。
此外,除了根据JPEG编码设备输出的编码比特率和控制设备的使用占比对编码符号统计比重进行具体设定外,还可以对编码符号的统计对象进行设定,如图5所示,当控制设备的使用占比小于或等于第一阈值且所述编码比特率小于或等于第二阈值时,编码符号的统计对象为亮度分量的DC中间符号(Ydc_symbol)、亮度分量的AC中间符号(Yac_symbol)、色度分量的DC中间符号(UVdc_symbol)和色度分量的AC中间符号(UVac_symbol);当控制设备的使用占比小于或等于第一阈值且所述编码比特率大于第二阈值而小于或等于第三阈值时,编码符号的统计对象为Ydc_symbol、Yac_symbol、UVdc_symbol和UVac_symbol;当控制设备的使用占比小于或等于第一阈值且所述编码比特率大于第三阈值时,编码符号的统计对象为Ydc_symbol和Yac_symbol。与编码符号统计比重设定相似地,当控制设备的使用占比大于第一阈值时,则不对当前视频帧的编码符号进行统计,而采用预设Huffman说明表对相邻下一视频帧进行JPEG编码。控制设备在根据不同的统计对象的出现频率构建Huffman说明表时,控制设备的使用占比不同,同时,不同的编码符号统计对象与JPEG编码设备输出的编码比特率密切相关,由于根据不同的编码符号出现频率构建的Huffman说明表对编码比特率的贡献不同,因此在JPEG编码设备输出的编码比特率较高时,可以采用设定编码符号的统计对象的方式(如仅统计亮度分量的DC中间符号和AC中间符号),实现对输出的编码比特率的调节,从而平衡系统的负载。
视频帧进行JPEG编码时会生成相应的编码符号,所述编码符号具体包括DC中间符号和AC中间符号,而根据范式Huffman编码方法生成的Huffman说明表又与上述两种中间符号的出现频率密切相关。对于一个8x8的数据块而言,DC中间符号可以有12种取值,AC中间符号可以有162种取值,关于DC中间符号和AC中间符号取值的表即是码值表,关于DC中间符号和AC中间符号编码位长的表即是码长表,而所述码值表和码长表共同组成Huffman说明表,并用于编码过程中模拟Huffman树的建立。
在其中一个实施例中,根据当前视频帧对应的编码符号的出现频率和范式Huffman编码方法更新Huffman说明表这一过程,具体包括根据当前视频帧对应的编码符号的编码位长对码值表和码长表分别进行更新的过程。
作为对码值表进行更新的一种具体实现方式,将当前视频帧对应的编码符号的码值按照其相应的编码位长的大小顺序(例如从小到大的顺序)进行排列后,得到更新后的码值表。
作为对码长表进行更新的一种具体实现方式,根据预设码长阈值对当前视频帧对应的编码符号的编码位长进行限制,根据限制后编码符号的编码位长得到更新后的码长表。
作为一种范式Huffman编码方法的优选实施方式,预设码长阈值具体可取为16。
为更详细地阐明Huffman说明表的动态更新过程,下面将以每帧图像的宽度为1280、高度为720,帧数共为2445帧的视频序列Amazon[1280×720].yuv为例予以详尽的阐述。
视频的亮度和色度是视频显示的重要参数,因而也是视频编解码时需要考虑的重要内容。在实际的Huffman编码过程中,亮度分量Y的DC中间符号Ydc_symbol有12种,色度分量U和色度分量V的DC中间符号UVdc_symbol各有12种,亮度分量Y的AC中间符号Yac_symbol有162种,色度分量U和色度分量V的AC中间符号UVac_symbol各有162种,在程序代码中,可以定义Ydc_values_cnt[13]、UVdc_values_cnt[13]、Yac_values_cnt[163]和UVac_values_cnt[163]四个数组来分别存放上述亮度分量Y和色度分量U、色度分量V的各个中间符号的出现频率。为了避免后续Huffman编码时全“1”码字的出现,每个数组多出一个元素的存储位置以保留一个代码点,当然这个位置的频率值始终为0。如图6所示,对当前视频帧进行JPEG编码时生成对应的编码符号(包括亮度分量Y的DC中间符号和AC中间符号,色度分量U和色度分量V的DC中间符号和AC中间符号,色度V分量的DC中间符号和AC中间符号),同时统计对应的编码符号的出现频率,根据所述出现频率的统计结果对编码符号进行范式Huffman编码后得到编码符号的编码位长,根据编码位长对当前视频帧对应的编码符号的码值表和码长表分别进行更新,即实现Huffman说明表的动态更新。下面将结合实际编码方法对当前视频帧的编码符号的编码位长获取过程以及Huffman说明表的更新过程予以详细说明,在如下的说明过程中,都将以当前视频帧的亮度分量Y的AC中间符号为例,而亮度分量Y的DC中间符号,色度分量U和色度分量V的AC中间符号,色度分量U和色度分量V的DC中间符号的相应过程都可以按照与亮度Y的AC中间符号相同的过程进行处理。
图7所示为MotionJPEG编码中范式Huffman编码的过程示意图,其结果是根据当前视频帧对应的编码符号的出现频率和范式Huffman编码方法得到编码符号的编码位长。Yac_values_cnt[163]包含了163个AC中间符号的出现频率值,其中Yac_values_cnt[163]=0为保留的1个代码点,统计过程中没有出现的中间符号的出现频率值也为0。在Huffman编码过程中分别定义三个数组:Cnt[V]、Codelength[V]、NextIdx[V],其中Cnt[V]=Yac_values_cnt[V],Codelength[V]表示符号V的代码大小,其初始化为0,NextIdx[V]表示在当前代码树中指向所有符号组成的链的下一个符号的索引,其初始化为-1,值为-1时表示终止索引链。查找具有最小Cnt[V]的值时,要保证V值为最大值且Cnt[V]值为最小值,同时要保证Cnt[V]值大于或者等于0。这样做的目的是,当有多个V值以相同的频率出现时,总是选择具有最大V值的出现频率值,这样可以保证保留的代码点属于最长的代码字类别,也就保证了没有任何码字为全“1”的情形。
在确定每个亮度分量Y的162个AC中间符号的编码位长后,根据如图8所示的亮度分量Y的AC中间符号的码值表更新流程图对当前视频帧的码值表进行更新,具体方法是将编码符号的码值按照其对应的编码位长从小到大的顺序进行排列,从而得到更新后的码值表。
图9所示为亮度分量Y的AC中间符号的码长表更新流程图。码长表BITS[V]表示在亮度分量Y的162个AC中间符号中编码位长为V的编码符号个数,如果将临时代码点考虑在内,则亮度分量Y的AC中间符号应该有163种,特别地,BITS[0]的值为0。在MotionJPEG编码过程中,范式Huffman编码所用到的有关编码位长的Huffman说明表,其最大编码位长不能大于预设码长阈值,即所有编码符号的编码位长应限制为小于或者等于预设码长阈值。作为一种优选实施方式,当预设码长阈值具体为16时,所有编码符号的编码位长应限制为小于或者等于16,该限制过程可以根据如图10所示的方法实现,其基本原理是:对于最长的Huffman代码而言,符号成对出现,所以每次从长度表中移走两个符号。符号对的前缀(至少1位)被分给符号对中的1个符号,然后把下一个最短非零BITS入口项中的代码字转换为两个代码字的前缀。当把BITS表压缩为最大为16位后,最后一步再把保留的代码点,从代码长度计数值中移出。至此,有关亮度分量Y的AC中间符号的码长表已经更新完毕。
如上所述,对根据当前视频帧对应的编码符号的出现频率和范式Huffman编码方法更新Huffman说明表的过程结合附图进行了具体的说明,并且仅以当前视频帧的一种编码符号即亮度Y的AC中间符号为例进行说明,然而对于所属技术领域人员而言,当前视频帧的其他编码符号的处理过程以及视频序列中其他视频帧对应的编码符号的处理过程均可以按照亮度Y的AC中间符号的处理过程进行相应的处理或者变换。
为了进一步验证本发明所提出的自适应MotionJPEG编码方法对视频压缩的有效性,这里分别就使用标准Huffman说明表的MotionJPEG编码方法(标准MotionJPEG编码方法)和本发明所提出的自适应MotionJPEG编码方法的实际压缩效果进行比较。用上述两种方法分别对Amazon[1280×720].yuv视频序列中的100个视频帧进行编码,得到编码后压缩文件的大小以及压缩率,结果如表1所示,其中S_01为使用标准MotionJPEG编码方法进行编码后的压缩文件大小,S_02为使用自适应MotionJPEG编码方法编码后的压缩文件大小,这两种编码方法所得到的压缩文件字节数的差值与使用标准Huffman说明表编码后得到的压缩文件的字节数之比即为压缩率_02。从表1可以看出,自适应MotionJPEG编码方法相比于传统技术中标准MotionJPEG编码方法具有更优的视频压缩效果。
视频样本 |
S_01 |
S_02 |
压缩率_02 |
Amazon[1280x720].yuv |
5.91MB |
4.93MB |
16.58% |
表1
在此基础之上,为了更进一步说明自适应MotionJPEG编码方法对于不同类型的视频序列都具有更优的压缩效果,这里给出分别使用标准MotionJPEG编码方法和自适应MotionJPEG编码方法对不同类型视频样本进行编码的结果,如表2所示,其中每一视频样本用于编码的视频帧数均为100个。根据表2的数据可知,从压缩效果上来看,一方面对于画面运动程度小的视频样本,使用自适应MotionJPEG编码方法进行编码的压缩率一般在5%~9%左右,部分视频样本的压缩率可达12%,相比于标准MotionJPEG编码方法的压缩效果,自适应MotionJPEG编码方法能够明显地提高数据的压缩率;另一方面对于720p和1080p的视频样本在使用自适应MotionJPEG编码方法进行编码时,其压缩率多在10%~30%之间,编码效率得到了更大程度的提升。
视频样本 |
S_01 |
S_02 |
压缩率_02 |
ducks_take_off[1280x720].yv12 |
15.8 |
15.3 |
0.0316457 |
bridge_close[352x288].yv12 |
1.47 |
1.38 |
0.06122449 |
Robotica[1440x1080].yuv |
6.75 |
4.95 |
0.266666667 |
football[352x288].yv12 |
1.47 |
1.42 |
0.034013605 |
foreman[352x288].yv12 |
1.26 |
1.2 |
0.047619048 |
highway[352x288].yv12 |
0.97 |
0.85 |
0.12371134 |
blue_sky[1920x1080].yv12 |
19.4 |
18.3 |
0.056701031 |
bowing[352x288].yv12 |
0.95 |
0.86 |
0.094736842 |
Speed[1440x1080].yuv |
14.4 |
13.3 |
0.076388889 |
Stormchasers[1440x1080].yuv |
6.5 |
4.54 |
0.301538462 |
To_The_Limit[1440x1080].yuv |
10.7 |
9.5 |
0.112149533 |
Amazing_Caves[1440x1080].yuv |
6.81 |
5.04 |
0.259911894 |
Amazon[1440x1080].yuv |
8.91 |
7.27 |
0.184083651 |
FighterPilot[1280x720].yuv |
4.73 |
3.61 |
0.236786169 |
表2
在实际的JPEG编码中,除上述标准MotionJPEG编码方法外,还有另一种基于对同一视频帧进行两次扫描而生成用于该视频帧编码的Huffman说明表的方法,由于该编码方法能够更准确地构造出用于编码的Huffman树,因此是一种压缩效果较为理想的编码方法。这里进一步给出使用两次扫描而得到的Huffman说明表的MotionJPEG编码方法和自适应MotionJPEG编码方法分别对不同类型视频样本进行编码的压缩率对比,如表3所示,其中S_01为使用两次扫描而得到的Huffman说明表进行编码后的压缩率,S_02为使用自适应MotionJPEG编码方法进行编码后的压缩率。通过对表3的数据进行分析可知,S_01与S_02在数值上十分接近,说明此两种编码方法的压缩效果相近,但采用同一帧进行两次扫描而得到Huffman说明表的方法并不利于实际应用,因为当视频帧数较多时,对每一视频帧进行两次扫描将对系统造成巨大的开销,而本发明所提出的自适应MotionJPEG编码方法充分利用了相邻视频帧之间的相关性,在获得与理想压缩效果相接近的压缩效果的同时,减少了对每一视频帧的扫描次数,极大地节约了系统资源。
视频样本 |
压缩率_01 |
压缩率_02 |
ducks_take_off[1280x720].yv12 |
0.03164557 |
0.03164557 |
bridge_close[352x288].yv12 |
0.06122449 |
0.06122449 |
Robotica[1440x1080].yuv |
0.271111111 |
0.266666667 |
football[352x288].yv12 |
0.034013605 |
0.034013605 |
foreman[352x288].yv12 |
0.047619048 |
0.047619048 |
highway[352x288].yv12 |
0.128865979 |
0.12371134 |
blue_sky[1920x1080].yv12 |
0.056701031 |
0.056701031 |
bowing[352x288].yv12 |
0.094736842 |
0.094736842 |
coastguard[352x288].yv12 |
0.056962025 |
0.050632911 |
Speed[1440x1080].yuv |
0.076388889 |
0.076388889 |
Stormchasers[1440x1080].yuv |
0.304615385 |
0.301538462 |
To_The_Limit[1440x1080].yuv |
0.114018692 |
0.112149533 |
Amazing_Caves[1440x1080].yuv |
0.262848752 |
0.259911894 |
Amazon[1440x1080].yuv |
0.189674523 |
0.184062851 |
FighterPilot[1280x720].yuv |
0.241014799 |
0.236786469 |
表3
此外,还将根据编码符号统计比重来统计编码符号的出现频率的方法(即统计部分编码符号出现频率的方法)与标准MotionJPEG编码方法进行对比,如表4所示,S_01(100%)表示使用标准Huffman说明表进行编码后压缩文件大小;S_02(100%)表示使用自适应MotionJPEG编码方法进行编码后的压缩文件大小,并且统计的是当前视频帧对应的全部编码符号的出现频率;S_02(80%)表示使用自适应MotionJPEG编码方法进行编码后的压缩文件大小,并且编码符号统计比重为80%;S_02(60%)表示使用自适应MotionJPEG编码方法进行编码后的压缩文件大小,并且编码符号统计比重为60%。由表4的数据可知,一方面,从压缩后的文件大小上来看,使用自适应MotionJPEG编码方法(S_02(100%))能够获得比现有压缩技术(S_01(100%))更好的压缩效果;另一方面,以部分编码符号(如80%,60%)的出现频率统计结果近似一帧图像中全部编码符号(100%)的出现频率统计结果,仍然能够获得与后者相接近的压缩结果,这表明,根据编码符号统计比重统计部分编码符号出现频率的方法,在最终的压缩效果上与使用统计全部编码符号的出现频率而生成的Huffman说明表进行编码的压缩效果相同,但在统计部分编码符号出现频率的方法中,出现频率的统计在JPEG编码设备完成当前视频帧的编码之前,因此可提前构建用于相邻下一视频帧的Huffman说明表,从而在提高压缩效率的同时,大大减少了编码过程的延迟,提高了视频编码的灵活性。
视频样本 |
S_01(100%) |
S_02(100%) |
S_02(80%) |
S_02(60%) |
07420003-720p.yuv |
13.2MB |
11.3MB |
11.3MB |
11.4MB |
19160007-720p.yuv |
9.98MB |
8.03MB |
8.05MB |
8.07MB |
PPG00081-720p.yuv |
22.6MB |
21.4MB |
21.4MB |
21.5MB |
Tantugo_01-720p.yuv |
15MB |
13.7MB |
13.8MB |
13.8MB |
Tantugo_02-720p.yuv |
12.3MB |
10.7MB |
10.7MB |
10.7MB |
Tantugo_03-720p.yuv |
17.8MB |
16.1MB |
16.1MB |
16.1MB |
07420003-1080p.yuv |
26.6MB |
22.2MB |
22.3MB |
22.4MB |
19160007-1080p.yuv |
21.1MB |
16.3MB |
16.4MB |
16.4MB |
PPG00081-1080p.yuv |
45.7MB |
42.7MB |
42.8MB |
42.9MB |
Tantugo_01-1080p.yuv |
28.9MB |
25.6MB |
25.6MB |
25.6MB |
Tantugo_02-1080p.yuv |
24.3MB |
20.4MB |
20.4MB |
20.4MB |
Tantugo_03-1080p.yuv |
36.8MB |
33MB |
33MB |
33MB |
mobcal_ter_720p.yuv |
30.9MB |
30.3MB |
30.3MB |
30.3MB |
表4
综上所述,本发明相比于传统MotionJPEG编码方法,充分利用了视频序列中相邻视频帧的相关性,实现Huffman说明表在视频帧之间的动态变化,因而能够有效减少视频帧之间的冗余信息,提高了视频编码的压缩效率,同时采用一次扫描的方式生成每一视频帧的Huffman说明表,降低了系统开销,有效节约了成本和资源。此外,本发明还提出了一种统计部分编码符号出现频率的编码方法,即以视频帧对应的部分编码符号的出现频率近似替代该视频帧对应的全部编码符号的出现频率,该方法不仅能够获得良好的视频压缩效果,而且最大程度地发挥了JPEG编码设备的编码效率,减小了视频编码过程中的延迟。
同时,本发明还提出了一种自适应MotionJPEG编码系统,如图11所示,具体包括如下组成部分:
获取设备1100,用于获取视频序列;
JPEG编码设备1110,用于根据Huffman说明表对获取设备1100输出的所述视频序列的当前视频帧进行JPEG编码,生成所述当前视频帧对应的编码符号,并输出视频压缩流;
Huffman符号统计设备1120,用于统计所述当前视频帧对应的编码符号的出现频率;
控制设备1130,用于根据所述当前视频帧对应的编码符号的出现频率和范式Huffman编码方法更新所述Huffman说明表,更新后的Huffman说明表用于所述当前视频帧的相邻下一视频帧的JPEG编码。
在上述编码系统中,各组成设备具有数据存储的功能,例如JPEG编码设备1110对视频帧进行编码后生成的编码符号数据的存储,以及Huffman符号统计设备1120对编码符号出现频率统计信息的存储等,都可以通过各自自带的存储单元实现。同时,JPEG编码设备1110不仅可以将获取设备1100传输过来的视频序列编码成为符合MotionJPEG压缩标准的视频压缩流,而且可以与现有硬件逻辑实现集成、复用。
关于MotionJPEG编码系统的工作过程,将结合该实施例进行详细地描述。
如图11所示,获取设备1100获取视频序列并将视频序列输出至JPEG编码设备1110,JPEG编码设备1110接收视频序列并根据Huffman说明表对视频序列的当前视频帧进行编码,生成当前视频帧对应的编码符号,同时Huffman符号统计设备1120统计当前视频帧对应的编码符号的出现频率,将统计结果输出至控制设备1130,控制设备1130根据统计结果和范式Huffman编码方法更新Huffman说明表,JPEG编码设备1110将根据更新后的Huffman说明表对当前视频帧的相邻下一视频帧进行编码,生成相邻下一视频帧对应的编码符号,此时Huffman符号统计设备1120统计该相邻下一视频帧对应的编码符号的出现频率,并将其统计结果输出至控制设备1130,控制设备1130根据该统计结果再次更新Huffman说明表。JPEG编码设备1110对之后的每一个视频帧进行JPEG编码时,使用的Huffman说明表均为它的相邻上一视频帧编码后得到的更新后的Huffman说明表,之后每一视频帧的具体编码方法与当前视频帧的编码方法相同,此处不再赘述。特别地,当获取设备1100所获取的当前视频帧为所述视频序列的初始帧时,JPEG编码设备1110可采用预设Huffman说明表(通常为标准Huffman说明表)对初始帧进行JPEG编码。
本发明所提出的MotionJPEG编码系统通过各个组成设备之间的协调配合实现了基于帧间动态Huffman说明表的编码功能,充分利用相邻视频帧之间的相关性,从而能够有效减少视频帧之间的冗余信息,在进一步提高压缩效率的同时,降低系统开销,节约成本和资源。
优选地,MotionJPEG编码系统可以利用硬件专有模块对JPEG编码过程中编码符号的出现频率进行统计,通过DRAM(DynamicRandomAccessMemory,动态随机存取存储器)等存储单元进行交换,并使用软件构造更新后的Huffman说明表。在实际应用中,硬件专有模块可以很方便地集成、复用JPEG编码设备原有的硬件逻辑,在提高压缩率的同时,兼顾软件运算量和硬件成本。
在另一个实施例中,如图12所示,编码系统还包括:
Huffman统计控制设备1240,用于为Huffman符号统计设备设定编码符号统计比重,Huffman符号统计设备根据编码符号统计比重统计当前视频帧对应的编码符号的出现频率。
具体地,获取设备1200为编码系统提供视频序列并将视频序列输出至JPEG编码设备1210,JPEG编码设备1210接收视频序列并根据Huffman说明表对视频序列的当前视频帧进行编码,生成当前视频帧对应的编码符号,在JPEG编码设备1210进行JPEG编码的同时,Huffman符号统计设备1220根据Huffman统计控制设备1240所设定的编码符号统计比重对当前视频帧对应的编码符号的出现频率进行统计,并将统计结果输出至控制设备1230,控制设备1230根据统计结果和范式Huffman编码方法构建并更新Huffman说明表,JPEG编码设备1210将根据更新后的Huffman说明表对相邻下一视频帧进行编码。JPEG编码设备1210对之后的每一个视频帧进行编码时,使用的Huffman说明表均为相应视频帧的相邻上一视频帧编码后控制设备1230构建的Huffman说明表,之后每一视频帧的具体编码方法与当前视频帧的编码方法相同,此处不再赘述。特别地,当获取设备1200所获取的当前视频帧为所述视频序列的初始帧时,JPEG编码设备1210可采用预设Huffman说明表对初始帧进行JPEG编码,所述预设Huffman说明表可以为标准Huffman说明表。
上述自适应MotionJPEG编码系统除通过各个组成设备之间的协调配合实现压缩效率的进一步提高外,该编码系统通过Huffman统计控制设备对Huffman符号统计设备所统计的编码符号进行控制,实现在当前视频帧编码完成前,提前构建当前视频帧的Huffman说明表,从而实现控制设备与JPEG编码设备的并行运行,最大程度地发挥了JPEG编码设备的编码效率,减小系统延迟,提高了编码系统的性能和灵活性。
下面结合图13对上述实施例进行描述,图13所示为该实施例的时序图。由图可知,在JPEG编码设备结束当前视频帧的编码之前,Huffman符号统计设备对当前视频帧对应的部分编码符号出现频率进行统计,统计结束后,控制设备基于该统计结果构建Huffman说明表,由于控制设备构建Huffman说明表的时间较短,例如,在一款主频为160兆赫兹的32比特CPU上运行构建Huffman说明表的程序,约需要3毫秒,而大部分应用中编码器是按照压缩1帧用时30毫秒设计的,因此控制设备构建Huffman说明表的时间远远小于JPEG编码设备对当前视频帧的编码时间,控制设备构建Huffman说明表的时间在时间轴上能够被完全覆盖。当控制设备构建完成Huffman说明表时,JPEG编码设备可能尚未完成编码,此时控制设备需等待JPEG编码设备完成编码后再更新Huffman说明表并启动相邻下一视频帧的编码,JPEG编码设备将更新后的Huffman说明表用于相邻下一视频帧的编码。同时,Huffman符号统计设备统计完成当前视频帧对应的部分编码符号后,根据JPEG编码设备输出的编码比特率和/或控制设备的使用占比为Huffman符号统计设备设定编码符号统计比重,该编码符号统计比重将用于当前视频帧的相邻下一视频帧的部分编码符号出现频率的统计。由上述分析可知,包括Huffman统计控制设备的编码系统确实能够减小编码系统的延迟,提高编码效率。
优选地,Huffman统计控制设备在获取编码符号统计比重时,将亮度分量的DC中间符号作为统计对象,以当前视频帧当前生成的亮度分量的DC中间符号个数与当前视频帧对应的全部亮度分量的DC中间符号个数之比作为编码符号统计比重的值。Huffman统计控制设备对编码符号统计比重的设定方法及其有益效果均已在上述自适应MotionJPEG编码方法实施例部分进行了详细介绍,此处不再赘述。
作为一种具体的实施方式,Huffman统计控制设备根据编码设备输出的编码比特率和控制设备的使用占比对编码符号统计比重进行设定,充分考虑了编码系统在实际工作情况下对编码符号的统计需求,根据实际情况设定编码符号统计比重,以提高系统的编码性能。当然,在实际应用中,完全可以将JPEG编码设备输出的编码比特率或控制设备的使用占比二者中的任意一项作为设定编码符号统计比重取值的依据。
优选地,Huffman统计控制设备动态设定编码符号统计比重,例如,Huffman统计控制设备根据JPEG编码设备输出的编码比特率和/或控制设备的使用占比的具体情况,对每一个视频帧对应的编码符号的统计都设定不同的编码符号统计比重,实现编码符号统计比重的动态变化,而编码符号统计比重的动态变化符合实际编码时对编码符号进行统计的实际情况,因此具有较强的实用性。
在另一种具体的实施方式中,Huffman统计控制设备还根据JPEG编码设备输出的编码比特率和控制设备的使用占比对编码符号的统计对象进行设定。
Huffman统计控制设备根据JPEG编码设备输出的编码比特率和控制设备的使用占比对编码符号统计比重或者编码符号的统计对象的设定,其过程及其有益效果均已在上述自适应MotionJPEG编码方法中相应的实施例部分进行了详细说明,此处不再赘述。
在另一个自适应MotionJPEG编码系统的实施例中,如图14所示,其组成包括:
获取设备1400,用于提供视频序列;
JPEG编码设备1410,用于根据Huffman说明表对获取设备1400输出的所述视频序列的当前视频帧进行JPEG编码,生成所述当前视频帧对应的编码符号,JPEG编码完成后输出所述当前视频帧的压缩流;
Huffman统计控制设备1420,用于为所述Huffman符号统计设备设定编码符号统计比重,所述Huffman符号统计设备根据所述编码符号统计比重统计所述当前视频帧对应的编码符号的出现频率;
Huffman符号统计设备1430,用于统计所述当前视频帧对应的编码符号的出现频率;
控制设备1440,用于根据所述当前视频帧对应的编码符号的出现频率和范式Huffman编码方法更新所述Huffman说明表,更新后的Huffman说明表用于所述当前视频帧的相邻下一视频帧的JPEG编码;
存储设备1450,用于MotionJPEG编码过程中数据的存储、交换和中转;
输出设备1460,用于压缩后MotionJPEG数据的网络输出。
在本实施例中,编码系统的工作过程具体包括:JPEG编码设备1410接收所述获取设备1400输出的视频序列,并根据Huffman说明表对视频序列的当前视频帧进行编码,生成当前视频帧对应的编码符号并将当前视频帧的编码码流输出至存储设备1450;所述Huffman符号统计设备1430根据Huffman统计控制设备1420所设定的编码符号统计比重来统计当前视频帧对应的部分编码符号(包括DC中间符号和AC中间符号)的出现频率,并将统计结果输出至存储设备1450;控制设备1440从存储设备1450获取该统计结果并根据范式Huffman编码方法更新Huffman说明表,控制设备1440将更新后的Huffman说明表输出至存储设备1450,同时控制设备1440通知JPEG编码设备1410将更新后的Huffman说明表存储至相邻下一视频帧的定义Huffman标记字段,该定义Huffman标记字段的作用在于,当解码器获取到该字段时,就可以构造出相应的Huffman树,并用于相应的视频帧的解码。获取设备1400获取相邻下一视频帧之后,JPEG编码设备1410将根据更新后的Huffman说明表对其进行编码,之后每一视频帧都按照各自的前一视频帧生成的Huffman说明表进行编码,以此类推,待视频序列中的所有视频帧编码完成后,输出设备1460从存储设备1450获取并输出符合MotionJPEG压缩标准的视频压缩流。
本实施例中的存储设备1450为JPEG编码设备1410、Huffman符号统计设备1430、控制设备1440以及输出设备1460提供数据的存储、交换和中转,一方面减少各设备的分立的存储单元,从而减小系统的复杂性,另一方面有利于不同设备对存储数据的快速读取,提高系统效率。所述存储设备1450包括DRAM(DynamicRandomAccessMemory,动态随机存取存储器)、SRAM(StaticRandomAccessMemory,静态随机存取存储器)、NandFlash(一种flash内存)中的一种以上。
此外,所述获取设备1400包括Sensor(传感器)模组、硬盘、NandFlash(一种flash内存)、NorFlash(一种flash内存)中的一种以上。
所述控制设备1440包括CPU。
所述输出设备1460包括NandFlash、硬盘中的一种或者两种。
同时,作为一种替代方案,获取设备1400、存储设备1440以及输出设备1450可以任选两个设备进行集成复用或者将三者集成到同一设备中,以便简化系统装置,进而节约硬件设备成本。
本实施例中还可以包括输入设备,该输入设备用于为获取设备1400提供连续稳定的视频序列。
优选地,Huffman统计控制设备可以集成、复用JPEG编码设备,从而简化编码系统,节约成本。
在上述实施例中,自适应MotionJPEG编码系统基于相邻视频帧之间的相关性和Huffman说明表的动态更新使得视频帧间的冗余信息减少,软件的计算量减少,从而提高压缩效率,节省系统开销,同时,通过Huffman统计控制设备对Huffman符号统计设备所统计的编码符号进行控制,实现在当前视频帧编码完成前,提前构建当前视频帧的Huffman说明表,从而进一步实现控制设备与JPEG编码设备的并行运行,最大程度地发挥了JPEG编码设备的编码效率,减小系统延迟,提高了编码系统的性能和灵活性,符合实际编码时对编码系统的要求。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。