首页> 中国专利> 一种Tag-Tree编码的实现系统及方法

一种Tag-Tree编码的实现系统及方法

摘要

本发明提出一种Tag‑Tree编码的实现系统及方法,可对给定范围内图像分辨率自适应的Tag‑Tree编码进行加速。实现步骤为:设定参数;Tag‑Tree生成模块连续生成图像的所有Tag‑Tree;编码信息生成模块将生成树层级控制模块得到的当前Tag‑Tree的子带码块行数和列数以及总层级数传给编码层级控制模块;Tag‑Tree编码模块在生成下一个Tag‑Tree的同时,编码上一个Tag‑Tree,并输出编码内容和编码长度到编码输出BRAM;Tag‑Tree编码模块将存到编码输出BRAM的编码内容和编码长度进行分离并输出到码流组织模块。

著录项

  • 公开/公告号CN108513130A

    专利类型发明专利

  • 公开/公告日2018-09-07

    原文格式PDF

  • 申请/专利权人 西安电子科技大学;

    申请/专利号CN201810315285.6

  • 申请日2018-04-10

  • 分类号H04N19/147(20140101);H04N19/184(20140101);H04N19/63(20140101);H04N19/96(20140101);

  • 代理机构61205 陕西电子工业专利中心;

  • 代理人陈宏社;王品华

  • 地址 710071 陕西省西安市雁塔区太白南路2号

  • 入库时间 2023-06-19 06:29:52

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-10-08

    授权

    授权

  • 2018-10-09

    实质审查的生效 IPC(主分类):H04N19/147 申请日:20180410

    实质审查的生效

  • 2018-09-07

    公开

    公开

说明书

技术领域

本发明属于数字图像压缩编码技术领域,更进一步涉及一种符合JPEG2000标准的Tag-Tree编码的实现系统及方法,可完成对于给定范围内任意分辨率图像的Tag-Tree编码的快速实现,适用于各种数字图像芯片的压缩编码。

背景技术

随着多媒体和网络技术的发展及其在医学影像、遥感图像和数字图像/视频传输等方面的应用,以往的静态图像压缩标准JPEG,已经无法当前市场和实际应用下的高效压缩、实时传输与高效存储的要求。作为目前国际上最新的静止图像压缩通用标准,JPEG2000取代了传统的JPEG。

JPEG2000静态图像压缩编码标准,其功能模块如图1所示,包括依次连接的预处理模块、离散小波变换模块、EBCOT编码模块。原始图像输入至预处理模块后被分割成若干个图像片;离散小波变换模块对各个图像片进行小波变换后得到小波系数和零比特平面信息,并将零比特平面信息输出;EBCOT编码模块将小波子带划分为码块来进行内嵌比特位平面编码、MQ编码、率失真优化截取和码流组织,最终生成符合JPEG2000标准的文件。

EBCOT编码模块包括Tier1内嵌比特位平面算术编码模块和Tier2率失真优化截取模块。Tier2率失真优化截取模块决定每个码块对最终压缩码流的贡献,其结构如图2所示,包括依次连接的斜率计算模块、斜率截取模块、Tag-Tree模块和码流组织模块。

在Tier2率失真优化截取模块中,Tag-Tree模块对斜率截取模块输出的包含信息和离散小波变换模块输出的零比特平面信息都采用不定长编码方式来有效降低码块间的信息冗余,即采用分级方式来表示一个二维非负整型序列。传统的Tag-Tree编码系统包括Tag-Tree生成模块和Tag-Tree编码模块,在传统系统中,存储器的分布是分散的,对于存储功能的划分很模糊。

传统的Tag-Tree编码方法仅适用于固定分辨率图像,处理过程包括分时段完成的Tag-Tree的生成阶段和Tag-Tree的编码阶段,Tag-Tree的生成阶段是通过对固定分辨率图像的包含信息、零比特平面信息序列进行连续处理,产生逐级递减的分辨率,最终形成一棵树;Tag-tree的编码阶段是对Tag-tree的节点进行一系列的判决,并对需要编码的父子节点对进行差值编码,且编码阶段须先定位起始编码父子节点对,再沿着从根节点到叶节点方向进行差值编码,导致Tag-Tree编码的速度十分缓慢。

为了克服传统Tag-Tree编码方法存在的缺陷,研发人员通过参数化设计系统,使得系统先根据输入的参数对码块的宽度和高度进行判断,再根据判断结果计算当前子带的码块行数和列数,并根据计算得到的结果完成在给定范围内任意分辨率图像的Tag-Tree生成阶段和Tag-Tree生成编码阶段,同时在编码阶段,

通过计算编码起始层级来定位起始编码父子节点对的方式,或者在状态机定位起始编码父子节点对的同时进行反向差值编码的方式,加速了传统编码的过程。但是存在不足的是,现有技术中的Tag-Tree生成阶段和Tag-Tree编码阶段仍然是分时段完成的,使得图像的Tag-Tree编码的速度较慢。

发明内容

