我有一个在精确时间拍摄电视屏幕截图的设备(它不会拍摄不完整的帧)。
这张截图仍然是由两个不同的原始帧组成的隔行扫描图像。
现在,问题是是否/如何识别哪些行是新的/旧的。
我不得不提一下,如果需要,我可以连续拍摄几张截图。
我有一个在精确时间拍摄电视屏幕截图的设备(它不会拍摄不完整的帧)。
这张截图仍然是由两个不同的原始帧组成的隔行扫描图像。
现在,问题是是否/如何识别哪些行是新的/旧的。
我不得不提一下,如果需要,我可以连续拍摄几张截图。
一个接一个地截取两张截图,产生一系列两张图像(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 等。编织 F1-F2 以假设 F1 是偶数字段。为 F2 是偶数场的假设编织 F2-F3。现在测量每一帧的梳理量。假设有运动,会有一些与正确交错的结合,但更多与错误交错的结合。您必须多次执行此操作,以便在有运动时找到一些字段。