【发明授权】一种基于FPGA实现的图像无损压缩方法_合肥埃科光电科技有限公司_201811064645.6 

申请/专利权人:合肥埃科光电科技有限公司

申请日:2018-09-12

公开(公告)日:2021-11-19

公开(公告)号:CN109379598B

主分类号:H04N19/44(20140101)

分类号:H04N19/44(20140101);H04N19/70(20140101);H04N19/182(20140101);H04N19/147(20140101);H04N19/42(20140101)

优先权:

专利状态码:有效-授权

法律状态:2021.11.19#授权;2019.03.19#实质审查的生效;2019.02.22#公开

摘要:本发明公开了一种基于FPGA实现的图像无损压缩方法,属于机器视觉的图像处理技术领域,包括对编码参数进行初始化为零,该编码参数包括预测行的数据、累积预测残差以及上下文组合累积出现次数;并选取两个参考像素点以根据两个参考像素点的像素值计算当前像素点的残差;根据当前像素点的像素值P与所述两个参考像素点的像素值的关系,选取相应的残差编码方法对当前像素点的残差进行编码;在所述待压缩图像的所有像素点的残差编码完成后,对所述编码参数进行更新。本发明在FELICS算法的基础上改进优化,保证图像压缩比的同时提高上位机的解压缩速度,并使得算法运行速度能与千兆以太网传输速度相匹配。

