Как определить, является ли кадр нечетным или даже на чересстрочном изображении?

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

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

теперь вопрос в том, можно ли/как определить, какая из строк новее / старше.

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

enter image description here

2 ответов


сделайте два скриншота один за другим, давая последовательность из двух изображений (1,2). Разделите каждый снимок экрана на два поля (нечетные и четные) и обработайте каждое поле как отдельное изображение. Если вы предполагаете, что изображения переплетены последовательно (довольно безопасное предположение, иначе они выглядели бы ужасно), то есть два возможности: (1e, 1o, 2e, 2o) или (1o, 1e, 2o, 2e). Так что на данный момент 50 на 50.

то, что вы могли бы сделать, это использовать оптический поток to улучшайте свои шансы. Скажи, что ты идешь с ... первый вариант: (1e, 1o, 2e, 2o). Вычислить оптический поток f1 между (1e, 2e). Затем вычислите поток f2 между (1e, 1o) и f3 между (1o,2e). Если f1 примерно то же самое, что f2 + f3, тогда все движется в правильном направлении, и вы выбрали правильное расположение. В противном случае попробуйте другой вариант.

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

редактировать

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

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

вот чересстрочная рамка:

enter image description here

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

enter image description here

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


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