首页> 中国专利> 防误码扩散的JPEG-LS图像无损/近无损压缩算法硬件实现方法

防误码扩散的JPEG-LS图像无损/近无损压缩算法硬件实现方法

摘要

本发明公开了一种防误码扩散的图像无损/近无损压缩方法:采用并行预测方式,将分块的图像通过两路并行得到预测结果,在每个预测环节,像素之间间隔一个像素时钟周期,使得由参数索引、预测修正、残差计算、参数更新反馈环路可使用流水线设计;在近无损压缩模式下,每个像素有足够的时间进行像素重建,在当前像素进行上下文建模前能刚好得到上一个像素对应的像素重建值;通过引入分块压缩与检纠错编码相结合的方法,防止了误码的大面积扩散,提高了抗信道误码性能,同时子块大小可调,检纠错编码方式可调;进行分区域近无损压缩,可根据实际应用需求,对图像的不同区域采用不同的近无损参数Near进行压缩,可进一步提高图像的整体压缩比。

著录项

  • 公开/公告号CN105828070A

    专利类型发明专利

  • 公开/公告日2016-08-03

    原文格式PDF

  • 申请/专利权人 华中科技大学;

    申请/专利号CN201610165800.8

  • 申请日2016-03-23

  • 分类号H04N19/107(20140101);H04N19/176(20140101);H04N19/15(20140101);H04N19/166(20140101);H04N19/423(20140101);H04N19/124(20140101);

  • 代理机构42201 华中科技大学专利中心;

  • 代理人曹葆青

  • 地址 430074 湖北省武汉市洪山区珞喻路1037号

  • 入库时间 2023-06-19 00:13:49

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-12-28

    授权

    授权

  • 2016-08-31

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

    实质审查的生效

  • 2016-08-03

    公开

    公开

说明书

技术领域

本发明属于图像压缩技术领域,更具体地,涉及到一种防误码扩散的无损/近无损图像压缩方法及其硬件实现,本发明适用于空间运用的星载图像无损/近无损压缩系统。

背景技术

近年来我国在外太空探索和对地观测等空间应用领域正处于高速发展阶段,传感器的性能也随之得到了极大的提升,遥感数据量日益庞大,使得有限的信道带宽和数据存储容量与传输大量遥感数据之间的矛盾日益突出。显然,数据压缩技术是解决这一问题的一个有效途径,使其在遥感领域越来越受到重视。JPEG-LS压缩算法是已建立的对于彩色及灰度图像无损压缩的标准,是基于Weinberger等提出的低复杂度的无损图像压缩方法(LOCO-I:lowcomplexitylosslesscompressionforimages),广泛应用于卫星图像无损压缩,是CCSDS推荐的无损/近无损压缩算法。作为图像数据无损/近无损压缩标准,在压缩性能和压缩效率方面具有很多优越性,因此成为目前图像无损压缩应用中最广泛被采用的方法之一。

遥感数据的极为宝贵且获取不易,因此在对遥感数据压缩时无损/近无损压缩起到了极为重要的作用。同时,在军事应用领域,实时性是遥感数据获取、传输和处理的首要指标,因此对遥感数据的压缩处理还必须满足高实时性的要求。再者,星上空间极为复杂而恶劣,电路易因单粒子翻转等出错,而星地链路则易受天气状况影响,在恶劣天气下易产生信道误码,因此压缩系统必须具有极高的可靠性。因此,JPEG-LS压缩算法的在这样的应用背景下,会存在一些技术难点:实时实现问题和误码扩散问题。

JPEG-LS算法硬件实现的主要难点在于其近无损压缩模式的实现,其中的像素重建环节引入了反馈环路,导致了算法的实时实现的困难,制约了压缩系统的处理速度。西安电子科技大学在其申请专利“JPEG-LS常规编码硬件实现方法”(专利申请号:201210198818.X,公开号:CN102724506)中公开了一种JPEG-LS图像压缩标准的硬件实现方法。这种方法只实现了JPEG-LS图像压缩标准中的无损压缩模式,回避了近无损压缩模式中的像素重建环节,但丧失了近无损压缩功能。

JPEG-LS算法进行遥感图像压缩时,若因太空的恶劣环境使得压缩码流中引入了误码,则会因码流中的上下文关联性,导致解码时出现图像错乱而失真。

发明内容

本发明针对当今空间应用领域对低功耗、低复杂度、高实时性、高可靠性图像数据压缩系统的迫切需要提出。本发明通过在JPEG-LS常规编码模式的基础上引入图像分块压缩的方法,同时该方法与检纠错编码(2DECC编码和RS编码)相结合,极大地增强了JPEG-LS抗误码扩散的性能。本发明采用并行预测方式,将分块的图像通过两路并行得到预测结果,在每个预测环节,像素之间间隔一个像素时钟周期,使得在确保参数及时更新的同时消除了反馈回路数据依赖对流水线的阻塞,因此由参数索引、预测修正、残差计算、参数更新反馈环路可使用流水线设计。并行预测的结果最终转换为单路串行方式进行Golomb编码。同时,像素之间间隔一个像素时钟周期使得在近无损模式下,每个像素能够有足够的时间计算出对应的像素重建值供下一个像素进行上下文建模,使得图像压缩系统能够在无损压缩和近无损压缩模式间自由切换。并且,可以以图像子块为最小编码单元,针对图像不同区域采用不同的近无损度参数Near进行压缩,因此可对感兴趣的目标区域进行无损压缩,对其他区域进行有损压缩,这样可以在不损失感兴趣目标区域的信息的前提下提高压缩比,减小数据传输带宽的压力。整个压缩系统不需要对算法进行任何会导致压缩比下降的改进即可在确保各环节具有充足时序裕量的同时,完整实现了真正的全流水设计,由此达到极高的处理速度。

