正確な時間にテレビのスクリーンショットを撮っているデバイスがあります(不完全なフレームは撮っていません)。
それでも、このスクリーンショットは、2つの異なる元のフレームから作成されたインターレース画像です。
ここで、問題は、どの行が新しい/古いかを識別することができるかどうか/どのようにできるかということです。
必要に応じて、いくつかの連続したスクリーンショットを撮ることができることに言及する必要があります。
正確な時間にテレビのスクリーンショットを撮っているデバイスがあります(不完全なフレームは撮っていません)。
それでも、このスクリーンショットは、2つの異なる元のフレームから作成されたインターレース画像です。
ここで、問題は、どの行が新しい/古いかを識別することができるかどうか/どのようにできるかということです。
必要に応じて、いくつかの連続したスクリーンショットを撮ることができることに言及する必要があります。
2 つのスクリーンショットを次々に撮り、2 つの画像のシーケンスを生成します(1,2)
。各スクリーンショットを 2 つのフィールド (奇数と偶数) に分割し、各フィールドを個別の画像として扱います。画像が一貫してインターレースされていると仮定する場合 (非常に安全な仮定です。そうしないと画像が恐ろしく見えます)、次の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 つのフィールドが連続し、正しい順序である場合、滑らかで一定の動きによる絶対誤差が最小限に抑えられることに気付きました。逆に順不同(または連続していない)の場合、この誤差は大きくなります。したがって、これを行う 1 つの方法は、2 つの 3 つのフィールドのグループを取得し、上記の 2 つの順序付けのそれぞれについてエラーをチェックし、エラーがより少ない順序付けを使用することです。
ここでテストするインターレースビデオはほんの一握りしかありませんが、うまくいくようです。唯一の欠点は、かなり滑らかな動きがあるか、使用されるフレーム数が少ない場合 (20 ~ 30 未満) でない限り、あまり効果的ではないことです。
インターレース フレームは次のとおりです。
私の方法からのサンプル出力は次のとおりです(同じフレーム):
一番上の画像は奇数行です。下の画像は偶数行です。括弧内の数字は、その画像が最新として選択された回数です。その右側の数字がエラーです。この場合、エラーが偶数行よりも小さいため、奇数行が最新としてラベル付けされます。100 フレームのうち、奇数行を最新の 80 回と (正しく) 判断したことがわかります。
F1、F2、F3、F4などのいくつかのフィールドがあります。F1が偶数フィールドであるという仮説のためにF1-F2を織ります。F2が偶数フィールドであるという仮説のためにF2-F3を織ります。次に、各フレームのコーミングの量を測定します。動きがあると仮定すると、正しいインターレースでいくらかのコーミングがありますが、間違ったインターレースでより多くのコーミングがあります。動きがあるときにいくつかのフィールドを見つけるために、これを数回行う必要があります。