Виявлення майже повторюваних зображень [закрито]


93

Який швидкий спосіб сортувати заданий набір зображень за їх схожістю між собою.

На даний момент у мене є система, яка робить аналіз гістограми між двома зображеннями, але це дуже дорога операція і здається занадто непосильною.

Оптимально я шукаю алгоритм, який би давав кожному зображенню балів (наприклад, ціле число, наприклад, середнє значення RGB), і я можу просто сортувати за цим балом. Можливі дублікати ідентичних балів або балів поруч один з одним.

0299393
0599483
0499994 <- possible dupe
0499999 <- possible dupe
1002039
4995994
6004994 

Середнє значення RGB на зображення відстійне, чи є щось подібне?


5
Ключове питання, розмірковуючи про те, що ви написали, та про деякі відповіді на відповідне запитання, на які вказував Наафф, ви можете чіткіше визначити, що означає "подібність". Чи буде зображення, яке є ідентичним, але зміщено п’ять пікселів, "подібним"? Візуально так ... але алгоритму ... напевно, ні, якщо ви не подумали про це і врахували це. Чи можете ви надати більше деталей? Чи будуть дублікати точними, чи просто "закритими"? Ви дивитесь на сканування, де вони могли відрізнятись мірою невеликого кута? Як щодо інтенсивності? Тут є багато змінних ...
Беска,

Як відрізняються "дублікати"? наприклад, чи будуть це зображення одного місця з різною позою / зміною? Ви, здається, хочете чогось, що є O (nlog (n)) з кількістю зображень. Хтось знає, чи можливо це? Здається, це може бути ..
Джастін Шейнер

@ Невідомий: Якщо вас не влаштовує жодна з нинішніх відповідей, чи можете ви дати нам ще кілька рекомендацій? Ми зробили все можливе, щоб відповісти на ваше запитання, але без будь-яких відгуків навряд чи ми придумаємо щось краще.
Naaff

Наразі це одна з великих невирішених проблем у галузі інформатики. Успіху приятелю.
John ktejik

Відповіді:


70

Було проведено багато досліджень щодо пошуку зображень та заходів подібності. Це непроста проблема. Загалом, одного intне буде достатньо, щоб визначити, чи дуже схожі зображення. У вас буде високий показник хибнопозитивних результатів.

Однак, оскільки було проведено багато досліджень, ви можете поглянути на деякі з них. Наприклад, у цьому документі (PDF) наведено компактний алгоритм відбитків пальців зображення, який підходить для швидкого пошуку дублікатів зображень та без збереження великої кількості даних. Здається, це право підхід, якщо ви хочете чогось міцного.

Якщо ви шукаєте щось простіше, але, безумовно, більш спеціальне, це питання ТА має кілька гідних ідей.


2
що документ з 2004 року, не впевнений, чи це все-таки найкраща відповідь?
Андрій

50

Я рекомендую розглянути можливість відійти від використання лише гістограми RGB.

Краще дайджест вашого зображення можна отримати, якщо взяти вейвлет зображення 2d Haar (його набагато простіше, ніж це звучить; його просто багато усереднень і кілька квадратних коренів, які використовуються для зважування ваших коефіцієнтів) і просто зберегти k найбільший зважені коефіцієнти у вейвлеті як розріджений вектор, нормалізують його та збережуть, щоб зменшити його розмір. Вам слід заздалегідь змінити масштаб RG і B, використовуючи сприйнятливі ваги, або я б рекомендував перейти на YIQ (або YCoCg, щоб уникнути шуму квантування), щоб ви могли вибирати інформацію про хромність зі зниженою важливістю.

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

Ви можете обміняти пам’ять і точність, збільшуючи або зменшуючи k.

Сортування за єдиним числовим балом буде нерозбірливим для цієї проблеми класифікації. Якщо ви задумаєтесь, це вимагатиме, щоб зображення могли "змінюватися" лише по одній осі, але вони не так. Ось чому вам потрібен вектор функцій. У випадку з вейвлетом Хаара його приблизно там, де відбуваються найгостріші розриви в зображенні. Ви можете обчислити відстань між зображеннями попарно, але оскільки у вас є метрика відстані, лінійне впорядкування не має можливості виразити «трикутник» із 3-х зображень, які однаково віддалені. (тобто подумайте про зображення, яке все зелене, зображення, яке все червоне, і зображення, яке є синім.)

