发明内容
发明目的:针对上述现有技术,提出一种高压缩率的图像压缩及解压缩方法,满足图像高压缩率和低损失要求。
技术方案:一种高压缩率的图像压缩及解压缩方法,包括压缩过程和解压缩过程;
所述压缩过程包括:
A1:对图像进行边缘检测并形成边缘图像;
A2:对边缘图像进行边缘补全;
A3:通过模板对图像进行滑动采样;所述模板为bayer格式的4×4像素块,其中每个2×2单元采样一个通道,所述4×4像素块中对R,B,G1,G2四个通道分别进行采样;
A4:形成压缩图像并进行存储,所述压缩图像与原图像大小相同;其中,对于步骤A3中的采样值,在压缩图像的相同位置存储各采样值;对于非采样点,根据是否为边缘图像点进行信息存储,边缘点存储为1,非边缘点存储为0;
所述解压缩过程采用基于边缘的双线性插值,对于所述压缩图像的每个像素点,对其R,G,B三个通道分别进行插值,以此直接解压得到RGB格式的图像。
进一步的,步骤A2中,对边缘图像进行边缘补全包括如下步骤:
A2-1:边缘间断点检测;
A2-2:边缘间断点连接,包括如下步骤:
A2-2-1:边缘方向判定;
在边缘图像中,对于一个边缘间断点,记为P,取以其为中心的n×n像素块,记为I,边缘方向判定包括如下步骤:
A2-2-1-1:确定边缘间断点P在像素块I中所在的连通域L;
A2-2-1-2:记边缘间断点P的坐标为(x p ,y p ),根据连通域L,计算边缘方向向量;
A2-2-2:边缘间断点连接;
以点P为起点,沿向量方向进行延长,若延长线中与其他边缘点交集非空则将边缘间断点P到第一个交点之间的线段补全为边缘点。
进一步的,步骤A2-2-2采取水平或竖直方向搜索的方式进行实现,包括如下步骤:
A2-2-2-1:根据边缘方向向量中x d ,y d 的大小关系,确定搜索方向;
当时,沿水平方向向右搜索;
当时,沿水平方向向左搜索;
当时,沿竖直方向向右搜索;
当时,沿竖直方向向右搜索;
A2-2-2-2:连接点搜索;
在进行水平方向搜索时,首先将向量以水平方向归一化为,其中根据定义/>的取值为±1,表示方向;从点P(x p ,y p )出发,对于i=1,2...m,m为搜索范围大小,依次检测点/>和点是否为边缘点,其中[x]表示对x向下取整;当搜索过程中出现边缘点时,记录为交点Q(x q ,y q ),并结束搜索将/>修正为/>,然后对于,依次将边缘图像中的点/>改为边缘点,其中round(·)为四舍五入函数;若i遍历1到m后未搜索到边缘点,则停止搜索,即此处边缘无法补全,直接进行步骤A3;
在进行竖直方向搜索时,首先,将向量以竖直方向归一化为,其中根据定义/>的取值为±1,表示方向;从点P(x p ,y p )出发,对于i=1,2...m,m为搜索范围大小,依次检测点/>和点是否为边缘点,其中[x]表示对x向下取整;当搜索过程中出现边缘点时,记录为交点Q(x q ,y q ),并结束搜索将/>修正为/>,然后对于,依次将边缘图像中的点/>改为边缘点,其中round(·)为四舍五入函数;若i遍历1到m后未搜索到边缘点,则停止搜索,即此处边缘无法补全,直接进行步骤A3。
进一步的,所述解压缩过程中,对于处于整幅压缩图像的上、下、左、右边缘位置的像素点,其待插值的通道值分别取为与其最近的一个对应通道采样点的像素值;对于所有不处于整幅压缩图像的上、下、左、右边缘位置的像素点,则按从上至下,从左至右依次选取各像素点作为当前待插值点,包括如下步骤:
B1:确定用于对应通道插值的采样点;
对于当前待插值点,对于待插值的各通道,分别选取与该点距离最近的对应通道的四个采样点,用于当前待插值点对应通道插值;
B2:分别以同通道的四个采样点为顶点的5×5像素块作为基本单位,对该基本单位中各像素进行各通道的插值;
B3:通过步骤B1和B2已分别获得了各像素点的R通道、B通道、G1通道和G2通道的像素值,对G1和G2通道取平均得到G通道像素值,即得到了还原后的RGB图像。
进一步的,步骤B2中,对于任一通道的插值计算,记该5×5像素块中第i行第j列的像素坐标为(i,j),记像素点为P ij ,其待插值像素值为p ij ,各像素点在压缩图像中对应的存储值为q ij ;该5×5像素块中P 11,P 15,P 51,P 55为存储的采样点,这四个点对应通道的插值像素值直接采用原存储值,由于该基本单位中其余点的存储值q ij 值为0或1,因此其对应的p ij 值通过插值进行还原;插值计算时依次进行水平和垂直方向的线性插值。
进一步的,步骤B2中,依次进行水平和垂直方向的线性插值包括如下步骤:
进行水平方向插值:当水平连线上不存在边缘点时,直接使用线性插值;当水平连线上存在边缘点时,则边缘点左侧取左侧采样点像素值,边缘点右侧取右侧采样点像素值;
在水平方向插值完成后,在此基础上进行竖直方向的插值:当竖直连线上不存在边缘点时,直接使用线性插值;当竖直连线上存在边缘点时,则边缘点上方取上方采样点像素值,边缘点下方取下方采样点像素值。
进一步的,步骤B2中,对各像素点依次进行插值计算时,若对应通道的插值已在之前像素点插值计算过程中计算得到,则不再重复计算该通道的插值。
有益效果:本方法引入边缘信息进行存储,利用边缘同侧图像块的相似性进行空域压缩。通常的压缩对空域信息的利用方式为考虑局部的相似性。本方法通过引入边缘检测,将局部相似性扩展为联通图像块的相似性,节省存储资源的同时减少了采样导致的边缘失真。本方法对图像信息可以较好地保留,信息损失较小,且能够实现较高压缩率。
实施方式
下面结合附图对本发明做更进一步的解释。
如图1所示,一种高压缩率的图像压缩及解压缩方法,其压缩过程包括如下步骤:
A1:对图像进行边缘检测并形成边缘图像。
对图像的边缘检测已有成熟的算法,使用目前主流的边缘检测算法,例如canny算法,可以得到一个和原图像大小相同,且边缘宽度为一个像素的图像。其中,表示检测为边缘的点取值为1,称为边缘点。其余点取值为0,称为非边缘点。由此步骤得到的图像称为边缘图像。对于RGB/bayer格式的图像,均可以使用相应的现有边缘检测方法。
A2:对边缘图像进行边缘补全。
本方法需要利用边缘同侧的相似性进行压缩和解压缩,在压缩时存储边缘信息和采样值,在解压缩时,对不含边缘的图像块进行一般的线性插值,对含有边缘的图像块则对边缘两侧分别根据采样点取值,以保证边缘被正确还原而不产生失真。封闭的边缘有利于提高压缩效果,因此对边缘进行补全,具体方法如下:
A2-1:边缘间断点检测。
对于边缘图像,以边缘点为中心的3×3像素块中,若中心点周围有且只有一个其它边缘点,则将该中心的边缘点称为“边缘间断点”。采用如图2所示的滤波核对边缘图像的3*3像素块进行卷积,选择其中取值为2的点,即为间断点。特别地,根据图像信号采集原理,边缘中不应存在单像素的“孤立点”,因此将卷积后取值为1的“孤立点”从边缘图像中去除。
A2-2:边缘间断点连接,包括如下步骤:
A2-2-1:边缘方向判定。
在边缘图像中,对于一个边缘间断点,记为P,取以其为中心的n×n像素块,记为I,n的取值一般为7或9,对该像素块进行如下操作:
A2-2-1-1:确定边缘间断点P在像素块I中所在的连通域。
连通域一般分为4邻域和8邻域,这里选择的连通域为8邻域。提取连通域的算法有二次扫描法和种子填充法等现有方法,记得到的连通域为L。
A2-2-1-2:计算边缘方向向量。
记边缘间断点P的坐标为(x p ,y p ),根据连通域L,计算边缘方向向量,如下式所示:
其中,L i 为连通域L中的点,为点的坐标,d为距离函数,W是一个单调递减的函数,即连通域中距离点P越远的点在计算方向向量时权重越小。通常情况取高斯核,即:
其中,σ为决定权重受距离影响衰减程度的参数,σ越小衰减程度越大,一般取值范围为[1,5]。
下面结合图3示例对步骤A2-2-1进行说明:
图3的(a)给出了边缘图像中的一个9*9像素块I,其中心点为边缘间断点P。图3的(b)用灰色标出了点P所在的连通域L。图3的(c)中向量表示计算求得的点P的边缘方向向量。
A2-2-2:边缘间断点连接。
以点P为起点,沿向量方向进行延长,若延长线中与其他边缘点交集非空则将边缘间断点P到交点之间的线段补全为边缘点。具体地,出于节省计算资源的考虑,采取水平或竖直方向搜索的方式进行实现,按以下步骤进行:
A2-2-2-1:确定搜索方向。
根据边缘方向向量中x d ,y d 的大小关系,确定搜索方向。首先,由于在步骤A2-1中,已确保P不是孤立点,因此x d ,y d 不同时为0。
当时,沿水平方向向右搜索;
当时,沿水平方向向左搜索;
当时,沿竖直方向向右搜索;
当时,沿竖直方向向右搜索。
A2-2-2-2:连接点搜索。
在进行水平方向搜索时,首先将向量以水平方向归一化为,其中根据定义/>的取值为±1,表示方向;从点P(x p ,y p )出发,对于i=1,2...m,m为搜索范围大小,一般取值与n相同,依次检测点和点/>是否为边缘点,其中[x]表示对x向下取整。当搜索过程中出现边缘点时,记录为交点Q(x q ,y q ),并结束搜索将/>修正为,然后对于/>,依次将边缘图像中的点改为边缘点,其中round(·)为四舍五入函数。若i遍历1到m后未搜索到边缘点,则停止搜索,即此处边缘无法补全,直接进行后续步骤。
在进行竖直方向搜索时,首先,将向量以竖直方向归一化为,其中根据定义/>的取值为±1,表示方向;从点P(x p ,y p )出发,对于i=1,2...m,m为搜索范围大小,一般取值与n相同,依次检测点和点/>是否为边缘点,其中[x]表示对x向下取整。当搜索过程中出现边缘点时,记录为交点Q(x q ,y q ),并结束搜索将/>修正为,然后对于/>,依次将边缘图像中的点改为边缘点,其中round(·)为四舍五入函数。若i遍历1到m后未搜索到边缘点,则停止搜索,即此处边缘无法补全,直接进行后续步骤。
图3的(d)用灰色标出了示例中得到的交点Q,图3的(e)为最终补全结果。
A3:通过模板对图像进行滑动采样。
根据原图像格式的不同,所采样的颜色通道也不相同。
(1)对于bayer格式的图像,如图5的(a)和图5的(c)所示分别为一个8×8的“RGGB”和“GRBG”格式排列的像素块,以4×4的像素块为单位,根据如图4所示模板,分别采样图5的(a)和图5的(c)中每个4×4单元中与如图4所示模板中标为灰色的点相同位置的通道值,对应得到如图5的(b)和图5的(d)所示的采样结果。选取图4所示模板的目的在于,一个像素点的四个通道中仅采样一个通道值,一个4×4的像素块中R,B,G1,G2四个通道分别进行了采样,使得各通道信息均得到了采样保留,降低解压缩还原后因信息损失造成的失真,且存储信息在空间分布上均匀,提高采样质量。
(2)对于RGB格式的图像,如图6所示,左侧为RGB的原始图像,截取了其中一个4×4的像素块,实际为R、G、B三个通道的三个4×4像素块。在存储时,仍按照图4所示的模板对三个4×4像素块进行采样,具体地,三个4×4像素对应图4所示模板中标为灰色的四个位置中,每个位置分别仅选取一个通道,其中关于中心对称的两个位置选取G通道存储,关于中心对称的另两个位置分别选取R和B通道,将采样值存储在一个4×4像素块中,得到图6右侧所示的采样存储结果。
需要说明的是,在采样时,除直接存储采样像素点对应的通道值外,还可以选择求取该通道周围同通道的平均值作为采样值的方法。
A4:形成压缩图像并进行存储。压缩图像与原图像大小相同,通过如下方式得到:
A4-1:存储采样点。
对于步骤A3中的采样值,在压缩图像的相同位置存储各采样值。
A4-2:对于非采样点,根据是否为边缘图像点进行信息存储。
具体的,对于压缩图像中各采样点之外的其他像素点,使其取值与步骤A2边缘间断点补全后得到的边缘图像取值相同,即边缘点存储为1,非边缘点存储为0。
以原图像各像素值存储采用8比特数据为例,选取一个4×4的图像块,图7显示了本发明压缩图像的存储方式,图7中的数字代表该像素点存储时的比特数。
由此,可以得到一幅与原图像大小相同的压缩图像,计算得到压缩率约为34.4%。如果对压缩率有更高要求,可以进一步降低采样率,以达到更优的压缩率。
图像解压缩过程包括如下步骤:
本发明中,解压缩为基于边缘的双线性插值。对于压缩图像的每个像素点,需要对其R,G,B三个通道分别进行插值,以此直接解压得到RGB格式的图像。对于处于整幅压缩图像的上、下、左、右边缘位置的像素点,其待插值的通道值分别取为与其最近的一个对应通道采样点的像素值即可。对于所有不处于整幅压缩图像的上、下、左、右边缘位置的像素点,则按从上至下,从左至右依次选取各像素点作为当前待插值点,进行如下操作:
B1:确定用于对应通道插值的采样点。
对于当前待插值点,对于待插值的各通道,分别选取与该点距离最近的对应通道的四个采样点,用于当前待插值点对应通道插值。以如图8所示“GRBG”格式排列的压缩图像为例进行说明,设图中标注“*”号的为当前待插值点,图8的(a)至图8的(d)中标灰的像素点分别为该待插值像素点周围最近的四个R、B、G1、G2通道的采样点,即压缩过程中步骤A3确定的采样点,分别用于解压缩过程中各通道插值。
B2:分别以图8中确认的同通道的四个采样点为顶点的5×5像素块作为基本单位,对该基本单位中各像素进行各通道的插值。下面以R通道插值为例说明插值方式,图9、图10分别代表了该基本单位中有边缘点和无边缘点时的情况。记该5×5像素块中第i行第j列的像素坐标为(i,j),记像素点为P ij ,其待插值像素值为p ij ,各像素点在压缩图像中对应的存储值为q ij 。当前P 11,P 15,P 51,P 55为存储的采样点,这四个点R通道的插值像素值直接采用原存储值,即,由于该基本单位中其余点的存储值q ij 值为0或1,因此其对应的p ij 值需要通过插值进行还原。为便于计算,依次进行水平和垂直方向的线性插值,且两者可以交换顺序。
B2-1:对像素点p ij ,i=1,5进行水平方向插值:
其意义为,当水平连线上不存在边缘点时,直接使用一般的线性插值。当水平连线上存在边缘点时,则边缘点左侧取左侧采样点像素值,右侧取右侧采样点像素值。需要指出,对于非常密集的边缘,如图片中精细纹理处,此方法会产生一定程度的失真。对大部分图像,这种失真在可接受范围内,若果对质量有更高要求,可通过改变采样率或引入自适应策略解决。
B2-2:竖直方向插值。
在水平方向插值完成后,p ij ,i=1,5已通过水平插值得到,在此基础上进行竖直方向的插值,从而得到p ij ,i=2,3,4:
与水平方向插值同理,当竖直连线上不存在边缘点时,直接使用一般的线性插值。当竖直连线上存在边缘点时,对于第1列和第5列边缘点上方的p ij 取上方采样点像素值,下方取下方采样点像素值;对于第2列至第4列边缘点上方的p ij 取上方经步骤B2-1得到的插值,下方取下方经步骤B2-1得到的插值。
对各像素点依次进行插值计算时,若对应通道的插值已在之前像素点插值计算过程中计算得到,则不再重复计算该通道的插值。
B3:获得解压缩后的RGB图像。
通过步骤B1和B2已分别获得了各像素点的R通道、B通道、G1通道和G2通道的像素值。对G1和G2通道取平均得到G通道像素值,即得到了还原后的RGB图像。
若想得到bayer格式的解压缩图像,只需对RGB按通道进行下采样即可。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。