两个pHash之间的MySQL汉明距离

16

我有一个表A,其中有一个名为'template_phash'的列。我存储了从400K个图像生成的pHash。

现在我随机选择一张图像并从该图像生成一个pHash。

现在,我该如何查询,以便获取表A中的记录,汉明距离差小于阈值,例如20。

我看过SQL中二进制字符串的汉明距离,但无法理解。

我想我需要制作一个函数来实现这个功能,但是怎么做呢?

我的两个pHash都是BigInt,例如:7641692061273169067

请帮我创建函数,以便我可以查询:

SELECT product_id, HAMMING_DISTANCE(phash1,  phash2) as hd 
FROM A 
WHERE hd < 20 ORDER BY hd ASC;
1个回答

32

我发现汉明距离就是两个哈希之间不同位的数量。首先执行异或操作获取两个哈希值,然后计算其中二进制位为1的个数:

SELECT product_id, BIT_COUNT(phash1 ^ phash2) as hd from A ORDER BY hd ASC;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接