本发明的目的在于克服上述现有技术的不足,提出一种符合JPEG2000标准的Tag-Tree编码实现系统及方法,旨在实现在给定范围内任意分辨率图像的Tag-Tree编码,并提高Tag-Tree编码的速度。

为实现上述目的,本发明采取的技术方案为:

一种Tag-Tree编码的实现系统,包括通过FPGA实现逻辑功能的Tag-Tree生成模块、Tag-Tree编码模块和Tag-Tree存储器控制模块,其中:

Tag-Tree生成模块,包括生成树层级控制模块、父节点层级生成模块和编码信息生成模块,其中:

生成树层级控制模块,用于计算各个小波子带的码块行数和列数、当前Tag-Tree的总层级数和各层的行数和列数,并根据计算结果,实现对整幅图像每个子带的Tag-Tree生成流程的控制;

父节点层级生成模块,用于通过生成树层级控制模块的控制,读出Tag-Tree当前层的子节点后输出,同时根据读出的Tag-Tree当前层的子节点生成父节点后输出,并产生当前Tag-Tree生成的结束信号;

编码信息生成模块,用于在当前Tag-Tree生成后,将生成树层级控制模块计算得到的当前Tag-Tree的码块行数和列数以及总层级数传给Tag-Tree编码模块;

Tag-Tree编码模块,包括编码层级控制模块和相邻层级编码模块,其中:

编码层级控制模块,用于将当前编码父子节点对分配给相邻层级编码模块,同时计算父节点BRAM的写地址和编码结果BRAM的写地址;

相邻层级编码模块,用于根据编码标志和包含信息,对编码层级控制模块分配的当前编码父子节点对进行差值编码,同时计算当前叶节点对应的编码长度和下一个父节点的层数,并将叶节点对应的编码父子节点对差值编码的累计结果和编码长度输出到编码结果BRAM,同时将下一个父节点的层数反馈给编码层级控制模块;

Tag-Tree存储器控制模块,用于对包含信息BRAM、零比特平面BRAM、生成树缓存BRAM1、生成树缓存BRAM2、叶节点BRAM1、父节点BRAM1、叶节点BRAM2、父节点BRAM2和编码输出BRAM进行实例化,并在叶节点BRAM1和叶节点BRAM2中选择当前叶节点BRAM,同时在父节点BRAM1和父节点BRAM2中选择当前父节点BRAM′。

上述Tag-Tree编码的实现系统,所述父节点层级生成模块,包括相邻层级读写模块和父节点值生成模块,其中:

相邻层级读写模块,用于对生成树缓存BRAM1和生成树缓存BRAM2进行读写使能控制和读写地址计算;

父节点值生成模块,用于根据相邻层级读写模块输出的读写使能,对当前Tag-Tree中对应于同一父节点的相邻叶节点进行比较,并将比较得到的较小值作为候选父节点值或者父节点值存入生成树缓存BRAM1或者生成树缓存BRAM2。

上述Tag-Tree编码的实现系统,所述父节点层级生成模块和编码信息生成模块,其在生成树层级控制模块的控制下被多次复用;所述相邻层级编码模块,其在编码层级控制模块的控制下被多次复用。

一种Tag-Tree编码的实现方法,包括如下步骤:

(1)设定Tag-Tree编码参数:

用户根据工程需要设定Tag-Tree编码所需的参数:小波变换最高级数、码块的宽度和高度、系统所支持的最大分辨率下第一级子带的各层父节点存放首地址和各级子带的叶节点存放首地址;

(2)父节点层级生成模块在生成树层级控制模块的控制下,以流水方式连续生成整幅图像所有子带的Tag-Tree:

(2a)生成树层级控制模块对子带的级数和类型进行更新,并累计当前生成树编号:

生成树层级控制模块按照步骤(1)设定的小波变换最高级的LL子带到第一级的HH子带的顺序,对子带的级数和类型进行更新,得到当前子带的级数和类型,并累计当前生成树编号,其中当前子带的级数和类型的初始值为小波变换最高级的LL子带,当前生成树编号的初始值为0;

(2b)Tag-Tree存储器控制模块对步骤(2a)得到的当前生成树编号是否为偶数进行判断,若是,则将叶节点BRAM1确定为当前叶节点BRAM,同时将父节点BRAM1确定为当前父节点BRAM′,否则将叶节点BRAM2中确定为当前叶节点BRAM,同时将父节点BRAM2确定为当前父节点BRAM′;

(2c)生成树层级控制模块计算当前子带码块的行数和列数以及当前Tag-Tree总层级数,并将当前层数设定为0:

生成树层级控制模块在Tag-Tree存储器控制模块执行步骤(2b)的同时,根据从斜率截取模块输出的图像宽度和高度、步骤(1)设定的码块宽度和高度以及步骤(2a)得到的当前子带级数,计算出当前子带码块的行数和列数以及当前Tag-Tree总层级数,并将当前层数设定为0;

