Как по части фото найти целое

Поиск изображений по фрагменту

Время на прочтение
5 мин

Количество просмотров 65K

В своем выступлении Александр Крайнов рассказал каким способом Яндекс.Картинки кластеризировали дубликаты изображений. Другими словами, выделяли и отфильтровывали дубли картинок. Где основная идея была в том, чтобы выделить контуры изображения посредством фильтра DoG, после чего найти ключевые точки и получить их дескрипторы.
Кластеризация дубликатов сводится к поиску совпадений дескрипторов. Это и есть «цифровой формат» ключевых точек из статьи Кластеризация дубликатов в поиске по картинкам.

Но хотелось бы немного подробнее узнать, что это за дескрипторы и как производить по ним поиск.

Дескрипторы

Ключевые точки — это точки, которые в идеале не должны меняться при изменении или модификации изображения.
Дескрипторы — это, в общем виде, свертка характеристик и представление ключевых точек в формате доступном для проверки на совпадение.

Поиск эффективного выделения ключевых точек, их дескрипторов, а также методов проверки на совпадения, все еще остается на повестке дня.

Но надо с чего-то начинать, поэтому обратимся на помощь к библиотеке OpenCV.

Первое на что бросается взгляд — это дескрипторы SURF.
Которые обещают необычайную точность. Что и подтверждается после тестов.

Но есть несколько нюансов.
Дескрипторы SURF — это вектора из 128 (или 64) чисел на одну ключевую точку. Проверка на совпадение выполняется поиском ближайшей точки (или даже двух). И чем ближе точка, тем лучше.

Получается что на изображение с 1 000 ключевых точек, потребуется 128 000 чисел с плавающей точкой.
Кроме того, само обнаружение точек довольно сложная операция и требует значительное время. Что не позволяет эффективно использовать данный алгоритм на небольших устройствах. К тому же сам алгоритм закрытый и запатентован (в США).

После ознакомления с SIFT и SURF, захотелось чего-то простого в реализации с возможностью применить на небольшом сервере либо устройстве.

Перцептивные хеши

И были найдены перцептуальные или перцептивные хеши.
Задача которых в том, что бы при небольшом изменении изображения хеш также незначительно менялся.

Проверка на совпадение проводится подсчетом количества отличающихся позиций между двумя хешами. Т.е. подсчет расстояния Хэмминга. И чем меньше оно, чем меньше различающихся элементов, тем больше совпадение.

Данный метод рассчитан на поиск полных либо частичных дубликатов изображения. Т.е. при значительном изменении формата изображения либо вмешательство в контент приводит к невозможности проверки на совпадение, так как хеши будут заметно отличаться.

Другими словами перцептивные хеши не годятся для поиска полудубликатов.

Исходя из этого была предпринята попытка объединить SURF дескрипторы и перцептивные хеши с целью решить проблему поиска нечетких полудубликатов.

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

У данного метода есть два с половиной значительных недостатка:
1. низкая скорость проверки на совпадение на большом наборе хешей. Поиск по 1 млн хешей занимало 20 секунд
2. низкая скорость получения ключевых точек
3. низкая точность, множество ложных срабатываний, высокие требование к целевой базе, годится не для всех картинок, требует премодерации и т.д

Сама идея о том, что бы из изображения выделялось некоторое количество отпечатков (fingerprint), которые можно было бы просто сопоставить друг с другом, завораживала.

Поэтому было решено попытаться найти решения данным проблемам.

Низкая скорость выборки

Сложность поиска и подсчета расстояния Хэмминга на большом наборе данных является самостоятельной проблемой и требует независимого подхода.
После некоторых исследований тематики оказалось, что существует множество решений данной проблемы.
Был выбран и реализован наиболее эффективный из имеющихся алгоритм названный HEngine, который позволил в ~60 раз ускорить выборку из базы данных.

SURF и ключевые точки

Так как мы работаем уже с бинарными хешами, или отпечатками, а совпадение считаем расстоянием Хэмминга, то странно использовать такую махину как SURF и стоило бы рассмотреть другие методы получения ключевых точек и дескрипторов.

В общем виде OpenCV предоставляет два типа дескрипторов:

— Дескрипторы с плавающей точкой
— И бинарные дескрипторы

Вот бинарные дескрипторы как никакие иные подходят для нашей задачи, потому что также используют расстояние Хэмминга для проверки на совпадения.

ORB: an efficient alternative to SIFT or SURF

OpenCV уже имеет у себя отличную альтернативу SURF, которая мало того, что открытая и без лицензионных ограничений, так еще легче и работает быстрее [1].

ORB — это Oriented FAST and Rotated BRIEF — улучшенная версия и комбинация детектора ключевых точек FAST и бинарных дескрипторов BRIEF.