Це означає, що будь-яке реальне рішення вашої проблеми потребуватиме операцій O (n ^ 2) у кількості зображень, які у вас є. Тоді як якщо б можна було лінеаризувати міру, то вам може знадобитися просто O (n log n) або O (n), якщо міра підходить, скажімо, для радіоскопічного сортування. Це означає, що вам не потрібно витрачати O (n ^ 2), оскільки на практиці вам не потрібно просіювати весь набір, вам просто потрібно знайти речі, які ближче ніж якийсь поріг. Отже, застосовуючи один із декількох методів для розділення вашого розрідженого векторного простору, ви можете отримати набагато швидшу асимптотику для проблеми „знайти мене k зображень, які більше схожі на заданий поріг”, ніж наївне порівняння кожного зображення з кожним зображенням, даючи вам те, що вам, ймовірно, потрібно ... якщо не саме те, про що ви просили.

У будь-якому випадку, я використав це кілька років тому, щоб особисто досягти ефекту, намагаючись мінімізувати кількість різних фактур, які я зберігав, але в цьому просторі також було багато шуму, що показує його ефективність (і в цьому випадку порівнюючи це до більш досконалої форми класифікації гістограми):

http://www.cs.princeton.edu/cass/papers/spam_ceas07.pdf

Якщо вам потрібна краща точність у виявленні, алгоритми minHash та tf-idf можна використовувати з вейвлетом Хаар (або гістограмою) для більш чіткого внесення змін до редагувань:

http://cmp.felk.cvut.cz/~chum/papers/chum_bmvc08.pdf

Нарешті, у Стенфорді є пошук зображень, заснований на більш екзотичному варіанті такого типу підходу, заснований на тому, щоб більше витягувати функції з вейвлетів, щоб знаходити обернені або масштабовані ділянки зображень тощо, але це, ймовірно, виходить далеко за межі обсягу вашої роботи Я хотів би зробити.

http://wang14.ist.psu.edu/cgi-bin/zwang/regionsearch_show.cgi


Схоже, ви опосередковано описуєте kd-дерева тощо, шукаючи простір для потенційних кандидатів. Це, можливо, варто зазначити це.
Boojum

1
Ну і причина, за якою я не вказав методи, що не відповідають певній алюзії, полягає в тому, що kd-дерева працюють добре, коли у вашому просторі є порівняно невелика кількість розмірів. Тут ви, мабуть, мають ~ 128 або більше розмірів, які є малонаселеними. Оскільки вони рідкі, більшість значень становитимуть нуль, тож переходити навколо розмірів до розділу в kd-стилі насправді майже марно. Таким же чином R-дерева руйнуються, залишаючи, швидше за все, найкращу ставку: X-дерева. На жаль, вони також наближаються до меж своєї продуктивності, стикаючись з такою кількістю вимірів.
Едвард KMETT

"і просто зберегти k найбільші зважені коефіцієнти у вейвлеті як розріджений вектор", - зберігати для кожного ряду або для цілого вейвлета?
ivan.ukr

"Вам слід заздалегідь змінити масштаб RG і B, використовуючи сприйнятливі ваги, або я б рекомендував перейти на YIQ (або YCoCg, щоб уникнути шуму квантування), щоб ви могли вибирати інформацію про хромність зі зниженою важливістю." - а що тоді? Робити вейвлет лише для Y або робити це для всіх каналів? Якщо робити для всіх каналів - як виміряти схожість зображень з кількома каналами? додати крапкові продукти кожного каналу і врахувати це як міру подібності або має бути деяким зваженим доповненням?
ivan.ukr

15

Я реалізував дуже надійний алгоритм для цього, який називається Fast Multiresolution Image Querying . Мій (стародавній, не підтримуваний) код для цього тут .

Завдання Fast Multiresolution Image Querying - це розділення зображення на 3 частини на основі кольорового простору YIQ (краще для збігу відмінностей, ніж RGB). Тоді зображення, по суті, стискається за допомогою алгоритму вейвлетів, поки не будуть доступні лише найвизначніші функції з кожного простору кольорів. Ці точки зберігаються в структурі даних. Зображення запиту проходять той самий процес, і найвидатніші функції зображення запиту збігаються з тими, що зберігаються в базі даних. Чим більше збігів, тим більше шансів на подібні зображення.