主权项:1.一种基于FPGA实现的图像无损压缩方法,其特征在于,包括:对编码参数进行初始化为零,该编码参数包括预测行的数据、累积预测残差C[delta]以及上下文组合累积出现次数N[delta],该预测行为待压缩图像开始编码前的一行缓冲区,在一个当前编码块编码完成后,将当前编码块的第二行作为下一个编码块残差计算的预测行;对所述待压缩图像进行逐像素点扫描,并选取两个参考像素点以根据两个参考像素点的像素值计算当前像素点的残差;根据当前像素点的像素值P与所述两个参考像素点的像素值的关系,选取相应的残差编码方法对当前像素点的残差进行编码,其中在所述当前像素点的像素值P落在[L,H]范围内时,采用修正的二元编码方法对所述当前像素点的残差R进行编码;在所述当前像素点的像素值P<L或P>H时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码;在所述当前像素点的像素值P落在[L,H]范围内时,采用修正的二元编码方法对所述当前像素点的残差R进行编码,具体为:采用如下公式计算修正后的残差R以及修正后的编码参数:range=delta+1, R`=R-L,式中,range表示范围长度,delta=H-L,logofrange表示范围长度的对数向上取整,R`表示修正后的残差;将修正后的残差R`和0结合作为码值,并将该码值写入logofrange+1位;在所述待压缩图像的所有像素点的残差编码完成后,对所述编码参数进行更新,具体包括:对每种delta值下像素点出现的次数进行更新N[delta]=N[delta]+1;对每种delta值下残差的累计值进行更新C[delta]=C[delta]+R;将所述待压缩图像按像素行数进行划分,将两行数据作为一个block进行编码;在当前block进行编码完成后,将当前block的第二行作为下一个block残差计算的预测行;所述在当前像素点的像素值P<L或P>H时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码,包括:以设定的参数m为单位,并结合任意一个非负正整数将待编码的残差分成两部分,两部分为组的编号和残差在编组中的位置;对于组的编号使用一元编码进行编码,对于残差在编组中的位置采用固定长度的二进制编码进行编码;所述参数m是2的k次幂,在所述两个参考像素点的像素值之差在设定的范围内时,k取固定值;在所述两个参考像素点的像素值之差超过设定的范围时,k初始值取零,并在满足N[delta]k<C[delta]时,k值加1。

全文数据:一种基于FPGA实现的图像无损压缩方法技术领域本发明涉及机器视觉的图像处理技术领域,特别涉及一种基于FPGA实现的图像无损压缩方法。背景技术图像无损压缩技术旨在通过降低图像数据冗余度来获取高压缩比并可以100%重建原图像,该技术在图像数据传输、医学图像以及遥感图像等领域具有广泛的应用,对于图像传输系统,使用无损压缩技术可以提高传输链路的吞吐率。为了满足实时性要求,压缩算法必须具备足够低的复杂度。图像的像素值信息是一组非负整数,对于深度为N的灰度图像而言,它的像素值范围在[0,2N-1]内,无损压缩的性能就是由这组数据的信息熵决定的。常见的无损压缩编码有预测编码、熵编码、基于字典匹配的编码如LZW算法、游程编码等,实际运用过程中往往是多种编码方法的组合。联合图像专家组曾经制定了无损图像压缩标准,采用的是LOCO-I压缩算法,这种算法主要由以下四个部分组成:待编码像素的选择器、像素值预测器、预测残差计算器、预测残差编码器。通过像素预测值的合理选择、预测残差的精准建模以及高效的熵编码,最终能达到理想的压缩、解压缩效果。与之类似的压缩算法主要有CALIC、FELICS。现有的无损压缩技术在保证较高压缩比的前提下其解压速度无法与千兆以太网传输速度相匹配,即使解压速度能与千兆以太网匹配但压缩比较低。发明内容本发明的目的在于提供一种基于FPGA实现的图像无损压缩方法,以在千兆以太网传输速率下保证上位机端解码的实时性。为实现以上目的,本发明采用一种基于FPGA实现的图像无损压缩方法,包括:对编码参数进行初始化为零,该编码参数包括预测行的数据、累积预测残差C[delta]以及上下文组合累积出现次数N[delta],该预测行为待压缩图像开始编码前的一行缓冲区;对所述待压缩图像进行逐像素点扫描,并选取两个参考像素点以根据两个参考像素点的像素值计算当前像素点的残差;根据当前像素点的像素值P与所述两个参考像素点的像素值的关系,选取相应的残差编码方法对当前像素点的残差进行编码;在所述待压缩图像的所有像素点的残差编码完成后,对所述编码参数进行更新。进一步地,所述参考像素点的选取标准为:若所述当前像素点为第一行的第一或第二个像素点,则将当前像素点的像素值编入码流;若所述当前像素点为第一行非第一或第二个像素点,则将当前像素点左边的两个像素点作为所述参考像素点;若所述当前像素点为第一列第一行像素点,则将当前像素点正上方的像素点和右上方的像素点作为所述参考像素点;若所述当前像素点为非第一行和第一列的像素点,则将当前像素点左方的像素点和正上方的像素点作为所述参考像素点。进一步地,所述对待压缩图像进行逐像素点扫描,并选取两个参考像素点以根据两个参考像素点的像素值计算当前像素点的残差,包括:将所述两个参考像素点的像素值进行比较,记较大值者为H,较小值者为L;若L≤P≤H,则所述当前像素点的残差R=P-L;若P<L,则所述当前像素点的残差R=L–P-1;若P>H,则所述当前像素点的残差R=P-H-1。进一步地,所述根据当前像素点的像素值与所述两个参考像素点的像素值的关系,选取相应的残差编码方法对当前像素点的残差进行编码,包括:在所述当前像素点的像素值P落在[L,H]范围内时,采用修正的二元编码方法对所述当前像素点的残差R进行编码;在所述当前像素点的像素值P<L或P>H时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码。进一步地,所述在当前像素点的像素值P落在[L,H]范围内时,采用修正的二元编码方法对所述当前像素点的残差进行编码,包括:采用如下公式计算修正后的残差R以及修正后的编码参数:range=delta+1,R`=R-L,式中,range表示范围长度,delta=H-L,logofrange表示范围长度的对数向上取整,R`表示修正后的残差;将修正后的残差R`和0结合作为码值,并将该码值写入logofrange+1位。进一步地,所述在当前像素点的像素值P<L或P>H时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码,还包括:在当前像素点的像素值P<L时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码,并将2比特的二进制码10写入编码流以表征P小于下界;在在当前像素点的像素值P>H时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码,并将2比特的二进制码11写入编码流以表征P大于下界。进一步地,所述在当前像素点的像素值P<L或P>H时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码,包括:以设定的参数m为单位,并结合任意一个非负正整数将待编码的残差分成两部分,两部分为组的编号和残差在编组中的位置;对于组的编号使用一元编码进行编码,对于残差在编组中的位置采用固定长度的二进制编码进行编码。进一步地,所述参数m是2的k次幂,在所述两个参考像素点的像素值之差在设定的范围内时,k取固定值;在所述两个参考像素点的像素值之差超过设定的范围时,k初始值取零,并在满足N[delta]H,此时令残差R=P-H-1,采用golomb-rice编码,并将2bit‘11’写入编码流表征P大于上界,并对残差R采用golomb-rice编码。进一步地,对R采用修正的二元编码的过程为:采用如下公式获取修正后的R以及编码参数:range=delta+1,R`=R-1,式中,range表示范围长度,delta=H-L,logofrange表示范围长度的对数,R`表示修正后的残差。其中,range等于1表征L=H,而当前像素值又在此范围内,所以,这三个像素点值相同,可以不写入编码流,在解码端用参考像素代替这个点的像素值即可。最终的编码就是一个‘0’和修正后的R结合的码值,合计写入logofrange+1位。进一步地,对残差R采用golomb-rice编码的过程为:给定一个参数m,以m为单位,给待编码的数字分组,对于任意一个非负正整数y,将它分为两部分:所在组的编号和它在该组中的位置。实际上是y除以m的商和余数。对于商使用一元编码,余数使用固定长度的二进制编码。任意非负整数num的一元编码就是num个‘0’后面紧跟一个‘1’。在golomb-rice编码中,参数m是2的k次幂,取余数r的二进制的低log2m位即k位,作为余数的码字。例如残差值为10,k取2,则m=4,计算得到商为2,余数为2。对商采用一元编码,结果为‘001’,对余数取低k位,结果为‘10’,则该像素值的编码比特流为‘00110’。可见,一个8位数据被压缩到只有5位。进一步地,所述参数m是2的k次幂,对于一般图像k可以取固定值大大提高压缩、解压缩效率,在两个参考像素点的像素值之差超过设定的范围时,k初始值取零,并在满足N[delta]k<C[delta]时,k值加1。需要说明的是,本实施例中对编码参数k的选择与传统方法不同,传统FELICS算法是对所有可能的k值计算累计编码长度,选择其中最短的累计长度对应的k作为当前像素残差的编码参数,这种做法比较消耗FPGA缓存空间,且效率不高。本实施例参考JPEGLS标准的上下文参数思想对其进行了改进,用fork=0;N[delta]kC[delta];k++;计算当前k值,可以节省不少编解码时间,且最终几乎不会对压缩比产生影响。特别地,对于一般图像而言,即使是局部复杂度很高的图像,相邻像素点的像素值差别也不大,可以使用固定k值进行golomb-rice编码,省去了计算k值的环节,可以进一步提升压缩算法的速度。本实施例中是对原有的传统FELICS算法精简,不再考虑边缘阈值的计算,可显著提升效率,而原算法中对所有可能的k值计算累计编码长度,选择其中最短的累计长度对应的k作为当前像素残差的编码参数,这种做法比较消耗FPGA缓存空间,且效率不高。进一步地,如图3所示,本实施例编码过程放在FPGA中实现,由于存储器空间有限,每次只读入两行数据block进行编码,存储器还需要分配一定内存空间存储预测行像素值、上下文参数C、N以及每个像素编码的剩余位数。为了便于上位机作并行化解压缩处理,一幅完整图像按照行数拆分成四部分portion进行编码处理。各部分视为独立图像,即只在一个portion中执行编码相关参数的更新。一个portion编码完成后,重新初始化片上存储器中的参数,对每种delta值下像素点出现的次数进行更新N[delta]=N[delta]+1;对每种delta值下残差的累计值进行更新C[delta]=C[delta]+R;一个block编码完成后,将当前block的第二行作为下一个block残差计算的预测行。四个portion的编码流头部都添加一个字节的标识符从1~4表征这是一幅完整图像的第几部分。由于是每读入两行数据进行编码,所以对于这两行数据要在编码流头部增加相关信息是否为该portion的第一个block、该block编码长度、编码后多余位数,具体的编码流结构如图4所示。需要说明的是,因为采用的是比特流编码,在一个portion编码结束后,可能会有多余的编码位数,要查看此时的剩余编码位数,因为是比特流编码,所以可能剩余的位数不足一个字节,这里需要添加最后一个字节进入编码流防止编码信息不完整。本实施例公开的基于FPGA实现的快速图像无损压缩算法,包括使用按行扫描、逐像素编码的方式,选择相邻的两个像素点用来计算当前像素的预测残差。所述编码思想是用一比特位表示当前像素是否在两个相邻像素值的范围内,如果在范围内,对预测残差采用修正的二元编码;若不在范围内,额外使用一比特位指明当前像素值低于下界或者高于上界,对预测残差采用golomb-rice编码。这种算法具有良好的上下文参数信息以及低复杂度的编码运算,能够获得较理想的压缩比和压缩、解压缩速度。而且经过实际测试,使用3幅4M大小的图像进行压缩和解压缩测试,实验图像如图5至图7所示。首先使用传统FELICS算法进行压缩、解压缩实验,压缩时间和解压缩时间取五次实验平均值,传统FELICS算法压缩比和运行时间结果如表1所示。操作系统环境:windows764位,编程语言:C,编译器:visualstudio2013CPU:corei32100。表1实验图像a实验图像b实验图像c压缩比1.802.421.97压缩时间ms366.12313.77340.20解压时间ms355.82302.60321.61由结果可知,传统FELICS算法能达到理想的压缩比,但是运行速度尚不能满足工程需要。使用本实施例的改进算法结合并行化计算,选择自适应golomb-rice编码,压缩时间和解压缩速度取五次实验平均值,每次实验循环解压500次取平均值,自适应golomb-rice编码压缩比和运行时间结果如下表所示。表2实验图像a实验图像b实验图像c压缩比1.662.281.80压缩时间ms180.23143.39156.85解压速度MBs106.8118.4122.8比较表1和表2的实验结果可知,采用改进后的算法,压缩比虽然略有下降,但是运行速度有了显著提高。在自适应golomb-rice编码中每个像素点都要通过取对数的方式计算编码参数k值,为了进一步提升解压速度,将k设为固定值取k=1。固定k值的golomb-rice编码压缩比和运行时间测试结果如下表3所示:表3实验图像a实验图像b实验图像c压缩比1.722.181.88压缩时间ms169.86130.77143.16解压速度MBs124.6137.6141.0选择maple.bmp这幅图在不同CPU型号的计算机上进行比对测试,并进行压力测试循环解压过程中同时进行不相关的复杂数学运算,不同PC上运行的解压速度单位:MBs如下表4所示:表4Corei32100Corei34160XeonE51620常规测试124.6149.7206.1压力测试87.8120.1179.8由表3、表4实验结果可知,对于常规图像而言,使用固定参数的golomb-rice编码也能得到较好的压缩比,且解压速度可进一步提高。在压力测试下,速度会有所下滑,且和处理器性能有直接关系。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

