ImageMagickは差分画像を生成せずに比較します。

ImageMagickは差分画像を生成せずに比較します。

私はRaspberry PiでImageMagick Compareを使用して、5分ごとに2つの画像間の差を計算しています。これは約1分かかり、ほとんどのCPU負荷は差分画像の生成によるものと考えられます。私にとって必要なのはイメージではなく結果です。ただし、結果イメージの名前を指定しないとエラーが発生します。これは不可能ですか?

答え1

私は今同じ問題で苦労しており、答えを見つけました。はい!

TL;DR:NULL:違いで指定するファイル名、つまり

compare -metric rmse foo.png bar.png NULL:

ImageMagickドキュメント

ImageMagickはさまざまな出力フォーマットをサポートしています。そのうちの1つは、x:ユーザーが画像間の違いをすぐに確認できるウィンドウを開くことです。

これについての詳細は、以下で確認できます。文書化compareプログラム:

もちろん、「比較」画像を保存する代わりに、特別な「x:」出力形式で出力したり、「show」プログラムを使用して直接表示したりすることもできます。例えば..

compare bag_frame1.gif bag_frame2.gif x:

ImageMagicks 画像形式のドキュメントをより詳しく見て、次のような事実を発見するようになりました。画像形式一覧(タイトル「擬似画像形式」を参照)、NULL画像形式を次のように指定します。

モンタージュを使用して空のタイルを作成するのに役立ちます(NULL:使用)。また、画像読取性能を評価する際に出力形式としても使用される。

パフォーマンスの向上

ちなみに、NULL:NULL形式がより速いことを実際に確認するために、PNG、GIF、TGA、100倍のレンダリング時間も比較しました。私はそれを抑制するためにstderr(2)を/ dev / nullにパイプしていることに注意してくださいcompare

PNGで出力(〜0.085秒):

time for n in {1..100}; do compare -metric rmse foo.png bar.png out.png 2>/dev/null ; done

real    0m3,036s
user    0m7,582s
sys     0m0,911s

GIFで出力(〜0.147秒):

time for n in {1..100}; do compare -metric rmse foo.png bar.png out.gif 2>/dev/null ; done

real    0m8,951s
user    0m11,760s
sys     0m2,918s

TGAに出力(〜0.094秒):

$ time for n in {1..100}; do compare -metric rmse foo.png bar.png out.tga 2>/dev/null ; done

real    0m4,623s
user    0m8,466s
sys     0m0,981s

NULL:(〜0.067秒)で出力:

time for n in {1..100}; do compare -metric rmse foo.png bar.png NULL: 2>/dev/null ; done

real    0m1,967s
user    0m5,797s
sys     0m0,920s

結論として

PNGを生成するよりもわずかに高速ですが、出力する方がNULL:他の出力形式よりはるかに高速です。これはおそらく、ImageMagickがファイルを書き込むかどうかを比較するために内部diffイメージを生成する必要があります。テストケース。

関連情報