(2d)父节点层级生成模块先连续读出当前Tag-Tree的叶节点,再将读出的叶节点连续写入当前叶节点BRAM,并将生成树缓存BRAM1作为生成树缓存BRAM″:

父节点层级生成模块先根据当前子带码块的行数和列数以及当前子带的级数和类型,从步骤(1)设定的叶节点存放首地址开始,按先列后行的顺序,从零比特平面BRAM或者包含信息BRAM中连续读出当前Tag-Tree的叶节点,再将读出的叶节点连续写入当前叶节点BRAM,并根据当前层数为0,将生成树缓存BRAM1作为生成树缓存BRAM″;

(2e)父节点层级生成模块连续生成子节点对应的父节点,并将父节点写入生成树缓存BRAM″:

(2e1)相邻层级读写模块先将生成树缓存BRAM″的写使能进行产生并输出,再将子节点的行地址计数和列地址计数分别右移一位,拼接成父节点写地址,并将拼接结果输出到生成树缓存BRAM″;

(2e2)父节点值生成模块对相邻四个子节点中的低地址的两个子节点进行比较,并将比较得到的较小值作为父节点候选值,按照步骤(2e1)得到的写使能和写地址存入生成树缓存BRAM″;

(2e3)当父节点值生成模块遍历到高地址的两个子节点时,将高地址的两个数据的较小值和缓存的候选父节点值进行比较,并将比较得到的最小值作为父节点,按照步骤(2e1)得到的写使能和写地址存入生成树缓存BRAM″;

(2f)生成树层级控制模块判断当前层数与步骤(2c)得到的总层级数是否相等,若是,则将当前Tag-Tree生成的结束信号输出,并执行步骤(2g),否则执行步骤(2h);

(2g)编码信息生成模块将步骤(2c)得到的当前子带码块的行数和列数以及Tag-Tree总层级数输出到Tag-Tree编码模块;同时生成树层级控制模块判断当前图像所有子带的Tag-Tree是否生成完毕,若是,则当前图像的Tag-Tree生成过程结束,否则执行步骤(2a);

(2h)生成树层级控制模块将当前层数加一,并根据当前层数和步骤(2c)得到的当前子带码块的行数和列数,计算出当前层的行数和列数,同时判断当前层数是否为偶数,若是,则将生成树缓存BRAM1作为生成树缓存BRAM″,并将生成树缓存BRAM2作为生成树缓存BRAM″′,否则将生成树缓存BRAM2作为生成树缓存BRAM″,并将生成树缓存BRAM1作为生成树缓存BRAM″′;

(2i)相邻层级读写模块根据当前层的行数和列数对生成树缓存BRAM″′的读地址进行计算,并根据当前层数产生生成树缓存BRAM″′的读使能;

(2j)父节点层级生成模块连续对当前父节点BRAM′的写数据进行产生并输出后,执行步骤(2e):

父节点层级生成模块先设定父节点编码标志为0,再根据步骤(2i)得到的读使能和读地址,从生成树缓存BRAM″′中连续读出上一层的父节点,并将父节点编码标志和父节点进行拼接后,将拼接结果连续写入当前父节点BRAM′,其对应的写地址等于步骤(1)设定的当前层数对应的父节点存放首地址加上步骤(2i)得到的生成树缓存BRAM″′的读地址,最后将读出的父节点作为当前层的子节点,并执行步骤(2e);

(3)Tag-Tree编码模块对当前Tag-Tree进行编码:

(3a)编码层级控制模块连续分配编码父子节点对:

编码层级控制模块在接收到生成树层级控制模块输入的当前Tag-Tree生成的结束信号后,根据编码信息生成模块输出的当前子带的码块行数和列数,以及相邻层级编码模块反馈的父节点层级数,通过从当前叶节点BRAM读取叶节点、从当前父节点BRAM′读取父节点和调用相邻层级编码模块输入的父节点,将编码父子节点对连续分配给相邻层级编码模块;

(3b)相邻层级编码模块先对当前编码父子节点对是否为当前叶节点对应的起始编码父子节点对进行判断,再对父节点编码标志进行更新,并输出父节点写使能、父节点值和父节点层级数,同时对需要编码的当前编码父子节点对进行编码,并对编码长度进行累计;

(3c)编码层级控制模块在相邻层级编码模块输出的父节点写使能的同时,输出父节点写地址;

(3d)相邻层级编码模块判断步骤(3b)确定的当前叶节点对应的起始编码父子节点对是否编码完成,若是,将当前叶节点的编码内容和编码长度输出到编码输出BRAM,同时将编码内容和编码长度的写使能输出到编码输出BRAM和编码层级控制模块,并执行步骤(3e),否则执行步骤(3b);

(3e)编码层级控制模块在相邻层级编码模块输出编码内容和编码长度的写使能的同时,对编码内容和编码长度的写地址进行计算,并在计算结果输出到编码输出BRAM后,判断当前Tag-Tree的所有叶节点的编码内容和编码长度是否都输出到编码输出BRAM,若是,执行步骤(3f),否则执行步骤(3a);

