首页> 中国专利> 一种基于可变输入数据流的大动态实时解压缩系统

一种基于可变输入数据流的大动态实时解压缩系统

摘要

本发明公开了一种基于可变输入数据流的大动态实时解压缩系统,包括:解帧模块、RS解码模块、2DECC解码模块、无纠错解码模块、EDC检纠错模块、数据打包分发模块、多路并行golomb解码模块、多路并行残差预测解码模块、像素收集模块以及组帧模块;解帧模块解析压缩码流的帧格式,分离辅助信息与压缩码流数据;压缩码流数据输入到检纠错模块、多路并行解码模块按块解码,然后将解码后的数据还原成输入的数据形式,完成解压缩工作,最后将解码后的数据在组帧模块逆压缩排序组合后与相机辅助信息拼接组成相机格式数据输出。实现了对应的解压缩算法的FPGA并行实现,实现了可变的输入数据流和大动态压缩比变化的实时解压缩。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-05-22

    授权

    授权

  • 2017-09-12

    实质审查的生效 IPC(主分类):H04N19/436 申请日:20170514

    实质审查的生效

  • 2017-08-18

    公开

    公开

说明书

技术领域

本发明属于图像解压缩技术领域,更具体地,涉及一种基于可变输入数据流的大动态实时解压缩系统。

背景技术

随着信息技术的不断发展和我国卫星通信在军事上的迫切需要,卫星图像的星地传输技术成为了一个需要重点研究的领域。进入21世纪,我国在航空航天领域取得了较大的研究成果,对地观测等空间领域正处于高速发展时期。近年来由于卫星传感器性能的极大提升,使得卫星图像在时间、空间和光谱分辨率上都得到了很大的提高,空间探测器所获取的数据量越来越大,如此庞大的数据量在星地间传输是有限的信道容量所无法承载的。这样有限的信道容量与传输大量卫星遥感图像数据需求间的矛盾日益突出。

卫星图像数据压缩是静止图像压缩中的较难掌握的一门技术,与普通图像相比,卫星图像数据的相关性较弱、熵值高、冗余小,并随地面背景和气象状况的不同而发生巨大的变化,连续性差,可预测性极低,目前国内外主要的压缩标准是由国际化标准组织ISO和国际电联ITU的图像专家工作组针对不同的图像类型,制定了一系列的国际标准。其中包括动态视频压缩的H.261、H.263、H.264,二值图像压缩的JBIG、JBIG2,以及连续色调静止图像压缩的JPEG、JPEG-LS和JPEG2000等,与JPEG、JPEG2000等流行的图像压缩算法相比较,JPEG-LS在无损压缩领域具有高保真和低复杂度等特点。

大幅面的卫星图像经过星地无线信道传输至地面端需要在最短的时间内要无失真的恢复出探测器所拍摄到的原图。这就要求地面接收系统具备很高的实时处理能力。其硬件架构要能具有强大的计算能力和良好的并行处理特性,采用通用处理器进行软件解压难以保证实时性。

发明内容

针对现有技术的以上缺陷或改进需求,本发明的目的在于提供了一种基于可变输入数据流的大动态实时解压缩系统,由此解决现有的采用通用处理器进行软件解压难以保证实时性的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种基于可变输入数据流的大动态实时解压缩系统,包括:解帧模块、RS解码模块、2DECC解码模块、无纠错解码模块、EDC检纠错模块、数据打包分发模块、多路并行golomb解码模块、多路并行残差预测解码模块、像素收集模块以及组帧模块;

所述解帧模块,用于识别压缩码流中的标志识别码,提取解码需要的中间参数和相机格式数据并缓存,并将压缩码流中的帧格式数据、相机格式数据以及压缩码流数据分离,进而从帧格式数据中提取卫星工作状态参数,计算压缩码流状态信息,确定压缩码流的编码方式;

所述RS解码模块,用于在所述解帧模块确定的压缩码流的编码方式为RS编码时,接收所述解帧模块输出的压缩码流数据和数据使能信号,对该压缩码流数据进行RS检纠错解码,将纠错后的压缩码流数据发送给所述EDC检纠错模块;

所述2DECC解码模块,用于在所述解帧模块确定的压缩码流的编码方式为2DECC编码时,接收所述解帧模块输出的压缩码流数据和数据使能信号,对该压缩码流数据进行逐比特检错、纠错,去除校验位,将纠错后的压缩码流数据发送给所述EDC检纠错模块;

所述无纠错解码模块,用于在所述解帧模块确定的压缩码流的编码方式为无纠错编码时,接收所述解帧模块输出的压缩码流数据和数据使能信号,并将该压缩码流数据发送给所述EDC检纠错模块;

所述EDC检纠错模块,用于对接收到的压缩码流数据进行EDC块检错监督信息校验、全图域码流按块的方式隔离、压缩码流长度校验以及提取并保存EDC信息;