ORB имеет один существенный нюанс для нас — размер дескрипторов 32 байта на одну точку.
Проверка на совпадение — это сумма расстояний Хэмминга для каждого байта дескриптора (первый сравнивается с первым, второй со вторым и тд).

В нашей задаче подразумевается, что одна точка дает одно значение, а тут получается 32, которые надо еще и суммировать с соответствующими по индексу (первый с первым, второй со вторым и тд) в целевой базе данных.

Так как наш хеш это 64битное число, то требуется 32 байта дескриптора ужать в 8 байт и при этом не сильно потерять в точности.

После некоторых тестов было решено попробовать эти 32 байта представить в виде матрицы 16×16 бит. А потом эту матрицу пропустить через перцептивный хеш PHash. Результатом должно было оказаться как раз 64 битное число.

Теперь мы подошли к полному описанию концепта.

Как работает индексация

1. Получаем ключевые точки и дескрипторы ORB, выбираем количество требуемых точек на изображении.
2. Полученные дескрипторы по 32 байта представляем в виде битовой матрицы 16×16.
3. Конвертируем матрицу в 64битное число с помощью PHash.
4. Сохраняем 64битные отпечатки в MySQL.
5. Выбираем требуемое расстояние Хэмминга и запускаем демон HEngine, который будет выполнять поиск.

Как работает поиск

Выполняем идентичные шаги 1 — 3 из индексации, но только на запрашиваемом изображении.
4. Делаем запрос демону HEngine, который возвращает все хеши в заданном пределе.
5. Если требуется, отфильтровать неактуальные результаты.


Рис 1. Предел расстояния Хэмминга 7. Серые точки — это найденные ключевые точки. Зеленые — совпадающие точки. Красные — совпадающие стандартным ORB полным перебором.

А что в итоге?

В итоге удалось решить нескольких проблем:
— найти способ быстрого подсчета расстояния Хэмминга на большом наборе данных
— избавиться от большого и неудобного SURF
— увеличить скорость выделения ключевых точек и их отпечатков
— а также не потерять сильно в точности.

Что позволило находить изображения по их фрагменту, а также нечеткие полудубликаты без больших вычислительных ресурсов.


Рис 2. Сладкое к пятнице

Учитывая то, что в зависимости от настроек, описанный алгоритм через бинарные дескрипторы ORB выдает около 1 000 хешей на картинку.
На базу в 1 000 изображений получается 1 000 000 хешей в базе. Поиск и кластеризация всех дубликатов занимает полторы минуты. Включает в себя полный перебор и поиск совпадающих хешей.

Ссылки

[1] Ethan Rublee, Vincent Rabaud, Kurt Konolige, Gary R. Bradski: ORB: An efficient alternative to SIFT or SURF. ICCV 2011: 2564-2571.
[2] en.wikipedia.org/wiki/SURF
[3] ru.wikipedia.org/wiki/Расстояние_Хэмминга
[4] phash.org
[5] habrahabr.ru/post/143667 Кластеризация дубликатов в Яндекс.Картинках
[6] habrahabr.ru/post/211264 HEngine — алгоритм поиска хешей в пределах заданного расстояния Хэмминга на большом наборе данных
[7] github.com/valbok/img.chk Мой прототип поиска по фрагментам

  1. Как начать поиск по картинке
  2. Как искать картинку с другого сайта

В Яндексе можно искать информацию с помощью картинки. Это может быть полезно, если вы хотите:

  • узнать, что изображено или кто изображен на фото;

  • найти картинку в другом размере — например, большую для рабочего стола или маленькую для аватарки;

  • распознать и перевести текст с картинки или фото;

  • проверить уникальность картинки в интернете и узнать, на каких сайтах встречаются такие же картинки;

  • найти похожие изображения;

  • найти похожие товары (пока только в мобильной версии Яндекс Картинок).

Если у вас есть только часть картинки, этого хватит, чтобы найти полную версию. Картинку для поиска можно взять из интернета или загрузить с компьютера или телефона.

Примечание. В результатах поиска может не быть нужных вам изображений. Это зависит от того, если ли в интернете такие изображения и проиндексированы ли они Яндексом.

Нажмите кнопку  справа от поисковой строки и загрузите картинку одним из способов:

  • перетащите исходную картинку на панель загрузки;

  • нажмите кнопку Выбрать файл и выберите картинку на компьютере;

  • вставьте картинку из буфера;

  • введите адрес картинки в поисковую строку и нажмите кнопку Найти.

Нажмите значок в поисковой строке и загрузите картинку одним из способов:

  • Медиатека — загрузите исходное изображение из галереи;

  • Снять фото — сделайте фото интересующего вас объекта;

  • Выбрать файл — выберите картинку на устройстве.

