У нас есть база данных изображений, где я рассчитал PHASH, используя Др. Метод Нила Кравеца, реализованный Дэвидом Офтедалом.
Часть примера кода, вычисляющего разницу между этими длинными, находится здесь:
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-test-001.jpg
0041417f7f7f7f7f phash-test-002.jpg
Сходство: 95,3125%