所述数据打包分发模块,用于利用所述EDC检纠错模块提取的EDC信息分割压缩码流得到每个子块的码流数据,并将各子块码流数据分别打包分发至多路并行golomb解码模块;

所述多路并行golomb解码模块,用于并行计算各子块码流数据的映射误差值Merrval;

所述多路并行残差预测解码模块与所述多路并行golomb解码模块一一对应,用于根据各子块码流数据对应的映射误差值Merrval对各子块码流数据进行残差预测解码;

所述像素收集模块,用于收集所述多路并行残差预测解码模块进行预测解码后输出的还原的数据块;

所述组帧模块,用于将所述像素收集模块收集的数据块逆压缩排序组合后与相机辅助信息拼接组成相机格式数据,完成解压缩操作。

优选地,所述RS解码模块包括:

伴随式获取模块,用于计算m-n个伴随式,在初始阶段,寄存器被清零,输入第一个码字与零相加后被送入寄存器,再乘以与第二个输入的码字相加,如此循环,直到m个码字全部送入寄存器经过计算后,寄存器内的值便是所需要的伴随多项式,其中,m与n为正整数;

第一计算模块,用于根据所述伴随多项式求出错误位置多项式和错误值多项式;

第二计算模块,用于在所述错误位置多项式和所述错误值多项式确定后,通过求解所述错误位置多项式的根得到错误位置,并获取所述错误位置上的错误值;

第一误码纠正模块,用于根据所述错误位置及所述错误位置上的错误值确定错误多项式,将所述错误多项式与所述接收多项式相加,即完成误码的纠正。

优选地,所述2DECC解码模块包括:

取数据模块,用于从压缩码流中取M比特位进行奇偶校验,前N比特位组成奇偶校验矩阵,后M-N比特位作为奇偶校验位,其中,M与N为正整数;

第一判断模块,用于根据所述奇偶校验位判断所述奇偶校验矩阵的每行、每列元素之和的奇偶性是否正确;

第二误码纠正模块,用于定位错误比特位置并纠正,若前N比特位信息位出现1比特位错误,则确定错误位置并纠正;若后M-N比特位出现1比特位错误,则判定为校验位出错,不对信息位进行纠错,将纠错后的奇偶校验矩阵重组为一维码流,并跳转至所述取数据模块的操作,直至压缩码流中剩余比特位数不足一次解码为止,并将剩余比特位直接写入2DECC解码后的压缩码流中。

优选地,所述EDC检纠错模块包括:

块检错监督信息校验模块,用于根据EDC块检错信息与码流的组帧方式,压缩过程中对每K个块的EDC信息存放α份,解码接收α组K个子块的EDC信息进行逐比特校验得到EDC信息,其中,K、α为正整数;

分离模块,用于根据每个块的码流长度,将每个块的码流信息进行分离;

第二判断模块,用于将K个块的码流长度,与EDC信息每个块的码流长度的累加和进行比较,来判断压缩码流长度信息是否正确;

存储模块,用于将码流信息和EDC信息通过EDC头标志进行分离,并分别存储。

优选地,所述多路并行golomb解码模块中的每一路golomb解码模块均包括:检测模块、第一检测处理模块及第二检测处理模块;

所述检测模块,用于检测输入的压缩码流中比特1之前0的个数,得到val值,即val个0,然后与最长比特门限值LMAX比较,其中,LMAX=LIMIT-qbpp-1,LIMIT为单个像素编码的最长编码长度,qbpp为像素精度;

所述第一检测处理模块,用于在val值小于LMAX时,读入1bit后续的k个比特,后面的k个bit记为n,计算得到Merrval的值,即Merrval=val*2k+n,其中,k为golomb编码的中间变量;

所述第二检测处理模块,用于在val值不小于LMAX时,读入qbpp个后续比特,得到Merrval-1的二进制表示,求出Merrval的值。

优选地,所述多路并行残差预测解码模块中的每一路残差预测解码模块均包括:上下文建模模块、梯度计算量化模块、索引值计算模块、边界检测预测解码模块、预测校正解码模块、参数更新模块、误差逆映射模块以及像素数据还原模块;

所述上下文建模模块,用于在待解码像素x处于图像的第一行时,将该待解码像素的邻域位置重建值Ra、Rb、Rc和Rd作为图像的首像素值;在待解码像素处于图像的行开始或行结束时,由于Ra或Rd的值与Rb的值一样,则将Rc的值用前一行第一个像素编码时Ra的值;

所述梯度计算量化模块,用于根据上下文重建值Ra、Rb、Rc和Rd,计算出局部梯度(D1、D2、D3),并对局部梯度(D1、D2、D3)进行量化得到待解码像素x的上下文矢量Q1、Q2、Q3,以检测图像的平行与垂直边缘;

