对二维查找表进行的方法及装置与流程

文档序号:15640441发布日期:2018-10-12 22:00阅读:384来源:国知局

本发明涉及计算机技术领域,尤其涉及一种对二维查找表进行压缩的方法及装置。



背景技术:

在计算机科学中,查找表是用简单的查询操作替换运行时计算的数组或者associativearray(映射)这样的数据结构,从而避免了复杂的计算,提高相应的速度。但是,在存储相应的查找表时,需要相应的存储空间进行存储。例如,在利用光响应特性曲线做hdr(高动态范围图像,high-dynamicrange)的数字图像处理上,若要为一张1080×1080的图出一个二维查找表,就必须使用1080×1080×32=4.7mb的存储空间资源。

而fpga(field-programmablegatearray,现场可编程门阵列)因其快速高效的处理能力已被广泛应用于通信、图像处理、工业控制等方方面面,但是,同样的,fpga本身资源很有限,并不是所有的处理都可以通过fpga来实现。而上述二维查找表虽说可以避免复杂的计算,但是其对存储空间的要求也很大。为了在fpga上实现二维表的查找,就需要对二维查找表进行压缩。在现有技术中,为了在有限的fpga资源中实现超大二维查找表的映射,是以牺牲部分计算精度为代价的,即降低二维查找表的精度以降低其对存储空间的要求,从而使得其可以在fpga上实现。

因此,现有技术中对于二维查找表的压缩存在精度过低的问题。



技术实现要素:

基于此,为解决传统技术中对二维查找表进行压缩的方案中精度不足的技术问题,特提出了一种对二维查找表进行压缩的方法。

一种对二维查找表进行压缩的方法,包括:

获取待压缩的二维查找表,所述二维查找表包含n行×m列个节点;

按照预设的网格大小对所述二维查找表所包含的节点进行划分,将所述二维查找表划分成若干个网格区域,其中,每个网格区域包含的节点数相等;

针对划分得到的每一个网格区域,根据预设的中心值计算公式以该网格区域所包含的所有节点的节点值计算与该网格区域对应的中心值;计算每一个节点的节点值与所述中心值的差值,判断差值是否小于预设的差值阈值,若是,则将该网格区域所包含的节点合并得到合并后的第一节点,将所述中心值所谓所述第一节点的节点值;在所述二维查找表中将该网格区域包含的节点用第一节点进行替换,以对所述二维查找表进行压缩。

可选的,在其中一个实施例中,所述根据预设的中心值计算公式以该网格区域所包含的所有节点的节点值计算与该网格区域对应的中心值,还包括:

根据预设的双线性插值公式对该网格区域内包含的所有节点进行插值得到双线性插值函数;

根据所述双线性插值函数、以该网格区域内包含的所有节点的行坐标、列坐标的中间值为自变量计算与该网格区域对应的中心值。

可选的,在其中一个实施例中,所述获取待压缩的二维查找表之后,还包括:

判断所述二维查找表的行数n与列数m是否相等且为2的幂数,若否,则将所述二维查找表扩展至l行l列,其中l为大于或等于n和m且为2的幂数的最小值,其中扩展的节点对应的节点值为0;

将扩展之后的二维查找表作为新的二维查找表,并执行所述按照预设的网格大小对所述二维查找表所包含的节点进行划分。

可选的,在其中一个实施例中,所述按照预设的网格大小对所述二维查找表所包含的节点进行划分,将所述二维查找表划分成若干个网格区域,还包括:

将所述二维查找表按照2×2的网格大小划分成若干个网格区域,其中每个网格区域包含2行2列的4个节点。

可选的,在其中一个实施例中,所述判断差值是否小于预设的差值阈值,还包括:

获取与该网格区域对应的第一差值阈值,所述第一差值阈值与该网格区域在所述二维查找表中对应的梯度值对应;

判断所述计算得到的差值是否小于所述第一差值阈值,在所述计算得到的差值小于所述第一差值阈值的情况下,判定所述该差值小于预设的差值阈值,反之,判定该差值不小于预设的差值阈值。

此外,为解决传统技术中对二维查找表进行压缩的方案中精度不足的技术问题,还提出了一种对二维查找表进行压缩的装置。

一种对二维查找表进行压缩的装置,包括:

二维查找表获取模块,用于获取待压缩的二维查找表,所述二维查找表包含n行×m列个节点;

网格划分模块,用于按照预设的网格大小对所述二维查找表所包含的节点进行划分,将所述二维查找表划分成若干个网格区域,其中,每个网格区域包含的节点数相等;