Примечание. Если вы уже указали в поисковой строке текстовый запрос, то значка не будет. Нажмите , чтобы очистить строку — тогда значок поиска по картинке появится.

Если вы используете Яндекс Браузер, вы можете искать картинку практически с любого сайта.

В контекстном меню выберите пункт Найти это изображение в Яндексе.

Наведите курсор на картинку и в отобразившемся меню выберите значок Image search.

Примечание. Возможность поиска по картинке со страницы сайта может быть ограничена из-за особенностей верстки этого сайта.

Как найти всю картинку, если есть ее часть?

Аня Сафарян



Знаток

(413),
закрыт



10 лет назад

У меня есть часть картинки, а нужна она вся. Можно ли ее найти в Интернете? Нужна какая-то программа? Можно ли сделать это по названию картинки (оно состоит из каких-то букв и цифр, под таким именем скачалась) . Кто знает, помогите, пожалуйста! Буду очень признательна!

temasey

Мастер

(1105)


10 лет назад

есть замечательная программа googles на андроиде, вот она вроде бы умеет такое делать
Играл в игрушку с брендами, может знаете, так вот фоткал некоторые логотипы и он их находил по фрагменту очень хорошо

March 17 2009, 20:35

Category:

  • 18+
  • Cancel

как найти оригинал картинки даже по одному её фрагменту

*Это цитата сообщения
  Rost :

Простая инструкция вида: “шаг за шагом” с примером.

1. Находим адрес картинки. В нашем случае это: “http://img0.liveinternet.ru/images/attach/c/0/40/403/40403940_auto.jpg”
2. Идём на сайт tineye.com
3.Загружаем картинкуадрес картинки или вставляем её адрес (слева или справа соответственно).

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

А теперь вы знаете, как искать конкретные картинки в интернете, я скажу пару слов, зачем это нужно (если кто не понял).

Прежде всего главная “полезность” такого сервиса – поиск большой картинки по её миниатюре
  (вы поняли, мои маленькие любители качественной эротической фотографии?) или даже её кусочку. Кроме того, можно найти оригинал картинки по её отфотошопленной копии и т.д.

Вещь очень и очень полезная. Рекомендую!

Как найти похожую картинку, фотографию, изображение в интернет

12.07.2019

Допустим у Вас есть какое-то изображение (рисунок, картинка, фотография), и Вы хотите найти такое же (дубликат) или похожее в интернет. Это можно сделать при помощи специальных инструментов поисковиков Google и Яндекс, сервиса TinEye, а также потрясающего браузерного расширения PhotoTracker Lite, который объединяет все эти способы. Рассмотрим каждый из них.

Поиск по фото в Гугл

Тут всё очень просто. Переходим по ссылке https://www.google.ru/imghp и кликаем по иконке фотоаппарата:

поиск по картинке в гугле

Дальше выбираем один из вариантов поиска:

  1. Указываем ссылку на изображение в интернете
  2. Загружаем файл с компьютера

На открывшейся страничке кликаем по ссылке «Все размеры»:

найти все размеры картинки

В итоге получаем полный список похожих картинок по изображению, которое было выбрано в качестве образца:

перечень найденных картинок

Есть еще один хороший способ, работающий в браузере Chrome. Находясь на страничке с интересующей Вас картинкой, подведите к ней курсор мыши, кликните правой клавишей и в открывшейся подсказке выберите пункт «Найти картинку (Google)»:

опция поиска в браузере хром

Вы сразу переместитесь на страницу с результатами поиска!

Статья по теме: Поисковые сервисы Google, о которых Вы не знали!

Поиск по картинкам в Яндекс

У Яндекса всё не менее просто чем у Гугла 🙂 Переходите по ссылке https://yandex.by/images/ и нажимайте значок фотоаппарата в верхнем правом углу:

поиск похожих фото в яндекс

Укажите адрес картинки в сети интернет либо загрузите её с компьютера (можно простым перетаскиванием в специальную области в верхней части окна браузера):

загрузка оригинала

Результат поиска выглядит таким образом:

результат поиска в яндекс

Вы мгновенно получаете доступ к следующей информации:

  • Какие в сети есть размеры изображения, которое Вы загрузили в качестве образца для поиска
  • Список сайтов, на которых оно встречается
  • Похожие картинки (модифицированы на основе исходной либо по которым алгоритм принял решение об их смысловом сходстве)

Поиск похожих картинок в тинай

Многие наверняка уже слышали об онлайн сервисе TinEye, который русскоязычные пользователи часто называют Тинай. Он разработан экспертами в сфере машинного обучения и распознавания объектов. Как следствие всего этого, тинай отлично подходит не только для поиска похожих картинок и фотографий, но их составляющих.