所述索引值计算模块,用于在矢量Q1、Q2、Q3的第一个非零元素是负数时,将该矢量的符号反转,得到-Q1、-Q2、-Q3,并将符号变量Sign设置为-1,反之,Sign设置为+1,然后由处理后的Qi值得到索引值q=81*Q1+9*Q2+Q3,其中q表示待解码像素x的上下文;

所述边界检测预测解码模块,用于采用中值边缘检测算法,将上下文重建值Ra、Rb、Rc以及Rd进行数学运算来预测x的像素值PX;

所述预测校正解码模块,用于根据符号变量Sign以及上下文参数预测修正值C[q]对预测的像素值Px进行校正得到校正后的预测值;

所述参数更新模块,用于在每个像素解码后,将解码需要的参数A[q]、B[q]、C[q]及N[q]进行更新以用于下一个像素值的解码,其中,A[q]表示上下文参数残差累计值,B[q]表示上下文参数计算的偏差,N[q]表示每个上下文的发生次数;

所述误差逆映射模块,用于根据golomb解码得到映射误差值Merrval,得到预测误差值Errval;

所述像素数据还原模块,用于利用预测误差值Errval对校正后的预测值进行数据还原得到还原后的像素值pixel=[(Errval+Px_correct)%(RANGE*(2*NEAR+1))],其中,Px_correct表示校正后的预测值,RANGE表示预测误差表示的范围,NEAR表示近无损编解码的误差界限。

优选地,所述边界检测预测解码模块,具体用于若图像在待解码像素x的左边有垂直边缘,则取Rb为x的预测像素值PX;若图像在待解码像素x的上面有水平边缘,则取Ra为x的预测像素值PX;若没有检测到边缘,则取Ra+Rb–Rc作为x的预测像素值Px。

优选地,所述预测校正解码模块,具体用于若符号变量Sign等于1,则Px’=Px+C[q],否则Px’=Px-C[q];若Px’小于0,则校正后的预测值为0,若Px’大于MAXVAL,则校正后的预测值为MAXVAL,否则将预测的像素值Px作为校正后的预测值。

优选地,所述golomb编码的中间变量

优选地,所述参数更新模块,具体用于为A[q]、B[q]、C[q]及N[q]四个参数分配两块相同的RAM,由两块RAM交替地进行参数初始化和更新操作,当RAM1进入当前像素的解码更新操作的同时对RAM2进行参数初始化,以确保在当前像素的解码完成后,下一个像素能够使用RAM2进行更新操作而不受时序的限制。

总体而言,本发明方法与现有技术方案相比,能够取得下列有益效果:

(1)采用通用处理器进行软件解压满足不了多模态高保真压缩算法解压缩的实时性,针对多模态高保真压缩算法,本发明实现了对应的解压缩算法的FPGA并行实现,实现了可变的输入数据流和大动态压缩比变化的实时解压缩。

(2)检纠错后压缩码流误码防扩散的FPGA实现,当RS解码或者2DECC解码后,如果一个块的码流有误码,就会导致误码扩散,导致后面的码流块解码错误,本发明针对码流帧格式,通过码流长度信息,将误码扩散抑制在一个块内。使得后面正确块不会受到影响。

(3)帧格式检测与解码工作状态监测,为实现对硬件系统中错误情况的智能监测与智能判断,在系统工作过程中,对码流帧格式进行检测,有助于我们判断解压缩设备收到的压缩码流帧格式的正确性,同时在硬件解码过程中设置多处解码工作状态监测参数,可以实时帮助我们判断解码的状态。提升了系统的稳健性。

(4)解压系统要求扫描图像解压缩数据5s输出一帧,解压系统要求的时延为100ms,采用Intel(R)core(TM)i7-4790CPU处理器进行软件解压缩时延大于40s,并且大于解压缩输出的帧周期5s。通过将解压缩算法FPGA并行实现,使得时延小于100ms,满足了要求。时延:第一码流进入解压系统到第一个图像像素被还原输出或者最后一个码流进入解压系统到最后一个图像像素被还原。

附图说明

图1为本发明实施例公开的一种基于可变输入数据流的大动态实时解压缩系统的结构示意图;

图2为本发明实施例公开的一种压缩码流的解帧,7个同步头标志位抗误码模块数据流示意图;

图3为本发明实施例公开的一种压缩码流的解帧信号流程示意图;

图4为本发明实施例公开的一种检纠错解码模块的工作流程示意图;

图5为本发明实施例公开的一种2DECC检纠错实现方案框图;

图6为本发明实施例公开的一种RS检纠错流程图;

图7为本发明实施例公开的一种EDC块检错解码流程示意图;

图8为本发明实施例公开的一种golomb解码的数据流程图;

图9为本发明实施例公开的一种上下文示意图;

图10为本发明实施例公开的一种梯度量化逻辑图;

图11为本发明实施例公开的一种参数更新和初始化的控制以及信号流程图;

图12为本发明实施例公开的一种相机组帧的压缩排序与逆压缩排序方式;