本发明包括以下步骤:

(1)预设参数

(1.1)读入像素位宽参数pixel_width。本发明支持两种量化比特数的图像的压缩:10bit和12bit;

(1.2)读入子块大小参数:子块行数row_size和子块列数column_size,确定最小编码单元MCU(Minimum_Coded_Unit)——子块大小;

(1.3)读入检纠错模式选择参数correction_mode,选通所需的检纠错编码方式:RS编码或者屏蔽检纠错编码;

(1.4)利用图像的帧同步信号对上述参数进行锁定,保持在一幅图像进行压缩的时候,子块大小参数和检纠错模式选择这两种参数不变;

(2)输入像素值和近无损度参数Near,进行图像分块

(2.1)将需要压缩的图像像素数据和与每一个像素对应的近无损度参数Near一起输入至图像缓存与分块模块中;

(2.2)根据读入的子块大小参数控制图像的缓存量,当存储器中图像的行数等于子块行数时,通过控制读地址按照设定好的子块大小参数逐块读出图像像素Ix和与该像素所对应的近无损度参数Near,通过这种方式将整幅图像分成若干子块,并以子块作为最小编码单元进行压缩编码。

(3)以图像子块为单位,将串行数据转换为两路并行数据

(3.1)像素数据和与之对应的近无损度参数Near按子块为单位串行输入到4个FIFO所组成的结构中。第1个子块的像素按照像素时钟连续写入FIFO1中,写完一个子块后,第2个子块的像素按照像素时钟连续写入FIFO3中,以此类推,第3个子块的像素按照像素时钟连续写入FIFO2中,之后第4个子块的像素按照像素时钟连续写入FIFO4中,后续子块按照以上顺序依次写入四个FIFO中;

(3.2)像素数据按子块为单位分为并行两路输出到两路预测编码模块。FIFO1和FIFO2以图像子块为单位交替输出像素Ix和与该像素所对应的近无损度参数Near至预测编码模块1,并且每个像素之间间隔一个像素时钟周期。同样的,FIFO3和FIFO4以图像子块为单位交替输出像素Ix和与该像素所对应的近无损度参数Near至预测编码模块2,并且每个像素之间间隔一个像素时钟周期;

(3.3)上下文参数RAM初始化。在每一个子块的像素写入FIFO之前,对该子块所对应的近无损度参数Near值进行采样,并对上下文参数RAM进行初始化操作。

(4)并行预测编码模块。采用空间并行原理,设置两路预测编码模块,同时进行预测编码,生成Golomb编码所需的变量。

(4.1)上下文建模。把重建后的像素值Rx(即步骤4.3)中数据预处理环节计算得到的像素重建值)输入到“FIFO+寄存器”缓存结构中,根据子块大小参数控制FIFO的读时机,当已经缓存了子块中一行的像素后,开始从FIFO中读出数据,从寄存器上依次获得当前像素值的近邻a、c、b、d,同时统计当前像素在子块中的坐标值。根据行列计数得到当前像素的坐标值,并读取每一个子块的第一个像素,即首像素Fp。再根据当前像素值的行列坐标和子块大小参数对当前像素的4个近邻进行边缘处理,获得重建值Ra、Rc、Rb、Rd:当前像素的坐标为子块的第一行第一列时,Ra、Rc、Rb、Rd均等于首像素Fp;当前像素的坐标为子块的第一行非第一列时,Ra等于对应坐标的像素值a,而Rc、Rb、Rd均等于首像素Fp;当前像素的坐标为子块的第一列非第一行时,Ra与Rb等于b,Rc等于Ra在前一行时的重建值;当前像素的坐标为子块的最后一列时,Rb、Rd等于b的像素值,Ra、Rc等于a、c的像素值;在其他位置时,Ra、Rc、Rb、Rd依次等于a、c、b、d;

(4.2)分为两个计算环节同时进行:索引值计算和像素预测

像素预测:

根据JPEG-LS算法原理,通过上下文建模中Ra值、Rb值以及Rc计算出像素预测值Px,用寄存器输出。

索引值计算:

(4.2.1)根据上下文建模的结果计算三个梯度值:Rd与Rb相减得到梯度一D[0];Rb与Rc相减得到梯度二D[1];Rc与Ra相减得到梯度三D[2];

(4.2.2)根据初始化得到的梯度量化阈值(T1、T2、T3)分别对三个梯度进行量化,具体处理方法为:将三个梯度值分别并行地与八个阈值(-T3、-T2、-T1、-NEAR、NEAR、T1、T2、T3)作比较,每个比较结果对应于8位的最终比较结果中的一位,三个梯度生成3个8bit的比较结果。即若梯度大于门限第i级门限,但小于或等于该级门限,则8bit的比较结果的0~i-1位均为1,i~7位为0;

(4.2.3)根据比较结果即可知道梯度位于哪个门限区间内,由此把该区间对应的量化值赋给量化结果即可得到三个量化结果Q_0,Q_1,Q_2;

(4.2.4)梯度修正与符号判断:分别判断三个梯度量化值Q_0,Q_1,Q_2是否为负数,若三个量化值从左到右第一个不为0的数是负数,那么就把三个量化值的绝对值赋给三个梯度修正值Q0,Q1,Q2,同时符号标志SIGN等于-1,否则直接把三个量化值依次赋给梯度修正值Q0,Q1,Q2,同时符号标志SIGN等于1,SIGN值用寄存器输出;

