Які ключові точки в обробці зображень?


80

Наприклад, при використанні OpenCV для виявлення ключових точок часто використовуються такі алгоритми, як SIFT або SURF. Моє питання полягає в тому, що насправді являють собою ці ключові точки?

Я розумію, що це якісь "цікаві місця" в образі. Я також знаю, що вони є незмінними за масштабом і є круговими.

Крім того, я дізнався, що вони мають орієнтацію, але я не міг зрозуміти, що це насправді. Це кут, але між радіусом і чимось? Чи можете ви дати пояснення? Я думаю, що мені потрібно те, що мені спочатку потрібно, - це щось простіше, а після цього буде легше зрозуміти документи.


1
Ключові точки повинні бути просто точками (x, y), imo. Те, що описує точку і в основному область навколо неї, слід називати дескриптором. Деякі ключові точки змішують ці терміни, і вони стають точками із вкладеним вектором опису, як пояснював @rayryeng.
LovaBill

@ Вільям - Це хороший момент, який багато людей плутають. Додам це до свого допису. Дякую!
rayryeng

Відповіді:


127

Це дуже хороші запитання. Давайте вирішимо кожну точку по одному:

Моє питання полягає в тому, що насправді являють собою ці ключові точки?

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

Джерело: модуль 'об'єкт не має атрибута' drawMatches 'opencv python

Зображення праворуч є поверненою версією лівого зображення. Я також показав лише 10 найкращих збігів між двома зображеннями. Якщо ви подивитесь на 10 найкращих збігів, це ті моменти, на яких ми, мабуть, хотіли б зосередитися, що дозволило б нам запам’ятати, про що було на зображенні. Ми хотіли б зосередитись на обличчі оператора, а також камері, штативі та деяких цікавих текстурах на будівлях у фоновому режимі. Ви бачите, що ці самі точки були знайдені між двома зображеннями, і вони були успішно зіставлені.

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

Я розумію, що вони є свого роду "цікавими місцями" зображення. Я також знаю, що вони мають інваріант масштабу, і я знаю, що вони кругові.

Ви праві. Інваріант масштабу означає, що як би ви не масштабували зображення, ви все одно повинні мати можливість знайти ці точки.


Тепер ми збираємося взяти участь у дескрипторі . Що відрізняє ключові точки між фреймворками, це спосіб опису цих ключових точок. Це те, що називають дескрипторами . Кожна ключова точка, яку ви виявляєте, має пов'язаний з нею дескриптор. Деякі фреймворки виконують лише виявлення ключових точок, тоді як інші фреймворки є просто структурою опису, і вони не виявляють точок. Є також деякі, які роблять і те, і інше - вони виявляють і описують ключові точки. SIFT і SURF - це приклади фреймворків, які одночасно виявляють і описують ключові точки.

Дескриптори в першу чергу стосуються як масштабу, так і орієнтації ключової точки. Ключові точки, якими ми закріпили цю концепцію, але нам потрібна частина дескриптора, якщо наша мета - спробувати зіставити ключові точки на різних зображеннях. Тепер, що ви маєте на увазі під "круговим" ..., що корелює зі шкалою, в якій була виявлена ​​точка. Візьмемо для прикладу це зображення, взяте з підручника VLFeat Toolbox :

Приклад VLFeat

Ви бачите, що будь-які жовті точки - це відсоткові точки, але деякі з цих точок мають інший радіус кола. Вони стосуються масштабу . Точки відсотка працюють у загальному розумінні так, що ми розкладаємо зображення на кілька масштабів. Ми перевіряємо відсоткові пункти за кожною шкалою і об’єднуємо всі ці відсоткові пункти разом, щоб створити кінцевий результат. Чим більше було «коло», тим більшим масштабом було те, в якому була виявлена ​​точка. Також є лінія, яка випромінює від центру кола до краю. Це орієнтація ключової точки, яку ми розглянемо далі.

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

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

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


Сподіваюся, це допомагає!


23

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


SIFT прагне знайти вкрай відмінні місця (або ключові точки ) на зображенні. Місцеположення - це не просто 2D-місця на зображенні, а місця в масштабному просторі зображення , тобто вони мають три координати: x , y та масштаб . Процес пошуку ключових точок SIFT:

  1. розмийте та передискретизуйте зображення з різною шириною розмиття та частотою дискретизації, щоб створити масштабний простір
  2. використовувати метод різниці Гаусса для виявлення крапель в різному масштабі; BLOB-центри стають нашими ключовими точками при заданому x , y та масштабі
  3. призначити кожній точці орієнтації орієнтацію , обчислюючи гістограму градієнтних орієнтацій для кожного пікселя в його сусідстві та вибираючи кошик орієнтації з найбільшою кількістю рахунків
  4. призначити кожній ключовій точці 128-мірний векторний об’єкт на основі градієнтної орієнтації пікселів у 16 ​​локальних районах

Крок 2 дає нам інваріантність масштабу, крок 3 - інваріантність обертання, а крок 4 - "відбитки пальців", які можна використовувати для ідентифікації ключової точки. Разом вони можуть використовуватися для узгодження випадків однієї і тієї ж функції за будь-якої орієнтації та масштабу на кількох зображеннях.


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

Для виявлення краплин він використовує детермінанту гессіанського методу. Домінуючу орієнтацію виявляють при дослідженні горизонтальної та вертикальної реакцій на вейвлети Хаара . Дескриптор функції подібний до SIFT, розглядаючи орієнтацію пікселів у 16 ​​локальних районах, але призводить до 64-мірного вектора.

Функції SURF можуть бути розраховані в 3 рази швидше, ніж функції SIFT, але вони є такими ж надійними в більшості ситуацій.


Для довідки:

Хороший підручник з SIFT

Вступ до SURF


1
Дуже мило. Дуже люблю tl;drрізницю між SURF та SIFT.
rayryeng

@rayryeng Дякую, хоча це лише тому, що я насправді не знаю достатньо, щоб сказати щось більше. ;) Раніше я справді не користувався SURF.
eigenchris

1
Я б ніколи не знав! До речі, підручник SIFT - це класика. Це перше, що я прочитав перед папером Лоу.
rayryeng

3
@rayryeng Автор підручника тут - радий почути, що вам сподобалось!
Utkarsh Sinha

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