(3f)Tag-Tree编码模块判断当前Tag-Tree编码的对象是包含信息还是零比特平面信息,若为包含信息,则对编码内容和编码长度进行分离,并将分离后的编码内容和编码长度输出到码流组织模块,若为零比特平面信息,则将编码内容和编码长度直接输出到码流组织模块。

本发明与现有技术相比,具有以下优点:

第一,本发明中编码信息生成模块将当前子带码块的行数和列数以及Tag-Tree总层级数输出到Tag-Tree编码模块,同时生成树层级控制模块判断当前图像所有子带的Tag-Tree是否生成完毕,从而能够在生成下一个子带树的同时对上一子带进行编码,克服了现有技术中将建树过程和编码过程分时段完成造成的浪费时间资源的问题,有效减少了Tag-Tree编码的时间消耗。

第二,本发明编码层级控制模块通过从当前叶节点BRAM读取叶节点、从当前父节点BRAM′读取父节点和调用相邻层级编码模块输入的父节点,将编码父子节点对连续分配给相邻层级编码模块,克服了现有技术中复用状态机控制各叶节点线路方式造成的浪费时间资源的问题,进一步减少了Tag-Tree编码的时间消耗。

第三,本发明所设定的参数包括小波变换最高级数、码块的宽度和高度、系统所支持的最大分辨率下第一级子带的各层父节点存放首地址和各级子带的叶节点存放首地址,不需要存储各级父节点的首地址,节约了存储资源。

第四,本发明中在建树过程中复用了父节点层级生成模块和编码信息生成模块,在编码过程中复用了相邻层级编码模块,提高了代码效率。

附图说明

图1为JPEG2000标准的功能模块框图;

图2为JPEG2000标准下的Tier2编码功能模块框图;

图3为本发明实现系统的结构图;

图4为本发明实现方法的流程图;

图5为本发明实施例第四级LL子带零比特平面Tag-Tree生成方式示意图。

具体实施方式

以下结合附图和具体实施例,对本发明作进一步详细描述。

参照图3,本发明Tag-Tree编码的实现系统,包括通过FPGA实现逻辑功能的Tag-Tree生成模块、Tag-Tree编码模块和Tag-Tree存储器控制模块,其中:

Tag-Tree生成模块,包括生成树层级控制模块、父节点层级生成模块和编码信息生成模块,其中:

生成树层级控制模块,用于计算各个小波子带的码块行数和列数、当前Tag-Tree的总层级数和各层的行数和列数,并根据计算结果,实现对整幅图像每个子带的Tag-Tree生成流程的控制;

父节点层级生成模块,用于通过生成树层级控制模块的控制,读出Tag-Tree当前层的子节点后输出,同时根据读出的Tag-Tree当前层的子节点生成父节点后输出,并产生当前Tag-Tree生成的结束信号;

编码信息生成模块,用于在当前Tag-Tree生成后,将生成树层级控制模块计算得到的当前Tag-Tree的码块行数和列数以及总层级数传给Tag-Tree编码模块;

Tag-Tree编码模块,包括编码层级控制模块、相邻层级编码模块以及对编码内容和编码长度进行分离的逻辑,其中:

编码层级控制模块,用于将当前编码父子节点对分配给相邻层级编码模块,同时计算父节点BRAM的写地址和编码结果BRAM的写地址;

相邻层级编码模块,用于根据编码标志和包含信息,对编码层级控制模块分配的当前编码父子节点对进行差值编码,同时计算当前叶节点对应的编码长度和下一个父节点的层数,并将叶节点对应的编码父子节点对差值编码的累计结果和编码长度输出到编码结果BRAM,同时将下一个父节点的层数反馈给编码层级控制模块;

Tag-Tree存储器控制模块,用于对包含信息BRAM、零比特平面BRAM、生成树缓存BRAM1、生成树缓存BRAM2、叶节点BRAM1、父节点BRAM1、叶节点BRAM2、父节点BRAM2和编码输出BRAM进行实例化,并在叶节点BRAM1和叶节点BRAM2中选择当前叶节点BRAM,同时在父节点BRAM1和父节点BRAM2中选择当前父节点BRAM′。

上述Tag-Tree编码的实现系统,所述父节点层级生成模块,包括相邻层级读写模块、父节点值生成模块、产生当前Tag-Tree叶节点读使能和读地址的逻辑以及产生当前Tag-Tree生成的结束信号的逻辑,其中:

相邻层级读写模块,用于对生成树缓存BRAM1和生成树缓存BRAM2进行读写使能控制和读写地址计算;

父节点值生成模块,用于根据相邻层级读写模块输出的读写使能,对当前Tag-Tree中对应于同一父节点的相邻叶节点进行比较,并将比较得到的较小值作为候选父节点值或者父节点值存入生成树缓存BRAM1或者生成树缓存BRAM2。

