发明内容
有鉴于此,有必要提供一种视频编码装置,不仅能够减少I帧的大小,而且也能够保证I帧的画面质量。
同时,还需要提供一种视频编码方法,不仅能够减少I帧的大小,而且也能够保证I帧的画面质量。
本发明实施方式中的视频编码装置,包括判断模块、计算模块、划分模块、标记模块以及编码模块,其中,判断模块用于判断是否需要对当前影像采用I帧传输;计算模块用于在所述当前影像需要采用I帧传输时计算需要分散为N帧,其中N为整数;划分模块用于将当前影像划分为M个宏块,识别所述当前影像的内容并根据内容划分所述M个宏块的重要性,其中M为整数;标记模块用于将所述M个宏块按照重要性由高到低排序,依顺序将所述M个宏块加上宏块标记n,其中n为属于1到N之间的整数;编码模块用于依次读取所有宏块,对宏块标记n为1的宏块采用低QP值帧内编码,对宏块标记n大于1的宏块采取高QP值帧内编码,以编码为第一帧传输;重新依次读取所有宏块以编码为第i帧传输,其中对宏块标记n小于i的宏块采用帧间编码,i为属于2到N之间的整数。
优选地,所述计算模块根据网络传输通道最大可允许的瞬时传输阈值Smax-frame计算所述当前影像帧需要分散为N帧。
优选地,所述划分模块按照8×8或者16×16的方式划分宏块。
优选地,标记模块将所述M个宏块按照按照重要性由高到低排序之后,依序平均分配至N帧中,其中,每一帧对应的宏块数为M/N,所述M个宏块的宏块标记n分别为对应分配的帧的序号。
优选地,所述标记模块依序依次选取宏块加入到宏块列表中,计算所述宏块列表中的宏块编码后的总大小STotal,其中STotal=[1-(Cmb-list/Cmb-total)]*SHQP+SINTRA,Cmb-list为宏块列表内的宏块个数,Cmb-total为所有宏块的个数,SHQP为当前影像采用高QP值编码时的大小,SINTRA为所述宏块列表采用帧内编码后的大小,直至所述总大小STotal大于Smax-frame,并添加所述宏块列表中宏块的宏块标记为1;清空宏块列表,继续依次将剩余的宏块加入到宏块列表中,计算所述列表中的宏块编码后的总大小STotal,其中STotal=STotal=[1-(Cmb-list/Cmb-total)]*SPSKIP+SINTRA,其中SPSKIP为当前影像采用帧间编码时的大小,直至所述总大小STotal大于Smax-frame,并添加所述宏块列表中宏块的宏块标记为n。
优选地,所述编码模块在编码第n帧时,对宏块标记n等于i的宏块采取低QP值帧内编码,对宏块标记n大于i的宏块采取高QP值帧间编码。
本发明实施方式中的视频编码方法,包括以下步骤:判断是否需要对当前影像采用I帧传输;在所述当前影像需要采用I帧传输时计算需要分散为N帧,其中N为整数;将当前影像划分为M个宏块,识别所述当前影像的内容并根据内容划分所述M个宏块的重要性,其中M为整数;将所述M个宏块按照重要性由高到低排序,依顺序将所述M个宏块加上宏块标记n,其中n为属于1到N之间的整数;及依次读取所有宏块,对宏块标记n为1的宏块采用低QP值帧内编码,对宏块标记n大于1的宏块采取高QP值帧内编码,以编码为第一帧传输;重新依次读取所有宏块以编码为第i帧传输,其中对宏块标记n小于i的宏块采用帧间编码,i为属于2到N之间的整数。
优选地,根据网络传输通道最大可允许的瞬时传输阈值Smax-frame计算所述当前影像帧需要分散为N帧。
优选地,按照8×8或者16×16的方式将当前影像划分为M个宏块。
优选地,所述将所述M个宏块按照重要性由高到低排序,依顺序将所述M个宏块加上宏块标记n的步骤还包括:将所述M个宏块依序平均分配至N帧中,其中,每一帧对应的宏块数为M/N,所述M个宏块的宏块标记n分别为对应分配的帧的序号。
优选地,所述将所述M个宏块按照重要性由高到低排序,依顺序将所述M个宏块加上宏块标记n的步骤还包括:依序依次选取宏块加入到宏块列表中,计算所述宏块列表中的宏块编码后的总大小STotal,其中STotal=[1-(Cmb-list/Cmb-total)]*SHQP+SINTRA,Cmb-list为宏块列表内的宏块个数,Cmb-total为所有宏块的个数,SHQP为当前影像采用高QP值编码时的大小,SINTRA为所述宏块列表采用帧内编码后的大小,直至所述总大小STotal大于Smax-frame,并添加所述宏块列表中宏块的宏块标记为1;清空宏块列表,继续依次将剩余的宏块加入到宏块列表中,计算所述列表中的宏块编码后的总大小STotal,其中STotal=STotal=[1-(Cmb-list/Cmb-total)]*SPSKIP+SINTRA,其中SPSKIP为当前影像采用帧间编码时的大小,直至所述总大小STotal大于Smax-frame,并添加所述宏块列表中宏块的宏块标记为n。
优选地,在编码第n帧时,对宏块标记n等于i的宏块采取低QP值帧内编码,对宏块标记n大于i的宏块采取高QP值帧间编码。
相较于现有技术,本发明通过根据当前网络传输环境计算需要将当前影像分散至多少帧传输,并通过影像识别对影像按照重要性进行区域划分,对不同区域采取不同的编码方式,不仅能够减少帧的大小,而且也能够保证画面质量。
具体实施方式
为使本发明目的、技术方案、及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
图1所示为本发明视频编码装置的应用环境图。如图所示,发送端30发出的视频信息首先进行视频编码装置10进行编码,再通过网络传输通道40传输至解码装置50及接收端60处,发送端30可以为个人计算机、监控设备、或摄像设备,本领域技术人员可以理解的是,视频编码装置10可以位于发送端30上,也可以是单独的组件,网络传输通道40最大可允许的传输阈值为Smax-frame,接收端60可以为个人计算机、智能手机、或显示设备,接收端60的数量可以为多个,本发明并不以此为限。
图2所示为本发明影像编码装置一实施方式的功能模块图。在本实施方式中,视频编码装置10包括判断模块101、计算模块103、划分模块105、标记模块107以及编码模块109。
下面结合图3-图5对本发明影像编码装置各模块功能进行详细介绍。
图3所示为本发明影像编码方法的流程图。在本实施方式中,影像编码方法均通过图2所示的功能模块来完成。
在步骤S301中,判断模块101接收影像数据,对影像中图像进行分析,以判断是否需要对当前影像帧采用I帧传输。在本实施方式中,判断模块101判断是否需要采用I帧传输的方法可以为判断当前影像帧是否与前一帧影像有很大区别,当区别很大时,即需要采用I帧编码传输;当区别不大时,即不需要采用I帧编码传输。由于I帧、P帧均为H.264编码协议中规定,还可以采用其他判断方式,本发明并不以此为限。在当前影像帧需要采用I帧传输时,则进入步骤S303。
在步骤S303中,在需要采用I帧传输时,计算模块103计算当前影像帧需要分散为多少帧进行传送。由于网络传输通道存在最大可允许的瞬时传输阈值,若当前影像帧采用I帧传输之后的大小超过了瞬时传输阈值,则会导致图像失真不清晰,因此,需要计算将当前影像帧分散为多少帧进行传输。在本实施方式中,为了与现有的H.264协议匹配,对分散后的帧采取I帧和P帧相结合的编码方式,具体来说,第1帧将会是I帧,后续的则为P帧。比如,如果计算得出需要分散为N帧传输,则第1帧为I帧,后面的N-1帧均为P帧。计算模块103通过计算当前影像全部采用帧内编码时的数据大小,再与网络传输通道的最大可允许传输阈值Smax-frame进行比较,得出该值。可以采用的计算公式为N=ROUND{[MaxI-Frame/(100*k/m*r)]+1},其中,MaxI-Frame为当前影像全部采用帧内编码时的大小,k为影像传输速率,m为传输通道个数,r为影像的帧速。比如,如当前影像全部采用帧内编码时的大小为75KB(MaxI-Frame=75KB),k=8Mbps,传输通道只有一个即m=1,影像帧速为30,经过计算可得N=3,即此时需要分散至3帧内传输。本领域技术人员可以理解的是,若当前影像全部采用帧内编码时的数据大小小于网络传输通道的最大可允许传输阈值Smax-frame,则不需要分散传输,直接传输即可。
在步骤S305中,划分模块105将当前影像帧划分为多个宏块(macro block),识别当前影像帧的内容并根据内容划分多个宏块的重要性。在本实施方式中,划分模块105划分宏块时可采用16×16或者8×8的方式。在划分宏块之后,划分模块105进一步的对影像帧的内容进行识别。由于视频影像内一般会出现人物或者其他物体,通过人脸识别或者物件侦测,可以识别当前影像的具体内容,再根据影像的不同内容划分影像的重要性。在本实施方式中,划分模块105根据影像识别结果将各个宏块划分为重要性高、重要性中以及重要性低。比如,当影像中存在人脸时,即以人脸部分的宏块为重要性高,人体部分的宏块为重要性中,背景部分的宏块为重要性低;当影像内为其他物体时,也可采取类似的做法。由于人脸识别及物件侦测技术目前已经十分成熟,本发明并不以此为限。最后,当前影像帧的多个宏块都将会被划分为重要性高、中、低。
在步骤S307中,标记模块107将所有宏块按照重要性由高到低排序,依顺序将所有宏块加上宏块标记n,宏块标记n是指标记该宏块在后续的编码中将在哪一帧进行帧内编码,特别的,此时帧内编码还应当是低QP值帧内编码,以提高图像质量。在本实施方式中,标记模块107可根据步骤S303中计算出的分散帧的个数将所有宏块进行平均分配,假定步骤S303中计算模块103计算出需要分散为N帧传送,则将所有宏块平均分散至N帧中,计算一帧对应多少宏块,然后按照宏块重要性由高到低的顺序,分别将所有宏块标记n为1一直到N。比如,若当前影像帧需要分散为4帧传送,当前宏块划分采用的8*8方式,则总共有64个宏块,平均分为4帧,则计算可知每一帧应对应16个宏块,当将所有宏块按照重要性由高到低排序之后,则对第1-16号宏块的宏块标记n为1,17-32号宏块的宏块标记n为2,33-48号宏块标记n为3,49-64宏块标记n为4。
在其他实施方式中,为进一步保证分配后的帧不超过网络传输通道的最大可允许传输阈值,标记模块107对宏块的编码大小进行测算,并与当前网络传输通道最大可允许传输阈值进行比较,以计算出每个帧内可传输多少宏块,从而将所有宏块分配至各个帧。宏块标记是指标记该宏块在后续的编码中将在哪一帧进行帧内编码。下面结合图4进行详细说明。
图4为本发明视频编码方法中添加宏块标记的方法流程图。假定步骤S303中计算模块103计算出需要分散为N帧传送,n为宏块标记,n是位于1到N之间的整数,表明该宏块应分配到第几帧进行帧内编码。比如,当n=1时指该宏块标记为第1帧,即I帧,表明该宏块将分配至I帧进行帧内编码;n大于1则表明该宏块标记为P帧,且该宏块将位于第n-1个P帧进行编码,比如n=3时表明该宏块被标记为P帧,且该宏块将于第2个P帧内进行帧内编码。
在步骤S401中,标记模块107首先计算出当前影像采用高QP值编码时的大小SHQP以及整个影像采用帧间编码的大小SPSKIP,并将n的初始值设为1。在本实施方式中,计算SHQP时采用的高QP值可以为22-51之间。
在步骤S402中,标记模块107设置一宏块列表,并先将宏块列表清空。
在步骤S403中,标记模块107依照步骤S307中重要性由高到低的顺序依次选取宏块加入宏块列表。
在步骤S404中,标记模块107计算当前宏块列表采用帧内编码的大小SINTRA以及若以当前宏块列表分配为一帧传输时的编码大小STotal。在本实施方式中,分为两种情况,当n等于1即编码为I帧的情况下,STotal的计算公式为STotal=[1-(Cmb-list/Cmb-total)]*SHQP+SINTRA;当n大于1即编码为P帧的情况下,STotal的计算公式为STotal=[1-(Cmb-list/Cmb-total)]*SPSKIP+SINTRA,其中,Cmb-list是指宏块列表内的宏块个数,Cmb-total是指所有宏块的个数,SINTRA为宏块列表采用帧内编码后的大小。首先计算的是编码为I帧的情况,在属于I帧的宏块标记完成之后,则进行编码为P帧的计算。
在步骤S405中,标记模块107将STotal与网络传输通道的最大可允许传输阈值Smax-frame进行比较,当STotal小于Smax-frame时,表明当前宏块列表还可以继续添加宏块,此时进入步骤S407判断所有宏块是否已经计算完毕,如没有,则按照宏块重要性排序选取下一宏块加入宏块列表,再次进行计算宏块列表的编码大小。当STotal大于Smax-frame时,则表明此时宏块列表已经超过了最大可允许传输阈值,进入步骤S406。
在步骤S406中,标记模块107将当前宏块列表内的所有宏块标记为I帧,标记为I帧表示该宏块列表内的宏块将在I帧内进行帧内编码。
在步骤S408中,标记模块107在宏块列表计算完成之后,将n与N进行比较,若n小于N,则表明还有宏块需要标记,此时对n进行加1运算,然后清空之前的宏块列表,继续按照宏块重要性顺序选取下一宏块加入宏块列表,进行下一宏块列表的计算。在本实施方式中,在I帧标记完成之后,进行P帧的计算与标记步骤,清空之前的宏块列表,继续按照宏块重要性顺序选取下一宏块加入宏块列表,进行下一宏块列表的计算,直到将剩余的宏块标记完成。
在步骤S409中,当n等于N时,表明此时所有宏块均已被标记完毕。
通过上述步骤,标记模块107将当前影像的所有宏块添加了宏块标记n。
接着,在所有宏块都被标记了之后,编码模块109进行编码操作。在步骤S309中,编码模块109依次读取所有宏块,并对宏块标记n为1即标记为I帧的宏块采用低QP值帧内编码,对宏块标记n大于1即标记为P帧的宏块采取高QP值帧内编码,以编码为第1帧(I帧)传输,其中,对标记为I帧的宏块采用低QP值帧内编码,是为了提高影像清晰度,对标记为P帧的宏块可以采用高QP值帧内编码,进一步降低I帧的数据大小。进一步的,编码模块109重新依次读取所有宏块,以编码为第i帧(第i-1个P帧),其中对宏块标记n小于i的宏块采用低QP值帧间编码,对宏块标记n等于i的宏块采用低QP值帧内编码,对宏块标记n大于i的宏块采用高QP值帧间编码;继续重新依次读取所有宏块,以编码为下一个P帧传输,直至所有P帧编码完毕。编码模块109在编码为P帧时,由于标记为I帧的宏块在I帧已经进行了帧内编码,此时仅需进行低QP值的帧间编码即可;而对于标记为P帧的宏块,则分为三种情况,假如此时编码为第i帧,即第i-1个P帧,此时,若该宏块标记n小于i,表明该宏块已经在之前的P帧被编码,此时也仅需进行低QP值的帧间编码即可;当该宏块标记n等于i,则表明该宏块正要被编码,此时为保证影像的清晰,对这部分宏块设置为低QP值,并采用帧内编码;当该宏块标记n大于i,则采用高QP值的帧间编码即可,以降低数据大小。本实施方式中I帧中的高QP值范围为22-51,低QP值范围为0-21;P帧中的高QP值范围为25-51,低QP值范围为0-24,实际取值情况可结合影像清晰度、影像大小进行调整,本发明并不以此为限。下面结合图5进行详细说明不同帧类别中不同宏块的判断过程。
图5为本发明视频编码方法中对每个宏块进行编码的方法流程图。假定全部影像需要N帧传输,即需要1个I帧以及N-1个P帧,i是位于1到N之间的整数,表示目前对第几帧图像进行编码。
在步骤S501中,编码模块109对第i帧图像进行编码操作。
在步骤S502中,编码模块109判断i是否为1,当i等于1,表明目前是采用I帧编码,进入步骤S503;当i不等于1,则表明目前是采用P帧编码,进入步骤S507。
在步骤S503中,编码模块109判断宏块标记n是否为1,当宏块标记n等于1时,表明该宏块被标记为I帧,属于重要性高的宏块,则采用步骤S504中的低QP值的帧内编码,当宏块标记n不等于1时,则表明该宏块标记为P帧,采用步骤S505中的高QP值帧内编码。
在步骤S506中,编码模块109判断所有宏块是否检查完毕,如检查完毕,则将i加1,执行下一帧的编码操作。
在步骤S507中,编码模块109判断宏块标记n是否小于i,如小于i,则表明该宏块标记属于I帧或者是属于当前P帧之前的P帧,该宏块已经在之前的帧中进行了低QP值的帧内编码,因此此时仅需对该宏块采取步骤S408中的低QP值的帧间编码,以减少数据大小。如宏块标记n大于等于i,则进入步骤S509。
在步骤S509中,编码模块109判断宏块标记n是否等于i,当n=i时,表明该宏块标记为属于该P帧,此时对于该宏块采取步骤S510中的低QP值帧内编码,以保证图像的品质。如n不等于i,则表明n大于i,表明该宏块标记属于该P帧之后的P帧,此时对于该宏块采取高QP值的帧间编码,以减少数据大小。
在步骤S512中,编码模块109判断所有宏块是否检查完毕,如检查完毕,则将i加1,执行下一帧的编码操作。
本实施方式中的视频编码装置及方法通过计算需要将当前影像分散至多少帧传输,并通过影像识别对影像按照重要性进行区域划分,对不同的区域采取不同的编码方式,不仅能够减少I帧的大小,而且也能够保证I帧的画面质量。