所以我玩了一下 DCT 实现,并注意到由于必要的乘数计算,它们(相对)慢。
在谷歌搜索了一下之后,我遇到了 BinDCT,它可以很好地近似 DCT,并且只使用位移。
在扫描有关它的论文时(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.834&rep=rep1&type=pdf和http://www.docstoc.com/docs/130118150/Image -Compression-Using-BinDCT)并阅读我在 ohlo 上找到的一些代码(http://code.ohloh.net/file?fid=vz-HijUWVLFS65NRaGZpLZwZFq8&cid=mt_ZjvIU0Us&s=&fp=461906&projSelected=true#L0),我注意到只有8x8 矩阵的实现。
我正在为 32x32 矩阵寻找此 BinDCT 的实现,以便我可以在感知散列算法 (phash) 的更快变体中使用它。
我不是数学家,虽然我试图理解论文中发生的事情和我发现的 c 代码,但我无法理解如何转换这个实现以应用于 32x32 矩阵。
有人写过吗?甚至可能吗?
我知道扩展实现需要更多的位移和 tmp 变量。但是,虽然我可以尝试反复试验,但我什至不了解理论,所以我永远不知道我是否得到了正确的结果。
我是用 C# 编写的,但是任何语言都足够了,因为它都是基本操作并且可以很容易地翻译。