参照图3,上述Tag-Tree编码的实现系统,所述父节点层级生成模块和编码信息生成模块,其在生成树层级控制模块的控制下被多次复用;所述相邻层级编码模块,其在编码层级控制模块的控制下被多次复用。

参照图3,上述Tag-Tree编码的实现系统,所述生成树层级控制模块不仅可以控制父节点层级生成模块对整幅图像的Tag-Tree进行连续生成,而且其所产生的当前Tag-Tree生成的结束信号,能够启动Tag-Tree编码模块对当前Tag-Tree进行编码,对现有技术进行加速。

参照图3,上述Tag-Tree编码的实现系统,所述的Tag-Tree存储器控制模块分别实例化了包含信息BRAM、零比特平面BRAM、生成树缓存BRAM1、生成树缓存BRAM2、叶节点BRAM1、父节点BRAM1、叶节点BRAM2、父节点BRAM2和编码输出BRAM,使得Tag-Tree编码系统的存储功能区域划分更明确。

参照图4,本发明Tag-Tree编码的实现方法,包括如下步骤:

步骤(1)设定Tag-Tree编码参数:

用户根据从斜率截取模块输出的图像的宽度为1024,图像的高度为1024,设定Tag-Tree编码所需的参数:小波变换最高级数为4,码块的宽度为32,码块的高度为32,系统所支持的最大分辨率下第一级子带的第一层父节点存放首地址为0、第二层父节点存放首地址为64、第三层父节点存放首地址为96、第四层父节点存放首地址为112,第四级LL子带的叶节点存放首地址为0、第四级HL子带的叶节点存放首地址为4、第四级LH子带的叶节点存放首地址为8、第四级HH子带的叶节点存放首地址为12、第三级HL子带的叶节点存放首地址为16、第三级LH子带的叶节点存放首地址为32、第三级HH子带的叶节点存放首地址为48、第二级HL子带的叶节点存放首地址为64、第二级LH子带的叶节点存放首地址为128、第二级HH子带的叶节点存放首地址为192、第一级HL子带的叶节点存放首地址为256、第一级LH子带的叶节点存放首地址为512、第一级HH子带的叶节点存放首地址为768;

参照本实施例,本发明Tag-Tree编码的实现方法要求用户设定的参数与所支持的当前最大图像分辨率必须具备正确对应关系;本发明Tag-Tree编码的实现方法所支持的默认最大小波变换级数为4,如果当前小波变换级数大于4,则需要在设置好参数后,去掉生成树层级控制模块中第四级LL子带的叶节点存放首地址的判断逻辑,并加上高于第四级的各子带的叶节点存放首地址判断逻辑。

步骤(2)父节点层级生成模块在生成树层级控制模块的控制下,以流水方式连续生成整幅图像所有子带的Tag-Tree:

步骤(2a)生成树层级控制模块对子带的级数和类型进行更新,并累计当前生成树编号:

生成树层级控制模块按照步骤(1)设定的小波变换第四级的LL子带到第一级的HH子带的顺序,即以Z字型顺序,对子带的级数和类型进行更新,得到当前子带的级数和类型,并累计当前生成树编号,其中当前子带的级数和类型的初始值为小波变换第四级的LL子带,当前生成树编号的初始值为0;

生成树层级控制模块设定LL子带为00,HL子带为01,LH子带为10,HH子带为11;

步骤(2b)Tag-Tree存储器控制模块对步骤(2a)得到的当前生成树编号是否为偶数进行判断,若是,则将叶节点BRAM1确定为当前叶节点BRAM,同时将父节点BRAM1确定为当前父节点BRAM′,否则将叶节点BRAM2中确定为当前叶节点BRAM,同时将父节点BRAM2确定为当前父节点BRAM′,这样将前后两个Tag-Tree的叶节点和父节点的存储区分开,可以实现生成下一个Tag-Tree的同时编码上一个Tag-Tree;

步骤(2c)生成树层级控制模块计算当前子带码块的行数和列数以及当前Tag-Tree总层级数,并将当前层数设定为0:

生成树层级控制模块在Tag-Tree存储器控制模块执行步骤(2b)的同时,根据从斜率截取模块输出的图像宽度1024和高度1024、步骤(1)设定的码块宽度32和高度32以及步骤(2a)得到的当前子带级数,计算出当前子带码块的行数和列数以及当前Tag-Tree总层级数,并将当前层数设定为0,代表第0层的子节点为叶节点;计算公式分别为:

当前子带码块的行数的计算公式为:

Rs=Hf>>(lb(Hb)+Ls)+FR

当前子带码块的列数的计算公式为:

Cs=Wf>>(lb(Wb)+Ls)+FC

当前Tag-Tree总层级数的计算公式为:

当2N-1+1≤max{Cs,Rs}≤2N时,LT=N,其中N≥2且N为整数

当1≤max{Cs,Rs}≤2时,LT=1