Алгоритм часто використовується для функціональності "запит за ескізом". Моє програмне забезпечення дозволяло вводити зображення запиту лише через URL-адресу, тому інтерфейсу користувача не було. Однак я виявив, що це працює надзвичайно добре для відповідності мініатюр до великої версії цього зображення.

Набагато вражаючіше мого програмного забезпечення retrievr, який дозволяє спробувати алгоритм FMIQ, використовуючи зображення Flickr як джерело. Дуже круто! Спробуйте це за допомогою ескізу або використання вихідного зображення, і ви зможете побачити, наскільки це добре працює.


Чи може він все-таки розпізнавати обертові зображення?
ендоліт

Я сумніваюся, що це буде дуже добре для цього. Ви, мабуть, захочете кодувати зображення для кожного обертання, щоб максимально збільшити відповідні збіги.
Luke Francl

Здається, посилання на retrievr не працює - це архіви кудись?
mmigdol

10

Малюнок має багато особливостей, тому, якщо ви не звузите себе до однієї, як середня яскравість, ви маєте справу з n-мірним проблемним простором.

Якби я попросив вас призначити єдине ціле число містам світу, щоб я міг визначити, які з них близькі, результати не були б чудовими. Наприклад, ви можете вибрати часовий пояс як єдине ціле число і отримати хороші результати в певних містах. Однак місто біля північного полюса та інше місто біля південного полюса також можуть знаходитися в одному часовому поясі, хоча вони знаходяться на протилежних кінцях планети. Якщо я дозволю вам використовувати два цілі числа, ви можете отримати дуже хороші результати із широтою та довготою. Проблема однакова для подібності зображень.

Все, що сказано, є алгоритми, які намагаються об'єднати подібні зображення разом, що ефективно те, що ви просите. Це те, що відбувається, коли ви виявляєте обличчя за допомогою Picasa. Ще до того, як визначити будь-які обличчя, він об'єднує схожі особи разом, так що легко пройти набір подібних облич і дати більшості з них однакове ім’я.

Існує також методика під назвою Аналіз принципових компонентів, яка дозволяє зменшити n-мірні дані до будь-якої меншої кількості вимірів. Отже, малюнок із п ятьма ознаками можна звести до однієї функції. Однак це все ще не найкращий підхід для порівняння зображень.


1
Це суперечлива точка, але ви МОЖЕТЕ використовувати одне ціле число для представлення комбінації будь-якої кількості ознак, якщо, наприклад, функція x = 2 та функція y = 3 і особливість z = 5 і особливість aa = 7, і так далі, то потужність, до якої було піднято основну базу у фабризованому вигляді єдиного цілого числа, буде значенням ознаки для цього конкретного зображення. Знову ж таки, суперечка, оскільки розмір номера був би абсурдним. Хоча цей розмір можна ще зменшити ... ми просто говоримо про структуровані дані.
argyle

Правда. Але справжній сенс - розташувати числа таким чином, щоб подібні зображення були численні між собою. Незважаючи на те, що я говорив вище, це можливо. Коротше кажучи, ви могли б вирішити проблему мандрівного продавця, щоб знайти мінімальний (або майже мінімальний) шлях через зображення в n-мірному просторі (де n - кількість функцій, які ви хочете використовувати для порівняння зображень). Але це дорого.
Ніл

8

