基于JPEG2000标准的贝尔图像压缩方法
技术领域
本发明属于图像处理技术领域,更进一步涉及图像压缩技术领域中的一种基于JPEG2000标准的贝尔图像压缩方法。本发明可用于遥感卫星中对贝尔图像进行压缩编码。
背景技术
由卫星相机获得的遥感图像分为黑白和彩色两种,目前卫星相机大多是轻小型低功耗面阵CMOS相机,该相机通过CMOS传感器上的贝尔滤波阵列获取红绿蓝三个谱段图像,再通过插值估计恢复成彩色图像。早期应用于遥感卫星CMOS相机贝尔Bayer图像压缩采用先压缩图像,后复原为彩色图像的方法,但压缩时却提取Bayer图像中的红绿蓝各分量分别进行压缩,没有考虑三色分量之间的颜色相关性,对分量中的冗余信息进行编码,压缩效率不高。许多研究人员针对这一问题,提出了一些算法,通过各种途径提高压缩效率。
北京空间机电研究所在其申请的专利文献“一种基于YUV变换的Bayer图像压缩方法”(专利申请号:CN 201010543504.X,公开号:CN 101977330 A)中公开了一种Bayer格式图像的压缩方法。该方法首先对贝尔Bayer图像进行空间变换,由三色空间转换为亮度色度空间,去除了三色分量间的颜色相关性,随后根据图像的复杂度进行自适应确定压缩比并进行变换和编码。该方法存在的不足之处是:该方法在进行空间变换时,只是简单地取绿色分量数据的平均值,这样会损失绿色分量的信息,导致压缩性能不高;而且该方法采用SPIHT压缩算法,抗误码性能较差。
Wang,Chengyou在其发表的论文“Bayer patterned image compression basedon wavelet transform and all phase interpolation”(IEEE,InternationalConference on Signal Processing IEEE,2013:708-711.)中公开了一种基于分层树集合分割排序SPIHT(Set Partitioning in Hierarchical Tree)算法的贝尔Bayer图像压缩方法。该方法首先对输入贝尔Bayer图像进行空间变换,由三色空间转换为亮度色度空间,然后分离亮度分量和色度分量,最后采用离散小波变换和SPIHT算法进行变换和编码。该方法虽然去除了贝尔Bayer图像三色分量间的颜色相关性,但是该方法仍然存在的不足之处是:该方法采用SPIHT压缩算法,抗误码性能较差,不适合遥感卫星的恶劣的环境。
发明内容
本发明的目的是针对上述现有技术的不足,提出了一种基于JPEG2000标准的贝尔Bayer图像压缩方法。
实现本发明目的的具体思路是:首先利用1×4整型离散余弦变换,减少贝尔Bayer图像4个颜色分量间的冗余信息,然后对离散余弦变换后的4个颜色分量数据分别进行小波变换、量化、T1编码,最后联合截取4个颜色分量的编码数据流,组织截取后每个颜色分量的编码数据流。
本发明实现的具体步骤包括如下:
(1)将待压缩贝尔Bayer图像输入到计算机内存中;
(2)计算目标码率T:
根据用户设定的压缩比r和待压缩贝尔Bayer图像的宽W、高H、像素位宽P,计算目标码率T;
(3)分离待压缩贝尔Bayer图像的颜色分量:
利用结构分离法,从待压缩贝尔Bayer图像中分离出4个子图像;
(4)对4个子图像进行1×4整型离散余弦变换:
(4a)从每个子图像中的相同位置各抽取一个像素点,将抽取的4个像素点组成一个1×4的像素块;
(4b)利用离散余弦变换公式,对1×4的像素块进行离散余弦变换,得到4个变换系数;
(4c)将4个变换系数放回对应像素点抽取时的原位置;
(4d)判断子图像中是否还有未抽取的像素点,若是,则执行步骤(4a);否则,得到4个离散余弦变换后的子图像,执行步骤(5);
(5)对离散余弦变换后的子图像进行小波变换:
任意选取一个离散余弦变换后的子图像,对所选子图像进行4级9/7提升小波变换,得到13个小波子带;
(6)对小波变换后的子图像中的每个小波系数进行量化:
对小波变换后的子图像中的每个小波系数,按小波系数所在的小波子带进行量化,将量化后的所有小波系数组成量化后的子图像;
(7)对量化后的子图像进行T1编码:
(7a)任选量化后的子图像中的一个小波子带,将所选小波子带分成含有多个量化系数的且大小相等的多个编码块;
(7b)任选一个编码块,将所选编码块中的量化系数按二进制位分成若干个位平面,从最高位平面开始,依次按照重要性传播通道、幅度细化通道、标志清除通道的3个编码通道顺序,对所选编码块中的量化系数进行位平面编码,得到上下文信息和判决位;
(7c)对上下文信息和判决位进行算术编码,得到所选编码块的各编码通道的率失真斜率、码流长度等信息和编码后的数据流;
(7d)判断是否选取完所有编码块,若是,则执行步骤(6e);否则,执行步骤(7b);
(7e)判断是否选取完所有小波子带,若是,则执行步骤(6f);否则,执行步骤(7a);
(7f)将该子图像所有小波子带的所有编码块的所有编码通道编码后的数据流,组成所选子图像的编码数据流;
(7g)判断是否还有离散余弦变换后的子图像没有进行小波变换,若是,则执行步骤(5);否则,得到4个量化后子图像的编码数据流,执行步骤(8);
(8)利用斜率门限公式,计算当前率失真斜率门限;
(9)联合截取4个量化后子图像的编码数据流:
(9a)从4个量化后子图像中选取一个子图像,截取所选图像中所有率失真斜率大于当前率失真斜率门限的编码通道的数据流,记录每个截取数据流的长度和截取数据流所在编码通道的信息;
(9b)将所有截取数据流长度累加,得到所选子图像截断数据流长度R1';
(9c)根据截取数据流所在编码通道的信息,对所选子图像进行Tag Tree编码,得到所选子图像包头估计数据流长度R1";
(9d)将所选子图像的截断数据码流长度和包头估计数据流长度相加,得到所选子图像的截断码率R1;
(9e)判断4个量化后子图像是否都被选取完,若是,则执行步骤(10);否则,执行步骤(9a);
(10)将4个量化后子图像的截断码率相加,得到总的截断码率R;
(11)判断总的截断码率R与目标码率T之间的误差是否大于100,若是,则执行步骤(12);否则,得到4个量化后子图像的截取数据流,执行步骤(14);
(12)判断总的截断码率R是否大于目标码率T,若是,用当前率失真斜率门限更新率失真斜率下限后执行步骤(8);否则,执行步骤(13);
(13)用当前率失真斜率门限更新率失真斜率上限后执行步骤(8);
(14)组织每个量化后子图像的截取数据流:
利用JPEG2000图像压缩系统中标准的码流组织模块,组织截取后的每个子图像的数据流,并依次写入压缩文件中;
(15)输出压缩文件。
本发明与现有技术相比具有以下优点:
第一,由于本发明利用1×4整型离散余弦变换,减少了贝尔Bayer图像4个颜色分量间的冗余信息,并联合截取4个颜色分量的编码数据流,克服了现有技术在进行空间变换时,会损失绿色分量的信息导致压缩性能不高的问题,使得本发明具有高压缩性能的优点。
第二,由于本发明将量化后的子图像中的小波子带分成若干个编码块,对每个编码块中的量化系数从最高位平面开始,依次按照重要性传播通道、幅度细化通道、标志清除通道的3个编码通道顺序进行比特平面编码,克服了现有技术中由于使用的压缩算法抗误码性差导致的不适合用于遥感卫星的问题,使得本发明具有良好的抗误码性能,可适合在环境恶劣的遥感卫星上使用。
附图说明
图1是本发明的流程图;
图2是本发明联合截取4个量化后子图像的编码数据流的示意图;
图3是本发明仿真实验的测试图;
图4是在不同压缩率下,分别采用本发明和现有技术对贝尔Bayer图像进行压缩的峰值信噪比对比图。
具体实施方式
下面结合附图,对本发明做详细的描述。
参照附图1,对本发明的实现步骤做详细的描述。
步骤1,将待压缩贝尔Bayer图像输入到计算机内存中。
步骤2,计算目标码率T。
根据用户设定的压缩比r和待压缩贝尔Bayer图像的宽W、高H、像素位宽P,计算目标码率T,计算公式为:
步骤3,分离待压缩贝尔Bayer图像的颜色分量。
利用结构分离法,从待压缩贝尔Bayer图像中分离出4个子图像。
所述的结构分离法是指,待压缩贝尔Bayer图像中奇数行偶数列的所有绿色分量组成第一个子图像,偶数行奇数列的所有绿色分量组成第二个子图像,所有红色分量组成第三个子图像,所有蓝色分量组成第四个子图像。
步骤4,对4个子图像进行1×4整型离散余弦变换:
从每个子图像中的相同位置各抽取一个像素点,将抽取的4个像素点组成一个1×4的像素块。
利用离散余弦变换公式,对1×4的像素块进行离散余弦变换,得到4个变换系数。
所述的离散余弦变换公式如下:
其中,y0表示对1×4的像素块进行离散余弦变换后的第一个像素点,x0、x1、x2和x3分别表示变换前的1×4的像素块中的第一个、第二个、第三个、第四个像素点,y1、y2分别表示变换后的第二个、第三个像素点,a表示第一个旋转因子,b表示第二个旋转因子,y3表示变换后的第四个像素点。
将4个变换系数放回对应像素点抽取时的原位置。
判断子图像中是否还有未抽取的像素点,若是,则执行本步骤的第1步;否则,得到4个离散余弦变换后的子图像,执行步骤5。
步骤5,对离散余弦变换后的子图像进行小波变换。
任意选取一个离散余弦变换后的子图像,对所选子图像进行4级9/7提升小波变换,得到13个小波子带。
步骤6,对小波变换后的子图像中的每个小波系数进行量化。
对小波变换后的子图像中的每个小波系数,按小波系数所在的小波子带进行量化,将量化后的所有小波系数组成量化后的子图像。
所述的量化是按照下式进行:
其中,q(i)表示对小波变换后的子图像中的第i个小波系数进行量化后的量化系数值,sign表示取元素符号操作,y(i)表示小波变换后的子图像中的第i个小波系数的值,|·|表示绝对值操作,Δ表示小波变换后的子图像中的第i个小波系数所在小波子带的量化阶数。
步骤7,对量化后的子图像进行T1编码。
任选量化后的子图像中的一个小波子带,将所选小波子带分成含有多个量化系数的且大小相等的多个编码块。
任选一个编码块,将所选编码块中的量化系数按二进制位分成若干个位平面,从最高位平面开始,依次按照重要性传播通道、幅度细化通道、标志清除通道的3个编码通道顺序,对所选编码块中的量化系数进行位平面编码,得到上下文信息和判决位。
对上下文信息和判决位进行算术编码,得到所选编码块的各编码通道的率失真斜率、码流长度等信息和编码后的数据流。
判断是否选取完所有编码块,若是,则执行本步骤的第5步;否则,执行本步骤的第2步。
判断是否选取完所有小波子带,若是,则执行本步骤第6步;否则,执行本步骤第1步。
将该子图像所有小波子带的所有编码块的所有编码通道编码后的数据流,组成所选子图像的编码数据流。
判断是否还有离散余弦变换后的子图像没有进行小波变换,若是,则执行步骤5;否则,得到4个量化后子图像的编码数据流,执行步骤8。
步骤8,利用斜率门限公式,计算当前率失真斜率门限。
所述的斜率门限公式如下:
S=(S0+S1)/2
其中,S表示当前截取时的率失真斜率门限,S0表示当前截取时的率失真斜率下限,初始值为0,S1表示当前截取时的率失真斜率上限,初始值为4个量化后子图像在T1编码中得到的最大的编码通道的率失真斜率。
步骤9,联合截取4个量化后子图像的编码数据流。
下面结合图2对联合截取4个量化后子图像的编码数据流的过程做进一步的描述。图2中横坐标为每个量化后子图像的编码块编号,纵坐标表示编码块的编码通道的率失真斜率取值范围,矩形块的面积表示编码通道的码流长度。
从4个量化后子图像中选取一个子图像,截取所选图像中所有率失真斜率大于当前率失真斜率门限的编码通道的数据流,即图2中位于率失真斜率门限以上的所有矩形块,记录每个截取数据流的长度和截取数据流所在编码通道的信息。
将所有截取数据流长度累加,得到所选子图像截断数据流长度R1'。
根据截取数据流所在编码通道的信息,对所选子图像进行Tag Tree编码,得到所选子图像包头估计数据流长度R1"。
将所选子图像的截断数据码流长度和包头估计数据流长度相加,得到所选子图像的截断码率R1。
判断4个量化后子图像是否都被选取完,若是,则执行步骤10;否则,执行本步骤第1步。
步骤10,将4个量化后子图像的截断码率相加,得到总的截断码率R。
步骤11,判断总的截断码率R与目标码率T之间的误差是否大于100,若是,则执行步骤12;否则,得到4个量化后子图像的截取数据流,执行步骤14。
步骤12,判断总的截断码率R是否大于目标码率T,若是,用当前率失真斜率门限更新率失真斜率下限后执行步骤8;否则,执行步骤13。
步骤13,用当前率失真斜率门限更新率失真斜率上限后执行步骤8。
步骤14,组织每个量化后子图像的截取数据流。
利用JPEG2000图像压缩系统中标准的码流组织模块,组织截取后的每个子图像的数据流,并依次写入压缩文件中。
步骤15,输出压缩文件。
下面结合仿真实验对本发明的效果做进一步的描述。
1.仿真实验条件:
本发明测试平台:Windows XP,测试工具为Visual Studio 2012。
2.实验内容与结果分析:
图3是本发明仿真实验的测试图。该测试图的分辨率为2048×2048像素。图4是在不同压缩率(67%,75%,83%,88%,92%,93%)下,分别采用本发明和现有技术对测试图进行压缩的峰值信噪比对比图。现有技术是指用JPEG2000算法分别压缩测试图中各颜色分量。图4中的横坐标为压缩率,纵坐标为峰值信噪比。从图4可以看出,压缩率在67%到93%范围内时,本发明的峰值信噪比较高,压缩性能得到了有效的提高。