Как определить, является ли кадр нечетным или даже на чересстрочном изображении?
У меня есть устройство, которое делает скриншоты ТВ в точное время (оно не принимает неполные кадры).
тем не менее этот скриншот представляет собой переплетение изображений, сделанных из двух разных исходных кадров.
теперь вопрос в том, можно ли/как определить, какая из строк новее / старше.
Я должен упомянуть, что при необходимости я могу сделать несколько последовательных скриншотов.
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).
вот чересстрочная рамка:
вот пример вывода из моего метода (тот же кадр):
верхнее изображение-нечетные строки. Нижнее изображение-четные строки. Число в скобках - это число раз, когда изображение было выбрано как самое последнее. Число справа от этого-ошибка. Нечетные строки помечаются как самые последние в этом случае, поскольку ошибка меньше, чем для четных строк. Вы можете увидеть, что из 100 кадров, он (правильно) судить нечетные строки - самые последние 80 раз.
У вас есть несколько полей, F1, F2, F3, F4 и т. д. Сплетите F1-F2 для гипотезы о том, что F1 является четным полем. Сплетите F2-F3 для гипотезы о том, что F2 является четным полем. Теперь измерьте количество расчесывания в каждом кадре. Предполагая, что есть движение, будет некоторое расчесывание с правильным переплетением, но больше расчесывание с неправильным переплетением. Вам придется сделать это несколько раз, чтобы найти некоторые поля, когда есть движение.