网格压缩模块,用于针对划分得到的每一个网格区域,根据预设的中心值计算公式以该网格区域所包含的所有节点的节点值计算与该网格区域对应的中心值;计算每一个节点的节点值与所述中心值的差值,判断差值是否小于预设的差值阈值,若是,则将该网格区域所包含的节点合并得到合并后的第一节点,将所述中心值所谓所述第一节点的节点值;在所述二维查找表中将该网格区域包含的节点用第一节点进行替换,以对所述二维查找表进行压缩。

可选的,在其中一个实施例中,所述装置还包括表格扩展模块,用于判断所述二维查找表的行数n与列数m是否相等且为2的幂数,若否,则将所述二维查找表扩展至l行l列,其中l为大于或等于n和m且为2的幂数的最小值,其中扩展的节点对应的节点值为0;将扩展之后的二维查找表作为新的二维查找表,并执行所述按照预设的网格大小对所述二维查找表所包含的节点进行划分;

所述网格划分模块还用于将所述二维查找表按照2×2的网格大小划分成若干个网格区域,其中每个网格区域包含2行2列的4个节点。

可选的,在其中一个实施例中,所述网格压缩模块还用于获取与该网格区域对应的第一差值阈值,所述第一差值阈值与该网格区域在所述二维查找表中对应的梯度值对应;判断所述计算得到的差值是否小于所述第一差值阈值,在所述计算得到的差值小于所述第一差值阈值的情况下,判定所述该差值小于预设的差值阈值,反之,判定该差值不小于预设的差值阈值。

在本发明的另一方面,还提出了一种利用fpga实现如前述的对二维查找表进行压缩的方法的应用。

实施本发明实施例,将具有如下有益效果:

采用了上述对二维查找表进行压缩的方法和装置之后,对于超大维的二维查找表,将该二维查找表划分成若干个网格区域,根据每一个网格区域内包含的节点的具体值之间的差值来确定是否将该网格区域进行压缩,避免了统一的压缩精度对二维查找表整体上的精度的损失,提高了对二维查找表进行压缩的压缩精度,减小了二维查找表所需要的地址空间的大小,从而使得其可以在有限的fpga装置上实现。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

其中:

图1为一个实施例中一种对二维查找表进行压缩的方法的流程示意图;

图2为一个实施例中comparagram空间直方图;

图3为一个实施例中二维查找表网格划分示意图;

图4为一个实施例中网格区域内的节点值示意图;

图5为一个实施例中网格区域内的节点值示意图;

图6为一个实施例中对一二维查找表进行压缩的示意图;

图7为图7所示的二维查找表压缩之后的fpga实现电路图;

图8为一个实施例中一种对二维查找表进行压缩的装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为解决传统技术中对二维查找表进行压缩的方案中精度不足的技术问题,在本实施例中,特提出了一种对二维查找表进行压缩的方法,该方法的实现可依赖于计算机程序,该计算机程序可运行于基于冯诺依曼体系的计算机系统之上,该计算机程序可以是对二维查找表进行压缩的应用程序。该计算机系统可以是运行上述计算机程序的例如智能手机、平板电脑、个人电脑等服务器设备。

需要说明的是,在本实施例中,上述对二维查找表进行压缩的方法的执行可以是基于pc端或者其他设备。也就是说,在pc端等计算机设备上对二维查找表进行压缩,在压缩完成之后可以用于fpga实现。

具体的,如图1所示,上述对二维查找表进行压缩的方法包括如下步骤s102-s106:

步骤s102:获取待压缩的二维查找表,所述二维查找表包含n行×m列个节点。

在本实施例中,在需要对二维查找表进行压缩时,将该需要进行压缩的二维查找表发送至相应的计算机设备以通过相应的计算机程序进行实现,例如,打开相应的对二维查找表进行压缩的应用程序,并获取需要进行压缩的二维查找表(即待压缩的二维查找表),即可开始对该二维查找表进行压缩。

在本实施例中,该二维查找表为由n行m列个节点组成的表格数据/二维数组,每一个节点包含了对应的行坐标、列坐标以及对应的节点值。例如,二维查找表的定义如下:

reg[31:0]data_z[addr_y:0][addr_x:0];

或者,在另一个可选的实施例中,在用三维笛卡尔坐标系来进行映射的情况下,二维查找表的地址就是平面坐标(addr_y,addr_x),对应的地址映射的数据就是data_z。

