所以我正在玩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矩阵的实现。< / p>
我正在为32x32矩阵寻找这个BinDCT的实现,所以我可以在感知哈希算法(phash)的更快变化中使用它。
我不是数学家,虽然我试图理解论文和c代码中发生了什么,但我发现我无法解决如何将此实现转换为应用于32x32矩阵的问题。
有没有人写过一个?它甚至可能吗?
据我所知,扩展实现需要更多的位移和tmp变量。但是虽然我可以尝试反复试验,但我甚至不理解这个理论,所以我永远不会知道我是否得到了正确的结果。
我是用C#编写的,但任何语言都可以,因为它是所有基本操作,并且可以轻松翻译。
答案 0 :(得分:1)
1.您有固定的输入大小
2.2D DCT可以计算为1D DCT(类似于FFT)
3.使用FastDCT
4.抛弃FPU乘法
这样:
x*a0 = (x*a1)/1024 = (x*a1)>>10
输入数据可以做同样的事情
4.ditching整数乘法
答案 1 :(得分:0)
我对应用矩阵的唯一理解与操纵3D矢量有关,所以我不直接知道你问题的答案。但在环顾四周时,我确实找到了这个链接到博客,其中解决了您的具体问题。底部的评论来自一群人,这些人可能是一个很好的资源池,可以与在该领域有相关知识的人聊天。此外,如果您按照链接有很多良好的图像压缩信息。
作者似乎大量参与照片取证。他解释了pHash如何比平均散列更稳健,并提到使用32 x 32矩阵。
这可能是一个非常好的起点。小心。
http://www.hackerfactor.com/blog/?/archives/432-Looks-Like-It.html