(4.2.5)索引地址计算:把三个梯度值依Q0,Q1,Q2依次与81、9、1相乘,再把三个乘积相加,算出索引值Q,用寄存器输出至流水线下一级。同时,寄存器输出之前,索引值Q直接作用至“上下文参数RAM”,以数据伴随的有效信号为读使能,读出索引值Q所对应的A、B、C、N四个参数。

(4.3)数据预处理:包含上下文参数C、N选择,预测值修正,残差计算,残差量化,像素重建,残差取模以及N参数更新等步骤。

(4.3.1)索引值Q不经过任何计算直接用寄存器锁存一级输出至下一级,以供步骤4.4中使用。

(4.3.2)上下文参数C、N选择:在步骤4.2中,索引值Q和数据有效信号作用于“上下文参数RAM”一周期后,参数A、B、C、N输出。根据“冲突控制”模块输出的“冲突指示信号”collosion,从步骤4.5回传的更新后的参数C_update、N_update和刚从“上下文参数RAM”读出的参数C、N当中进行选择,输出需要使用的参数C_sel、N_sel。当collosion为0时,选择从“上下文参数RAM”读出的参数C、N,而collosion为1时,选择从步骤4.5回传的更新后的参数C_update、N_update。参数选择采用组合逻辑实现。参数A和B不做任何计算,由寄存器锁存一级输出。

(4.3.3)N参数更新:根据JPEG-LS标准,使用符号标志SIGN与步骤“上下文参数C、N选择”所获取的参数N_sel进行N参数的更新,更新后得到N_update。当N参数进行更新时,若N_sel==RESET条件满足时,将N_flag置1,否则置0;根据JPEG-LS标准,上下文参数更新时,N_sel==RESET这一条件的满足与否会影响参数A、B的更新选择,因此N_flag随N_update一起通过寄存器输出至下一级,以供上下文参数A、B、C更新时使用。N_sel也用寄存器输出至下一级。

(4.3.4)预测值修正:根据JPEG-LS标准,使用符号标志SIGN与步骤“上下文参数C、N选择”所获取的参数C_sel对预测值Px进行修正,获得预测修正值Px_c;

(4.3.5)残差计算:根据JPEG-LS标准,利用符号标志SIGN、当前像素值Ix与预测修正值Px_c运算获得残差值Errval;

(4.3.6)残差量化:根据JPEG-LS标准,对残差值Errval进行量化,得到残差量化值Errval_q;

(4.3.7)像素重建:根据JPEG-LS标准,通过符号标志SIGN、当前像素值Ix、残差量化值Errval_q以及近无损度参数Near值计算得到像素重建值Rx,再将像素重建值Rx反馈至上下文建模模块中,用来提供步骤4.1中当前像素上下文建模的环境模板。在无损压缩模式下,像素重建值Rx等于原像素值Ix。

(4.3.8)残差取模:根据JPEG-LS标准,利用残差取模范围RANGE对残差量化值Errval_q进行取模,使残差映射到取模范围内,得到残差取模值Errval_Mod,并用寄存器输出至下一级。

(4.4)上下文参数更新,包含两个环节:上下文参数A、B选择,上下文参数A、B、C更新。

(4.4.1)上下文参数A、B选择:根据“冲突控制”模块输出的“冲突指示信号”collosion,从步骤4.6回传的更新后的参数A_update、B_update和步骤4.3输出的参数A、B当中进行选择,输出需要使用的参数A_sel、B_sel。当collosion为0时,选择步骤4.3输出的参数A、B,而collosion为1时,选择从步骤4.6回传的更新后的参数A_update、B_update。参数选择采用组合逻辑实现。

(4.4.2)上下文参数A、B、C更新:根据JPEG-LS标准,使用残差取模值Errval_Mod,选择后的参数A_sel、B_sel、C_sel,以及步骤4.3中N参数更新后输出的N_flag信号,采用组合逻辑对上下文参数选择后获取的A、B、C参数进行更新计算(每一个子块所对应的近无损度参数Near会伴随像素进入预测编码流水线中,根据当前使用的近无损度参数Near进行参数更新计算),得到更新的参数A_update、B_update、C_update,连同步骤4.3中输出过来的N_update一起,写入“上下文参数RAM”,伴随的数据有效信号作为RAM的“写使能”信号,步骤4.3中输出的索引值Q作为RAM的“写地址”。与此同时,A_update、B_update、C_update、N_update通过寄存器输出至下一级。筛选后的用来进行参数更新的三个参数A_sel、B_sel、N_sel和残差取模值Errval_Mod也通过寄存器输出至下一级,以供残差映射和K值计算使用。

(4.5)包括主要的两个环节,即残差映射和K值计算。

(4.5.1)Stage4输出的C_update、N_update参数直接回传至步骤4.3参与预处理运算中的上下文参数C、N选择。A_update、B_update参数则直接经寄存器输出至步骤4.6。

(4.5.2)残差映射:根据JPEG-LS标准,使用残差取模值Errval_Mod,选择后的参数A_sel、B_sel计算出映射后的残差值MErrval,经寄存器输出至步骤4.6。

(4.5.3)K值计算:JPEG-LS标准中实现方法为比较A与向左移位后的N,当A=N时,则K=0;当N<A≤(N<<1)时,则K=1;当(N<<1)<A≤(N<<2)时,则K=2;当(N<<2)<A≤(N<<3)时,则K=3……以此类推,用这种方式实现,可以减小计算复杂度,缩短计算延时;计算得到K值后,通过寄存器输出至步骤4.6;

