Как определить, является ли кадр нечетным или четным на чересстрочном изображении? - PullRequest
7 голосов
/ 29 сентября 2011

У меня есть устройство, которое делает снимки экрана телевизора в определенное время (оно не принимает неполные кадры).

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

Теперь вопрос заключается в том, можно ли / как определить, какие из линий являются новыми / более старыми.

Я должен отметить, что при необходимости могу сделать несколько последовательных снимков экрана.

enter image description here

Ответы [ 2 ]

4 голосов
/ 05 октября 2011

Сделайте два снимка экрана один за другим, получив последовательность из двух изображений (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, то все движется в правильном направлении, и вы выбрали правильное расположение.В противном случае попробуйте другое расположение.

Оптический поток является довольно общим подходом и может быть сложным для вычисления для всего изображения.Если вы хотите сделать что-то в спешке, замените оптический поток на отслеживание видео .

EDIT

Я играл с некоторымикод, который может сделать это дешево.Я заметил, что если 3 поля являются последовательными и в правильном порядке, абсолютная ошибка из-за плавного, постоянного движения будет минимизирована.Наоборот, если они вышли из строя (или не последовательны), эта ошибка будет больше.Таким образом, один из способов сделать это - взять две группы по 3 поля и проверить ошибку для каждого из двух описанных выше порядков, и перейти к порядку, который дал меньшую ошибку.

У меня есть только несколькочересстрочных видео здесь для тестирования, но, похоже, работает.Единственным недостатком является то, что он не очень эффективен, если нет существенного плавного движения или количество используемых кадров мало (менее 20-30).

Вот чересстрочный кадр:

enter image description here

Вот пример выходных данных моего метода (тот же кадр):

enter image description here

Верхнее изображение - строки с нечетными номерами.Нижнее изображение - строки с четными номерами.Число в скобках - это число раз, когда изображение было выбрано как последнее.Число справа от этого является ошибкой.Нечетные строки в этом случае помечаются как самые последние, поскольку ошибка ниже, чем для строк с четными номерами.Вы можете видеть, что из 100 кадров он (правильно) определил строки с нечетными номерами как самые последние 80 раз.

0 голосов
/ 05 октября 2011

У вас есть несколько полей: F1, F2, F3, F4 и т. Д. Weave F1-F2 для гипотезы, что F1 является четным полем. Плетем F2-F3 для гипотезы, что F2 - четное поле. Теперь измерьте количество расчесывания в каждом кадре. Предполагая, что есть движение, будет некоторое расчесывание с правильным переплетением, но больше расчесывание с неправильным переплетением. Вам придется делать это несколько раз, чтобы найти некоторые поля при движении.

...