Проиндексированная база изображений TinEye составляет более 10 миллиардов позиций, и является крупнейших во всем Интернет. «Здесь найдется всё» — это фраза как нельзя лучше характеризует сервис.

окно поиска на сайте тинай

Переходите по ссылке https://www.tineye.com/, и, как и в случае Яндекс и Google, загрузите файл-образец для поиска либо ссылку на него в интернет.

результаты поиска в тинай

На открывшейся страничке Вы получите точные данные о том, сколько раз картинка встречается в интернет, и ссылки на странички, где она была найдена.

PhotoTracker Lite – поиск 4в1

Расширение для браузера PhotoTracker Lite (работает в Google Chrome, Opera с версии 36, Яндекс.Браузере, Vivaldi) позволяет в один клик искать похожие фото не только в указанных выше источниках, но и по базе поисковика Bing (Bing Images)!

Скриншот интерфейса расширения:
отметка нужных поисковых систем

В настройках приложения укажите источники поиска, после чего кликайте правой кнопкой мыши на любое изображение в браузере и выбирайте опцию «Искать это изображение» PhotoTracker Lite:

меню поиска картинки в браузере

Есть еще один способ поиска в один клик. По умолчанию в настройках приложения активирован пункт «Показывать иконку быстрого поиска». Когда Вы наводите на какое-то фото или картинку, всплывает круглая зеленая иконка, нажатие на которую запускает поиск похожих изображений – в новых вкладках автоматически откроются результаты поиска по Гугл, Яндекс, Тинай и Бинг.

значок плагина в углу фотографии

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

Когда это может понадобиться

  • Вы являетесь фотографом, выкладываете свои фото в интернет и хотите посмотреть на каких сайтах они используются и где возможно нарушаются Ваши авторские права.
  • Вы являетесь блогером или копирайтером, пишите статьи и хотите подобрать к своему материалу «незаезженное» изображение.
  • А вдруг кто-то использует Ваше фото из профиля Вконтакте или Фейсбук в качестве аватарки на форуме или фальшивой учетной записи в какой-либо социальной сети? А ведь такое более чем возможно!
  • Вы нашли фотографию знакомого актера и хотите вспомнить как его зовут.

На самом деле, случаев, когда может пригодиться поиск по фотографии, огромное множество. Можно еще привести и такой пример…

Как найти оригинал заданного изображения

Например, у Вас есть какая-то фотография, возможно кадрированная, пожатая, либо отфотошопленная, а Вы хотите найти её оригинал, или вариант в лучшем качестве. Как это сделать? Проводите поиск в Яндекс и Гугл, как описано выше, либо средствами PhotoTracker Lite и получаете список всех найденных изображений. Далее руководствуетесь следующим:

  1. Оригинальное изображение, как правило имеет больший размер и лучшее качество по сравнению с измененной копией, полученной в результате кадрирования. Конечно можно в фотошопе выставить картинке любой размер, но при его увеличении относительно оригинала, всегда будут наблюдаться артефакты. Их можно легко заметить даже при беглом визуальном осмотре.

    Статья в тему: Как изменить размер картинки без потери в качестве.

  2. Оригинальные фотографии часто имеют водяные знаки, обозначающие авторство снимка (фамилия, адрес сайта, название компании и пр.). Конечно водяной знак может добавить кто угодно на абсолютно на любое изображение, но в этом случае можно поискать образец фото на сайте или по фамилии автора, наверняка он где-то выкладывает своё портфолио онлайн.
  3. И наконец, совсем простой признак. Если Ваш образец фото черно-белый (сепия и пр.), а Вы нашли такую же, но полноцветную фотографию, то у Вас явно не оригинал. Добавить цветность ч/б фотографии гораздо более сложнее, чем перевести цветную фотографию в черно-белую 🙂

Уважаемые читатели, порекомендуйте данный материал своим друзьям в социальных сетях, а также задавайте свои вопросы в комментариях и делитесь своим мнением!

Похожие публикации:

  • 3 способа изменить шрифт в Telegram
  • Можно ли включить плагины NPAPI в браузере Хром?
  • Что делать, если Хром не хочет обновляться до свежей версии?
  • Как раз и навсегда поставить обновления Windows 10 под полный контроль
  • Как решить проблему нечеткого размытого шрифта в новых версиях Google Chrome

Понравилось? Поделитесь с друзьями!

фото автора
Сергей Сандаков, 42 года.
С 2011 г. пишу обзоры полезных онлайн сервисов и сайтов, программ для ПК.
Интересуюсь всем, что происходит в Интернет, и с удовольствием рассказываю об этом своим читателям.

Добавить комментарий