Как определить, является ли кадр нечетным или четным на чересстрочном изображении?
У меня есть устройство, которое делает снимки экрана телевизора в определенное время (оно не принимает неполные кадры).
Тем не менее этот скриншот представляет собой чересстрочное изображение, сделанное из двух разных оригинальных кадров.
Теперь вопрос заключается в том, можно ли / как определить, какая из линий новее / старше.
Я должен отметить, что я могу сделать несколько последовательных скриншотов, если это необходимо.
3 ответа
Сделайте два скриншота один за другим, получая последовательность из двух изображений (1,2)
, Разделите каждый снимок экрана на два поля (нечетное и четное) и обработайте каждое поле как отдельное изображение. Если вы предполагаете, что изображения чередуются последовательно (довольно безопасное предположение, иначе они будут выглядеть ужасно), то есть две возможности: (1e, 1o, 2e, 2o)
или же (1o, 1e, 2o, 2e)
, Так что на данный момент это 50-50.
Затем вы можете использовать оптический поток, чтобы улучшить свои шансы. Скажем, вы идете с первым вариантом: (1e, 1o, 2e, 2o)
, Рассчитать оптический поток f1
между (1e, 2e)
, Затем рассчитайте расход f2
между (1e, 1o)
а также f3
между (1o,2e)
, Если f1
примерно так же, как f2 + f3
тогда все движется в правильном направлении, и вы выбрали правильное расположение. В противном случае попробуйте другой механизм.
Оптический поток является довольно общим подходом и может быть сложным для вычисления для всего изображения. Если вы хотите сделать что-то в спешке, замените оптический поток на отслеживание видео.
РЕДАКТИРОВАТЬ
Я играл с некоторым кодом, который может сделать это дешево. Я заметил, что если 3 поля являются последовательными и в правильном порядке, абсолютная ошибка из-за плавного, постоянного движения будет минимизирована. Напротив, если они вышли из строя (или не последовательны), эта ошибка будет больше. Таким образом, один из способов сделать это - взять две группы по 3 поля и проверить ошибку для каждого из двух порядков, описанных выше, и перейти к порядку, который дал меньшую ошибку.
У меня есть только несколько чересстрочных видео для тестирования, но, похоже, это работает. Единственным недостатком является то, что он не очень эффективен, если нет существенного плавного движения или мало используемых кадров (менее 20-30).
Вот чересстрочный кадр:
Вот пример вывода из моего метода (тот же кадр):
Верхнее изображение представляет собой нечетные строки. Нижнее изображение - строки с четными номерами. Число в скобках - это число раз, когда изображение было выбрано как последнее. Число справа от этого является ошибкой. Нечетные строки в этом случае помечаются как самые последние, поскольку ошибка ниже, чем для строк с четными номерами. Вы можете видеть, что из 100 кадров он (правильно) определил строки с нечетными номерами как самые последние 80 раз.
У вас есть несколько полей, F1, F2, F3, F4 и т. Д. Weave F1-F2 для гипотезы, что F1 является четным полем. Плетем F2-F3 для гипотезы, что F2 - четное поле. Теперь измерьте количество расчесывания в каждом кадре. Предполагая, что есть движение, будет некоторое расчесывание с правильным переплетением, но больше расчесывание с неправильным переплетением. Вам придется делать это несколько раз, чтобы найти некоторые поля, когда есть движение.
Я немного опоздал с ответом здесь, но нашел это, когда искал в Google аналогичный вопрос. Кстати, если ваше устройство захвата имеет доступ к сигналам синхронизации (H и V), вы можете их проверить. Насколько я понимаю, есть различия для нечетных и четных кадров. Один из кадров начинается в середине экрана. http://martin.hinner.info/vga/pal.html и тому подобное для получения дополнительной информации. Возможно, этот ответ поможет кому-то еще через 11 лет :)