图13为本发明实施例公开的一种相机组帧部分,如何将分块数据还原时对存储区的地址操作示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

如图1所示为本发明实施例公开的一种基于可变输入数据流的大动态实时解压缩系统的结构示意图,在图1所示的系统中包括:解帧模块、RS解码模块、2DECC解码模块、无纠错解码模块、EDC检纠错模块、数据打包分发模块、多路并行golomb解码模块、多路并行残差预测解码模块、像素收集模块以及组帧模块;

上述解帧模块,用于识别压缩码流中的标志识别码,提取解码需要的中间参数和相机格式数据并缓存,并将压缩码流中的帧格式数据、相机格式数据以及压缩码流数据分离,进而从帧格式数据中提取卫星工作状态参数,计算压缩码流状态信息,确定压缩码流的编码方式;

其中,如图3所示为本发明实施例公开的一种压缩码流的解帧信号流程示意图,压缩码流的解帧主要完成三个任务:第一,正确识别压缩码流中的标志识别码,如图2所示将帧同包含的7个同步头中带的参数进行7选4的表决,将解码需要的中间参数主要包括压缩码流的分块大小、near值、码流的编码方式和相机格式数据提取并缓存;第二,将码流帧格式数据、相机格式数据和压缩码流数据分离,压缩码流数据用于解码,相机格式数据用于解码后数据组帧;第三,从码流帧格式数据中提取分块大小、near值和编码方式等卫星工作状态参数,测量计算压缩码流状态信息,实时检测,提取解码需要的中间分块大小、near值、码流的编码方式参数进行解析,例如:分块大小为32(行)*8(列)、near表示压缩的微损度,0表示无损,1、2、3表示不同程度的微损。

上述RS解码模块,用于在所述解帧模块确定的压缩码流的编码方式为RS编码时,接收所述解帧模块输出的压缩码流数据和数据使能信号,对该压缩码流数据进行RS检纠错解码,将纠错后的压缩码流数据发送给所述EDC检纠错模块;

如图4所示为本发明实施例公开的一种检纠错解码模块的工作流程示意图,RS解码模块能对223Bytes压缩码流纠正随机16Bytes的错误,具体实施操作如图6所示:

(1)RS译码的第一步就是计算m-n个伴随式,在初始阶段,寄存器被清零,输入第一个码字在与零相加后被送入寄存器,再乘以与第二个输入的码字相加,如此循环,直到m个码字全部进去寄存器经过计算后,寄存器内的值便是所需要的伴随式;优选地,m取值为255,n取值为223。

(2)根据伴随多项式求出错误位置多项式和错误值多项式;

(3)错误位置多项式和错误值多项式确定后,错误位置可以通过钱搜索算法求解错误位置多项式的根求得,利用福尼算法可以求得错误位置上的错误值;

(4)当确定错误位置及具体的错误值后,也就确定了错误多项式,将得到的错误多项式与接收多项式相加,即完成误码的纠正。

上述2DECC解码模块,用于在所述解帧模块确定的压缩码流的编码方式为2DECC编码时,接收所述解帧模块输出的压缩码流数据和数据使能信号,对该压缩码流数据进行逐比特检错、纠错,去除校验位,将纠错后的压缩码流数据发送给所述EDC检纠错模块;

在图4中还包括2DECC解码流程,2DECC解码模块首先接收解帧模块输出的码流数据和数据使能信号,根据每256bit数据块紧随的32bit校验位,对该码流进行逐比特检错、纠错,然后去除32bit校验位,将纠错后的码流数据发送给EDC解码处理模块。

2D-ECC解码模块能对压缩码流中单比特错误进行纠正,具体实施过程如图5所示:

(1)每次从码流中取Mbit进行奇偶校验,前Nbit组成奇偶校验矩阵,后(M-N)bit作为奇偶校验位;优选地,M取值为288,N取值为256。

(2)据奇偶校验位判断奇偶校验矩阵的每行、每列元素之和的奇偶性是否正确;

(3)定位错误比特位置并纠正,若前Nbit信息位出现1bit错误,则必然在行、列校验中各出现一次错误,此时可确定错误位置并纠正;若后(M-N)bit信息位出现1bit错误,则行、列校验中会因为校验位错误而误检某一行或某一列出错,但是行校验错误和列校验错误不会成对出现,此时即可判定为校验位出错,不对信息位进行纠错,将纠错后二维矩阵重组为一维码流;

(4)重复上述步骤直至码流中剩余比特位数不足一次解码为止,将剩余比特位直接写入解码后码流。

上述无纠错解码模块,用于在所述解帧模块确定的压缩码流的编码方式为无纠错编码时,接收所述解帧模块输出的压缩码流数据和数据使能信号,并将该压缩码流数据发送给所述EDC检纠错模块;