其中,Rs代表子带的码块行数,也就是叶节点层的行数;Hf代表图像的高度;Hb代表码块的高度;Ls代表当前子带级数;FR代表当前层码块行数是否为码块高度整数倍;Cs代表子带的码块列数,也就是叶节点层的列数;Wf代表图像的宽度;Wb代表码块的宽度;FC代表当前层码块列数是否为码块宽度整数倍;LT代表当前Tag-Tree总层级数,即设叶节点层数为0时对应的根节点层数;

上述公式中FR的引入是为了适应各层码块行数不是码块高度整数倍的情况,FC的引入是为了适应各层码块列数不是码块宽度整数倍的情况,使得本发明的实现系统和方法支持的图像分辨率更一般化。

参照图5,实施例中第四级LL子带零比特平面Tag-Tree生成过程示意图,当前子带码块的行数为2,当前子带码块的列数为2,当前Tag-Tree总层级数为1;

步骤(2d)父节点层级生成模块先连续读出当前Tag-Tree的叶节点,再将读出的叶节点连续写入当前叶节点BRAM,并将生成树缓存BRAM1作为生成树缓存BRAM″:

父节点层级生成模块先根据当前子带码块的行数为2和列数为2,以及当前子带的级数和类型为第四级的LL子带,从步骤(1)设定的第四级的LL子带叶节点存放首地址0开始,按先列后行的顺序,参照图5,从零比特平面BRAM中连续读出当前Tag-Tree的叶节点(2,1,1,2),再将读出的叶节点(2,1,1,2)连续写入当前叶节点BRAM,并根据当前层数为0,将生成树缓存BRAM1作为生成树缓存BRAM″;

当前Tag-Tree的叶节点读地址的计算方式为:

当l=0时,Addrr_lf=Addrr_lfs+Rr_l×Cs+Cr_l

当前叶节点BRAM写地址的计算方式为:

Addrw_lf={Rw_l,Cw_l}

其中,l代表当前层数;Addrr_lf代表叶节点读地址;Addrr_lfs代表步骤(1)设定的当前小波级数和类型对应的叶节点存放首地址;Rr_l代表当前层子节点的行地址读计数;Cr_l代表当前层子节点的列地址读计数;当l=0时,当前层子节点的行地址读计数即为当前Tag-Tree叶节点的行地址读计数,当前层子节点的列地址读计数即为当前Tag-Tree叶节点的列地址读计数;Addrw_lf代表当前叶节点BRAM写地址;Rw_l代表当前层子节点的行地址写计数;Cw_l代表当前层子节点的列地址写计数;

当零比特平面BRAM或者包含信息BRAM的读使能为高时,当前Tag-Tree叶节点的列地址读计数每周期加一,直到等于子带的码块列数2时当前Tag-Tree叶节点的列地址读计数清零,同时当前Tag-Tree叶节点的行地址读计数加一,若当前Tag-Tree叶节点的列地址读计数等于子带的码块列数2且当前Tag-Tree叶节点的行地址读计数等于子带的码块行数2时,拉低零比特平面BRAM或者包含信息BRAM的读使能,并将当前Tag-Tree叶节点的列地址读计数和行地址读计数清零;

步骤(2e)父节点层级生成模块连续生成子节点对应的父节点,并将父节点写入生成树缓存BRAM″:

步骤(2e1)相邻层级读写模块先将生成树缓存BRAM″的写使能进行产生并输出,再将子节点的行地址写计数和列地址写计数分别右移一位,拼接成父节点写地址,并将拼接结果输出到生成树缓存BRAM″,生成树缓存BRAM″的父节点写地址的计算公式为:

当Rw_l为奇数时,Rw_l+1=(Rw_l+1)>>1;当Rw_l为偶数时,Rw_l+1=Rw_l>>1,

其中0≤Rw_l≤(RL-1),0≤l≤(LT-1),

当Cw_l为奇数时,Cw_l+1=(Cw_l+1)>>1;当Cw_l为偶数时,Cw_l+1=Cw_l>>1,

其中0≤Cw_l≤(CL-1),0≤l≤(LT-1),

Addrbuffer={Rw_l+1,Cw_l+1},

其中,Rw_l代表当前层子节点的行地址写计数;Cw_l代表当前层子节点的列地址写计数;Rw_l+1代表当前层父节点的行地址写计数;Cw_l+1代表当前层父节点的列地址写计数;RL代表当前层的列数;CL代表当前层的行数;Addrbuffer代表生成树缓存BRAM″的当前层父节点写地址;LT代表当前Tag-Tree总层级数,即设当叶节点层数为0时对应的根节点层数;

步骤(2e2)父节点值生成模块对相邻四个子节点中的低地址的两个子节点进行比较,并将比较得到的较小值作为父节点候选值,按照步骤(2e1)得到的写使能和写地址存入生成树缓存BRAM″;

步骤(2e3)当父节点值生成模块遍历到高地址的两个子节点时,将高地址的两个数据的较小值和缓存的候选父节点值进行比较,并将比较得到的最小值作为父节点,按照步骤(2e1)得到的写使能和写地址存入生成树缓存BRAM″;

