Pull to refresh

Поиск по изображениям — гугл и не только

Reading time 4 min
Views 39K
Сначала немного общих слов о том, как вообще можно организовывать поиск по изображениям.
В идеале нам бы хотелось иметь систему, которая может анализировать содержимое рисунка, определять, изображен там дом, озеро или кошка с котятами, ну и попутно запоминать разные характеристики обнаруженных объектов — такие как цвет, размер, взаимное размещение — а потом осуществлять поиск по этой информации. Но, к сожалению, на сегодняшний день это решительно невозможно. Как минимум, нет метода, который позволил бы сколько-нибудь надежно выделять объекты реального мира на картинках.
Поэтому любая система вынуждена анализировать менее интеллектуальные признаки, и этих признаков может быть несколько разных типов:

Границы
image
Алгоритмов выделения границ есть несколько, они работают достаточно хорошо и надежно, главная проблема с ними в том, что после выделения все еще непонятно, что с ними делать. Можно посчитать относительную площадь границ — в идеале это может сказать, «рябое» это изображение, или «ровное», но на практике оказывается, что этот критерий работает слабенько. Можно попробовать посмотреть на Фурье-образ изображения границ — это может сказать нам, нет ли на изображении выраженных периодических контуров. Но все равно, подобная информация очень слабо характеризует то, как картинка будет восприниматься визуально. Поэтому этот класс признаков может служить только глубоко вспомогательным.

Текстура
image
Текстура — это область изображения, где между соседними точками могут быть существенные перепады яркости и цвета, но которая при этом визуально воспринимается как однородная область (например, трава, поверхность воды, и т.п.). Существуют различные методы, которые позволяют более-менее неплохо выделять границы между текстурами (несколько примеров тут: matlab.exponenta.ru/imageprocess/book2/55.php ), и хотя они достаточно вычислительно дорогие, все же они могут использоваться на практике. Вопрос скорее в другом — что делать с этой информацией? По сути, это может дать примерно тот же набор признаков, что и границы — представление о том, насколько изображение визуально однородно — только, в некотором смысле, более качественно. Соответственно эти признаки тоже могут быть только вторичными, хотя их значение несколько больше.

SIFT-подобная сигнатура
image
Метод SIFT (scale-invariant feature transform) выбирает на изображении набор опорных точек (грубо говоря, в местах, где вторая производная изображения достигает локальных максимумов — но строго говоря там все несколько сложнее), и использует взаимное расположение опорных точек в роли характеристики картинки. У этого метода есть несколько вариаций (в первую очередь связанных с другими способами выбора опорных точек). Эта группа методов весьма хороша для выяснения, является ли одно изображение деформированной копией другого — однако для определения подобия двух принципиально разных, пусть и визуально похожих картинок, метод непригоден (например, две фотографии одного и того же котенка в разных позах будут иметь мало общего для таких методов). Поэтому в системе поиска он может играть роль только определения, есть ли в базе модификации искомого изображения, но не может находить подобные в любом другом смысле.

Цвет
image
Цвет является, пожалуй, наиболее значимой для анализа характеристикой — т.к. во-первых, это визуально очень важный признак. А во-вторых, достаточно несложно пройтись по изображению и выяснить, какие именно цвета там чаще всего встречаются. Более того, оказывается, что для большинства реальных изображений основных цветов обычно не более 6-7, а часто и вовсе 3-4. Это существенно — т.к. при таком небольшом количестве признаков поиск по базе картинок можно реализовать даже быстрее, чем поиск по базе html-страниц.

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

Теперь о Гугле
Анализируя собственно поиск Гугла, несложно выяснить, что первое что он пытается сделать — это найти подобное изображение в своей базе «популярных картинок» (например, туда входят иллюстрации из википедии). Судя по всему, используется некоторый SIFT-подобный метод — т.к. мои попытки сбить его с толку цветокоррекцией не дали никаких результатов (вплоть до замены синий->зеленый, и остальные цвета аналогично), однако изображение с измененными пропорциями, сжатое по горизонтали всего на 20%, этот метод уже не узнавал.
Если изображение обнаружено в базе популярных — то Гугл поднимает его контекст, и выдает подобные на основании этого контекста.

Самое интересное начинается, если изображение не было «узнано». В этом случае гугл предлагает набор «визуально подобных» картинок — и несложно выяснить экспериментальным путем, что ключевым признаком подобия у них является как раз набор цветов, присутствующих на изображении, с учетом занимаемой ими площади — возможно, дополненный некоторой информацией о текстуре или границах, но ключевым признаком безусловно является цвет.
Tags:
Hubs:
+31
Comments 23
Comments Comments 23

Articles