鉴于我有这样的数组:
array = [Array[8], Array[8], Array[8], ...]
# array.length is 81; each octet represents a point on a 9x9 grid
其中每个嵌套数组包含8个数字元素,范围从-2
到2
,如何应用以下步骤在Javascript中获取向量?
步骤5.图像的签名只是图像的串联 有序的8个元素数组对应于网格点 从左到右,从上到下。因此,我们的签名是 我们将它们存储在648字节的数组中,但是因为它们的一些 已知第一行和最后一行和列的条目为零 并且因为每个字节仅用于保存5个值,所以签名可以 由⌈544log 2 5⌉= 1264表示 位。
(接近结束时,那些应该是天花板符号;考虑到SO缺少Latex格式,我能做到最好)
我已经准备好了阵列并正确排序,但我对matricies和vector的知识有点生疏,所以我不确定如何解决下一步。我很感激任何澄清!
背景:我正在尝试创建一个由Xerox Palo Alto研究中心发布的图像处理算法的JS实现,用于我正在进行的一个侧面项目。
答案 0 :(得分:0)
从概念上讲,您可以使用以下算法将其转换为单个1264位数:
要反转该编码,请执行以下操作:
所有这一切的问题在于JS不提供开箱即用的1264位数字。您可以尝试How to deal with big numbers in javascript中建议的其中一个库。
但除非你绝对要求一个非常小的表示,我建议另一种方法:你可以在32位有符号整数中编码多达13个这样的值,因为5 13 < / sup> = 1,220,703,125&lt; 2147483648 = 2 31 。因此,在编码13个值后,我将使用这样的数字写出结果,然后将累加器重置为零。这样你就需要⌈544/13⌉∙32 = 1376位,这在空间要求方面并没有那么差,但实现起来会更快 。
可能更容易将累加器乘以5,而不是将累加器的值乘以5,而不是将累加器乘以5,而不是将其累加一次。换句话说,你维持一个初始化为1的因子,每次添加值时乘以5。因此,在这种情况下,对于编码和解码,第一个数据值的位置将比后来的数据值低,这意味着您可以对两者使用相同的迭代顺序。
请参阅下面评论中提到的ideone链接,以获取后一种方法的示例。它以50个整数编码完整的9 * 9 * 8值,每个值使用不超过31位。然后,它从该编码形式解码原始矩阵,以显示所有信息仍然存在。该示例不使用任何固定的零,在您的情况下⌈544/13⌉= 42个整数应该足够。