mysql hamming distance between two phash

情到浓时终转凉″ 提交于 2019-11-29 02:56:45

问题


I have a table A which has a column 'template_phash'. I store the phash generated from 400K images.

Now I take a random image and generate a phash from that image.

Now how do I query so that I can get the record from table A which hamming distance difference is less than a threshold value, say 20.

I have seen Hamming distance on binary strings in SQL, but couldn't figure it out.

I think I figured out that I need to make a function to achieve this but how?

Both of my phash are in BigInt eg: 7641692061273169067

Please help me make the function so that I could query like

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

回答1:


I figured out that the hamming distance is just the count of different bits between the two hashes. First xor the two hashes then get the count of binary ones:

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


来源:https://stackoverflow.com/questions/21037578/mysql-hamming-distance-between-two-phash

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!