(4.5.4)预测编码中还有一个重要的环节,即“数据冲突控制”。将步骤4.2和步骤4.4中的索引值Q进行对比,生成对比结果:“冲突指示信号”collision。由于并行预测编码时,每一路的像素均相隔一个周期输入,因此,当两者相等时,表示相邻的两个像素使用的是“上下文参数RAM”中的同一个地址的参数,当前地址Qn像素刚进入“读参数”环节时,上一个Qn-1对应像素的上下文参数已更新完毕,但还未写入到“上下文参数RAM”中,此时输出collision=1。当两者不相等时,表示相邻的两个像素使用的是“上下文参数RAM”中的不同地址的参数,当前像素需要使用最新的上下文参数时,可以直接访问“上下文参数RAM”,此时输出collision=0。collision伴随每一级的数据有效信号逐级传递,并分别作用于步骤4.2和步骤4.4中的上下文参数选择模块。

(4.5.5)上下文参数RAM乒乓操作模块:为了防止误码扩散,需确保每个子块的编码过程都是独立完整的,即需要把每个子块当做一幅独立的图像进行编码,因此每个子块的参数初始化和更新都是独立的,需要用到两组RAM。在当前子块做完进入下一子块的编码时需清除当前块对参数RAM的更新操作,使其回归初始值,即需要对参数RAM使用各参数的初始值进行初始化。由于A、B、C、N四个参数均为长度为365的数组,要完成初始化,需对365个RAM地址写入初始值。

(4.6)将步骤4e)中传输过来的更新后的参数A_update、B_update回传给步骤4.4中,参与上下文参数A、B、C更新之前的上下文参数A、B选择。

(5)以图像子块为单位,将两路预测编码结果并为一路输出。

当两个预测编码模块进行预测编码后,将两路输出结果以子块为单位合并为一路输出至后续熵编码模块。预测编码模块1的将随流水线传递的近无损度参数Near、子块的首像素Fp、编码结果K值以及残差映射值MErrval拼位后一并写入到FIFO5中,而预测编码模块2的将随流水线传递的近无损度参数Near、子块的首像素Fp、编码结果K值以及残差映射值MErrval拼位后一并写入到FIFO6中。当FIFO5中写满一个子块的数目后,开始读FIFO5,读完一个子块数目的数据后转至FIFO6,同样等到输出完一个子块数目的数据后再跳转至FIFO6,按照此循环进行读取,使得预测编码结果可连续输出。

(6)熵编码:Golomb编码

(6.1)根据串行输出的K值,把串行输出的残差映射值MErrval右移K位,即把残差映射值除以2K,由此获得商值val;

(6.2)用残差映射值MErrval减去商值val并左移K位的结果,由此获得残差映射值除以2K的余数n;

(6.3)生成编码:如果计算出的商值val小于编码限长门限LMAX,则把数值1左移K位,在加上余数n即可生成编码,而把商值加上K,再加1即可得到编码长度,即val+K+1;若商值不小于编码限长门限LMAX,则把数值1右移像素位宽位,同时加上残差映射值MErrval,再减去1即可得到编码,而此时的编码长度为LIMIT;

(6.4)编码拼接:根据编码长度,从LIMIT位的编码中提取有效编码,从高到低地拼接到64位的寄存器中,此处两个64位的寄存器配合各自的计数器乒乓地完成该工作。若其中一个64位的寄存器写满时就把它输出并清空,同时把编码拼到另一个寄存器中;

(7)EDC(ErrorDetectionandCorrection)信息生成

将各个编码长度进行累加,统计每个子块的编码总长,总长信息能保证区分开每一个子块对应的码流。将每个子块首像素Fp和编码总长以及该子块使用的近无损度参数Near拼位,生成EDC信息。EDC信息提供了解码所必需的相关信息;

(8)码流整合与EDC信息插入:把生成的64位的码流通过FIFO转成16位后输出,每输出16个子块的码流,就把这16个子块的EDC信息插入到他们的码流之后,为保证可靠性,每个块的EDC信息都要复制三份16块为一组地插入到码流中,三份之间两两相隔16个子块的码流,即每输出16块的编码之后,除了要插入当前16个子块的EDC信息,还要把其前两组16个子块的EDC信息插一遍,如此确保每个子块的EDC信息倒在码流中插了3份。这样虽然带来了一定的数据冗余,但是可保证在码流传输时的信道误码对码流信息造成一定程度损坏的情况下,还能在解码时将EDC信息提取出来,增加了码流的抗误码性能。

(9)检纠错编码:根据参数检纠错模式来选通使用的检纠错模式,RS编码或者屏蔽检纠错编码:

(9.1)若选通RS编码模式,则对生成的插入EDC信息的混合码流,每223byte信息码,生成32byte校验码并插入到该223byte信息码之后,以此生成抗误码码流;

(9.2)若选通屏蔽检纠错编码模式,则不进行检纠错编码,直接将生成的插入EDC信息的混合码流输出。

(9.3)选择RS检纠错编码可以防止一定程度的信道误码,但是会造成压缩比的损失,如果通信信道误码率低,为了提高压缩比,可以选择屏蔽检纠错编码。

(10)码流组帧:在一幅图像的码流的起始端加入帧头识别字段和相关编码信息,编码信息包括子块大小,图像大小,图像像素位宽,检纠错编码模式以及近无损度参数,在码流的结尾加入帧尾识别字段,输出生成的编码码流。

附图说明

图1为本发明的流程图;

图2为本发明中图像分块方式的示意图;

图3为并行预测模块的结构框图;

图4为并行预测模块的输入控制结构框图;

图5为并行预测模块的输出控制结构框图;

图6为并行预测模块串并转换接口的FIFO读写时序图;

图7为预测模块的结构框图;

图8为当前像素与其四近邻的关系图;

图9为梯度量化模块的结构图;

图10为预处理模块的结构图;

图11为上下文参数更新结构图;