上述EDC检纠错模块,用于对接收到的压缩码流数据进行EDC块检错监督信息校验、全图域码流按块的方式隔离、压缩码流长度校验以及提取并保存EDC信息;

其中,EDC检纠错模块的具体实施过程如图7所示:

(1)EDC块检错监督信息校验:根据EDC块检错信息与码流的组帧方式,压缩过程中对每K个块的EDC信息存放α份,解码接收α组K个子块的EDC信息进行逐比特校验得到EDC信息。从而大概率避免了EDC信息在传输过程中出现的误码,增加了解码的稳定性;优选地,K取值为17,α取值为3。

(2)根据每个块的码流长度,将每个块的码流信息进行分离;

(3)将K个块的码流长度,与EDC信息每个块的码流长度的累加和进行比较,来判断压缩码流长度信息是否正确。以此来保证K块的码流是独立的,不会因为某一个K块的码流长度错误而影响下一个K块;

(4)将码流和EDC信息通过EDC头标志进行分离,并分别存储。

检纠错后压缩码流误码防扩散的FPGA实现,当RS解码或者2DECC解码后,如果一个块的码流有误码,就会导致误码扩散,导致后面的码流块解码粗,本发明针对码流帧格式,通过码流长度信息,就误码扩散抑制在一个块内。后面正确块不会受到影响。下面针对错误模式分析:

(1)EDC信息异常处理

星上压缩单元在压缩图像时添加EDC信息以进行块检纠错,EDC信息中包含压缩码流每个分块的比特数与首像素信息,首像素信息中包含分块的分区微损值。码流分块的比特数用于golomb解码时块检错校验,首像素信息用于分块预测解码,分区微损值用于微损解码时解码处理环节。因此,EDC信息对于码流解压缩是非常重要的。但在数据传输过程中由于通道环境的复杂性,可能导致数据部分丢失,如果丢失的数据中包含EDC信息,会对之后的解码环节造成严重影响。

为增强解压缩设备工作的稳定性,需要考虑EDC信息丢失后的错误恢复机制,在错误程度可允许的范围内,能够恢复码流的正常解码状态并正确解码。但往往数据丢失后的恢复都比较困难,对于EDC信息丢失后,要不影响解码正确性的恢复解压缩设备的工作状态有以下两个难点:

(a)每个EDC信息后都有其对应的压缩码流数据,如果EDC信息丢失,后面对应的压缩码流不能正常的解码,而且可能会影响到后面正确数据的解码工作。

(b)由于EDC信息的组成形式为一个EDC头与三个组的EDC信息组合,在EDC模块中解析EDC信息时再进行三选二的EDC信息校验得到每组的EDC信息,如果EDC信息丢失,在进行EDC信息“三选二”校验时会导致EDC信息错位,从而影响其他正确EDC信息的校验,导致整帧码流解码错误。

针对于压缩码流格式的固有特点,对实现EDC信息丢失后能恢复正常解码功能的难点进行可行性分析,提出实现方案。EDC信息在丢失前的组成形式如下所示。根据EDC信息组成格式特点,将EDC信息丢失分为两种情况:

第一种情况,EDC信息仅仅丢失一个,以丢失第四个EDC信息为例。

第二种情况,EDC信息丢失两个或两个以上,并且EDC信息连续丢失。以丢失第四个EDC信息与第五个EDC信息为例。

分析EDC信息的两种丢失情况与EDC块检纠错模块中EDC“三选二”的校验方式,提出一个通用的EDC信息丢失后恢复的方案并得以实现。以第二种丢失情况为例,当连续丢失一个或多个EDC信息时,此时无法完成EDC信息的“三选二”校验,按照“三选二”的方式进行校验,仅仅可以完成第一组EDC信息的校验,在开始第二组以及之后的EDC信息校验时,所有的EDC信息校验都会错位而导致无法正确校验出相应的EDC信息。因此,一旦检测到EDC信息丢失,则暂时停止EDC信息的校验工作,而是将丢失前的一个EDC信息块进行保存。当丢失了第四组和第五组EDC信息,需要将第三组中的所有EDC信息(EDC信息_1、EDC信息_2、EDC信息_3)保存在寄存器中,因为此时已经停止了EDC信息的校验,将第三组EDC信息中包含的EDC信息_2和EDC信息_3分别在找到第6个EDC头和第7个EDC头时赋值给对应的第二个EDC信息和第三个EDC信息而不经过“三选二”校验,在找到第8个EDC头标志时,恢复EDC信息的“三选二”检验功能,此时正好可以完成第6组EDC信息的校验,之后的EDC校验工作正常进行。根据如上方案即可完成EDC信息丢失后的恢复。

上述数据打包分发模块,用于利用所述EDC检纠错模块提取的EDC信息分割压缩码流得到每个子块的码流数据,并将各子块码流数据分别打包分发至多路并行golomb解码模块;

上述多路并行golomb解码模块,用于并行计算各子块码流数据的映射误差值Merrval;

