Вопрос

У меня есть стол, который имеет столбец «Template_Phash».Я храним Phash, сгенерированный с 400K изображений.

Теперь я беру случайное изображение и генерирую фаш из этого изображения.

Теперь, как я могу запрашивать так, чтобы я мог получить запись из таблицы A, какую разницу расстояния Hamming меньше порогового значения, скажем, 20.

Я видел Расстояние гамма на двоичных строках в SQL ,Но не мог понять это.

Я думаю, что я понял, что мне нужно сделать функцию для достижения этого, но как?

Оба моей фашины в Bigint, например: 76416920612731692061273169067

Пожалуйста, помогите мне сделать функцию, чтобы я мог запрашивать, как

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

Это было полезно?

Решение

Я выяснил, что расстояние Hamming - это только подсчет различных битов между двумя хэшими.Сначала XOR два хэши тогда получают количество двоичных:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top