实施例的第4级LL子带的零比特平面生成树方式示意图如图5所示。

参照图5,结合具体实施例的第4级LL子带零比特平面的Tag-Tree,对步骤(2e)进行说明:

如图5所示,当前子带码块的行数为2,当前子带码块的列数为2,假设实施例中的子带的级数和类型为小波变换最高级的LL子带。父节点层级生成模块在连续输出当前Tag-Tree的叶节点:(2,1,1,2)到当前叶节点BRAM时,按照步骤(2e2),比较第零行第零列和第零行第一列,将比较得到较小值Min{2,1}=1作为第零层第零行第零列的候选父节点,按照步骤(2e1)得到的父节点写使能和父节点写地址0,写入生成树缓存BRAM″,即生成树缓存BRAM1。按照步骤(2e3),先比较第一行第零列和第一行第一列,将比较得到较小值Min{1,2}=1与从生成树缓存BRAM″读出的第零层第零行第零列的候选父节点1再进行比较,并将比较得到的较小值Min{1,1}=1作为父节点,按照步骤(2e1)得到的父节点写使能和父节点写地址0,存入生成树缓存BRAM″。父节点层级生成模块得到第零层子节点的父节点,即第一层子节点。

步骤(2f)生成树层级控制模块判断当前层数0与步骤(2c)得到的当前Tag-Tree总层级数1是否相等,若是,说明当前Tag-Tree生成结束,则将当前Tag-Tree生成的结束信号输出,并执行步骤(2g),否则执行步骤(2h);

步骤(2g)编码信息生成模块将步骤(2c)得到的当前子带码块的行数2和列数2以及Tag-Tree总层级数1输出到Tag-Tree编码模块;同时生成树层级控制模块判断当前图像所有子带的Tag-Tree是否生成完毕,若是,则当前图像的Tag-Tree生成过程结束,否则执行步骤(2a);

步骤(2h)生成树层级控制模块将当前层数加一,并根据加一之后的当前层数1和步骤(2c)得到的当前子带码块的行数2和列数2,计算出当前层的行数1和列数1,同时判断当前层数是否为偶数,若是,则将生成树缓存BRAM1作为生成树缓存BRAM″,并将生成树缓存BRAM2作为生成树缓存BRAM″′,否则将生成树缓存BRAM2作为生成树缓存BRAM″,并将生成树缓存BRAM1作为生成树缓存BRAM″′;

生成树缓存BRAM″′是当前层数不为0时,子节点存放的位置;生成树缓存BRAM″是当前层数不为0时,即将生成的父节点存放的位置;

当前层的行数的计算公式为:

RL=(Rs>>l)+FR,其中0≤l≤(LT-1)

当前层的列数的计算公式为:

CL=(Cs>>l)+FC,其中0≤l≤(LT-1)

步骤(2i)相邻层级读写模块根据当前层的行数1和列数1对生成树缓存BRAM″′的读地址进行计算,并根据当前层数产生生成树缓存BRAM″′的读使能;

生成树缓存BRAM″′的读地址是由当前层的行地址读计数和当前层的列地址读计数拼接成的;当生成树缓存BRAM″′的读使能为高时,当前层的列地址读计数每周期加一,直到等于当前层的列数时当前层的列地址读计数清零,同时当前层的行地址的读计数加一,若当前层的列地址读计数等于当前层的列数且当前层的行地址读计数等于当前层的行数时,拉低生成树缓存BRAM″′的读使能,并将当前层的列地址读计数和行地址读计数清零;

步骤(2j)父节点层级生成模块连续对当前父节点BRAM′的写数据进行产生并输出后,执行步骤(2e):

父节点层级生成模块先设定父节点编码标志为0,表示父节点未编码,再根据步骤(2i)得到的读使能和读地址,从生成树缓存BRAM″′中连续读出上一层的父节点,并将父节点编码标志和父节点进行拼接后,将拼接结果连续写入当前父节点BRAM′,其对应的写地址等于步骤(1)设定的当前层数对应的父节点存放首地址加上步骤(2i)得到的生成树缓存BRAM″′的读地址,最后将读出的父节点作为当前层的子节点,并执行步骤(2e);

步骤(3)Tag-Tree编码模块对当前Tag-Tree进行编码:

步骤(3a)编码层级控制模块连续分配编码父子节点对:

编码层级控制模块在接收到生成树层级控制模块输入的当前Tag-Tree生成的结束信号后,根据编码信息生成模块输出的当前子带的码块行数和列数,以及相邻层级编码模块反馈的父节点层级数,通过从当前叶节点BRAM读取叶节点、从当前父节点BRAM′读取父节点和调用相邻层级编码模块输入的父节点,将编码父子节点对连续分配给相邻层级编码模块;

编码层级控制模块设定编码当前层数为,代表第一个当前编码父子对的父节点层级数为;

