«А я рыба без трусов» или «и все-таки она вертится»

«А по морям да по волнам

Сегодня здесь, а завтра там,

А я рыба, а я рыба,

А я рыба трам-пам-пам!»

А. Васильев, Сплин, «Рыба без трусов»



Держу свое обещание, так опрометчиво данное в комментариях к предыдущей записи, и раскрываю тайну вращения заводной ручки.


Вопрос изначально звучал следующим образом: «Определит ли блок оценки движения наконечник ручки как единый блок пикселей и повторят ли вектора движения траекторию движения ручки?»





Или простыми словами: насколько «умен» алгоритм оценки движения? Если он не очень умен, то изображение вращающейся ручки заводной рыбки на видео выше сохраняется в каждом кадре. Если наоборот, очень умен, то ручка хранится только в опорных кадрах. А на остальных добавлена лишь информация о траектории ее движения.



Не буду нагонять экзорцизм, дам проиллюстрированный ответ:





Если ответ не очевиден, что с моей точки зрения очень странно, то я дам некоторые пояснения. Черные линии, образующие то ли сетку, то ли лабиринт, представляют собой разбиение кадра на макроблоки. Цельный квадрат имеет размер 16x16 пикселей. Здесь же встречаются всевозможные разбияния цельного блока: на 2 блока по 16x8, 8x16, 4 блока по 8x8, 16 блоков по 4x4. Решение по такому разбиению принял блок оценки движения. Перебрав всевозможные варианты он решил, что лучше разбить текущий блок, например, на 4 блока по 8x8 и найти 4 похожих блока уже для новых 8x8 блоков.


Хаотичные красные линии – это вектора движения. Сложно понять что-либо из этого мессива. Но зачастую именно так все в жизни и обстоит.


Вернемся к ручке. Ей все же прилично досталось. Макроблоки побились преимущественно в 4 раза на размер 8x8. Но вектора движения в едином порыве направлены на положение объекта на предыдущей кадре.


scaled fish


Так что ответ на вопрос положительный.



«И шар земной не сам кружился – это я его верчу!»



Традиционно закончим пост еще одним призовым вопросом, на этот раз посложнее. Как вы думаете, почему (зачем) некоторые блоки поделены на подблоки, но при этом не имеют векторов движения?


For more complete information about compiler optimizations, see our Optimization Notice.
Categories: