Алгоритм хеширования изображений для получения естественных значений первичного ключа, которые хорошо работают в табличных индексах PostgreSQL? - PullRequest
1 голос
/ 01 августа 2011

Я создаю набор совместных хранилищ данных с изображениями и начинаю реализовывать несколько простых / тривиальных алгоритмов поиска и сортировки на основе контента: SIFT, разреженное расстояние цветовой гистограммы, базовый SVD и т. Д.

В настоящее время я использую хэши двоичных данных sha1 в качестве индексов в таблицах PostgreSQL. Эти хеши 'тупые' - они вычисляются путем подачи данных * прямо в модуль Python hashlib.sha1 и хранятся в столбцах char с нулевым числом символов, которые в точности соответствуют представлению sha1 base64.

Было бы довольно панацеей реализовать алгоритм хеширования, который давал бы хэши, подходящие для индексации таблиц Postgres, но который также описывал изображение в некотором роде, как phash или расстояние Хемминга . Хотя phash выглядит хорошим кандидатом, оказывается, что нужно использовать собственный механизм хранения данных и API ... Я ищу что-то менее «готовое», которое будет хорошо работать с моим существующим Python / Postgresql / Solr / Основанная на Redis экосистема.

Это не должно быть самым быстрым - для меня важнее реализовать алгоритм (или алгоритмы), который можно немного взломать и оставаться несколько убедительным.

(*) в основном это не преобразованные или слегка преобразованные урожаи из моих изображений - такие как: содержимое файла изображения JPEG / PNG / DNG, структуры данных профиля ICC, дампы JSON наборов тегов EXIF ​​/ IPTC и т. П.

Ответы [ 2 ]

1 голос
/ 16 июня 2015

Довольно интересный подход описан в http://railsware.com/blog/2012/05/10/effective-similarity-search-in-postgresql/.

В основном изображение масштабируется до 15x15 пикселей, затем интенсивность рассчитывается для каждого пикселя (0,299 * красный + 0,587 * зеленый + 0,114 * синий).Этот массив из 255 значений хранится в столбце таблицы PostgreSQL с индексом Gin / Gist для быстрого поиска похожих изображений.

0 голосов
/ 01 августа 2011

А как насчет кривой заполнения пространства, например кривой Гильберта или кривой Мура?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...