箱の中の自由粒子

政治・経済・世界情勢などを多角的な視点から考察し、正義を貫く誇り高いブログ。

日常の備忘録。だがしかし、見返すことはない。

ImageMagickでリサイズする方法

概要

ImageMagickでリサイズする方法を調べてみた。

INPUT.JPGをリサイズする

Resize Operator

# Preserve Aspect Ratio
convert -resize WIDTHxHEIGHT INPUT.JPG OUTPUT.JPG
convert -resize WIDTHx       INPUT.JPG OUTPUT.JPG
convert -resize      xHEIGHT INPUT.JPG OUTPUT.JPG

アスペクト比を維持してリサイズするには、オプション-resizeをつければ良い。
WIDTHとHEIGHTの両方をを指定した場合は、小さいほうに合わせてリサイズされる。
数値だけを入れた場合、単位はピクセル。
縮小率で指定したい場合は数値の後ろに%をつける。 例えば、横幅を4000pxから800pxに変更したいときは、 -resize 800xとするか、-resize 20%xとすればよい。

Optional flag

# Ignore Aspect Ratio
convert -resize WIDTHxHEIGHT!  INPUT.JPG OUTPUT.JPG
# Only Shrink Larger Images
convert -resize WIDTHxHEIGHT > INPUT.JPG OUTPUT.JPG

「!」をつけるとアスペクト比は維持されなくなる。

「>」をつけると指定サイズよりも大きい場合のみ縮小される。 小さいものを大きくしたい場合は「<」をつける。 「>」や「<」は特殊文字なので、 shellの場合には「¥>」、window batchの場合には「^>」とする。

Other Resize Operators

convert -thumbnail WIDTHxHEIGHT INPUT.JPG OUTPUT.JPG
convert -scale         WIDTHxHEIGHT INPUT.JPG OUTPUT.JPG
convert -sample      WIDTHxHEIGHT INPUT.JPG OUTPUT.JPG

thumbnail operatorはサブネイル画像をつくるためoperator。 Very very largeな画像を縮小するときに使うのが良いらしい。
-resizeと異なるのは、画像のプロパティ(撮影したカメラの情報や撮影場所など) を取り除いたあとにgeometryを縮小するところ。
-resizeよりも速いらしい。 でも、jpegではあまり効果はないらしい。

scale operatorは、長方形のaveraged pixels でリサイズする。 -resizeよりも簡易で速い。 Box filter での-resizeと似ているが、-resizeとアルゴリズムが異なる。 精度はこちらのほうが良いらしい。
Box filterはaveraged pixelsを生成しないので、この点ではTriangle filterに近いらしい。 ぼかし画像の作成にもつかえる。 一番右(e)がそれ。

まとめ。 -filter box -resizeを使うなら-scaleのほうが速くて、精度が良い。
-scale VALAUE -scale WIDTHxHEIGHTでモザイク画像も作成できる。
v6.4.7まではバグが存在する。

(a) (b) (c) (c) (e)
f:id:freeparticle:20150112114610j:plain f:id:freeparticle:20150112114618j:plain f:id:freeparticle:20150112114625j:plain f:id:freeparticle:20150112115820j:plain f:id:freeparticle:20150112144059j:plain
Original -resize 200x -scale 200x -filter box -resize 200x -scale 30% -scale 200x

sample operatorは、最も速いリサイズoperator。
最も速い理由は、 pixelsを複製して付け足したり、取り除いたりするだけで、 新しいpixelsを作らないから。

Resizing Techniues

Unsharped Resizing

convert INPUT.JPG -unsharp -reize WIDTHxHEIGHT OUTPUT.JPG
convert INPUT.JPG -unsharp RADIUS -resize WIDTHxHEIGHT OUTPUT.JPG
convert INPUT.JPG -unsharp RADIUSxSIGMA{+GAIN}{+THRESHHOLD} -resize WIDTHxHEIGHT OUTPUT.JPG

unsharpeをつけるともやもやしている画像がシャープになり、 劇的にみやすくなるのでおすすめである。

パラメータ 説明
RADIUS Gaussian半径。単位はpx。デフォルトは0。
SIGMA Gaussianの標準偏差。単位はpx。デフォルトは1.0。
GAIN よくわからない。デフォルトは1.0。
THRESHOLD QuantumRange の断片の閾値。デフォルトは0.05。

RADIUSの値は0に設定すると適当な値に調節してくれるようです。 GAINはさっぱり不明。
THRESHOLDの説明文の中にあったQuantumRangeもわかりそうでわからない単語。
よくわからないことだらけであるが、重要なのは設定値。
GIMPは-unsharpのデフォルトとして-unsharp 12x6+0.5+0を採用している。
Image Magick Forumによれば、画像が500pixels以上のときは-unshap 0x0.75+0.75+0.008が良い。
Open Photography Forumによれば、-unsharp 1.5x1+0.7+0.02がおすすめだそうです。

参考文献