权利要求:1.一种基于FPGA实现的图像无损压缩方法,其特征在于,包括:对编码参数进行初始化为零,该编码参数包括预测行的数据、累积预测残差C[delta]以及上下文组合累积出现次数N[delta],该预测行为待压缩图像开始编码前的一行缓冲区;对所述待压缩图像进行逐像素点扫描,并选取两个参考像素点以根据两个参考像素点的像素值计算当前像素点的残差;根据当前像素点的像素值P与所述两个参考像素点的像素值的关系,选取相应的残差编码方法对当前像素点的残差进行编码;在所述待压缩图像的所有像素点的残差编码完成后,对所述编码参数进行更新。2.如权利要求1所述的基于FPGA实现的图像无损压缩方法,其特征在于,所述参考像素点的选取标准为:若所述当前像素点为第一行的第一或第二个像素点,则将当前像素点的像素值编入码流;若所述当前像素点为第一行非第一或第二个像素点,则将当前像素点左边的两个像素点作为所述参考像素点;若所述当前像素点为第一列第一行像素点,则将当前像素点正上方的像素点和右上方的像素点作为所述参考像素点;若所述当前像素点为非第一行和第一列的像素点,则将当前像素点左方的像素点和正上方的像素点作为所述参考像素点。3.如权利要求1所述的基于FPGA实现的图像无损压缩方法,其特征在于,所述对待压缩图像进行逐像素点扫描,并选取两个参考像素点以根据两个参考像素点的像素值计算当前像素点的残差,包括:将所述两个参考像素点的像素值进行比较,记较大值者为H,较小值者为L;若L≤P≤H,则所述当前像素点的残差R=P-L;若P<L,则所述当前像素点的残差R=L–P-1;若P>H,则所述当前像素点的残差R=P-H-1。4.如权利要求3所述的基于FPGA实现的图像无损压缩方法,其特征在于,所述根据当前像素点的像素值与所述两个参考像素点的像素值的关系,选取相应的残差编码方法对当前像素点的残差进行编码,包括:在所述当前像素点的像素值P落在[L,H]范围内时,采用修正的二元编码方法对所述当前像素点的残差R进行编码;在所述当前像素点的像素值P<L或P>H时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码。5.如权利要求4所述的基于FPGA实现的图像无损压缩方法,其特征在于,所述在当前像素点的像素值P落在[L,H]范围内时,采用修正的二元编码方法对所述当前像素点的残差进行编码,包括:采用如下公式计算修正后的残差R以及修正后的编码参数:range=delta+1,R`=R-L,式中,range表示范围长度,delta=H-L,logofrange表示范围长度的对数向上取整,R`表示修正后的残差;将修正后的残差R`和0结合作为码值,并将该码值写入logofrange+1位。6.如权利要求4所述的基于FPGA实现的图像无损压缩方法,其特征在于,所述在当前像素点的像素值P<L或P>H时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码,还包括:在当前像素点的像素值P<L时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码,并将2比特的二进制码10写入编码流以表征P小于下界;在在当前像素点的像素值P>H时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码,并将2比特的二进制码11写入编码流以表征P大于下界。7.如权利要求4所述的基于FPGA实现的图像无损压缩方法,其特征在于,所述在当前像素点的像素值P<L或P>H时,采用golomb-rice编码方法对所述当前像素点的残差R进行编码,包括:以设定的参数m为单位,并结合任意一个非负正整数将待编码的残差分成两部分,两部分为组的编号和残差在编组中的位置;对于组的编号使用一元编码进行编码,对于残差在编组中的位置采用固定长度的二进制编码进行编码。8.如权利要求7所述的基于FPGA实现的图像无损压缩方法,其特征在于,所述参数m是2的k次幂,在所述两个参考像素点的像素值之差在设定的范围内时,k取固定值;在所述两个参考像素点的像素值之差超过设定的范围时,k初始值取零,并在满足N[delta]k<C[delta]时,k值加1。9.如权利要求1所述的基于FPGA实现的图像无损压缩方法,其特征在于,所述对编码参数进行更新,包括:对每种delta值下像素点出现的次数进行更新N[delta]=N[delta]+1;对每种delta值下残差的累计值进行更新C[delta]=C[delta]+R;将所述待压缩图像按像素行数进行划分,将两行数据作为一个block进行编码;在当前block进行编码完成后,将当前block的第二行作为下一个block残差计算的预测行。10.如权利要求9所述的基于FPGA实现的图像无损压缩方法,其特征在于,还包括:在所述待压缩图像编码完成后,判断剩余编码位数是否足够一个字节;若是不足一个字节,则添加一个字节进入编码流。

百度查询: 合肥埃科光电科技有限公司 一种基于FPGA实现的图像无损压缩方法