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

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

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

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

Цвет является, пожалуй, наиболее значимой для анализа характеристикой — т.к. во-первых, это визуально очень важный признак. А во-вторых, достаточно несложно пройтись по изображению и выяснить, какие именно цвета там чаще всего встречаются. Более того, оказывается, что для большинства реальных изображений основных цветов обычно не более 6-7, а часто и вовсе 3-4. Это существенно — т.к. при таком небольшом количестве признаков поиск по базе картинок можно реализовать даже быстрее, чем поиск по базе html-страниц.
Метаинформация
Ну и конечно не следует забывать о том, что в сети большинство изображений лежат не просто так — они организованы или в фотоальбомы с названиями и комментариями, или являются иллюстрациями к некоторым текстам, а то и вовсе имеют детальные подписи и даже готовые теги. Полноценная система поиска, разумеется, должна выжимать максимум из этой информации, чтобы тематически структурировать базу изображений — раз это нельзя сделать анализируя саму картинку, следует к этому стремиться обходными путями.
Теперь о Гугле
Анализируя собственно поиск Гугла, несложно выяснить, что первое что он пытается сделать — это найти подобное изображение в своей базе «популярных картинок» (например, туда входят иллюстрации из википедии). Судя по всему, используется некоторый SIFT-подобный метод — т.к. мои попытки сбить его с толку цветокоррекцией не дали никаких результатов (вплоть до замены синий->зеленый, и остальные цвета аналогично), однако изображение с измененными пропорциями, сжатое по горизонтали всего на 20%, этот метод уже не узнавал.
Если изображение обнаружено в базе популярных — то Гугл поднимает его контекст, и выдает подобные на основании этого контекста.
Самое интересное начинается, если изображение не было «узнано». В этом случае гугл предлагает набор «визуально подобных» картинок — и несложно выяснить экспериментальным путем, что ключевым признаком подобия у них является как раз набор цветов, присутствующих на изображении, с учетом занимаемой ими площади — возможно, дополненный некоторой информацией о текстуре или границах, но ключевым признаком безусловно является цвет.
В идеале нам бы хотелось иметь систему, которая может анализировать содержимое рисунка, определять, изображен там дом, озеро или кошка с котятами, ну и попутно запоминать разные характеристики обнаруженных объектов — такие как цвет, размер, взаимное размещение — а потом осуществлять поиск по этой информации. Но, к сожалению, на сегодняшний день это решительно невозможно. Как минимум, нет метода, который позволил бы сколько-нибудь надежно выделять объекты реального мира на картинках.
Поэтому любая система вынуждена анализировать менее интеллектуальные признаки, и этих признаков может быть несколько разных типов:
Границы

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

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

Цвет является, пожалуй, наиболее значимой для анализа характеристикой — т.к. во-первых, это визуально очень важный признак. А во-вторых, достаточно несложно пройтись по изображению и выяснить, какие именно цвета там чаще всего встречаются. Более того, оказывается, что для большинства реальных изображений основных цветов обычно не более 6-7, а часто и вовсе 3-4. Это существенно — т.к. при таком небольшом количестве признаков поиск по базе картинок можно реализовать даже быстрее, чем поиск по базе html-страниц.
Метаинформация
Ну и конечно не следует забывать о том, что в сети большинство изображений лежат не просто так — они организованы или в фотоальбомы с названиями и комментариями, или являются иллюстрациями к некоторым текстам, а то и вовсе имеют детальные подписи и даже готовые теги. Полноценная система поиска, разумеется, должна выжимать максимум из этой информации, чтобы тематически структурировать базу изображений — раз это нельзя сделать анализируя саму картинку, следует к этому стремиться обходными путями.
Теперь о Гугле
Анализируя собственно поиск Гугла, несложно выяснить, что первое что он пытается сделать — это найти подобное изображение в своей базе «популярных картинок» (например, туда входят иллюстрации из википедии). Судя по всему, используется некоторый SIFT-подобный метод — т.к. мои попытки сбить его с толку цветокоррекцией не дали никаких результатов (вплоть до замены синий->зеленый, и остальные цвета аналогично), однако изображение с измененными пропорциями, сжатое по горизонтали всего на 20%, этот метод уже не узнавал.
Если изображение обнаружено в базе популярных — то Гугл поднимает его контекст, и выдает подобные на основании этого контекста.
Самое интересное начинается, если изображение не было «узнано». В этом случае гугл предлагает набор «визуально подобных» картинок — и несложно выяснить экспериментальным путем, что ключевым признаком подобия у них является как раз набор цветов, присутствующих на изображении, с учетом занимаемой ими площади — возможно, дополненный некоторой информацией о текстуре или границах, но ключевым признаком безусловно является цвет.