例如,在一个实施例中,在该二维查找表对应的是comparagram空间直方图(如图2所示)的情况下,图像处理上comparagram是来自同一个场景的不同曝光的图像的像素值,其对应就包含了若干行、若干列的节点对应的像素值组成的二维数组。由于该曲面函数是离散化存储的,二维平面((addr_y,addr_x)的每一个维度的最小步进为1,index地址(addr_x,addr_y)对应的函数数值为data_z。

步骤s104:按照预设的网格大小对所述二维查找表所包含的节点进行划分,将所述二维查找表划分成若干个网格区域,其中,每个网格区域包含的节点数相等。

在本实施例中,在对二维查找表进行压缩时,首先需要对二维查找表进行网格区域的划分,然后针对每一个网格区域的具体情况分区域确定是否需要进行压缩以及相应的压缩策略。

具体的,在本实施例中,可以预先对网格大小进行定义,例如,定义网格大小为2×2、或3×3等,具体情况可以根据用户对精度的要求来进行确定。网格划分越大,其对应的压缩率越大,精度越小;相应的,网格划分越小,其对应的压缩率越小,精度越高。

例如,在图3所示的应用场景中,二维查找表中的一个节点对应图3中的一个网格,该二维查找表为一16行×16列的二维数组。在预设的网格大小为2×2的情况下,将该二维查找表划分成16个网格区域,其中每个网格区域包含了2行2列对应的4个网格或节点。

步骤s106为针对每一个网格区域的压缩步骤,其具体包括:

针对划分得到的每一个网格区域,执行如下步骤s

步骤s1061:根据预设的中心值计算公式以该网格区域所包含的所有节点的节点值计算与该网格区域对应的中心值;

步骤s1062:计算每一个节点的节点值与所述中心值的差值,

步骤s1063:判断差值是否小于预设的差值阈值;

若是,则执行步骤s10641:将该网格区域所包含的节点合并得到合并后的第一节点,将所述中心值所谓所述第一节点的节点值;

步骤s10642:在所述二维查找表中将该网格区域包含的节点用第一节点进行替换,以对所述二维查找表进行压缩;

若否,则执行步骤s1065:不做处理。

具体实施中,为了保证在二维查找表压缩过程中的压缩精度,将对二维查找表进行的压缩分成多个网格区域的压缩,并针对每一个网格区域分情况进行处理。

具体的,针对每一个网格区域,根据该网格区域中包含的多个节点对应的节点值之间是否存在较大差异来确定是否将该网格区域内的多个节点进行合并处理,即用一个节点来代替多个节点以减少对存储空间的需求。

在本实施例中,确定一个网格区域内包含的多个节点之间是否存在较大差异的过程可以通过如下过程来实现:

通过计算该网格区域内包含的多个节点对应的中心值,然后判断每一个节点值与该中心值之间的差值是否足够小,若是,则确定其对应的差异较小,反之,差异较大不能进行合并。

中心值的计算方式可以有多种。

第一种,可以通过计算多个节点的节点值的平均值来计算对应的中心值;

第二种,可以通过预设的中心值计算公式,计算多个节点的节点值对应的中心值;

第三种,可以通过预设的插值公式,以多个节点的节点值计算对应的插值函数,然后通过插值函数来计算对应的中心值。

在一个具体的实施例中,上述插值函数的计算可以是通过如下方法计算得到的:根据预设的双线性插值公式对该网格区域内包含的所有节点进行插值得到双线性插值函数;根据所述双线性插值函数、以该网格区域内包含的所有节点的行坐标、列坐标的中间值为自变量计算与该网格区域对应的中心值。

例如,针对图3所示的每一个网格区域内包含4个节点的情况下,可以采用双线性插值公式计算对应的插值函数,并计算对应的中心值。

具体的,双线性插值函数如下:

如图4所示,该网格节点中包含的4个节点如图4所示,其对应的节点为:

data_z(addr_x,addr_y)=3.5;

data_z(addr_x,addr_y+1)=4;

data_z(addr_x+1,addr_y)=3.8;

data_z(addr_x+1,addr_y+1)=3.7;

将上述4个节点对应的节点值代入双线性插值函数,然后,对应的中心值data_zquadtree,其中:

data_zquadtree=f(x+0.5,y+0.5)。

在本实施例中,还需要判断每一个节点值与中心值之间是否存在较大的差异。在一个可选的实施例中,可以通过节点值与中心值之间的差值是否小于预设值来进行判断。

例如,在如图4所示的应用场景中,可以设定相应的差值阈值为0.3,即差值阈值e=0.3。然后计算每一个节点与中心值之间的差值如下:

|data_z(addr_x,addr_y+1)-data_z(addr_x+0.5,addr_y+0.5)|=|4-3.75|=0.25<e

|data_z(addr_x+1,addr_y+1)-data_z(addr_x+0.5,addr_y+0.5)|=|3.7-3.75|=0.05<e

|data_z(addr_x,addr_y)-data_z(addr_x+0.5,addr_y+0.5)|=|3.5-3.75|=0.25<e

|data_z(addr_x+1,addr_y)-data_z(addr_x+0.5,addr_y+0.5)|=|3.8-3.75|=0.05<e

由此可以知道,每一个节点值与中心值之间的差值小于预设的差值阈值0.3,可以将这4个几点所在的网格区域合并成一个节点。

在另一个可选的实施例中,如图5所示,其对应的节点为:

data_z(addr_x,addr_y)=3.2;

data_z(addr_x,addr_y+1)=4.3;

data_z(addr_x+1,addr_y)=4.1;

data_z(addr_x+1,addr_y+1)=3.6;

在计算得到对应的双线性差值公式之后,可以计算得到其对应的中心值data_zquadtree=f(x+0.5,y+0.5)=3.8。

在设定差值阈值等于0.3的情况下,计算每一个节点值与中心值之间的差值如下:

|data_z(addr_x,addr_y+1)-data_z(addr_x+0.5,addr_y+0.5)|=|4.3-3.8|=0.5>e

|data_z(addr_x+1,addr_y+1)-data_z(addr_x+0.5,addr_y+0.5)|=|3.6-3.8|=0.2<e

|data_z(addr_x,addr_y)-data_z(addr_x+0.5,addr_y+0.5)|=|3.2-3.8|=0.6>e

|data_z(addr_x+1,addr_y)-data_z(addr_x+0.5,addr_y+0.5)|=|4.1-3.8|=0.3=e

由此可知,上述4个节点的节点值与中心值之间的差值中存在大于预设的差值阈值e的情况,因此,该4个节点不能合并,必须全部保留。

在另一个可选的实施例中,可以通过计算各个节点的节点值与中心值之间的方差或标准差是否小于预设的阈值来判断是否需要将该网格区域内的节点进行合并。

进一步的,在本实施例中,在对网格区域内的多个节点进行合并时,是将多个节点合并成1个节点,并且,用该网格区域的中心值作为该网格区域合并之后的新的节点的节点值。

也就是说,在网格区域内的多个节点可以合并的情况下,可以用1个节点来代替该网格区域内的多个节点(例如,在网格大小为2×2的情况下,其占用的网格大小从4减小到1),极大的减小了对存储空间的占用。

需要说明的是,不同的网格区域内对应的节点值的情况以及差异情况不一样,并且,用户对不同的网格区域内的值的精度要求也不一样,因此,如果对于所有的网格区域均采用相同的差值阈值的话,可能会对部分区域的值的精度有所影响。为了同时提高压缩率和精度,在本实施例中,可以根据二维查找表的不同区域的变化梯度来确定对应的差值阈值。

具体的,在一个可选的实施例中,上述判断差值是否小于预设的差值阈值,还包括:获取与该网格区域对应的第一差值阈值,所述第一差值阈值与该网格区域在所述二维查找表中对应的梯度值对应;判断所述计算得到的差值是否小于所述第一差值阈值,在所述计算得到的差值小于所述第一差值阈值的情况下,判定所述该差值小于预设的差值阈值,反之,判定该差值不小于预设的差值阈值。

在本实施例中,可以根据二维查找表中包含的各个节点对应的节点值的变化梯度来确定对应的差值阈值,例如,对于节点值变化梯度变化明显的区域采用较小的差值阈值e,对于节点值变化梯度变化不明显的区域采用较大的差值阈值e。

在另一个可选的实施例中,还可以根据用户的需求,对于使用频次较高的区域采用较小的差值阈值,以提高数值查找的准确性;对于使用频次较低的区域采用较大的差值阈值,以降低对存储空间的需求。

在本实施例中,对于差值阈值的设置,可以是计算二维查找表的节点值的变化梯度值之后根据预设的算法来确定的,也可以是用户根据自己的需求进行设定的。

需要说明的是,在本实施例中,在进行网格划分时,因为网格大小的设定,可能会导致无法完全对二维查找表进行划分的情况,在此种情况下,在进行网格划分之前首先需要对二维查找表进行扩展,扩展成与预设的网格大小匹配的大小。

例如,在网格大小为2×2的情况下,优选的二维查找表的行数、列数为2的n次方,即行数、列数均为2的幂数,以保证网格大小的完全划分。

即,上述获取待压缩的二维查找表之后,还包括:判断所述二维查找表的行数n与列数m是否相等且为2的幂数,若否,则将所述二维查找表扩展至l行l列,其中l为大于或等于n和m且为2的幂数的最小值,其中扩展的节点对应的节点值为0;将扩展之后的二维查找表作为新的二维查找表,并执行所述按照预设的网格大小对所述二维查找表所包含的节点进行划分。

需要说明的是,在本实施例中,对二维查找表的压缩,可以不止进行一次针对网格区域的压缩,在进行了一次网格区域的压缩之后,还可以针对进行一次压缩之后的二维查找表进行第二次、第三次、第n次的压缩。

具体的,如图6所示,在对网格区域进行一次压缩之后,可以继续进行第二次压缩,以进一步的提高压缩率。

在本实施例中,对于二维查找表的实现分为两步,第一步是针对二维查找表的压缩,这部分的工作的完成可以是在pc端上实现的,第二步是将pc端上压缩之后的二维查找表基于fpga实现。

例如,对于图6所示的压缩之后的结果,其对应的映射的fpga的电路可如图7所示。也就是说,图6所示的二维查找表的压缩结果可基于如图6所示的fpga电路来实现,从而实现对二维查找表的压缩率、计算精度以及其在fpga上实现的快速高效的查找效率。

此外,为解决传统技术中对二维查找表进行压缩的方案中精度不足的技术问题,,在一个实施例中,如图8所示,还提出了一种对二维查找表进行压缩的装置,包括:

二维查找表获取模块102,用于获取待压缩的二维查找表,所述二维查找表包含n行×m列个节点;

网格划分模块104,用于按照预设的网格大小对所述二维查找表所包含的节点进行划分,将所述二维查找表划分成若干个网格区域,其中,每个网格区域包含的节点数相等;

网格压缩模块106,用于针对划分得到的每一个网格区域,根据预设的中心值计算公式以该网格区域所包含的所有节点的节点值计算与该网格区域对应的中心值;计算每一个节点的节点值与所述中心值的差值,判断差值是否小于预设的差值阈值,若是,则将该网格区域所包含的节点合并得到合并后的第一节点,将所述中心值所谓所述第一节点的节点值;在所述二维查找表中将该网格区域包含的节点用第一节点进行替换,以对所述二维查找表进行压缩。

可选的,在一个实施例中,网格压缩模块106还用于根据预设的双线性插值公式对该网格区域内包含的所有节点进行插值得到双线性插值函数;根据所述双线性插值函数、以该网格区域内包含的所有节点的行坐标、列坐标的中间值为自变量计算与该网格区域对应的中心值。

可选的,在一个实施例中,如图8所示,上述装置还包括表格扩展模块108,用于判断所述二维查找表的行数n与列数m是否相等且为2的幂数,若否,则将所述二维查找表扩展至l行l列,其中l为大于或等于n和m且为2的幂数的最小值,其中扩展的节点对应的节点值为0;将扩展之后的二维查找表作为新的二维查找表,并执行所述按照预设的网格大小对所述二维查找表所包含的节点进行划分;所述网格划分模块104还用于将所述二维查找表按照2×2的网格大小划分成若干个网格区域,其中每个网格区域包含2行2列的4个节点。

可选的,在一个实施例中,网格压缩模块106还用于获取与该网格区域对应的第一差值阈值,所述第一差值阈值与该网格区域在所述二维查找表中对应的梯度值对应;判断所述计算得到的差值是否小于所述第一差值阈值,在所述计算得到的差值小于所述第一差值阈值的情况下,判定所述该差值小于预设的差值阈值,反之,判定该差值不小于预设的差值阈值。

实施本发明实施例,将具有如下有益效果:

采用了上述对二维查找表进行压缩的方法和装置之后,对于超大维的二维查找表,将该二维查找表划分成若干个网格区域,根据每一个网格区域内包含的节点的具体值之间的差值来确定是否将该网格区域进行压缩,避免了统一的压缩精度对二维查找表整体上的精度的损失,提高了对二维查找表进行压缩的压缩精度,减小了二维查找表所需要的地址空间的大小,从而使得其可以在有限的fpga装置上实现。

在上述实施例中,可以全部或部分的通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或者数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或半导体介质(例如固态硬盘solidstatedisk(ssd))等。

以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1