一种数字视频压缩与解压缩方法与流程

文档序号:14943025发布日期:2018-07-13 21:33
本发明属于视频处理领域,具体涉及一种数字视频压缩与解压缩方法。
背景技术
:随着技术进步特别是智能手机的普及,各种视频拍摄、传输、存储越来越方便,随之而来的是产生大量视频数据,给网络传输带宽和存储空间提出了空前需求。因此对数字视频的压缩和解压缩显得尤其重要。目前业界广泛应用的数字视频压缩的主要工作重点是:帧间压缩和帧内压缩。帧间压缩采用(GroupofPictures,GOP)结构,主要有三种编码帧:I帧、P帧、B帧。I帧为Intra-codedpicture(帧内编码图像帧),不参考其他图像帧,只利用本帧的信息进行编码。P帧即Predictive-codedPicture(预测编码图像帧),利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码。B帧即BidrectionalPicture(双向预测编码图像帧),提供最高的压缩比,它既需要之前的图像帧(I帧或P帧),也需要后来的图像帧(P帧),采用运动预测的方式进行帧间双向预测编码。帧内压缩通常有以下几步:1、色彩空间转换(RGB–>YUV);2、宏块划分;3、离散余弦变换(DiscreteCosineTransform,DCT);4、量化Quantization;5、Z行扫描ZigZagScan;6、霍夫曼编码HuffmanCoding。在实现本发明的过程中,发明人发现现有技术至少存在以下问题:图像经过色彩空间转换、离散余弦变换、量化等操作,存在不可逆转的画质损失,即经过解压缩后得到的图像与原图像不完全一致。在网络直播环境下,需要传输一个完整的GOP才能解压缩;一幅图像被划分成若干宏块,随着分辨率的增加,宏块数量随之增加,视频编码体积随之增大,且容易出现“马赛克”现象。为了提高压缩率,在宏块的基础上采用了若干复杂的数学变换和预测,将压缩解压缩难度提高了若干倍。技术实现要素:针对上述现有技术的不足,本发明发所要解决的技术问题是:解压缩后得到的图像与原图像不完全一致的问题;在网络直播环境下,需要传输一个完整的GOP才能解压缩;一幅图像被划分成若干宏块,随着分辨率的增加,宏块数量随之增加,视频占用随之空间增大。为了提高压缩率,在宏块的基础上采用了若干复杂的数学变换和预测,将压缩解压缩难度提高了若干倍。为了解决上述技术问题,本发明采用了如下的技术方案:一种数字视频压缩与解压缩方法,包括以下步骤:压缩环节包括:S1:数字视频序列的第一帧为基准帧;S2:依序判断每一帧画面是否为基准帧,若该帧画面为基准帧,进入步骤S3,若该帧画面为非基准帧,则进入步骤S7;S3:进行分解得到基准帧矩阵序列,同时进行步骤S4与S6;S4:对所述基准帧矩阵序列进行熵编码;S5:进行传输或者存储,该帧画面的压缩步骤完成;S6:将所述基准帧矩阵序列存入第一暂存器中,所述第一暂存器仅能暂存最近一帧矩阵序列;S7:进行分解得到非基准帧矩阵序列,进行步骤S8与S9;S8:对所述非基准帧矩阵序列进行熵编码;S9:将所述非基准帧矩阵序列减去所述第一暂存器中暂存的矩阵序列得到差值矩阵序列,将所述非基准帧矩阵序列暂存入第一暂存器中,替换所述第一暂存器中原矩阵序列;S10:对所述差值矩阵序列进行熵编码;及S11:比较所述非基准帧矩阵序列的熵编码与所述差值矩阵序列的熵编码大小,选出熵编码小的矩阵序列,进入到步骤S5进行传输或存储;解压环节包括:S12:判断接收到的熵编码是否为所述差值矩阵序列的熵编码;若判断不为所述差值矩阵序列的熵编码,进入步骤S13:还原得到基准帧解压矩阵序列,进行步骤S14与S15;S14:将所述还原得到的基准帧解压矩阵序列暂存进第二暂存器中,所述第二暂存器仅能暂存最近一帧矩阵序列;S15:经过将所述基准帧解压矩阵序列组合后得到基准帧的原图像;若为所述差值矩阵序列的熵编码,进入步骤S16:还原得到解压差值矩阵序列;S17:将所述解压差值矩阵序列加上所述第二暂存器中暂存的矩阵序列,得到和值矩阵序列,并将所述和值矩阵序列暂存入所述第二暂存器中,进入步骤S15。进一步的,所述数字视频压缩与解压缩方法为无损压缩,以保证解压缩后得到的图像与原图像完全一致。进一步的,在所述步骤S1,除了第一帧为基准帧,压缩参数指定的帧也为基准帧。进一步的,在所述步骤S3的进行分解得到基准帧矩阵序列之后,所述步骤S4的对所述基准帧矩阵序列进行熵编码之前,还包括将分解得到的基准帧矩阵序列进行有损数学变换,再将经过有损数学变换后的基准帧矩阵序列进行熵编码。进一步的,在所述步骤S13的还原得到基准帧解压矩阵序列之后,所述步骤S15的经过将所述基准帧解压矩阵序列组合之前,还包括将还原得到基准帧解压矩阵序列进行与有损数学变换相对应的逆向有损数学变换,再将经过所述逆向有损数学变换的基准帧解压矩阵序列进行矩阵序列组合。进一步的,在步骤S1之前,还包括将所述数字视频每帧进行部分像素抽取,得到小于原画面的单帧图像。进一步的,在步骤S15后,进行插值运算处理,得到基准帧的原图像所对应的有损图像。进一步的,所述步骤S7具体为:进行分解得到非基准帧矩阵序列,依序进行步骤S9与S8,先执行步骤S9:先将所述非基准帧矩阵序列减去所述第一暂存器中暂存的矩阵序列得到差值矩阵序列;再将所述非基准帧矩阵序列暂存入第一暂存器中,替换所述第一暂存器中原矩阵序列。进一步的,所述步骤S13具体为:还原得到基准帧解压矩阵序列,依序进行步骤S14与S15,先执行步骤S14。本发明的有益效果为:通过上述压缩与解压缩方法,解压缩后得到的图像与原图像完全一致,是一种无损压缩,可以和其它多种有损压缩方法组合使用;直播时不需要等待整个GOP缓存,得到一帧画面的熵编码就可输出图像。可以对RGB图像直接压缩和解压缩。没有宏块结构,压缩率增长趋势明显低于现有技术方案,单帧画面像素越多优势越明显。没有复杂数学变换,主要计算为矩阵加减法,压缩和解压缩CPU占用低。附图说明图1为本发明具体实施方式所述的一种数字视频压缩与解压缩方法的压缩环节的流程图。图2为本发明具体实施方式所述的一种数字视频压缩与解压缩方法的解压环节的流程图。图3为本发明实施例4的像素抽取图。图4为本发明实施例5的像素抽取图。具体实施方式参见图1、图2,图1为本发明具体实施方式所述的一种数字视频压缩与解压缩方法的压缩环节的流程图;图2为本发明具体实施方式所述的一种数字视频压缩与解压缩方法的解压环节的流程图。下面结合附图对本发明作进一步的详细说明。本实施方式中,如图1所示,一种数字视频压缩与解压缩方法,包括压缩环节、解压环节。压缩环节包括:S1:数字视频序列的第一帧为基准帧。在本实施方式中,除了第一帧为基准帧,压缩参数指定的帧也为基准帧。S2:依序判断每一帧画面是否为基准帧,若该帧画面为基准帧,进入步骤S3,若该帧画面为非基准帧,则进入步骤S7。S3:进行分解得到基准帧矩阵序列,同时进行步骤S4与S6。S4:对基准帧矩阵序列进行熵编码。S5:进行传输或者存储,该帧画面的压缩步骤完成。S6:将基准帧矩阵序列存入第一暂存器中,第一暂存器仅能暂存最近一帧矩阵序列。S7:进行分解得到非基准帧矩阵序列,进行步骤S8与S9。S8:对非基准帧矩阵序列进行熵编码。S9:将非基准帧矩阵序列减去第一暂存器中暂存的矩阵序列得到差值矩阵序列,将非基准帧矩阵序列暂存入第一暂存器中,替换第一暂存器中原矩阵序列。S10:对差值矩阵序列进行熵编码。S11:比较非基准帧矩阵序列的熵编码值与差值矩阵序列的熵编码值,筛选出熵编码值小的矩阵序列,进入到步骤S5进行传输或存储。解压环节包括:S12:判断接收到的熵编码是否为差值矩阵序列的熵编码。若判断不为差值矩阵序列的熵编码,进入步骤S13:还原得到基准帧解压矩阵序列,进行步骤S14与S15。S14:将还原得到的基准帧解压矩阵序列暂存进第二暂存器中,第二暂存器仅能暂存最近一帧矩阵序列。S15:经过将基准帧解压矩阵序列组合后得到基准帧的原图像。若为差值矩阵序列的熵编码,进入步骤S16:还原得到解压差值矩阵序列。S17:将解压差值矩阵序列加上第二暂存器中暂存的矩阵序列,得到和值矩阵序列,并将和值矩阵序列暂存入器暂存器中,进入步骤S15。在本实施方式中,数字视频压缩与解压缩方法为无损压缩,以保证解压缩后得到的图像与原图像完全一致。在步骤S3的进行分解得到基准帧矩阵序列之后,步骤S4的对基准帧矩阵序列进行熵编码之前,还包括将分解得到的基准帧矩阵序列进行有损数学变换,再将经过有损数学变换后的基准帧矩阵序列进行熵编码。在本实施例中,有损数学变换包括DCT变换、傅里叶变换、拉普拉斯变换等等。在其他实施方式中,在步骤S1之前,还包括将数字视频每帧进行部分像素抽取,得到小于原画面的单帧图像。并且在步骤S15后,进行插值运算处理,得到基准帧的原图像所对应的有损图像。在步骤S13的还原得到基准帧解压矩阵序列之后,步骤S15的经过将基准帧解压矩阵序列组合之前,还包括将还原得到基准帧解压矩阵序列进行与有损数学变换相对应的逆向有损数学变换,再将经过逆向有损数学变换的基准帧解压矩阵序列进行矩阵序列组合。在本实施例中,数字视频压缩与解压缩方法为无损压缩,以保证解压缩后得到的图像与原图像完全一致。在步骤S1之前,还包括将数字视频分解成若干帧画面,然后进行抽值运算处理。在步骤S15中,具体包括经过将基准帧解压矩阵序列组合后,然后进行插值运算处理,得到基准帧的原图像。插值运算处理每四个像素抽取一个像素或每两个像素间隔抽取。步骤S7具体为:进行分解得到非基准帧矩阵序列,依序进行步骤S9与S8,先执行步骤S9:先将非基准帧矩阵序列减去第一暂存器中暂存的矩阵序列得到差值矩阵序列;再将非基准帧矩阵序列暂存入第一暂存器中,替换第一暂存器中原矩阵序列。步骤S13具体为:还原得到基准帧解压矩阵序列,依序进行步骤S14与S15,先执行步骤S14。在一具体实施例1中:压缩环节:以1秒时长5x5大小的24bit的视频文件为例,如下表所示。该视频的第一帧,共25个像素,每个方块代表一个像素。每个像素用RGB表示,需要24bit(3个byte),对应的RGB值如下(每个像素内RGB值从上往下排序)。按RBG分别拆分成下表的3个矩阵。我们以R[1]、R[2]、R[3]……R[253]、R[254]、R[255]标示红色矩阵序列,数字表示矩阵内像素的色深。矩阵构建原则为,矩阵与原图像等高等宽的像素。每个矩阵对应一种颜色下的一种深浅,该矩阵每个像素与原图同样位置像素进行比较,若原图同样位置像素有该矩阵代表的颜色且颜色深度大于等于该矩阵代表的深浅,则该矩阵这个矩阵内某个像素的位置记为1,否则记为0。R矩阵内所有值按从小到大排序为0000384765102103117117128132153165181204231235255255255255255255。按矩阵构建原则得到下表矩阵序列,共计255个R[n]矩阵,为节省篇幅省略部分矩阵。其中R[1]=R[2]=……=R[37]=R[38],R[39]=R[40]=……=R[47],R[48]=R[49]=……=R[65],以此类推。将以上矩阵序列进行熵编码,进行传输或者存储。熵编码过程不在赘述。解压环节:接收熵编码得到下表矩阵序列。将R、G、B矩阵进行组合矩阵运算:R[1]+R[2]+R[3]+……+R[253]+R[254]+R[255]得到下表R矩阵。1036511723518125502554701652310255117020425525515310212813238255G[1]+G[2]+G[3]+……+G[253]+G[254]+G[255]得到下表G矩阵。116147652122495151255111120230153192655125519219205112815138102B[1]+B[2]+B[3]+……+B[253]+B[254]+B[255]得到下表B矩阵。19363302042050102204181192332302040302042550020400176380然后由R、G、B矩阵合成与原画面完全相同的图像。在一具体实施例2中:压缩环节:以一个5x5大小共5帧的24bit的视频文件为例,视频的第一帧,共25个像素,每个方块代表一个像素。如下表,每个像素用RGB表示,需要24bit(3个byte),对应的RGB值如下(每个像素内RGB值从上往下排序)。按RBG分别拆分成下表的3个矩阵。以R[1]R[2]R[3]……R[253]R[254]R[255]标示红色矩阵序列,数字表示矩阵内像素的色深。矩阵构建原则为,矩阵与原图像等高等宽的像素。每个矩阵对应一种颜色下的一种深浅,该矩阵每个像素与原图同样位置像素进行比较,若原图同样位置像素有该矩阵代表的颜色且颜色深度大于等于该矩阵代表的深浅,则该矩阵这个矩阵内某个像素的位置记为1,否则记为0。R矩阵内所有值按从小到大排序为505050505050505050505050505050505050505050228228228228。按矩阵构建原则得到如下表矩阵序列,共计255个R[n]矩阵,为节省篇幅省略部分矩阵。其中R[1]=R[2]=......=R[48]=R[49]=0,R[51]=R[52]=......=R[227]=0,R[229]=R[230]=......=R[255]=0。仅有R50和R228不等于0。将以上矩阵序列进行熵编码,进行传输或者存储。熵编码过程不在赘述。解压环节,接收熵编码得到下表矩阵序列。按照R[1]*1+R[2]*2+R[3]*3+......+R[254]*254+R[255]*255得到下表R矩阵。505050505050228228505050228228505050505050505050505050G[1]*1+G[2]*2+G[3]*3+......+G[254]*254+G[255]*255得到G矩阵。19219219219219219269691921921926969192192192192192192192192192192192192B[1]*1+B[2]*2+B[3]*3+......+B[254]*254+B[255]*255得到下表B矩阵。92929292929236369292923636929292929292929292929292然后由R、G、B矩阵合成与原画面完全相同的图像。在一具体实施例3中:压缩环节:同时参考具体实施例2的视频文件,以一个5x5大小共5帧的24bit的视频文件为例,每帧共25个像素,每个方块代表一个像素。实施例2是基准帧(第一帧),下表是第二帧,每个像素用RGB表示,需要24bit(3个byte),对应的RGB值如下(每个像素内RGB值从上往下排序)。按RBG分别拆分成下表3个矩阵。第二帧R、G、B矩阵序列分别与第一暂存器中的第一帧R、G、B矩阵序列做减法运算,得到下表差值矩阵序列。分别将第二帧矩阵序列与差值矩阵序列进行熵编码,经过比较后,选择差值矩阵序列进行传输。解压环节,接收熵编码得到下表差值矩阵序列。差值矩阵序列与第二暂存器内的矩阵序列进行下表加法运算。然后将第二帧矩阵序列进行合成,由下表可知,R、G、B矩阵合成了与压缩前第二帧画面完全相同的图像。在一具体实施例4中:压缩环节:以1个单帧画面10像素*6像素的视频文件为例,以画面左上角为原点。1234567891023456在步骤S1之前,将数字视频每帧按奇数行抽取奇数列像素,偶数行抽取偶数列像素的方法进行像素抽取,得到5像素*6像素的单帧图像,像素减少50%(如图3中以黑色表示抽取的像素)。像素抽取后的图像进行本发明所述的无损压缩和解压缩,得到5像素*6像素的单帧图像,然后再把5像素*6像素的单帧图像用插值算法还原成10像素*6像素的单帧图像。在一具体实施例5中:压缩环节:以1个单帧画面10像素*6像素的视频文件为例,以画面左上角为原点。1234567891023456在步骤S1之前,将所述数字视频每帧按奇数行抽取奇数列像素,偶数行不抽取像素的方法进行像素抽取,得到5像素*3像素的单帧图像,像素减少75%(如图4中以黑色表示抽取的像素)。像素抽取后的图像进行本发明所述的无损压缩和解压缩,得到5像素*3像素的单帧图像,然后再把5像素*3像素的单帧图像用插值算法还原成10像素*6像素的单帧图像。本发明的有益效果为:通过上述压缩与解压缩方法,解压缩后得到的图像与原图像完全一致,是一种无损压缩,可以和其它多种有损压缩方法组合使用;直播时不需要等待整个GOP缓存,得到一帧画面的熵编码就可输出图像。可以对RGB图像直接压缩和解压缩。没有宏块结构,压缩率增长趋势明显低于现有技术方案,单帧画面像素越多优势越明显。没有复杂数学变换,主要计算为矩阵加减法,压缩和解压缩CPU占用低。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。当前第1页1 2 3 
再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1