未解決案件
で、複数枚の画像について各画素の算術平均を取った平均画像を得たかった。
「ImageMagick 複数枚 画像 平均」でググったら、最近流行りの低品質な機械翻訳サイト経由で以下のページが見つかった。
上記のページで、ImageMagick の convert で -fx オプション用いて平均取るスクリプトが張られてたんだが、これを Cygwin 上で試してみたところ、たかだか 1920x1060 程度のサイズなのに、1枚たりとも進まない。
何だこれ?と思い、WSL1 で試してみると、お世辞にも早くはないんだけどまぁ普通に完了。
とりあえず、画像を縮小してみたところ Cygwin でも処理が進んだので、-geometry 250x250 及び -geometry 500x500 に変換して所要時間を確認してみたところ、以下のような結果になった。
Cygwin の環境
Cygwin の実行時間
WSL1 の環境
WSL1 の実行時間
real の比較
結論としては、原因は不明だが、
どうも Cygwin の ImageMagick に問題があり -fx オプションの処理が死にそうに遅いって状況みたいなんだけど、
単純計算でも元の 1920x1060 だと 1 枚当たり 10 分近くかかるわけで、WLS1 比で約 300 倍の遅さとか、いや、流石にそれはいらくなんでも遅過ぎでしょ。
「ImageMagick 複数枚 画像 平均」でググったら、最近流行りの低品質な機械翻訳サイト経由で以下のページが見つかった。
- StackExchange / 2010-12-23: How to average multiple images into one with ImageMagick?
上記のページで、ImageMagick の convert で -fx オプション用いて平均取るスクリプトが張られてたんだが、これを Cygwin 上で試してみたところ、たかだか 1920x1060 程度のサイズなのに、1枚たりとも進まない。
何だこれ?と思い、WSL1 で試してみると、お世辞にも早くはないんだけどまぁ普通に完了。
とりあえず、画像を縮小してみたところ Cygwin でも処理が進んだので、-geometry 250x250 及び -geometry 500x500 に変換して所要時間を確認してみたところ、以下のような結果になった。
Cygwin の環境
$ grep -m1 "model name" /proc/cpuinfo model name : Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
$ free -h total used free shared buff/cache available Mem: 60Gi 26Gi 34Gi 0B 0B 34Gi Swap: 9.6Gi 707Mi 8.9Gi
$ uname -srvmo CYGWIN_NT-10.0 3.1.7(0.340/5/3) 2020-08-22 17:48 x86_64 Cygwin
$ convert --version Version: ImageMagick 7.0.10-27 Q16 x86_64 2020-08-14 https://imagemagick.org Copyright: © 1999-2020 ImageMagick Studio LLC License: https://imagemagick.org/script/license.php Features: Cipher DPC HDRI OpenMP(4.5) Delegates (built-in): bzlib cairo fftw fontconfig fpx freetype gslib heic jbig jng jp2 jpeg lcms lzma pangocairo png ps rsvg tiff webp x xml zlib
Cygwin の実行時間
$ identify {a,b}.jpg a.jpg JPEG 250x138 250x138+0+0 8-bit sRGB 10506B 0.000u 0:00.000 b.jpg JPEG 250x138 250x138+0+0 8-bit sRGB 10470B 0.000u 0:00.000 $ time convert -fx '(u+v)/2' {a,b,c}.jpg real 0m7.616s user 0m4.718s sys 0m2.921s
$ identify {a,b}.jpg a.jpg JPEG 500x276 500x276+0+0 8-bit sRGB 31398B 0.000u 0:00.000 b.jpg JPEG 500x276 500x276+0+0 8-bit sRGB 31274B 0.000u 0:00.000 $ time convert -fx '(u+v)/2' {a,b,c}.jpg real 0m34.427s user 0m21.156s sys 0m15.140s
WSL1 の環境
$ grep -m1 "model name" /proc/cpuinfo model name : Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
$ free -h total used free shared buff/cache available Mem: 60G 23G 36G 17M 223M 37G Swap: 184G 707M 183G
$ uname -srvmo Linux 4.4.0-18362-Microsoft #1049-Microsoft Thu Aug 14 12:01:00 PST 2020 x86_64 GNU/Linux
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.4 LTS Release: 18.04 Codename: bionic
$ convert --version Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org Copyright: © 1999-2017 ImageMagick Studio LLC License: http://www.imagemagick.org/script/license.php Features: Cipher DPC Modules OpenMP Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib
WSL1 の実行時間
$ identify {a,b}.jpg a.jpg JPEG 250x138 250x138+0+0 8-bit sRGB 10.5KB 0.000u 0:00.009 b.jpg JPEG 250x138 250x138+0+0 8-bit sRGB 10.5KB 0.000u 0:00.000 $ time convert -fx '(u+v)/2' {a,b,c}.jpg real 0m0.064s user 0m0.109s sys 0m0.031s
$ identify {a,b}.jpg a.jpg JPEG 500x276 500x276+0+0 8-bit sRGB 31.4KB 0.000u 0:00.000 b.jpg JPEG 500x276 500x276+0+0 8-bit sRGB 31.3KB 0.000u 0:00.000 $ time convert -fx '(u+v)/2' {a,b,c}.jpg real 0m0.117s user 0m0.391s sys 0m0.063s
real の比較
250x138 | 500x276 | 比率 | |
---|---|---|---|
WSL1 | 0.064s | 0.117s | 1 : 1.828 |
Cygwin | 7.616s | 34.427s | 1 : 4.520 |
比率 | 1 : 119.000 | 1 : 294.248 |
結論としては、原因は不明だが、
どうも Cygwin の ImageMagick に問題があり -fx オプションの処理が死にそうに遅いって状況みたいなんだけど、
単純計算でも元の 1920x1060 だと 1 枚当たり 10 分近くかかるわけで、WLS1 比で約 300 倍の遅さとか、いや、流石にそれはいらくなんでも遅過ぎでしょ。
- ImageMagick
- ImageMagick / FX Special Effects Image Operator
タグ
コメントをかく