我们有一个图像数据库,其中我使用Dr. Neal Krawetz's method来计算PHASH,如David Oftedal所示。使用SOLR计算两个长度之间的“相似度”/“位数”
的示例代码部分计算这些多头的区别就在这里:
ulong hash1 = AverageHash(theImage);
ulong hash2 = AverageHash(theOtherImage);
uint BitCount(ulong theNumber)
{
uint count = 0;
for (; theNumber > 0; theNumber >>= 8) {
count += bitCounts[(theNumber & 0xFF)];
}
return count;
}
Console.WriteLine("Similarity: " + ((64 - BitCount(hash1^hash2)) * 100.0)/64.0 + "%");
的挑战是,我只知道这些散列之一,我想查询SOLR找到其他哈希以相似度顺序。
的几个注意事项:
- 使用SOLR这里(只有我的选择是HBASE)
- 想要避免安装任何定制Java到Solr的(高兴地安装现有的插件)
- 快乐做大量的前期处理的C#
- 乐于使用多个字段,以数据存储为一个位串,长等
- 使用SOLRNet作为客户端
编辑,一些额外的信息(道歉我陷入了问题,并开始假设它是一个广为人知的领域)。这里是一个直接下载到C#控制台/样品应用程式:http://01101001.net/Imghash.zip
此控制台应用程序的一个例子输出将是:
004143737f7f7f7f phash试验001.JPG
0041417f7f7f7f7f phash - 测试 - 002.JPG
相似度:95.3125%
如果比较,你可以给两个哈希值和期望的结果吗?我对PHASH不太熟悉。 – cheffe
@cheffe添加了一些关于PHASH的信息,基本上它将一个图像变成一个无符号的long/uint64,并对结果进行位计数以确定相似性。让我知道如果还有什么不清楚的地方! – CameraSchoolDropout