Існує бібліотека С ("libphash" - http://phash.org/ ), яка обчислить "перцептивний хеш" зображення і дозволить виявити подібні зображення, порівнюючи хеши (тому вам не доведеться порівнювати кожне зображення безпосередньо проти будь-якого іншого зображення), але, на жаль, це здавалося не дуже точним, коли я спробував його.


5

Ви повинні вирішити, що таке "подібне". Контраст? Відтінок?

Картина "схожа" на ту саму картинку догори дном?

Б'юсь об заклад, що ви можете знайти багато "закритих дзвінків", розбивши зображення на 4х4 частини та отримавши середній колір для кожної комірки сітки. Ви отримаєте шістнадцять балів на зображення. Щоб судити про схожість, ви просто зробите суму квадратів відмінностей між зображеннями.

Я не думаю, що один хеш має сенс, якщо він не суперечить одному поняттю, наприклад, відтінку, яскравості чи контрасту.

Ось ваша ідея:

0299393
0599483
0499994 <- possible dupe
0499999 <- possible dupe
1002039
4995994
6004994

Перш за все, я припускаю, що це десяткові числа, які є R * (2 ^ 16) + G * (2 ^ 8) + B, або щось подібне. Очевидно, що це нічого доброго, тому що червоний зважується непомірно.

Переїзд у простір ВПЛ був би кращим. Ви можете поширити шматочки HSV у хеш, або ви можете просто оселити H або S або V окремо, або у вас може бути три хеші на зображення.


І ще одна річ. Якщо ви маєте вагу R, G та B. Вага зелений найвищий, то червоний, потім синій, щоб відповідати зоровій чутливості людини.


5

У епоху веб-служб ви можете спробувати http://tineye.com


3
Код, що стоїть за tineye, здається, саме те, що викликає запитувач, але я не вважаю, що веб-сервіс є дуже корисним, оскільки немає (очевидного) способу надати йому два зображення і запитати "чи це однаково? " - друге зображення повинно бути на веб-сторінці та індексовано tineye
dbr

1
Може бути, надають API для бізнес-користувачів? З ними слід зв’язатися.
zproxy

Існує комерційний API, який забезпечує саме ті служби.tineye.com/ MatchEngine .
Гаджус


1

Я припускав, що інше програмне забезпечення для пошуку дублікатів зображень виконує FFT на зображеннях і зберігає значення різних частот як вектори:

Image1 = (u1, u2, u3, ..., un)
Image2 = (v1, v2, v3, ..., vn)

а потім можна порівняти два зображення для рівності, обчисливши відстань між векторами ваги двох зображень:

distance = Sqrt(
     (u1-v1)^2 +
     (u2-v2)^2 +
     (u2-v3)^2 +
     ...
     (un-vn)^2);

2
Більшість природних зображень мають дуже схожий вміст частоти, тому я сумніваюся, що це було б дуже хорошим показником.
Hannes Ovrén

1

Одне рішення - здійснити порівняння RMS / RSS для кожної пари зображень, необхідних для виконання сортування бульбашок. По-друге, ви можете виконати FFT на кожному зображенні і зробити деяке усереднення осі, щоб отримати одне ціле число для кожного зображення, яке ви використовуєте в якості індексу для сортування. Ви можете розглянути будь-яке порівняння на зменшеній (25%, 10%) версії оригіналу, залежно від того, наскільки невелику різницю ви вирішите ігнорувати та яку швидкість вам потрібно. Повідомте мене, чи цікаві ці рішення, і ми можемо обговорити чи надати зразок коду.


FFT надає вам лише кольорову інформацію, а ніякої інформації про позицію. Змінення розміру ігнорує всі функції нижче заданого розміру, незалежно від впливу на отримане зображення. Сіре зображення та шашка можуть бути однаковими за цією мірою. Вейвлет-підхід (Daubechies, Haar та ін.) Має переваги в наданні як інформації про положення, так і кольорів, торгуючи часткою позиційної та кольорової інформації в кожній точці даних.
Едвард КМЕТТ, 02

2
Ні, FFT зображення містить всю просторову інформацію оригіналу. Ви можете відновити оригінал із FFT. homepages.inf.ed.ac.uk/rbf/HIPR2/fourier.htm Гістограма, однак, яка може бути те, що ви думали, не має.
Павло

1

Більшість сучасних підходів до виявлення неповторного виявлення зображень використовують цікаві точки виявлення та дескриптори, що описують область навколо таких точок. Часто SIFT використовується . Потім ви можете класифікувати дескриптори та використовувати кластери як візуальну лексику слів.

Отже, якщо ми бачимо по співвідношенню загальних візуальних слів двох зображень до всіх візуальних слів цих зображень, ви оцінюєте схожість між зображеннями. Є багато цікавих статей. Один з них - функція "Повторне детектування зображення": minHash та tf-idf зважування


1

Наприклад, використовуючи розширення IMMI та IMMI, ви можете вивчити багато різних способів вимірювання подібності між зображеннями: http://spl.utko.feec.vutbr.cz/en/component/content/article/46-image-processing-extension- для-експідмінера-5

Визначивши деякий поріг і вибравши якийсь метод, ви можете виміряти схожість.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.