图12为数据冲突控制模块结构图;

图13为数据冲突控制原理示意图。

具体实施方式

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

如图1所示,为本发明关于基于JPEG-LS压缩算法的分块压缩抗误码扩散全流水线无损/近无损星上图像压缩系统的实现流程所示,包括如下步骤:

步骤1,预设参数。

第一步,读入像素位宽参数pixel_width。本发明支持两种量化比特数的图像的压缩:10bit和12bit。在针对特定的量化比特数的图像压缩时,像素位宽是一个确定的值,并且保持不变。

第二步,读入子块大小参数:子块行数row_size和子块列数column_size,子块行数row_size可取8、16两种(增大子块行数将需要更大的存储空间,同时导致更长的处理延时),子块列数column_size可取32、64两种,因此有四种图像子块模式:8×32,8×64,16×32以及16×64。将图像分成若干子块后进行压缩,可以使得在压缩码流传输时引入误码后,在解码时,能将误码扩散影响局限在某一个子块内而不至于扩散影响到图像其他部分的正常解码。实验证明,子块越小,压缩比越低,但抗误码扩散性能越好;子块越大,压缩比越高,但抗误码扩散性能越差。需根据实际需求设定适合的子块大小。

第三步,读入检纠错模式选择参数correction_mode,选通所需的检纠错编码方式:RS编码或者屏蔽检纠错编码。

第四步,利用图像的帧同步信号对上述参数进行锁定,保持在一幅图像进行压缩的时候,子块大小参数和检纠错模式选择这两种参数不变。

步骤2,输入像素值和近无损度参数Near,进行图像分块。

第一步,将需要压缩的图像像素数据和每一个像素所对应的近无损度参数Near一起输入至图像缓存与分块模块中。

第二步,如图2所示,根据读入的子块大小参数控制图像的缓存量,当存储器中图像的行数等于子块行数时,通过控制读地址按照设定好的子块大小参数逐块读出图像像素Ix和与该该像素所对应的近无损度参数Near,通过这种方式将整幅图像分成若干子块,并以子块作为最小编码单元(MCU)进行压缩编码。

本发明中,近无损度参数Near可以取0,1,2,3四种,当Near=0时为无损压缩模式,Near非0时为近无损压缩模式。并且,本发明适应分区域无损/近无损压缩,即可针对图像中不同的区域采用不同的近无损度参数Near进行压缩,例如,可对感兴趣的目标区域进行无损压缩,对其他区域进行有损压缩,这样可以在不损失感兴趣目标区域的信息的前提下提高压缩比,减小数据传输带宽的压力。因此,在图像进入压缩系统之前,应设定好图像各个区域所采用的近无损度参数Near。组成每个区域的最小单元为图像的子块,需要在输入每一个像素时,同时输入与该像素所在区域对应的近无损度参数Near。

步骤3,以图像子块为单位,将串行数据转换为两路并行数据。

如图3所示,利用四个FIFO把分块后的图像像素Ix和与其对应的近无损度参数Near拼位后以图像子块为单位分别输入到两路并行的预测编码模块中,并且,FIFO在输出时,像素之间均间隔一个像素时钟周期输入(可使得步骤4中的Stage3有足够的时间进行像素重建的相关计算),各个FIFO的读写时序如图6所示,第1、3、5、7……子块进入预测编码模块1进行预测编码,第2、4、6、8……子块进入预测编码模块2进行预测编码。

第一步,串行数据输入。假设一个子块的像素连续传输所需的时间为T,写入时序为:第1个子块的像素按照像素时钟连续写入FIFO1中,T时间后写完,第2个子块的像素按照像素时钟连续写入FIFO3中,以此类推,第3个子块的像素按照像素时钟连续写入FIFO2中,之后第4个子块的像素按照像素时钟连续写入FIFO4中,后续子块按照以上顺序依次写入四个FIFO中。

第二步,并行数据输出。两路输入的变量包括图像像素Ix和与之对应的近无损度参数Near。若图6所示,预测编码模块1的数据输入时序为:当第2个子块的像素全部写入FIFO3后,FIFO1开始输出一个第1个子块的像素,输出时每个像素间隔一个像素时钟周期,输出完整个子块的像素需要至少2T的时间,待FIFO1将第1个子块的像素输出完后,切换至FIFO2,将FIFO2中第3个子块的像素在至少2T时间内输出完,此后FIFO1和FIFO2依次交替输出。

预测编码模块2的数据输入时序与预测编码模块1相同:当FIFO2中第3个子块的像素写入完毕后,FIFO3开始输出第2个子块的像素,输出完后,紧接着FIFO4开始输出第4子块的像素,此后FIFO3和FIFO4依次交替输出。同样的,FIFO3和FIFO4输出数据时,每个像素间隔一个时钟周期。

第三步,上下文参数RAM初始化。由于按子块进行压缩,前后子块之间参数需要保持独立,因此在下一个子块进行预测编码之前需要根据该子块对应的近无损度参数Near对参数重新初始化,若在当前子块做完之后才进行初始化,势必阻止流水线的正常运行,降低压缩速度,因此需使用乒乓操作,即在每一路预测编码模块中,A、B、C、N四个上下文参数均拥有两组具有365个地址(地址取值范围为0到364)的RAM。正常工作时,一组RAM用于当前图像子块的上下文参数更新,另一组则针对下一个图像子块进行初始化,以等待下一子块的访问。因此初始化工作需提前进行:

在每一个子块的像素写入FIFO之前,需对该子块所对应的近无损度参数Near值进行采样,如图6所示,当预测编码模块1中的第3个子块刚开始写入FIFO2时,对该子块的近无损度参数Near进行采样,并开始初始化,由上下文参数RAM2参与此工作;与此同时,预测编码模块1正在对第1个子块像素进行上下文参数更新,由上下文参数RAM1参与上下文参数更新工作;当第1个子块预测编码结束后,第3个子块从FIFO2输出,此时便使用上下文参数RAM2进行相关的参数更新工作……以这种方式进行乒乓操作,可保证当该子块的像素进行预测编码时,使用的是初始化完毕的上下文参数。

由于像素位宽最大可达12bit,因此A、B两个参数的参数RAM大小均为365*20bit、C参数的为365*9bit,N的为365*7bit。B参数与C参数的初始值均为0,N参数初始值始终为1,A参数的初始值为:

初始化工作是将A、B、C、N四个参数的初始值按照像素时钟,连续地写入到上下文参数RAM的0到364的地址当中,本发明中使用双端口RAM,这样在初始化时,可以同时使用两个端口进行写操作,这样可以节省一半的初始化时间。

步骤4,并行预测编码模块。

如图6所示,采用两路预测模块并行的模式,其中单路的预测模块结构如图6所示,采用全流水线结构,其中像素重建值Rx和一些上下文参数存在反馈回路。

Stage1:上下文建模。把重建后的像素值Rx(Stage3中数据预处理环节中计算得到的像素重建值)输入到“FIFO+寄存器”缓存结构中,根据子块大小参数控制FIFO的读时机,当缓存了子块中一行的像素量后,开始从FIFO中读出数据,从寄存器上依次获得当前像素值的近邻a、c、b、d,同时统计当前像素在子块中的坐标值。根据行列计数得到当前像素的坐标值,并读取每一个子块的第一个像素,即首像素Fp。再根据当前像素值的行列坐标和子块大小参数对当前像素的4个近邻进行边缘处理,获得重建值Ra、Rc、Rb、Rd。对于大多数像素,如图8(a)所示,其像素重建值与缓存结构输出的值存在如下关系:

Ra=a,Rb=b,Rc=c,Rd=d,即分别等于对应坐标的像素值。

当处于以下4种特殊情形时为防误码扩散需保证每个子块预测和编码的独立性,因此需要打断其与相邻块之间的关系,简言之,当前子块的上下文建模不能使用其之前和之后的子块的像素,因此需做以下处理:

(1)如图8(b)所示,当前像素的坐标为子块的第一行第一列时,Ra、Rc、Rb、Rd均等于首像素Fp;

(2)如图8(c)所示,当前像素的坐标为子块的第一行非第一列时,Ra等于a对应坐标的像素值,而Rc、Rb、Rd均等于首像素Fp;

(3)如图8(d)所示,当前像素的坐标为子块的第一列非第一行时,Ra与Rb等于b对应坐标的像素值,Rc等于Ra在前一行时的重建值Ra_r;

(4)如图8(e)所示,当前像素的坐标为子块的最后一列时,Rb、Rd等于b对应坐标的像素值,Ra、Rc分别等于a、c对应坐标的像素值。

完成后,将上下文重建值Ra、Rc、Rb、Rd用寄存器输出。

Stage2:分为两个计算环节同时进行,即索引值计算和像素预测。

(1)像素预测:比较上下文建模中Ra值与Rb值的大小,若Ra大于Rb,则将Ra作为较大值,将Rb作为较小值,否则将Rb作为较大值,将Ra作为较小值;比较Rc值与较大值的大小,若Rc值大于较大值,则像素预测值Px等于较小值,否则,比较Rc值与较小值的大小,若Rc值小于较小值,则像素预测值Px取较大值,否则,固定预测值Px取Ra值加上Rb值再减去Rc值的结果,最终得到像素预测值Px,用寄存器输出。

(2)索引值计算:

(2.1)根据上下文建模的结果计算三个梯度值:Rd与Rb相减得到梯度一D[0];Rb与Rc相减得到梯度二D[1];Rc与Ra相减得到梯度三D[2];

(2.2)根据初始化得到的梯度量化阈值(T1、T1)分别对三个梯度进行量化,依据JPEG-LS标准,当像素位宽pixel_width选择12bit时,梯度量化阈值为18、67、276;当像素位宽pixel_width选择10bit时,梯度量化阈值为6、19、72,具体处理方法为:将三个梯度值分别并行地与八个阈值(-T3、-T2、-T1、-NEAR、NEAR、T1、T2、T3)作比较,每个比较结果对应于8位的最终比较结果中的一位,三个梯度生成3个8bit的比较结果。即若梯度大于门限第i级门限,但小于或等于该级门限,则8bit的比较结果的0~i-1位均为1,i~7位为0;

(2.3)根据比较结果即可知道梯度位于哪个门限区间内,由此把该区间对应的量化值赋给量化结果即可得到三个量化结果Q_0,Q_1,Q_2;

(2.4)梯度修正与符号判断:分别判断三个梯度量化值Q_0,Q_1,Q_2是否为负数,若三个量化值从左到右第一个不为0的数是负数,那么就把三个量化值的绝对值赋给三个梯度修正值Q0,Q1,Q2,同时符号标志SIGN等于-1,否则直接把三个量化值依次赋给梯度修正值Q0,Q1,Q2,同时符号标志SIGN等于1,SIGN值用寄存器输出;

(2.5)索引地址计算:把三个梯度值依Q0,Q1,Q2依次与81、9、1相乘,在把三个乘积相加,算出索引值Q,用寄存器输出至流水线下一级。同时,寄存器输出之前,索引值Q直接作用至“上下文参数RAM”,以数据伴随的有效信号为读使能,读出索引值Q所对应的A、B、C、N四个参数。

Stage3:数据预处理。

