C# 32x32矩阵的BinDCT实现
因此,我对DCT实现进行了一些研究,并注意到由于需要进行乘法器计算,它们(相对)比较慢 在谷歌搜索了一下之后,我发现了BinDCT,它可以很好地近似DCT,并且只使用位移位 在浏览有关它的论文(和)并阅读我在ohlo()上找到的一些代码时,我注意到只有8x8矩阵的实现 我正在寻找一个32x32矩阵的BinDCT实现,这样我就可以在感知散列算法(phash)的更快变化中使用它 我不是数学家,尽管我试图理解论文中的内容和我发现的c代码,但我还是不知道如何将这个实现转换为适用于32x32矩阵 有人写过吗?有可能吗 我知道扩展实现需要更多的位移位和tmp变量。但是,尽管我可以尝试反复尝试,但我甚至不理解理论,所以我永远不知道我是否得到了正确的结果C# 32x32矩阵的BinDCT实现,c#,algorithm,math,matrix,dct,C#,Algorithm,Math,Matrix,Dct,因此,我对DCT实现进行了一些研究,并注意到由于需要进行乘法器计算,它们(相对)比较慢 在谷歌搜索了一下之后,我发现了BinDCT,它可以很好地近似DCT,并且只使用位移位 在浏览有关它的论文(和)并阅读我在ohlo()上找到的一些代码时,我注意到只有8x8矩阵的实现 我正在寻找一个32x32矩阵的BinDCT实现,这样我就可以在感知散列算法(phash)的更快变化中使用它 我不是数学家,尽管我试图理解论文中的内容和我发现的c代码,但我还是不知道如何将这个实现转换为适用于32x32矩阵 有人写过
我是用C#写这篇文章的,但是任何语言都可以,因为它都是基本的操作,而且很容易翻译。我对应用矩阵的唯一理解与操作3D向量有关,所以我不知道你的问题的直接答案。但是环顾四周,我确实找到了一个博客的链接,在那里你的具体问题得到了解决。底部的评论来自一群人,他们可能是一个很好的资源库,可以与在这方面有知识的人聊天。此外,如果你按照链接有很多好的图像压缩信息 作者似乎大量参与了照片取证。他解释了pHash如何比平均哈希更健壮,并提到使用32 x 32矩阵 这可能是一个非常好的起点。保重
1.您有固定的输入大小
- 所以你一直乘以相同的权重
- 预先计算它们一次,然后只使用它们
- 这条沟渠是所有罪恶和罪恶的行动
- 首先对行进行DCT
- 然后讨论了dct行的合谋
- 乘以归一化常数
- 所以这将O(N^4)转换为O(N^3)
- 这很棘手
- 快速算法是(I)DST和(I)DCT的融合
- 关于它的论文很少
- 但是有模糊的(而且所有的方程式在不同的论文中都是不同的,而不是完整的)
- 我实际上看到了一个函数方程,也没有它的程序
- 唯一的几乎是功能性的方法是使用FFT
- 但对于小N,由于切换到复域,没有增益
- 这些值不是真正的DCT,而是它的近似值
- 当然,我在这个领域不是专家,所以我可以忽略一些东西
- 在那几百页纸上
- 无论如何,在快速算法实现后,2D(I)DCT和bullet 2
- 复杂性大约是O((N^2).log(N))
- 您可以获取所有权重并将其转换为a1=a0*1024
- 或任何其他面具
- 因此:
x*a0 = (x*a1)/1024 = (x*a1)>>10
- 对于输入数据也可以这样做
- 现在只剩下整数运算了
- 但在现代机器上,这种方法比FPU的使用慢吗(取决于平台和实现)
- 您可以通过移位和加法操作放弃所有乘法(查找二进制乘法)
- 但在现代机器上,这真的会减慢速度吗
- 当然,如果您在某些逻辑板/IO上布线,那么它有其优点