步骤(3b)相邻层级编码模块先对当前编码父子节点对是否为当前叶节点对应的起始编码父子节点对进行判断,再对父节点编码标志进行更新,并输出父节点写使能、父节点值和父节点层级数,同时对需要编码的当前编码父子节点对进行编码,并对编码长度进行累计:

相邻层级编码模块先判断当前层级父节点编码标志是否为0,即当前层级父节点是否被编码过,若是,则该编码父子节点对为起始编码父子节点对,否则再判断当前层级与当前Tag-Tree总层级数是否相等,若是,则该编码父子节点对为起始编码父子节点对,对父节点编码标志进行更新,并对父节点写使能、父节点值和父节点层级数进行输出,否则先将父节点层级数加一,再对父节点编码标志进行更新,并对父节点写使能、父节点值和父节点层级数进行输出;对于本实施例的第一个Tag-Tree,其第一个当前编码父子节点对的当前层级父节点未编码过,但是当前层级与当前Tag-Tree总层级数相等,说明该编码父子节点对为起始编码父子节点对,将父节点编码标志更新为1,并对父节点写使能、父节点值和父节点层级数进行输出,

相邻层级编码模块在确定起始编码父子节点的同时,判断当前编码父子节点对是否需要编码,若Tag-Tree编码的对象是包含信息,则当前编码父子节点对对应叶节点属于首次包含层或者之前的未包含层时要进行编码;若Tag-Tree编码的对象是零比特平面信息,则只在编码父子节点对对应叶节点属于首次包含层时进行编码;对需要编码的当前编码父子节点对,如果当前父子节点对的父节点是根节点,还要对根节点进行编码,即先编码根节点值个“0”,再编码1个“1”,并进行父子节点对的差值编码,更新叶节点编码内容,累计编码长度,否则直接先编码父子差值个“0”,再编码一个“1”,并对叶节点的编码内容进行更新,对编码长度进行累计;

对包含信息编码规则进行说明:相邻层级编码模块判断当前子带码块的行数和列数能被同时整除的最大的2的幂次,将幂次值作为对应叶节点起始编码的父节点层级数,同时对当前编码父子节点对先编码父子差值个“0”,再编码一个“1”,若当前层的子节点的值等于质量分层数或编码标志为1,则对应叶节点编码结束,否则继续差值编码和判断;

对零比特平面信息编码规则进行说明:对首次被包含的叶节点对应的当前编码父子对进行差值编码,先编码父子节点差值个比特的“0”,再编码一个比特的“1”,并将当前层的父节点的编码标志置1,低层的编码内容在低位,高层的编码结果在高位。

步骤(3c)编码层级控制模块在相邻层级编码模块输出的父节点写使能的同时,输出父节点写地址;

步骤(3d)相邻层级编码模块判断步骤(3b)确定的当前叶节点对应的起始编码父子节点对是否编码完成,若是,将当前叶节点的编码内容和编码长度依次输出到编码输出BRAM,同时将编码内容和编码长度的写使能输出到编码输出BRAM和编码层级控制模块,并执行步骤(3e),否则执行步骤(3b);

步骤(3e)编码层级控制模块在相邻层级编码模块输出编码内容和编码长度的写使能的同时,对编码内容和编码长度的写地址进行计算,即每写入一个叶节点的编码内容和编码长度就将编码输出BRAM的写地址加一,直到当前图像所有叶节点的编码内容和编码长度都写到编码输出BRAM为止,并在计算结果输出到编码输出BRAM后,判断当前Tag-Tree的所有叶节点的编码内容和编码长度是否都输出到编码输出BRAM,若是,执行步骤(3f),否则执行步骤(3a);

步骤(3f)Tag-Tree编码模块判断当前Tag-Tree编码的对象是包含信息还是零比特平面信息,若为包含信息,则对编码内容和编码长度进行分离,并将分离后的编码内容和编码长度输出到码流组织模块,若为零比特平面信息,则将编码内容和编码长度直接输出到码流组织模块。

包含信息编码内容和编码长度分离的规则为:Tag-Tree编码模块按照编码长度对编码内容从高位到低位依次进行遍历,以第一个0比特位和之前的比特位个数作为第0层的分离结果,将编码长度与第0层分离结果的差值作为第1层的分离结果。

例如包含信息编码内容为00111011,分为2个质量层,有效比特位数为低6位,则索引方式为在低6位中从高到低数,直到遇到第一个0比特,则第0层的分离长度为4,第1层的分离长度为2,最终输出编码内容为00111011,分离长度为100010。其中,前三个比特对应第0层,后三个比特对应第1层。如果编码内容为00011111,有效比特位数为6,则索引方式为在低6位中从高到低数,分离结果为第0层为1,第1层为5,最终输出编码结果为00011111,分离结果为001101。

本发明未详细说明部分属于本领域技术人员公知常识。

以上描述仅是本发明的一个具体实例,显然对于本领域的专业人员来说,在了解了本发明内容和原理后,都可能在不背离本发明原理、结构的情况下,进行形式和细节上的各种修正和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利要求保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号