如图8所示为本发明实施例公开的一种golomb解码的数据流程图,具体的解码过程如下:

对于输入的压缩码流,golomb解码模块先检测比特1之前0的个数,得到val值,即val个0,然后与最长比特门限值LMAX(LMAX=LIMIT-qbpp-1)比较,其中LIMIT为单个像素编码的最长编码长度,qbpp为像素精度,k为golomb编码的中间变量,比较的结果分两种情况讨论:

情况一:如果val的值小于LMAX,则读入1bit1后续的k个比特,后面的k个bit记为n,计算得到Merrval的值,其中公式为Merrval=val*2k+n;

情况二:如果val的值不小于(等于)LMAX,则需读入qbpp个后续比特,得到Merrval-1的二进制表示,求出Merrval的值。

val的最大值为31,直接去计算val的值,判断一个31位数,组合逻辑延时会非常大,考虑到硬件的实现,改进了val的计算,每次去判断4bit,通过8个周期完成val的计算。

golomb解码异常数据处理:当一个块的解码实际使用的比特数小于块的码流长度信息,将多余的码流读出丢弃,当一个块的解码实际使用的比特数大于块的码流长度信息,对Merrval的计算个数补足一个块的个数。(块指的是压缩参数中的分块大小。例如:32(行)*8(列).

上述多路并行残差预测解码模块与所述多路并行golomb解码模块一一对应,用于根据各子块码流数据对应的映射误差值Merrval对各子块码流数据进行残差预测解码;

在图8中还包括残差预测解码模块的操作流程,主要包括以下操作:

(1)上下文建模:当解码的像素处于图像的第一行时,a、b、c和d为当前像素的邻域位置(如图9所示),因为a、b、c和d位置的值不存在,Ra、Rb、Rc和Rd为邻域位置重建值,Ra、Rb、Rc和Rd值定义为分块的首像素值。当解码的像素处于行开始或行结束时,此时Ra或Rd的值与Rb的值一样,Rc的值用前一行第一个像素编码时Ra的值。

(2)梯度计算:为检测图像的平行与垂直边缘,需要进行梯度的计算与量化。根据上下文重建值Ra、Rb、Rc和Rd,可以计算出局部梯度(D1、D2、D3)。

将输入进来的Ra、Rb、Rc和Rd值按照固定的算法公式进行计算即可求出梯度值,算法公式在FPGA逻辑中的实现如下方所示:

D1=Rd–Rb;

D2=Rb-Rc;

D3=Rc–Ra;

(3)梯度量化:上下文的决定过程接下来要对D1、D2和D3进行量化。为此使用三个非负的阈值T1、T2和T3。根据Di(D1、D2、D3)与阈值的关系,将得到一个区域号Qi,对应于Q1、Q2、Q3。由此可以构成当前采样X的上下文矢量Qi。因为每个梯度有9个量化区域,Q1、Q2、Q3分别被从-4到4的9个可能的数中分配一个。

最优门限的设置如下表1所示,其中P代表图像数据的精度值即像素比特位的数目。

表1

PT1T2T3P<=83721P>81867276

具体量化算法描述如下所示。

if(Di<=-T3)Qi=-4;

else if(Di<=-T2)Qi=-3;

else if(Di<=-T1)Qi=-2;

else if(Di<=-NEAR)Qi=-1;

else if(Di<=-NEAR)Qi=0;

else if(Di<=-T1)Qi=1;

else if(Di<=-T2)Qi=2;

else if(Di<=-T3)Qi=3;

else Qi=4;

局部梯度值的量化在硬件实现上应该是并行结构实现的,如图10所示。如果仅仅使用if-else语句实现,将会使用8级嵌套,大量增加组合逻辑延时,降低系统运行效率。为减少组合逻辑延时,采用并行结构设计,定义了一个8位的寄存器Zi,把梯度值Di与门限值T1、T2和T3并行地比较,比较结果(0或1)存入寄存器Zi的对应位中,再由case语句判断Zi的值得到Qi的值。

索引值计算:如果矢量Q1、Q2、Q3的第一个非零元素是负数,那么需要将该矢量的符号反转,得到-Q1、-Q2、-Q3。此时,符号变量Sign设置为-1,反之,Sign设置为+1。之后对处理后的Qi值进行线性运算q=81*Q1+9*Q2+Q3,将上下文矢量映射到[0:364]范围内,得到索引值q,它表示采样x的上下文。

(4)边界检测预测解码:采用中值边缘检测算法,将上下文重建值Ra、Rb、Rc进行数学运算来预测像素值PX。

边界检测预测解码的算法为:其中,如果分块图像在当前像素x的左边有垂直边缘,则取Rb为x的预测值;如果分块图像正好在x的上面有水平边缘,则取Ra为x的预测值;如果没有检测到边缘,则取Ra+Rb–Rc作为预测值Px。

(5)预测校正解码:计算出预测值Px后,预测值必须进行校正,这一过程需依赖于符号变量Sign,即在上下文决定过程中检测出的正负号。Px的新值必须钳位到范围[0...MAXVAL]内,预测校正时的上下文参数C[q]由参数存储A、B、C、N块RAM得到。q为索引值。

预测校正解码模块采用组合逻辑实现,在FPGA逻辑实现时,设置一个中间态Px_temp,先用Sign、C[q]求出中间态Px_temp的值,后将Px_temp与MAXVAL、0比较,最终得到校正后预测值Px_correct。预测校正解码的算法步骤如下所示:

if(Sign==1)Px=Px+C[q];

else Px=Px-C[q];

if(Px<0)Px=0;

else if(Px>MAXVAL)Px=MAXVAL;

else Px=Px;

(6)图11为本发明实施例公开的一种参数更新和初始化的控制以及信号流程图:由于预测校正解码解码过程中需要用到A、B、C、N四个参数的辅助计算,因此这些参数的正确性与实时性是至关重要的。在每个像素x解码的最后一步都需要将参数进行更新以用于下一个像素值的解码。上下文参数A、B、C和N是从0到364索引的数组,这些参数可以被认为图像解压时各种不同的上下文环境的记录。各参数的意义:

A[0:364]:365个计数器,用来存储累积的预测误差数值;

B[0:364]:365个计数器,用来存储计算的偏差;

C[0:364]:365个计数器,用来存储预测修正值;

N[0:364]:365个计数器,用来存储每个上下文的发生次数。

在LOCO-I算法思想中,根据当前像素的上下文索引值q获得对应的上下文参数用于图像的解压缩处理,这些是算法能自适应的关键所在。在对每一个像素解码完毕后,对其对应的上下文都要进行参数更新,以保证当不同像素对应相同的上下文时编码的正确性和高效性。上下文参数的更新也是算法的精髓之一。

参数的初始化:

在当前分块做完进入下一分块的解码时需清除当前块对参数RAM的更新操作,使其回归初始值,即需要对参数RAM使用各参数的初始值进行初始化。

在FPGA中开辟RAM存储资源,对上下文参数(A、B、C、N)分别进行初始化。由于A、B、C、N四个参数均为长度为365的数组,要完成初始化,需对365个RAM地址写入初始值。A、B、C、N四个参数的初始值分别为16、0、0、1。

如果在当前分块的解码处理完之后再进行参数初始化操作,在时序上是非常可怕的,因为需要对A、B、C和N四个参数的365个RAM地址写入初始值,不仅打断了流水线的操作而且对整个解码效率和数据吞吐率有很大的影响。为此我们沿用星上压缩编码在上下文参数RAM控制部分的乒乓操作。

A、B、C、N四个参数各有两块相同的RAM,在初始化模块的控制下,两块RAM交替地进行参数初始化和更新操作,即当RAM1进入当前解码分块的更新操作的同时对RAM2进行参数初始化,这样就可以确保在当前块解码完毕后,下一个分块可以使用RAM2进行更新操作而不受时序的限制。

N参数更新:

N参数是用来存储每个上下文的发生次数的参数,在每次参数更新过程中,N参数需要进行次数上的累加,并当N[q]等于RESET值(默认为64)时,参数值被减半。N参数更新算法步骤如下:

if(N[q]==RESET)

N[q]=N[q]>>1;Flag_N=1;

else N[q]=N[q]+1;

ABC参数更新:

A和B的更新相当于统计误差值Errval的计算,当Flag_N信号拉高时,A和B同时被减半。对正常更新过的B和C做大小判断,如果B和C的大小超出了相应的范围区间,则需要将参数进行修正钳位到对应区间内。对这些参数更新的具体方法如下:

更新A[q] A[q]+|Errval|,B[q] B[q]+Errval;;

If Flag_N=1

则A[q],B[q]

若B[q]<=-N[q]

更新B[q] max{B[q]+N[q],1-N[q]}

If C[q]>Cmin(默认值为-128)

更新C[q] C[q]-1(偏差减1)

若B[q]>0

更新B[q] min{B[q]-N[q],0}

If C[q]<Cmax(默认值为127)

更新C[q] C[q]+1(偏差加1)

由于参数更新的过程需要三个步骤完成,即A、B、C和N的正常更新过程、N达到阈值时的减半过程、BC值修正至相应区间过程。因此在逻辑实现过程中采用全组合逻辑节省系统运行时间,并采用三级中间态(temp1、temp2、temp3)分别完成参数更新过程中的三个步骤。

(7)k值计算:golomb解码过程中需要使用k值进行计算误差逆映射值Merrval,而golomb解码变量k值的计算需要使用上下文参数残差累计值A[q]和上下文发生次数N[q],变量k的计算和上下文有关。

k值计算模块的输入为上下文参数A[q]和N[q],输出为golomb解码变量k,k值计算公式如下所示。

由于FPGA中不能直接做对数运算,故而转换思想,采用简单的移位再比较的方法代替对数运算,可以用以下的代码来表征其计算过程:

for(k=0;(N[q]<<k)<A[q];k++);

FPGA中逻辑做如下处理:

当A<=N时,k=0;

当N<A<=2N,k=1;

当2N<A<=4N,k=2;

当4N<A<=8N,k=3;

当8N<A<=16N,k=4;

当16N<A<=32N,k=5;

当32N<A<=64N,k=6;

当64N<A<=128N,k=7;

当128N<A<=256N,k=8;

当256N<A<=512N,k=9。

(8)误差逆映射:golomb解码得到映射误差值Merrval,需要经过预测误差的逆映射,得到预测误差值Errval,而Errval值的计算需要利用Merrval值,计算的过程中需要用到上下文参数存储计算的偏差B[q]、上下文的发生次数N[q]和k值。

根据给定的映射误差值Merrval,作出误差逆映射,得到预测误差值Errval,详细的计算步骤如下代码所示。

if((k==0)&&(2*B[q]<=-N[q]))

{

if(Merrval%==0)Errval=(-Merrval)/2-1;

else Errval=(Merrval-1)/2;

}

else

{

if(Merrval%==0)Errval=(Merrval)/2;

else Errval=-(Merrval+1)/2;

}

(9)像素数据还原:像素数据还原是解码算法的最后一步,复原像素值需要利用预测误差值Errval和像素预测校正值Px_correct。复原的像素值用于接下来的预测解码。

根据像素还原公式pixel=[(Errval+Px_correct)%(RANGE*(2*NEAR+1))]可知,反映射后的残差值Errval与预测修正后的像素值Px_correct相加后再与RANGE做取模运算即可得出还原的像素值。

RANGE表示预测误差表示的范围RANGE=MAXVAL+1;

MAXVAL:图像内所有像素可能取到的最大值,MAXVAL=2P-1;

P表示像素位宽;

NEAR:近无损编解码的误差界限。

由于FPGA中对于取模运算的不可综合性,将取模运算转换为加减运算。代码逻辑如下文所示:

if(pixel<-NEAR)

pixel=pixel+RANGE*(2*NEAR+1);

else if(pixel>MAXVAL+NEAR)

pixel=pixel-RANGE*(2*NEAR+1);

if(pixel<0)

pixel=0;

else if(pixel>MAXVAL)

pixel=MAXVAL;

由于像素值的大小不会超出[0,1023]范围,在逻辑实现过程中需要进行像素值大小判断,将像素值大小钳位于[0,1023]之间。

上述像素收集模块,用于收集所述多路并行残差预测解码模块进行预测解码后输出的还原的数据块;

上述组帧模块,用于将所述像素收集模块收集的数据块逆压缩排序组合后与相机辅助信息拼接组成相机格式数据,完成解压缩操作。

图12所示为本发明实施例公开的一种相机组帧的压缩排序与逆压缩排序方式;如图13所示为本发明实施例公开的一种相机组帧部分,如何将分块数据还原时对存储区的地址操作示意图。均表示相机的组帧过程。对于压缩单元,数据的输入是相机或加载器输出的图像前半场和后半场相机格式数据,在压缩单元中,相机格式数据经过图像数据分块处理、压缩算法编码、检纠错算法编码和帧辅助信息添加后组成压缩码流。对于解压缩设备,输入的数据是压缩码流,压缩码流需要经过解帧模块、检纠错解码模块、八路并行解码模块和组帧模块。解帧模块解析压缩码流的帧格式,分离辅助信息与压缩码流数据;压缩码流数据输入到检纠错模块、八路并行解码模块进行按块解码,解码后的像素数据需要还原成压缩单元输入的数据形式,才能完成解压缩工作,同时,压缩编码中,像素按块的形式编码,也就是将原图像数据重新按压缩排序编码,因此,解码后的像素需要在组帧模块逆压缩排序组合后与相机辅助信息拼接组成相机格式数据输出。

可选地,本发明中的系统还可以包括帧格式检测与解码工作状态监测模块:为实现对硬件系统中错误情况的智能监测与智能判断,在系统工作过程中,对码流帧格式进行检测,有助于我们判断解压缩设备收到的压缩码流帧格式的正确性,同时在硬件解码过程中设置多处解码工作状态监测参数,可以实时帮助我们判断解码的状态。当从显示终端上以及误码率对比中观察到解码错误。通过帧格式检测可以判断压缩码流本身的正确性,在解压缩的同时进行帧格式检测是非常重要的,一方面可以辅助解码逻辑进行解码工作,判断压缩码流的帧格式信息正确性、辅助信息正确性、码流数据是否缺失以及提取卫星工作与压缩模式参数信息,另一方面实时监测卫星工作状态,防止卫星功能异常而导致重要信息丢失。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号