发明内容
发明目的:针对上述现有技术,提出一种Bayer域图像有损压缩方法,降低压缩模块在硬件中的设计难度,提升硬件运行速度,同时提升图像的压缩率。
技术方案:一种Bayer域图像有损压缩方法,包括:
步骤1:将目标图像分割为若干像素块,每个像素块的大小为8*8像素点;
步骤2:对各像素块,以像素块中央四个像素点的原值作为预测计算的依据,对中央四个像素点以外的其他像素点进行预测计算,得出像素点对应的像素差分值;
步骤3:对各像素块,首先将像素块中央四个像素点的原值按固定比特位数直接转换为二进制数,然后对中央四个像素点以外的其他像素点进行编码,包括:对像素差分值属于正、负或0值的属性进行编码,对像素差分值的绝对值进行编码,对差分值的绝对值编码的比特位数标志符进行编码;对编码值按顺序分别进行存储;
所述步骤3中,将像素差分值的绝对值按理论值大小分为第一至第七等级,对应的区间分别为:128-255,64-127,32-63,16-31,8-15,4-7,0-3;对像素差分值的绝对值进行编码时,对于当前像素块,首先将差分值的绝对值从大到小排序并找出最大值,然后根据所述最大值落入的等级,将差分值的绝对值相对较大的若干个值按照固定的长比特位数进行二进制编码,其余绝对值按照固定的短比特位数进行二进制编码;按短比特位数进行二进制编码时,若出现像素差分值的绝对值大于该短比特位数所能表示的最大值时,按该短比特位数所表示的最大值对该绝对值进行二进制编码。
进一步的,所述步骤3中,对像素差分值属于正、负或0值的属性进行编码时,正值及0值属性以1bit的‘1’进行编码,负值属性以1bit的‘0’进行编码。
进一步的,所述步骤3中,对像素差分值的绝对值进行编码时,对于第一等级,排序中前28个值按8比特位数进行编码,其他32个值按3比特位数进行编码;对于第二等级,排序中前29个值按7比特位数进行编码,其他31个值按3比特位数进行编码;对于第三等级,排序中前36个值按6比特位数进行编码,其他24个值按3比特位数进行编码;对于第四等级,排序中前30个值按5比特位数进行编码,其他30个值按3比特位数进行编码;对于第五等级,排序中前20个值按4比特位数进行编码,其他40个值按3比特位数进行编码;对于第六等级,排序中前24个值按3比特位数进行编码,其他36个值按2比特位数进行编码;对于第七等级,排序中前12个值按2比特位数进行编码,其他48个值按1比特位数进行编码。
进一步的,所述步骤3中,对差分值的绝对值编码的比特位数标志符进行编码时,当像素点对应的差分值的绝对值按短比特位数进行编码时,将1bit的‘0’作为比特位数标志符;当像素点对应的差分值的绝对值按长比特位数进行编码时,将1bit的‘1’作为比特位数标志符。
进一步的,所述步骤3中,对于任一像素块,将该像素块中央四个像素点的原值编码,其他各像素点的正、负或0值的属性编码,以及差分值的绝对值编码的比特位数标志符按顺序存储在一个存储空间中,将像素差分值的绝对值的编码存入另一个存储空间中。
进一步的,图像解码时,对像素差分值的绝对值编码进行解码还原的方式是:对于当前像素块,首先调用存储空间中差分值的绝对值编码的比特位数标志符信息,解码得出60个1bit的标志符,通过计算60个比特位数标志符数值的总和来确定当前像素块的差分值的绝对值的编码方式,即得到当前像素块编码时对应采用的长比特位数值和短比特位数值;然后在存储空间中调用当前像素块的像素差分值的绝对值的编码信息,按照差分值的绝对值编码的比特位数标志符映射的长比特位数值或短比特位数值逐个对绝对值进行解码还原。
有益效果:本发明公开了一种Bayer域图像有损压缩方法,利用图像像素差分与图像区域特性的强烈关联性,通过对图像分块、逐块计算预测差分并分析差分特性,将图像差分值区分为边缘、角点区域与平坦区域,采取不同的编码模式进行差异化压缩编码。在具体编码模式中又通过对高差分值与低差分值像素分配不同权重的固定比特值,确保不同编码模式下差分值的绝对值的存储开销为定值且为8的倍数,实现对高差分像素信息进行无损编码,对低差分像素进行有损、无损混合编码,降低压缩模块在硬件中的设计难度,提升硬件运行速度,同时大幅提升含较多高频信息图像的压缩率。
具体的,采用本发明的图像有损压缩方法,一个8*8像素块包括的编码信息有:一块为RAM_1中存储的32bit的中央四个像素原值编码、60bit的差分值的正、负或零值信息编码以及60bit的差分值的绝对值比特位数标志符编码,共计152bit,这个开销值为8的倍数;另一块为RAM_2中存储的差分值的绝对值的编码信息,每个等级下的差分值的绝对值编码信息的开销也都为8的倍数,且为固定数值,这样可以降低硬件设计的难度并且提高硬件计算的速度。
具体实施方式
下面结合附图对本发明做更进一步的解释。
如图1所示,一种Bayer域图像有损压缩方法,以8bit位深的Bayer域图像作为实施压缩、解压缩的目标图像。其中,压缩过程包括如下步骤:
步骤1:获取目标图像,将目标图像按大小为8*8像素点矩阵分割为X个像素块,若分割时产生了不构成8*8像素点矩阵的若干个边缘像素点,则将这些像素点按8bit原值存入本方法所使用的第一个存储空间,即图1所示RAM_0中,总存储开销为Y*8bit,Y为这类型像素点的个数。
步骤2:对像素块进行逐块预测计算,得出各像素块中像素点的待编码值。
对于Bayer格式图像,每一个像素点只有红R、绿G、蓝B三种颜色通道中的一种,其中在2*2的窗口中放置2个G、1个R、1个B,故除保留8*8像素块中央的四个像素点的原值作为预测计算的依据外,对中央四个像素点以外的其他像素点进行预测计算,得出像素点对应的像素差分值。其中,预测计算为该像素点的像素值与间隔一像素的相同颜色通道像素点像素值做差值。
如图2所示,保留8*8像素块中央四个像素点的原值,对于其他像素点,以坐标为(i,j)的蓝B通道的一个像素点为例,其像素值为f(i,j),以下四种计算方式中的任一种计算该像素点对应的像素差分值dif(i,j):1、dif(i,j)=f (i,j-2)- f(i,j);2、dif(i,j)=f(i,j+2)- f(i,j);3、dif(i,j)=f (i-2,j)- f(i,j);4、dif(i,j)=f (i+2,j)- f(i,j)。故预测计算后,本发明的每个像素块均包含4个像素原值和60个像素差分值。
步骤3:对各像素块依次进行编码并存储,包括如下步骤:
步骤3.1:对像素块中央四个像素点的原值进行编码。
具体方式为:将四个像素点的原值直接转换为8bit二进制数进行存储,总开销为4*8=32bit,存入本方法所使用的第二个存储空间,即图1所示RAM_1中。如图3所示,按从左往右,从上往下的顺序将以上4个编码值依次存入RAM_1中,即存入的顺序为A1→ A2→ A3→ A4。
步骤3.2:对像素块中除中央四个像素点以外的其余60个像素点的像素差分值的正、负或0值属性进行编码。
具体方式为:对像素差分值属于正、负或0值进行编码时,正值及0值属性以1bit的‘1’进行编码,负值属性以1bit的‘0’进行编码,60个像素点的总开销为1*60=60bit,存入RAM_1中;如图3所示,按从左往右,从上往下的顺序将以上60个编码值存入RAM_1中,即存入的顺序为C1→ C2→ …→ C59→ C60。
步骤3.3:对像素块中除中央四个像素点以外的其余60个像素点的像素差分值的绝对值进行编码。
如图4所示,将像素差分值的绝对值按理论值大小分为第一至第七等级,对应的区间分别为:128-255,64-127,32-63,16-31,8-15,4-7,0-3。对于当前像素块,首先将60个像素点的差分值的绝对值从大到小排序并找出最大值D_MAX,然后根据该最大值D_MAX落入上述分级的等级,将该像素块中差分值的绝对值相对较大的M个值按照固定的长比特位数(ibit)进行二进制编码,其余N个绝对值按照固定的短比特位数(j bit)进行二进制编码,M+N=60。其中,按短比特位数(j bit)进行二进制编码时,若出现像素差分值的绝对值大于短比特位数(j bit)所能表示的最大值时,按该短比特位数(j bit)所表示的最大值对该绝对值进行二进制编码。本发明将长比特位数(i bit)设计为像素块各等级像素差分值的绝对值的上限,实际编码存储时,相对较大的像素差分值的绝对值实际是小于或等于各等级上限阈值的,等同于对相对较大的像素差分值的绝对值进行了无损编码压缩。
具体的,如图4所示,对于第一等级128-255,排序中前28个值按8比特位数进行编码,其他32个值按3比特位数进行编码;对于第二等级64-127,排序中前29个值按7比特位数进行编码,其他31个值按3比特位数进行编码;对于第三等级32-63,排序中前36个值按6比特位数进行编码,其他24个值按3比特位数进行编码;对于第四等级16-31,排序中前30个值按5比特位数进行编码,其他30个值按3比特位数进行编码;对于第五等级8-15,排序中前20个值按4比特位数进行编码,其他40个值按3比特位数进行编码;对于第六等级4-7,排序中前24个值按3比特位数进行编码,其他36个值按2比特位数进行编码;对于第七等级0-3,排序中前12个值按2比特位数进行编码,其他48个值按1比特位数进行编码。
最后,将60个像素点的像素差分值的绝对值编码存入本方法所使用的第三个存储空间,即图1所示RAM_2中。与各像素块中差分值正负值编码一致,如图3所示,按从左往右,从上往下的顺序将以上60个编码值存入RAM_2中,即存入的顺序为C1→ C2→ …→ C59→C60。
如图4所示,对于第一至第七等级,在RAM_2中,60个像素点的像素差分值的绝对值编码的总比特数限定为7个固定值,且都为8的倍数。
步骤3.4:为实现对压缩编码的解码还原,需对步骤3.3中像素块中各像素差分值的绝对值编码时具体使用的比特数情况利用比特位数标志符进行标记并编码存储。
具体方式为:当差分值的绝对值按短比特位数(j bit)进行编码时,将1bit的‘0’作为比特位数标志符;当差分值的绝对值按长比特位数(i bit)进行编码时,将1bit的‘1’作为比特位数标志符。此过程产生1*60=60bit的比特位数标志符编码开销,并存入RAM_1中。
如图5所示,以第一等级为例进行说明,对像素差分值的绝对值进行编码时,根据排序,将差分值的绝对值相对较小的N=32个差分值的绝对值归入数组L(O),按j=3bit固定比特位数进行编码,并以1bit的‘0’进行标记;将差分值的绝对值相对较大的M=28个差分值的绝对值归入数组H(P),按i=8bit固定比特位数进行编码,并以1bit的‘1’进行标记。数值下标O与P分别为各差分值的绝对值排序后的顺位。如图4所示,不同等级的8*8像素块中的60个像素差分值的绝对值对应的比特位数标志符的数值之和均不相同,这为后续解码还原时判断像素块的像素差分值的绝对值编码对应的等级提供了依据。与像素块中像素差分值的正、负或0值属性以及绝对值编码存储顺序一致,本发明对以上60个比特位数标志符按顺序存入RAM_1中,即存入的顺序为C1→ C2→ …→ C59→ C60。至此完成对一个8*8像素块的压缩编码。
需特别说明的是,如图4所示,第一至第四等级对应的像素差分值的绝对值最大值大于其他等级,根据数字图像处理相关理论,图像像素二维函数的一阶导数中的较大导数值一般指示图像像素的灰度过渡区域,即图像的边缘或者角点区域。说明第一至第四等级对应的像素块一般含有图像的边缘或角点信息。并且差分值的绝对值越高,对应像素点的边缘或者角点特征就越显著。本发明将第一至第四等级对应像素块的差分值的绝对值较大部分分配较长比特位数权重进行无损编码,极大程度保留了对应像素块的边缘或者细节信息。上述比特位数分配权重指的是在每个像素块的60个像素差分值的绝对值中,以长比特位数(i bit)进行二进制编码的M个数值占全部数值的数量比重,即M/60。
本发明通过大量实验论证,设计了契合绝大多数边缘或细节部位对应的8*8像素块差分分布特点的比特数分配权重,确保编码压缩后相关像素值出现极小异变,并且这类异变在视觉感官上难以察觉。同时,每个8*8像素块为对应的正方形像素块,如含有边缘或细节的像素点,一般为细条形或者随机点分布,像素块中其他像素点为图像的平坦部分,这些像素点的差分值的绝对值相对很小且占全块相当大一部分比例,编码比特位数可与边缘、细节像素的差分值的绝对值的编码比特位数存在较大差距,以节约更多的存储开销。对落入第一至第四等级的像素块,上述差距设计为2-5bit。通过对编码比特位数分配权重的大量实验调试,少数情况下,如图5所示,有且仅当差分值的绝对值排序后被归入数组L,但数值实际比特位数大于j bit时,数值会被强制截断为j bit所能表示的最大数值,造成不对图像质量造成易察影响的信息损失。通过在较大限度保证图像质量的前提下截断代表图像高频信息的高比特空间差分值,将大为提升对含高频信息图像的压缩率。
关于落入第五至第七等级的像素块,其各像素点对应的差分值的绝对值相对较小,一般对应图像的平坦区域,对以上等级的像素块中较大差分值的绝对值部分与较小差分值的绝对值部分同样分别使用固定的比特位数进行差异编码。与第一至第四等级的差分块不同的是,因为第五至第七等级的像素块即使在高比特位数编码部分使用的编码开销也相对较小,对低比特位数编码部分使用与高比特位数编码部分差距很小的位深编码,之于总开销的增量也相对有限,并且能够更大限度地保留原始像素差分信息。对第五至第七等级的像素块,上述差距设计为1bit。因强制截断比特位数造成信息损失的机率更低,对图像质量的形成的负面影响也更有限。
步骤4:重复步骤2-3,按规定顺序开展对分割得到的各像素块的编码及存储,直至所有像素块完成编码并将有关编码值存入RAM_1及RAM_2中。
解压缩过程包括如下步骤:
步骤5:调用RAM_1及RAM_2中的存储的像素块编码信息,逐个对像素块进行解码还原,包括:
步骤5.1:首先调用RAM_1中的前32bit编码信息,按照每8个bit数还原为一个数值的规则,依次解码还原每个8*8像素块中央部位的四个像素点的原值信息。
步骤5.2:在RAM_1中紧接调用后续60bit编码信息,对该像素块60个差分值的正、负或0值属性进行依次还原,对应的,对于存储为‘0’的编码值还原为负符号,对于存储为‘1’的编码值还原为正符号。
步骤5.3:紧接调用RAM_1中后续60 bit编码值,依次对各差分值的绝对值的比特位数标志符进行还原,按照图4所示,通过计算像素块60个比特位数标志符编码值对应数值的总和,以此确定所解码像素块所落入的分级等级。
步骤5.4:根据步骤5.3所确定的等级,按照图4所示,确定本像素块所编码的60个差分值的绝对值编码值总bit数w,在RAW_2中调用前w bit存储的数据作为本像素块差分值的绝对值的编码值。
步骤5.5:根据步骤5.3所解码得出的60个比特位数标志符,对步骤5.5中确定wbit的差分值的绝对值的编码值进行依次解码,还原出60个差分值的绝对值。结合图3所示,具体方式为:首先调用60个比特位数标志符中第一个值,如为‘0’,则调用w bit本块差分值的绝对值的编码值中前j bit位数值作为第一个差分值的绝对值的解码值;如为‘1’,则调用w bit本块差分值的绝对值的编码值中前i bit作为第一个差分值的绝对值的解码值。重复以上步骤完成本像素块60个差分值的绝对值的解码还原。
步骤5.6:因为各8*8像素块中的有关数值编码信息按图5所示的规定顺序定点存入相应RAM_1中的,所以上述步骤所解码还原的中心四个像素值原值、解码还原的60个差分值正负符与解码还原的60个差分值的绝对值,按照上述规定顺序进行依次匹配,以此对各像素块中差分值以及在像素块中的相应位置进行完整还原。
步骤6:根据步骤5所还原的数据,结合步骤2中进行差分预测的逆运算,还原得到各像素块的像素原值。
步骤7:重复步骤5-6,按顺序完成所有像素块的解码。
步骤8:调用RAM_0中存储为目标图像未成块像素,完成对目标图像所有像素的解码还原。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。