包括几个环节:上下文参数C、N选择,预测值修正,残差计算,残差量化,像素重建,残差取模以及N参数更新,如图10所示。

索引值Q不经过任何计算直接用寄存器锁存一级输出至Stage4。

(2)上下文参数C、N选择:在Stage2中,索引值Q和数据有效信号作用于“上下文参数RAM”一周期后,参数A、B、C、N输出。根据“冲突控制”模块输出的“冲突指示信号”collosion,从Stage5回传的更新后的参数C_update、N_update和刚从“上下文参数RAM”读出的参数C、N当中进行选择,输出需要使用的参数C_sel、N_sel。当collosion为0时,选择从“上下文参数RAM”读出的参数C、N,而collosion为1时,选择从Stage5回传的更新后的参数C_update、N_update。参数选择采用组合逻辑实现。参数A和B不做任何计算,由寄存器锁存一级输出。

(3)N参数更新:根据JPEG-LS标准,使用符号标志SIGN与步骤“上下文参数C、N选择”所获取的参数N_sel进行N参数的更新,更新后得到N_update。当N参数进行更新时,若N_sel==RESET条件满足时,将N_flag置1,否则置0;根据JPEG-LS标准,上下文参数更新时,N_sel==RESET这一条件的满足与否会影响参数A、B的更新选择,因此N_flag随N_update一起通过寄存器输出至下一级,以供上下文参数A、B、C更新时使用。N_sel也用寄存器输出至下一级。

(4)预测值修正:根据JPEG-LS标准,使用符号标志SIGN与步骤“上下文参数C、N选择”所获取的参数C_sel对预测值Px进行修正,获得预测修正值Px_c。

(5)残差计算:根据JPEG-LS标准,利用符号标志SIGN、当前像素值Ix与预测修正值Px_c运算获得残差值Errval。

(6)残差量化:根据JPEG-LS标准,对残差值Errval进行量化,得到残差量化值Errval_q,计算公式为:

其中,int为取整操作,Errval为残差值,Near为近无损度参数。

(7)像素重建:根据JPEG-LS标准,通过符号标志SIGN、当前像素值Ix、残差量化值Errval_q以及近无损度参数Near值计算得到像素重建值Rx,计算公式为:

Rx=Px_c+SIGN*Errval_q*(2*Near+1)

得到的像素重建值Rx再反馈至上下文建模模块中,用来提供Stage1中当前像素上下文建模的环境模板。在无损压缩模式下,像素重建值Rx等于原像素值Ix。

(8)残差取模:根据JPEG-LS标准,利用残差取模范围RANGE对残差量化值Errval_q进行取模,使残差映射到取模范围内:

得到残差取模值Errval_Mod,用寄存器输出至下一级。

预测编码使用的参数:每一个子块所对应的近无损度参数Near会随着像素进入预测编码流水线中,在进行预测编码时,根据像素位宽pixel_width和近无损度参数Near实时选择列表中对应的残差取模范围RANGE。残差取模范围RANGE取值与像素位宽以及近无损度参数Near值相关:

Stage4:上下文参数更新。

如图11所示,包含两个环节:上下文参数A、B选择,上下文参数A、B、C更新。

(1)上下文参数A、B选择:根据“冲突控制”模块输出的“冲突指示信号”collosion,从Stage6回传的更新后的参数A_update、B_update和Stage3输出的参数A、B当中进行选择,输出需要使用的参数A_sel、B_sel。当collosion为0时,选择Stage3输出的参数A、B,而collosion为1时,选择从Stage6回传的更新后的参数A_update、B_update。参数选择采用组合逻辑实现。

(2)上下文参数A、B、C更新:根据JPEG-LS标准,使用残差取模值Errval_Mod,选择后的参数A_update、B_update、C_update,以及Stage3中N参数更新后输出的N_flag信号,采用组合逻辑对上下文参数选择后获取的A、B、C参数进行更新计算(每一个子块所对应的近无损度参数Near会伴随像素进入预测编码流水线中,根据当前使用的近无损度参数Near进行参数更新计算),得到更新的参数A_update、B_update、C_update,连同Stage3中输出过来的N_update一起,写入“上下文参数RAM”,伴随的数据有效信号作为RAM的“写使能”信号,Stage3中输出的索引值Q作为RAM的“写地址”。与此同时,A_update、B_update、C_update、N_update通过寄存器输出至下一级。筛选后的用来进行参数更新的三个参数A_sel、B_sel、N_sel和残差取模值Errval_Mod也通过寄存器输出至下一级,以供残差映射和K值计算使用。

Stage5:包括主要的两个环节,即残差映射和K值计算。

(1)Stage4输出的C_update、N_update参数直接回传至Stage3参与预处理运算中的上下文参数C、N选择。A_update、B_update参数则直接经寄存器输出至Stage6。

(2)残差映射:根据JPEG-LS标准,使用残差取模值Errval_Mod,选择后的参数A_sel、B_sel计算出映射后的残差值MErrval,经寄存器输出至Stage6。

(3)K值计算:根据JPEG-LS标准,实现方法为将A与向左移位后的N进行比较,当A=N时,则K=0;当N<A≤N(<)1时,则K=1;当(N<<1)<A≤(N<<2)时,则K=2;当(N<<2)<A≤(N<<3)时,则K=3……以此类推,用这种方式实现,可以减小计算复杂度,缩短计算延时。计算得到K值后,通过寄存器输出至Stage6。

