2

私はPerlに少し慣れていないので、奇妙な要件を満たすために誰かの助けが必要です。

  1. 2つのビデオをフレームごとに比較したいと思います。AVISYNTHを使用して直接比較できますが、問題は両方のビデオが同じですが、初期フレームが異なるタイミングで開始することです。

  2. このために、私は各ビデオをフレーム/画像に分割し、2つのフォルダに別々に保存しました

  3. ここで、最初のフォルダーのframe1 / image1を、2番目のフォルダーの最初の10〜15枚の画像すべてと比較したいと思います。

  4. 2番目のフォルダの4番目の画像が一致する場合は、さらにプロセスを停止し、フレーム4を2番目のフォルダのインデックスとして保存/処理する必要があります。

  5. これが完了したら、2つのフォルダー間の画像の実際の比較を開始したいと思います。つまり、フォルダ1の画像1とフォルダ2の画像4。フォルダ1の画像2とフォルダ2の画像5。フォルダ1の画像3とフォルダ2の画像6...など。

このすべてのプロセスをperl/Matlabで実行したいと思います。どんな体でもあなたの考えや提案で私を喜ばせるのを手伝ってくれますか?

ありがとうガネーシュ

4

1 に答える 1

1

compare_frames2 つのフレームを比較し、同一であれば true を返すサブルーチンがあるとします。

次に、フォルダー 2 の最初の数フレームをループし、フレームを比較することで、オフセットを見つけることができます。

# return the offset of the first equal image,
# searching frames between "from" (defaulting to 1) and "upto" (defaulting to 15)
sub find_offset (%) {
   my ($min_index, $max_index) = @{+{ from=>1, upto=>15, @_ }}{qw(from upto)};
   for my $index ($min_index .. $max_index) { # assuming 1-based indexing scheme
      return $index - 1 if compare_frames(1, $index);
   }
   warn "no offset found";
   return undef; # or better, exit the program.
}

スクリプトの主要部分では、それを実行my $offset = find_offset upto=>15して、後で処理の大部分に使用します。ただし、これは、フォルダー 1 が常にフォルダー 2 のサブセットであることを前提としています。

比較サブルーチンでは、できるだけ早く「false」を返したいと考えています。画像形式によっては、サイズが異なる場合、2 つの画像を同等にすることはできないと言えます。ただし、ビットマップのサイズは固定されているため、すべてのフレームの解像度が同じであるため、ここでは意味がありません。他の画像形式では圧縮密度が異なり、一方の画像がより圧縮されていても、2 つの画像は同等である場合があります。statこのような場合は、コードを削除してください。

# decide if two frames are equal.
# $frame1 is from the first set of frames,
# $frame2 is the frame from the second set.
sub compare_frames {
   my ($frame1, $frame2) = @_;
   my $file1 = "folder1/$frame1";
   my $file2 = "folder2/$frame1";
   # stat the files for the size.
   my $size1 = (stat $file1)[7];
   my $size2 = (stat $file2)[7];
   return 0 if $size1 != $size2; # strict equality, maybe you want to include some sort of tolerance.
   # do main comparision
   $cmp->set_image1($file1);
   $cmp->set_image2($file2);
   return $cmp->compare;
}

ここで、$cmpは からのコンパレータ オブジェクトImage::Compareであり、事前設定された比較メソッドです。

次に、メインの比較中に、compare_frames($i, $i + $offset).

于 2012-12-06T10:27:41.827 に答える