映像の結合方法

すべてのフィルム片を撮影して、バラバラのフィルムごとに個別の動画を自動的に作成できました。14,479フレームからなる564本もの断片動画となりました。動画の順番はバラバラな状態です。これを元の順番に並べ替えなければなりません。元の順番が分からない状態で、大量にある動画を一つ一つ見ては元の順を推測しながら並べ替えるのはジグソーパズルよりもずっと難しい、かつ、時間がかかる、気がします。そこで大量の動画を並べ替えるプログラムを作成してみようと思います。

各短い動画の最初と最後のフレームについて類似するフレームを探し出せば連続する動画が見つけられそうに思えます。
類似する画像を探すのにはphashを使います。
phashはハッシュの一種ですが、類似する画像ほど両者のハッシュ値の差分が小さくなるという特性があります。
ですから、ハッシュ値が最も近いフレームを全フレーム中から探せば元の接続フレームを探すことができるはずです。

ただ、実際やってみると上手く見つからない場合がかなりあります。
もちろん、フレーム切り出しに失敗している部分もあり、元のフレームが既に存在しない場合は仕方がありません。
元は連続していて、ほぼ同じ画像なのですが、劣化によるノイズやフレーム切り出し時の位置ずれにより、ハッシュ値が結構違ってしまうようで、類似するフレームが見つからないようです。
また、今回対象としている映像の多くがスキー旅行のようなので、雪で白い背景に、小さく人が映っている映像が結構あります。このような場合、その小さく映っている部分に着目して類似かどうか判断すべきなのですが、phashの場合、全体が白い画像同士はすべて似ていると判断してしまうようなのです。

となると、完全自動はほぼ無理なので、最終的には人が判断するしかないようです。
最初は完全自動で生成するツールを作成し始めたのですが、このような状況が分かったので完全自動は諦めて、人が最終確認する前提の半自動プログラムを作成しようと思います。