(4)预测编码中还有一个重要的环节,即“数据冲突控制”。如图12所示,将Stage2和Stage4中的索引值Q进行对比,生成对比结果:“冲突指示信号”collision。如图13所示,由于并行预测编码时,每一路的像素均相隔一个周期输入,因此,当两者相等时,表示相邻的两个像素使用的是“上下文参数RAM”中的同一个地址的参数,当前地址Qn像素刚进入“读参数”环节时(Stage2),上一个Qn-1对应像素的上下文参数已更新完毕(Stage4),但还未写入到“上下文参数RAM”中,此时输出collision=1。当两者不相等时,表示相邻的两个像素使用的是“上下文参数RAM”中的不同地址的参数,当前像素需要使用最新的上下文参数时,可以直接访问“上下文参数RAM”,此时输出collision=0。collision伴随每一级的数据有效信号逐级传递,并分别作用于Stage2和Stage4中的上下文参数选择模块。

(5)上下文参数RAM乒乓操作模块:为了防止误码扩散,需确保每个子块的编码过程都是独立完整的,即需要把每个子块当做一幅独立的图像进行编码,因此每个子块的参数初始化和更新都是独立的,需要用到两组RAM。在当前子块做完进入下一子块的编码时需清除当前块对参数RAM的更新操作,使其回归初始值,即需要对参数RAM使用各参数的初始值进行初始化。由于A、B、C、N四个参数均为长度为365的数组,要完成初始化,需对365个RAM地址写入初始值。

Stage6:将Stage5中传输过来的更新后的参数A_update、B_update回传给Stage4中,参与上下文参数A、B、C更新之前的上下文参数A、B选择。

步骤5,以图像子块为单位,将两路预测编码结果并为一路输出。

如图5所示,当两个预测编码模块进行预测编码后,将两路输出结果以子块为单位合并为一路输出至后续熵编码模块。预测编码模块1的将随流水线传递的近无损度参数Near、子块的首像素Fp、编码结果K值以及残差映射值MErrval拼位后一并写入到FIFO5中,而预测编码模块2的将随流水线传递的近无损度参数Near、子块的首像素Fp、编码结果K值以及残差映射值MErrval拼位后一并写入到FIFO6中。操作时序如图6所示,当FIFO5中写满一个子块的数目后,开始读FIFO5,读完一个子块数目的数据后转至FIFO6,同样等到输出完一个子块数目的数据后再跳转至FIFO6,以此循环读取,使得预测编码结果可连续输出。

步骤6,熵编码:Golomb编码。

第一步,根据串行输出的K值,把串行输出的残差映射值MErrval右移K位,即把残差映射值除以2K,由此获得商值val;

第二步,用残差映射值MErrval减去商值val并左移K位的结果,由此获得残差映射值除以2K的余数n;

编码参数包括残差映射位宽qbpp和变长编码门限LMAX,因此,针对不同像素位宽和近无损度参数Near,残差映射位宽qbpp的取值为:

在参数初始化时,可根据像素位宽pixel_width和近无损度参数Near选择列表中对应的残差映射位宽qbpp。而变长编码门限LMAX可根据JPEG-LS标准中的计算公式实时计算得到:LMAX=LIMIT-qbpp-1,供后面生成编码使用;

第三步,生成编码:如果计算出的商值val小于编码限长门限LMAX,则把数值1左移K位,在加上余数n即可生成编码,而把商值加上K,再加1即可得到编码长度,即val+K+1;若商值不小于编码限长门限LMAX,则把数值1右移像素位宽位,同时加上残差映射值MErrval,再减去1即可得到编码,而此时的编码长度为LIMIT;

第四步,编码拼接:根据编码长度,从LIMIT位的编码中提取有效编码,从高到低地拼接到64位的寄存器中,此处两个64位的寄存器配合各自的计数器乒乓地完成该工作。若其中一个64位的寄存器写满时就把它输出并清空,同时把编码拼到另一个寄存器中。

步骤7,EDC(ErrorDetectionandCorrection)信息生成。

将各个编码长度进行累加,统计每个子块的编码总长,总长信息能保证区分开每一个子块对应的码流。将每个子块首像素Fp和编码总长以及该子块使用的近无损度参数Near拼位,生成EDC信息。EDC信息提供了解码所必需的相关信息。

步骤8,码流整合与EDC信息插入。

把生成的64位的码流通过FIFO转成16位后输出,每输出16个子块的码流,就把这16个子块的EDC信息插入到他们的码流之后,为保证可靠性,每个块的EDC信息都要复制三份16块为一组地插入到码流中,三份之间两两相隔16个子块的码流,即每输出16块的编码之后,除了要插入当前16个子块的EDC信息,还要把其前两组16个子块的EDC信息插一遍,如此确保每个子块的EDC信息倒在码流中插了3份。这样虽然带来了一定的数据冗余,但是可保证在码流传输时的信道误码对码流信息造成一定程度损坏的情况下,还能在解码时将EDC信息提取出来,增加了码流的抗误码性能。

步骤9,检纠错编码。

根据参数检纠错模式来选通使用的检纠错模式,RS编码或者屏蔽检纠错编码:

若选通RS编码模式,则对生成的插入EDC信息的混合码流,每223byte信息码,生成32byte校验码并插入到该223byte信息码之后,以此生成抗误码码流;

若选通屏蔽检纠错编码模式,则不进行检纠错编码,直接将生成的插入EDC信息的混合码流输出。

选择RS检纠错编码可以防止一定程度的信道误码,但是会造成压缩比的损失,如果通信信道误码率低,为了提高压缩比,可以选择屏蔽检纠错编码。

步骤10,码流组帧。

在一幅图像的码流的起始端加入帧头识别字段和相关编码信息,编码信息包括子块大小,图像大小,图像像素位宽,检纠错编码模式以及近无损度参数,在码流的结尾加入帧尾识别字段,输出生成的编码码流。

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

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号