Як працюють вектори руху при кодируванні для прогнозування MPEG?


16

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

Я намагаюся зрозуміти, як це працює. Кожен макроблок має з ним пов'язаний вектор руху, який (якщо вектор [1,0]) говорить, що all the pixels in this block move 1 in the x direction and 0 in the y direction for the next frame. якщо всі вектори руху не вирівнюються правильно, це не залишить ділянки зображення без уваги (наприклад, область, де що макроблок був на першому місці)?

Наприклад, у мене з’явилося таке запитання, яке я знайшов.

Розглянемо наступне зображення в момент t:

7   7   7   7           
7   7   5   5        
7   5   5   8         
8   8   8   8           
9   9   9   9       
9   9   9   9

Це зображення було розбито на 2х2 макроблоки, і наступні вектори руху були надіслані, щоб відтворити його:

(0,0)  (0,0)  (0,1)  (-1,1)  (0,0)  (0,0)

Зображення на попередньому кроці часу, t - 1, виглядало так:

7   7   7   7           
7   7   5   4        
7   7   7   7         
7   5   8   8           
8   9   8   9       
9   9   9   9   

Які помилки були передані?

Як би ви вирішили це?

Відповіді:


5

Щоб спростити вашу плутанину - є два процеси:

1. Оцінка
руху 2. Компенсація руху

Перш ніж говорити про оцінку, слід поговорити про компенсацію руху.

Скажімо, розбивається на блок B l o c k s t [ k ] ( x , y ) .Ямагет(х,у)Блоcкст[к](х',у')

Завдання компенсації руху - виробляти з будь-якої області I m a g e t - 1 ( x , y ) .Блоcкст[к](х',у')Ямагет-1(х,у)

Отже, інший блок, не обов'язково вирівняний на межі 16x16, є найкращим можливим збігом Блоcкст-1[к](х'+мх,у'+му)

Тут називають векторами руху.мх,му

Ми можемо обчислити похибку між ціллю і посиланням як

Еrrт[к](х,у)=Блоcкст[к](х',у')-Блоcкст-1[к](х'+мх,у'+му)

Отже, тепер кодер в основному передає (з DCT і квантуванням) і ( m x , m y ) [ k ] для кожного блоку ,.Еrrт[к](х,у)(мх,му)[к]

Таким чином, у кодера є дві роботи:

1. Оцінка руху
Процес або оцінка для кожного k, так що E r r t [ k ] ( x , y ) мінімізовано, називається Оцінка руху.мх,му[к]кЕrrт[к](х,у)

2. Формування зображення помилки після компенсації руху
Процес побудови з пікселів зображення I t і ( m x , m y ) [ k ] називається компенсацією руху . Зображення помилки - це те, що передається.Блоcкст[к](х',у')Ят(мх,му)[к]

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

Тепер ми розуміємо кілька моментів:

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

  2. Однак, навіть якщо не є ідеальним або якщо сцена має значні зміни в порівнянні з останньою картиною, E r r t [ k ] ( x , y ) завжди передається приймачу - отже, реконструкція завжди досконалий (по модулю втрати, створені квантуванням). Отже, навіть якщо у вас неоптимальний вектор руху або надмірність надмірності, реконструкція все ще є ідеальною, хоча і з більшою кількістю бітів!(мх,му)[к]Еrrт[к](х,у)

  3. Кожен блок рух компенсується самостійно - отже, навіть якщо фактичні вектори руху будь-яких сусідніх блоків не впливають на побудову. Отже, не потрібно, щоб вектори руху були ідеально вирівняні, щоб ідеальна реконструкція була можливою.Блоcкст[к](х',у')

  4. Хоча існує алгоритм, який досить розумний, щоб здогадуватися, що якщо має вектор руху ( m x , m y ) [ k ], здогад для B l o c k s t [ k + 1 ] може просто бути ближчим лише до цього.Блоcкст[к](мх,му)[к]Блоcкст[к+1]

  5. Нарешті, припустимо, що наступна картина зовсім інша, можливо, енергія для .

    Енеrгу(Еrrт[к](х,у))>Енеrгу(Блоcкст[к](х',у'))

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


3

Ні, він не залишить дірок, оскільки вектор знаходиться від невідомого кадру (P або B), до відомого кадру (I-кадр). Це трохи нагадує, як обчислити трансформацію зображення - ви використовуєте зворотну трансформацію, щоб уникнути дірок /


3

Б(i,j)i={0,1,2}j={0,1}(2i,2j)

(0,0) (0,2)
(2,0) (2,2)
(4,0) (4,2)

М(i,j)

(0,0) (0,0)
(0,1) (-1,1)
(0,0) (0,0)

Б'(i,j)=Б(i,j)+М(i,j)

(0,0) (0,2)
(2,1) (1,3)
(4,0) (4,2)

Б'(i,j)Б(i,j)

Примітка. Ми не захищені від будь-якого типу перекриття блоку "в русі" (два блоки переміщені в місця, що перекриваються). Існують способи вирішити це, але це не виходить за рамки цієї відповіді. Наразі ми просто збираємося переписати будь-які пікселі з блоком, який ми переміщуємо до їх місця, так що навіть якщо раніше були переміщені блоки, вони будуть перезаписані.

Б'(i,j)Б(i,j)Же

7 7 7 7
7 7 5 7
7 7 7 8
7 5 5 8
8 9 8 9
9 9 9 9

ЕЖеЖЕ=Ж-Же

0 0 0 0           
0 0 0 -3        
0 0 0 -1         
0 0 3 0           
0 0 0 0       
0 0 0 0

Хоча я вважаю, що спільнота обробки сигналів на сьогоднішній день є найкращим місцем для того, щоб поставити це питання, однак, такі теми як ця і глибоко задіяні технології навколо цього потребують власного простору. З'явилася нова пропозиція сайту Q&A " Трансляція та медіатехнології" .
Діпан Мехта

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