面向硬件实现的快速高效无损图像压缩方法
【专利摘要】本发明涉及微电子学的集成电路设计领域和数字图像编码压缩领域,为提供一种面向硬件实现的快速高效无损图像压缩方法。与传统的FELICS算法相比,能够简化Golomn-Rice编码中k参数的选取过程,减小所需存储器的大小并缩短计算周期,提高图像压缩系统的效率。为此,本发明采取的技术方案是,面向硬件实现的快速高效无损图像压缩方法,包括如下步骤:编码一帧图像,采用标准的FELICS算法不进行任何编码直接输出前2个像素,然后按照光栅扫描顺序依次对像素进行编码。本发明主要应用于成电路设计。
【专利说明】面向硬件实现的快速高效无损图像压缩方法
【技术领域】
[0001]本发明涉及微电子学的集成电路设计领域和数字图像编码压缩领域,尤其涉及一种面向硬件实现的快速高效无损图像压缩方法。
技术背景
[0002]数字图像传感器广泛应用在各种视频应用领域,由于图像的数据量很大,所以在图像传输前要对图像进行有损或无损压缩,有损压缩一般应用在对图像质量要求不高的应用领域,但是医学图像等一些高端应用领域要求图像必须采用无损压缩。快速高效无损图像压缩系统(fast and efficient lossless image compress1n system, FELICS)是一个快速高效的无损图像压缩算法,比工作在无损模式下的JPEG(Joint Photographic ExpertsGroup)算法快5倍,且能够达到相同的压缩比,同时快速高效无损图像压缩系统算法复杂度低,因此非常适合应用于医疗内窥镜系统。但是算法中哥伦布.莱斯(Golomb-Rice)编码的k参数选取需要一块大容量的存储器,更新存储器的过程更是消耗大量功耗与时钟周期,对面积和功耗提出了很大的要求并且限制了系统的吞吐率。
【发明内容】
[0003]为了克服现有技术的不足,提供一种面向硬件实现的快速高效无损图像压缩方法。与传统的FELICS算法相比,能够简化Golomn-Rice编码中k参数的选取过程,减小所需存储器的大小并缩短计算周期,提高图像压缩系统的效率。为此,本发明采取的技术方案是,面向硬件实现的快速高效无损图像压缩方法,包括如下步骤:编码一帧图像,采用标准的FELICS算法不进行任何编码直接输出前2个像素,然后按照光栅扫描顺序依次对像素进行编码,具体编码步骤如下:
[0004]I)选取当前像素P和2个相邻像素N1、N2,NI与N2已知,且已编码,为P提供相关信息;其中按照当前像素P点的位置分为四种情况对相邻像素进行选取:若P点为第一行的前两个像素,则不对P进行编码,直接输出为第一行的其余像素,则选取左边两个像素值作为参考值;若P为第一列而非第一行的像素,则选取P上方和右上方两个像素作为参考值;若P在上述三种情况以外的位置则选取P左侧和上方两个像素作为参考值;
[0005]2)计算预测区间下界L = min{Nl, N2},上界H = max {NI, N2},预测上下文Δ =H — L ;其中L为两个参考像素值中较小者,H为较大者,Δ为较大者与较小者的差值,即预测区间;
[0006]3)如果L≤P≤H,像素P落在预测区间[L,H],编码Ibit的O并置于该像素输出编码的最高位,表示像素P落在预测区间内,然后对P — L在[0,Δ]内进行修正的二元编码;如果L > P,则像素P低于预测区间,编码Ibit的1,表示像素P落在预测区间外,再用Ibit的O表示低于预测区间,并将‘10’置于输出编码的最高位,然后计算出P点与预测区间边界的差值D = L-P-1,对该差值D进行Golomb-Rice编码;如果P > H,则像素P处于高于预测区间,编码Ibit的1,表示像素P落在预测区间外,再用Ibit的I表示高于预测区间,并将‘11’置于输出编码的最高位;然后计算出P点与预测区间边界的差值D,D =P 一 H 一 I,对该差值D进彳了 Golomb-Rice编码;
[0007]当像素值落在预测区间外时将采用Golomb-Rice编码,在开始一帧图像处理前建立一个编码累加表C[A][k],其中Λ取值范围同像素值的变化范围,k取值范围为O至像素位深度;每次Golomb-Rice codes编码时,根据Δ O = H — L确定k,即选取最小的kO,使
[0008]C[ Δ0] [k0] ^ C[ Δ0] [k], k = O, I,..., (I)
[0009]对于每一个预测上下文的Λ,编码累加表C[A] [k]记录了使用每一个可能的k值(O, I,…)时Golomb-Rice编码的编码总长度,同时使用令编码总长度最小的k值进行下
一次编码;
[0010]参数k确定后,对D/2k进行一元编码;后对差值D剩余的低k位进行二元编码
[0011]最后要更新编码累加表:
[0012]C[ Δ J [k] = C[ Δ 0] [k] +D/2k+k+l, k = O, I,..., 7 (2)
[0013]观察FELICS的编码过程,编、解码器要在Golomb-Rice编码下对Λ (O~255),在k(0~像素位深度)下累计编码位,从而需要256 X 8W bits的存储空间,W表示编码累加值的位宽。更新编码累加表的过程也要消耗额外的操作周期。
[0014]其中修正的二元编码就是将落在预测区间的像素点进行变长编码,即对出现频率较高的值赋予较短的码值,对出现频率较低的值赋予较长的码值。
[0015]参数k的确定基于预测误差绝对值的期望,使用误差的平均值来代替期望值,为每一个可能出现的Λ值(O~255)设置2个变量N和Α,其中N表示到目前为止该Λ值下出现的误差的个数,A表示到目前为止误差绝对值的累计值,每一个△值只需要两个量就可以完成记录,因此存储空间由256X8W bits下降为256X2W bits。k参数满足k =min{k ; 2k ; N≥A},即最小的k值使2kN≥A成立;N为到目前为止Λ值相同的像素数目,A为其误差累计;k参数的选取简化为计算A与N的最高非零位的差值,如果N通过左移使之最高非零位与A对齐,且值不小于A,则k参数为A与N的最高非零位的差值,否则为A与N的最高非零位的差值加I。
[0016]将原始图像适当分块,来利用像素的局部特性,经过理论分析在硬件消耗和速度之间进行折中以确定最佳的分块大小。
[0017]本发明的技术特点与效果:
[0018]本发明中,不必计算出可使编码长度达到最小的k值,而是用其期望来代替。首先,将存储器大小由256 X 8ff bits下降为256 X 2ff bits ;其次,免去了更新累加表所需的八个周期,只需要一个周期用累计值除以数量就可以得出k值的期望值。因此,本发明与标准的FELICS算法相比,消耗的硬件资源更少并且处理效率更快。
【专利附图】
【附图说明】
[0019]图1为当P点位置不同时,其参考像素值选取的四种不同情况。
【具体实施方式】
[0020]编码一帧图像,标准的FELICS算法不进行任何编码直接输出前2个像素,然后按照光栅扫描顺序依次对像素进行编码,编码步骤如下:[0021]I)选取当前像素P和2个相邻像素N1、N2。NI与N2已知,且已编码,为P提供相关信息。其中按照当前像素P点的位置分为四种情况对相邻像素进行选取:若P点为第一行的前两个像素,则不对P进行编码,直接输出为第一行的其余像素,则选取左边两个像素值作为参考值;若P为第一列而非第一行的像素,则选取P上方和右上方两个像素作为参考值;若P在上述三种情况以外的位置则选取P左侧和上方两个像素作为参考值。参见图1。
[0022]2)计算预测区间下界L = min{Nl, N2},上界H = max {NI, N2},预测上下文Δ =H-L0其中L为两个参考像素值中较小者,H为较大者,Λ为较大者与较小者的差值,即预测区间。
[0023]3)如果L≤P≤H,像素P落在预测区间[L,H],编码Ibit的O并置于该像素输出编码的最高位,表示像素P落在预测区间内,然后对P — L在[0,Δ]内进行修正的二元编码;如果L > P,则像素P低于预测区间,编码Ibit的1,表示像素P落在预测区间外,再用Ibit的O表示低于预测区间,并将‘10’置于输出编码的最高位,然后计算出P点与预测区间边界的差值D = L — P — 1,对该差值D进行Golomb-Rice编码。如果P > H,则像素P处于高于预测区间,编码Ibit的1,表示像素P落在预测区间外,再用Ibit的I表示高于预测区间,并将‘11’置于输出编码的最高位;然后计算出P点与预测区间边界的差值D,D=P — H 一 I,对该差值D进彳了 Golomb-Rice编码。
[0024]其中修正的二元编码就是将落在预测区间的像素点进行变长编码,即对出现频率较高的值赋予较短的码值,对出现频率较低的值赋予较长的码值,由于本发明未对标准FELICS算法中修正的二元编码模块进行改动,故其工作原理不再赘述。
[0025]当像素值落在预测区间外时将采用Golomb-Rice编码,由于Golomb-Rice编码中k值的选取将会对最后的编码结果产生很大的影响。为了选取合适的k值,FELICS算法在开始一帧图像处理前建立一个编码累加表C[A][k],其中Λ取值范围同像素值的变化范围,k取值范围为O至像素位深度。对于像素位深度为8的图像,累加表为256X8的二维数组。每次Golomb-Rice codes编码时,根据Δ O = H — L确定k,即选取最小的kO,使
[0026]C[A0] [k0] ≤ C[A0] [k], k = 0,1,...,7 (3)
[0027]对于每一个预测上下文的Λ,编码累加表C[A][k]记录了使用每一个可能的k值(0,1,---,7)时Golomb-Rice编码的编码总长度,同时使用令编码总长度最小的k值进行下
一次编码。
[0028]参数k确定后,对D/2k进行一元编码;后对差值D剩余的低k位进行二元编码。
[0029]最后要更新编码累加表:
[0030]C[ Δ J [k] = C[ Δ 0] [k] +D/2k+k+l, k = O, I,..., 7 (4)
[0031]观察FELICS的编码过程,编、解码器要在Golomb-Rice编码下对Λ (O~255),在k(0~7)下累计编码位,从而需要256 X 8W bits的存储空间,W表示编码累加值的位宽。更新编码累加表的过程也要消耗额外的操作周期。
[0032]本发明中参数k的确定基于预测误差绝对值的期望,但由于准确的计算量化误差绝对值的期望比较困难,故使用误差的平均值来代替期望值,为每一个可能出现的Λ值(O~255)设置2个变量N和Α,其中N表示到目前为止该Λ值下出现的误差的个数,A表示到目前为止误差绝对值的累计值,每一个△值只需要两个量就可以完成记录,因此存储空间由256X8Wbits下降为256X2Wbits。k参数满足k = min{k ' 2k ; N≥A},即最小的k值使2kN≥A成立。在本设计中,N为到目前为止Δ值相同的像素数目,A为其误差累计。因此,k参数的选取简化为计算A与N的最高非零位的差值,如果N通过左移使之最高非零位与A对齐,且值不小于A,则k参数为A与N的最高非零位的差值,否则为A与N的最高非零位的差值加I。本方法用k值的期望来代替可使编码长度达到最小的k值,压缩比会略有减小,但是硬件复杂度得到了极大降低,更易于VLSI实现,并且无需像标准FELICS算法中那样消耗八个周期来更新累加表,只需一个周期就可以选出合适的k值。
[0033]另外,在该方法的基础之上,还可以将原始图像适当分块,来利用像素的局部特性,经过理论分析在硬件消耗和速度之间进行折中以确定最佳的分块大小。
[0034]为了更详细的说明本发明的工作过程,下面将以具体数值的例子来进一步说明。
[0035]在技术方案中曾提到为了兼顾硬件资源消耗和处理速度,可以对图像分块处理,经过分析得出当图像以64X64分块进行处理时其压缩性能和处理速度达到最优,因此选用这种分块方式进行图像压缩编码。
[0036]现假定当前处理的像素值为P = 40,两个参考像素值分别为L = 55,H = 60。可以看出P〈L,因此需要对P进行Golomn-Rice编码,首先用一个‘I’来表示P落在[L,H]之外,再用一个‘O,表不P〈L。
[0037]接下来要确定好合适的k值,首先要计算出预测区间的值Λ =H-L = 5,接下来查找到累加表中Λ = 5的储存器,找到目前为止该Λ对应的N值和A值。假定N = 5,A =20,那么就要计算出使k =2k ; N≥A}成立的k值,来本例子中,k = 2。
[0038]确定好合适的k值之后就可以对预测差值D = L-P-1 = 55-40-1 = 14进行以k=2为基的Golomn-Rice编码,首先确定一进制的编码,即D/2k = 14/4 = 3,因此一进制编码为‘111’,接下来对余数2进行二进制编码,因此二进制编码为‘10’。
[0039]接下来将一进制编码与二进制编码结合起来并在中间插入一个‘0’就完成了Golomn-Rice编码,编码结果为‘111010’。
[0040]最后将Golomn-Rice编码结果和表示P值位置的‘10’结合之后就是可以输出的码流,即 ‘10111010,。
【权利要求】
1.一种面向硬件实现的快速高效无损图像压缩方法,其特征是,包括如下步骤:编码一帧图像,采用标准的FELICS算法不进行任何编码直接输出前2个像素,然后按照光栅扫描顺序依次对像素进行编码,具体编码步骤如下: 1)选取当前像素P和2个相邻像素N1、N2,NI与N2已知,且已编码,为P提供相关信息;其中按照当前像素P点的位置分为四种情况对相邻像素进行选取:若P点为第一行的前两个像素,则不对P进行编码,直接输出;若卩为第一行的其余像素,则选取左边两个像素值作为参考值;若P为第一列而非第一行的像素,则选取P上方和右上方两个像素作为参考值;若P在上述三种情况以外的位置则选取P左侧和上方两个像素作为参考值; 2)计算预测区间下界L= min{Nl, N2},上界H = max {NI, N2},预测上下文Δ = H —L ;其中L为两个参考像素值中较小者,H为较大者,Δ为较大者与较小者的差值,即预测区间; 3)如果LSP≤H,像素P落在预测区间[L,H],编码Ibit的O并置于该像素输出编码的最高位,表示像素P落在预测区间内,然后对P — L在[O,Λ ]内进行修正的二元编码;如果L > P,则像素P低于预测区间,编码Ibit的1,表示像素P落在预测区间外,再用Ibit的O表示低于预测区间,并将‘10’置于输出编码的最高位,然后计算出P点与预测区间边界的差值D = L — P — 1,对该 差值D进行Golomb-Rice编码;如果P > H,则像素P处于高于预测区间,编码Ibit的1,表示像素P落在预测区间外,再用Ibit的I表示高于预测区间,并将‘11’置于输出编码的最高位;然后计算出P点与预测区间边界的差值D,D = P-H - 1,对该差值D进行Golomb-Rice编码; 当像素值落在预测区间外时将采用Golomb-Rice编码,在开始一帧图像处理前建立一个编码累加表C[A][k],其中Λ取值范围同像素值的变化范围,k取值范围为O至像素位深度;每次Golomb-Rice codes编码时,根据Δ O = H — L确定k,即选取最小的kO,使
C[ Δ0] [k0]≤C[ Δ0] [k], k = O, I,..., (I) 对于每一个预测上下文的Λ,编码累加表C[A][k]记录了使用每一个可能的k值(0,I,…)时Golomb-Rice编码的编码总长度,同时使用令编码总长度最小的k值进行下一次编码; 参数k确定后,对D/2k进行一元编码;后对差值D剩余的低k位进行二元编码 最后要更新编码累加表:
C[A0] [k] = C[A0] [k]+D/2k+k+l,k = 0,1,...,7 (2) 观察FELICS的编码过程,编、解码器要在Golomb-Rice编码下对Λ (O~255),在k(O~像素位深度)下累计编码位,从而需要256X8W bits的存储空间,W表示编码累加值的位宽。更新编码累加表的过程也要消耗额外的操作周期。
2.如权利要求1所述的面向硬件实现的快速高效无损图像压缩方法,其特征是,其中修正的二元编码就是将落在预测区间的像素点进行变长编码,即对出现频率较高的值赋予较短的码值,对出现频率较低的值赋予较长的码值。
3.如权利要求1所述的面向硬件实现的快速高效无损图像压缩方法,其特征是,参数k的确定基于预测误差绝对值的期望,使用误差的平均值来代替期望值,为每一个可能出现的Λ值(O~255)设置2个变量N和Α,其中N表示到目前为止该Λ值下出现的误差的个数,A表示到目前为止误差绝对值的累计值,每一个Λ值只需要两个量就可以完成记录,因此存储空间由256X8Wbits下降为256X2Wbits。k参数满足k = min{k ' 2k ; N≥A},即最小的k值使2kN≥A成立;N为到目前为止Δ值相同的像素数目,A为其误差累计;k参数的选取简化为计算A与N的最高非零位的差值,如果N通过左移使之最高非零位与A对齐,且值不小于A,则k参数为A与N的最高非零位的差值,否则为A与N的最高非零位的差值加I。
4.如权利要求1所述的面向硬件实现的快速高效无损图像压缩方法,其特征是,将原始图像适当分块,来利用像素的局部特性,经过理论分析在硬件消耗和速度之间进行折中以确定最佳的分块大 小。
【文档编号】H04N19/14GK104038765SQ201410298885
【公开日】2014年9月10日 申请日期:2014年6月26日 优先权日:2014年6月26日
【发明者】姚素英, 于潇, 徐江涛, 史再峰, 高静, 聂凯明, 高志远 申请人:天津大学