本发明属于图像处理技术领域,更进一步涉及图像压缩技术领域中的一种基于spiht(setpartitioninginhierarchicaltrees)标准的小波系数存取方法。本发明可用于遥感图像压缩方法中对中间参数的存储及读取的硬件实现。
背景技术:
随着卫星遥测图像分辨率的不断扩大、尺寸不断扩大,遥感图像的数据量正呈现飞速的增长。该算法实现主要有存储小波系数和对小波系数进行按照“树”形结构重新排列过程,达到满足spiht编码的顺序,对数据进行重要性扫描过程,然后对重要性结果进行编码,并将编码的bit数据进行拼接,输出至片外存储,达到压缩的目的。
哈尔滨工业大学在其申请的专利文献“应用于jpeg2000的基于二维离散小波逆变换的硬件设计方法”(公开号:cn104539973a,申请日:2015年04月22日)中公开了一种应用于jpeg2000的基于二维离散小波逆变换的硬件设计方法。该方法通过对协议中给定公式进行等价变形,打破奇偶数据计算时的相互等待过程,自由地进行分步计算,减少冗余存储。针对变形公式各自的特点,提出了交替扫描和栅栏型扫描两种数据读取方式,并针对并行变换行列一维方向分别设计基于流水的数据流,使硬件结构关键路径仅为一个乘法器。但是,该方法仍然存在的不足之处是,仅将单级小波变换结果独立存储,没有多级小波变换小波系数之间的相关性。
西安电子科技大学在其拥有的专利技术“基于jpeg2000标准的自适应存储器和存储方法”(公开号:cn102695060b,授权日:2014年08月03日,申请日:2012年06月13日)中公开了一种基于jpeg2000标准的存储方法。该方法对图像压缩过程中的数据进行存储,其存储器包括内部存储单元、外部存储单元、地址产生单元和复选单元。对于低分辨率图像压缩时用内部存储单元存储小波系数、长度斜率信息和码流;在高分辨率图像压缩时,用内部存储单元存储小波系数和长度斜率信息,用外部存储单元存储码流;地址产生单元根据输入图像的分辨率自适应地产生该三种数据的存储地址和读取地址,并指定内部存储单元中可以存储码流的存储区域;复选单元根据输入图像的分辨率自适应的从内部存储单元或外部存储单元中读取数据。但是该方法仍然存在的不足之处是,对于小波系数的存储及读取并没有存储位置关系的调整,不利于编码下一步的进行。
技术实现要素:
本发明的目的是针对现有技术基于小波变换的图像处理方法中,小波系数的存取直接影响图像处理整体的复杂度,不合理的设计方案会导致资源的浪费和更大的时延。本发明设计了一种新的存储和读取小波系数的方案,尤其针对spiht标准图像压缩的实现,大大降低了小波变换后抽树的复杂度,硬件实现简单,资源消耗减少,效率得到提升。
本发明实现的具体步骤包括如下:
1.一种基于spiht标准的小波系数存取方法,包括如下步骤:
(1)输入遥感图像:
(1a)以行为单位输入串行的大小为64*64矩阵的遥感图像;
(1b)输入与遥感图像同步的数据有效信号,将信号值为1表示为数据有效,信号值为0表示行与行之间64个时钟的无效时间;
(2)对遥感图像进行第一级小波变换:
(2a)从输入遥感图像数据中依次选取一行数据;
(2b)按照spiht标准,对输入的遥感图像数据进行第一级小波变换,产生第一级小波系数,将小波系数的低频子带、水平子带、垂直子带和对角子带四个子带分别存入与之对应的四个dpram内部存储器;
(2c)轮询读取存储水平子带dpram内部存储器、垂直子带dpram内部存储器和对角子带dpram内部存储器;
(2d)将小波系数存入sdram外部存储器中,将sdram外部存储器连续突发长度属性设置为48个,数据位宽属性设置为32bit后将读出的交叉数据连续写入sdram外部存储器中;
(2e)判断输入遥感图像64行数据是否选取完,若是,则执行步骤(6);否则,执行步骤(2a);
(3)对第一级小波系数的低频子带进行第二级小波变换:
(3a)从输入的第一级小波低频系数中依次选取一行小波系数;
(3b)按照spiht标准,对第一级小波系数的低频子带进行第二级小波变换,产生第二级小波系数,将第二级小波系数中的低频子带、水平子带、垂直子带和对角子带四个子带分别存入另外四个与之对应的dpram内部存储器;
(3c)轮询读取存储水平子带dpram内部存储器、垂直子带dpram内部存储器和对角子带dpram内部存储器,每个dpram内部存储器读取16个32bit数据;
(3d)将小波系数存入sdram外部存储器中,将sdram外部存储器连续突发长度属性设置为24个,数据位宽属性设置为32bit后将读出的交叉数据连续写入sdram外部存储器中;
(3e)判断64行的第一级低频小波系数是否选取完,若是,则执行步骤(6);否则,执行步骤(3a);
(4)对第二级小波系数低频子带进行第三级小波变换:
(4a)从输入的第二级小波低频系数中依次选取一行小波系数;
(4b)按照spiht标准,对第二级小波系数的低频子带进行第三级小波变换,产生第三级小波系数,将第三级小波系数的低频子带、水平子带、垂直子带和对角子带四个子带分别存入第二级小波变换的四个与之对应的dpram内部存储器;
(4c)轮询读取存储水平子带dpram内部存储器、垂直子带dpram内部存储器和对角子带dpram内部存储器,每个dpram内部存储器读取8个32bit数据;
(4d)将小波系数存入sdram外部存储器中,将sdram外部存储器连续突发长度属性设置为12个,数据位宽属性设置为32bit后将读出的交叉数据连续写入sdram外部存储器中;
(4e)判断64行的第二级低频小波系数是否选取完,若是,则执行步骤(6);否则,执行步骤(4a);
(5)对第三级小波系数低频子带进行第四级小波变换:
(5a)从输入的第三级小波低频系数中依次选取一行小波系数;
(5b)按照spiht标准,对第三级小波系数的低频子带进行第四级小波变换,产生第四级小波系数,将第四级小波系数的低频子带、水平子带、垂直子带和对角子带四个子带分别存入第二级的四个与之对应的dpram内部存储器;
(5c)轮询读取存储水平子带dpram内部存储器、垂直子带dpram内部存储器和对角子带dpram内部存储器,每个dpram内部存储器读取2个32bit数据;
(5d)将小波系数存入sdram外部存储器中,将sdram外部存储器连续突发长度属性设置为8个,数据位宽属性设置为32bit后将读出的交叉数据连续写入sdram外部存储器中;
(5e)判断64行的第三级低频小波系数是否选取完,若是,则执行步骤(6);否则,执行步骤(5a);
(6)使用抽树规则从sdram外部存储器读取第一级小波系数:
(6a)从sdram外部存储器读取第一级小波系数4颗树的数据量;
(6b)将数据存入dpram内部存储器的前48*8个地址,空闲16*8个地址;
(7)使用抽树规则从sdram外部存储器读取第二级小波系数:
(7a)从sdram外部存储器读取第二级小波系数8颗树的数据量;
(7b)将数据存入空闲的16*8个地址之后的48*4个地址,空闲16*4个地址;
(8)使用抽树规则从sdram外部存储器读取第三级小波系数:
(8a)从sdram外部存储器读取第三级小波系数8颗树的数据量;
(8b)将数据存入空闲的16*4个地址之后的24*2个地址,空闲8*2个地址;
(9)使用抽树规则从sdram外部存储器读取第四级小波系数:
(9a)从sdram外部存储器读取第四级小波系数8颗树的数据量;
(9b)将数据存入空闲的8*2个地址之后的16*1个地址。
与现有技术相比,本发明具有以下优点:
第一,本发明使用将四级小波系数交叉写入外部存储器的方法存储四级小波系数,根据小波系数的特性,按照交叉存储方式,分配存储空间,克服了现有技术中仅将单级小波变换结果独立存储,没有多级小波变换小波系数之间的相关性不足,使得本发明具有高效的存储小波系数效率的优点。
第二,本发明使用抽树规则读取小波系数,根据小波变换之后抽树过程中对系数融合的要求进行读取,克服了现有技术中,对于小波系数的读取没有存储位置关系的调整,不利于编码下一步的进行的不足,使得本发明具有提高编码效率的优点。
附图说明
图1为本发明的流程图;
图2为本发明小波系数片内存储地址划分示意图。
具体实施方式
下面结合附图对本发明做进一步描述。
参照附图1,本发明具体实施步骤如下。
步骤1,输入遥感图像。
以行为单位输入串行的大小为64*64矩阵的遥感图像,遥感图像中的每个像素点为16bit,行与行之间有64个时钟的无效时间。
输入与遥感图像同步的数据有效信号,将信号值为1表示为数据有效,信号值为0表示行与行之间64个时钟的无效时间。
步骤2,对遥感图像进行第一级小波变换。
第一步,从输入遥感图像数据中依次选取一行数据。本发明中共进行四级小波变换,该过程的宏观过程如图2所示。
第二步,按照spiht标准,对输入的遥感图像数据进行第一级小波变换,产生第一级小波系数,将小波系数的低频子带、水平子带、垂直子带和对角子带四个子带分别存入与之对应的四个dpram内部存储器。
第三步,轮询读取存储水平子带dpram内部存储器、垂直子带dpram内部存储器和对角子带dpram内部存储器。从每个dpram内部存储器读取16个地址的小波系数,每个地址的数据为32bit,每个地址的小波系数为16bit,共读取32个小波系数。
第四步,将小波系数存入sdram外部存储器中,将sdram外部存储器连续突发长度属性设置为48个,数据位宽属性设置为32bit后将读出的交叉数据连续写入sdram外部存储器中。
第五步,判断输入遥感图像64行数据是否选取完,若是,则执行步骤6;否则,执行本步骤第一步。
步骤3,对第一级小波系数的低频子带进行第二级小波变换。
第一步,从输入的第一级小波低频系数中依次选取一行小波系数。
第二步,按照spiht标准,对第一级小波系数的低频子带进行第二级小波变换,产生第二级小波系数,将第二级小波系数中的低频子带、水平子带、垂直子带和对角子带四个子带分别存入另外四个与之对应的dpram内部存储器。
第三步,轮询读取存储水平子带dpram内部存储器、垂直子带dpram内部存储器和对角子带dpram内部存储器,每个dpram内部存储器读取16个32bit数据。
第四步,将小波系数存入sdram外部存储器中,将sdram外部存储器连续突发长度属性设置为24个,数据位宽属性设置为32bit后将读出的交叉数据连续写入sdram外部存储器中。
第五步,判断64行的第一级低频小波系数是否选取完,若是,则执行步骤6;否则,执行本步骤第一步。
步骤4,对第二级小波系数低频子带进行第三级小波变换。
第一步,从输入的第二级小波低频系数中依次选取一行小波系数。
第二步,按照spiht标准,对第二级小波系数的低频子带进行第三级小波变换,产生第三级小波系数,将第三级小波系数的低频子带、水平子带、垂直子带和对角子带四个子带分别存入第二级小波变换的四个与之对应的dpram内部存储器。第二级第三级第四级数据量均为上一级的一半,在此处第二级第三级第四级小波系数复用同一组dpram内部存储器。
第三步,轮询读取存储水平子带dpram内部存储器、垂直子带dpram内部存储器和对角子带dpram内部存储器,每个dpram内部存储器读取8个32bit数据。
第四步,将小波系数存入sdram外部存储器中,将sdram外部存储器连续突发长度属性设置为12个,数据位宽属性设置为32bit后将读出的交叉数据连续写入sdram外部存储器中。
第五步,判断64行的第二级低频小波系数是否选取完,若是,则执行步骤6;否则,执行本步骤的第一步。
步骤5,对第三级小波系数低频子带进行第四级小波变换。
第一步,从输入的第三级小波低频系数中依次选取一行小波系数。
第二步,按照spiht标准,对第三级小波系数的低频子带进行第四级小波变换,产生第四级小波系数,将第四级小波系数的低频子带、水平子带、垂直子带和对角子带四个子带分别存入第二级的四个与之对应的dpram内部存储器。
第三步,轮询读取存储水平子带dpram内部存储器、垂直子带dpram内部存储器和对角子带dpram内部存储器,每个dpram内部存储器读取2个32bit数据。
第四步,将小波系数存入sdram外部存储器中,将sdram外部存储器连续突发长度属性设置为8个,数据位宽属性设置为32bit后将读出的交叉数据连续写入sdram外部存储器中。
第五步,判断64行的第三级低频小波系数是否选取完,若是,则执行步骤6;否则,执行本步骤的第一步。
步骤6,使用抽树规则从sdram外部存储器读取第一级小波系数。
从sdram外部存储器读取第一级小波系数4颗树的数据量。从sdram外部存储器读取8行数据,每行读取48个地址数据,数据位宽为32bit,每棵树的数据量为64个,三个子带的数据量为192个,共4颗树的数据量。
将数据存入dpram内部存储器的前48*8个地址,空闲16*8个地址。每次读取不同级的数据量并不是2的整数次幂,存储时要对dpram内部存储器的地址进行划分,对于同一级的系数进行连续的存储,不同级之间存储空间需要留有空闲地址以满足2的整数次幂要求。
步骤7,使用抽树规则从sdram外部存储器读取第二级小波系数。
从sdram外部存储器读取第二级小波系数8颗树的数据量。从sdram外部存储器读取4行数据,每行读取48个地址数据,数据位宽为32bit,每棵树的数据量为16个,三个子带的数据量为48个,共8颗树的数据量。
将数据存入空闲的16*8个地址之后的48*4个地址,空闲16*4个地址。
步骤8,使用抽树规则从sdram外部存储器读取第三级小波系数。
从sdram外部存储器读取第三级小波系数8颗树的数据量。从sdram外部存储器读取2行数据,每行读取24个地址数据,数据位宽为32bit,每棵树的数据量为4个,三个子带的数据量为12个,共8颗树的数据量。
将数据存入空闲的16*4个地址之后的24*2个地址,空闲8*2个地址。
步骤9,使用抽树规则从sdram外部存储器读取第四级小波系数。
从sdram外部存储器读取第四级小波系数8颗树的数据量。从sdram外部存储器读取1行数据,每行读取16个地址数据,数据位宽为32bit,每棵树的数据量为1个,四个子带的数据量为4个,共8颗树的数据量。将数据存入空闲的8*2个地址之后的16*1个地址。
下面结合图2对本发明的四级小波系数的存放方式做如下描述。在dpram内部存储器中,从0地址开始,前48*8个地址存放第一级小波系数,之后的16*8个地址为空闲地址,之后的48*4个地址存放第二级小波系数,之后的16*4个地址为空闲地址,之后的24*2地址存放第三级小波系数,之后的8*2个地址为空闲地址,之后的8*1个地址存放第四级小波系数。