ImageMagick を使用して複数の画像を 1 つに平均化するにはどうすればよいですか?

ImageMagick を使用して複数の画像を 1 つに平均化するにはどうすればよいですか?
convert -average darky1.jpg darky2.jpg lighty1.jpg lighty2.jpg l.ppm
convert -average lighty1.jpg lighty2.jpg lighty1.jpg lighty2.jpg d.ppm

l.ppm は d.ppm よりもはるかに明るいです。画像の順序は重要です (重要ではないはずですが)。

を使用する場合も同様ですevaluate-sequence mean

どうすれば正しく実行できますか?

答え1

ただ使うだけグラフィックスマジック:gm convert -average *.JPG q.ppm

答え2

8 年経った今でも、これはまだ問題であるようで、StackExchange ファミリーでは満足のいく回答が得られていません。

からこのブログ投稿:

ImageMagick の -average 演算子は、現在検討中の画像と前回の平均化の結果の 2 つの画像を一度に平均化します。その後、次の画像に進みます。

したがって、シーケンス内のすべての画像が同じ重みを持つのではなく、後の画像の方が重みが高くなります。このオプションを使用するほとんどの人が直感的に期待する結果は得られません。また、すべての画像をメモリにロードする必要があるという問題もあります。

両方の問題の解決策は、次のように、画像のペアに対して convert を再帰的に呼び出すスクリプトです。

#!/bin/bash

i=0
for file in img*jpg; do
    echo -n "$file.. "
    if [ $i -eq 0 ]; then
        cp $file avg.jpg
    else
        convert $file avg.jpg -fx "(u+$i*v)/$[$i+1]" avg.jpg
    fi
    i=$[$i+1]
done

答え3

ImageMagickフォーラムより:

convert darky1.jpg darky2.jpg lighty1.jpg lighty2.jpg -evaluate-sequence Mean avg.ppm

注意: これにより、すべての画像が一度にメモリに読み込まれます。

関連情報