Швидкий приблизний оптичний зсув потоку / зображення


9

Мені потрібно виявити, як швидко панорумує камеру (або горизонтальну / вертикальну), щоб попередити оператора, щоб сповільнити роботу.

Все зображення рухається як блок, я не потребую фактичного напрямку (хоча H або V було б бонусом), і мені потрібна лише приблизна величина - тобто. спрацьовує, якщо між кадрами переміщується більше ніж «N» пікселів.

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

Рішенням Niave виберіть RoI в центрі, знайдіть краї, обчисліть схожість між парами кадрів, змістіть один з кадрів вліво / вправо / вгору / вниз пікселем, повторіть - знайдіть мінімуми.

Мені було цікаво, чи є розумніші рішення?

Відповіді:


3

Ймовірно, якщо ви шукаєте простий метод, це застосувати стандартні алгоритми оцінки руху, які дуже визріли в класі кодеків стиснення MPEG. Їх легко зрозуміти, і я думаю, ви отримаєте багато готових до використання кодів. Цей алгоритм виробляє вектор руху на блоці за блоком - і тоді ви можете знайти найвизначніший кластер і взяти середній напрямок і величину вектора руху.

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

Взагалі, панорама камери та оцінка руху є досить усталеною дослідницькою сферою. ось довідка: папір та інший папір .

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


Якщо я можу зручно зачепитися за MPEG-ліб, що було б добре, я пам’ятаю, що GMC у Mpeg мав критику. Я думав, що це буде спільна область через алгоритми стабілізації камери
Мартін Бекетт

Ви точно можете підключити (а точніше витягти) алгоритми MPEG. Ви можете використовувати FFMPEG як бібліотеку та витягнути це - але може стати складним. Крім того, ви можете прочитати акуратний код MSSG для вилучення.
Діпан Мехта

Щодо критики щодо GMC - то більше, ніж обіцяє різко зменшити швидкість передачі бітів і створити кодування на основі об'єктів . Однак оцінити параметри руху камери не так вже й важко.
Діпан Мехта

дякую, я погляну на MSSG. Я використовую ffmpeg, але це не проста бібліотека, щоб просто витягнути речі!
Мартін Беккет

3

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

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

Це питання схоже, і ніхто не пропонує нічого, крім перехресної кореляції, тому, можливо, це не так вже й погано: Використання MATLAB для обчислення зміщення між послідовними зображеннями


Дякую, легко припустити, що FFT повільний, але я можу зробити невелике вікно 2 ^ n. пс. Тільки для пошуку stackoverflow.com/questions/1100100/…
Мартін Бекетт

3

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

Тож мій покроковий посібник:

  1. Знайдіть вікно пікселів у центрі зображення, наприклад, 20x20
  2. Обчисліть градієнти Ix та Iy.
  3. Розділіть вікно градієнта на чотири частини, наприклад, 4x10x10.
  4. Розв’яжіть чотири лінійні рівняння найменших квадратів з наступним кадром.
  5. Середнє значення чотирьох векторів швидкості.

Це визначає напрямок і швидкість, проте ви можете використовувати зважене вікно, щоб зробити його більш надійним. Подивіться на метод Лукаса-Канаде щодо його розширень.


0

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


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