コンテンツにスキップ

Top

ImageMagick

ImageMagickを用いた画像処理のメモ。

ImageMagickは画像系ツールの総称。
convert、mogrity、compare、identify、montage、composite、display などのツール群。 displayは地味に便利。

1. インストール

$ sudo apt-get -y install imagemagick

2. 加工元画像(lenna.png)

Lenna

3. 回転

convert -rotate  90 lenna.png lenna_90.png
convert -rotate 180 lenna.png lenna_180.png
convert -rotate 270 lenna.png lenna_270.png
90度180度270度
Lenna Lenna Lenna

4. 反転・鏡像

反転と回転はぱっと見同じだが、180度回転と上下反転は異なる。
180度回転は上下左右反転と同義である。

convert -flip lenna.png lenna_flip.png
convert -flop lenna.png lenna_flop.png
convert -flip -flop lenna.png lenna_flop_flop.png
上下(flip)左右(flop)上下左右(flipflop)
Lenna Lenna Lenna

5. クロッピング

画像を抜き出すダイレクトなオプションは -crop です。 -crop (切り取りサイズ)+(切り取り場所の左上)のように使います。

convert -crop (切り取り幅)x(切り取り高)+(左上のX座標)+(左上のY座標)

convert -crop 200x200+100+100 lenna.png lenna_crop.png
Lenna

6. 拡大・縮小

-resizeオプションでサイズ変更ができる。

6.1 サイズ変更

300x150にサイズ変更をする。

convert lenna.png -resize 300x150 lenna_300x200.png

Lenna

???
期待と違って正方形のままです。
どうやらアスペクト比が維持されているようです。

6.2 アスペクト比を無視するサイズ変更

300x150にしたのだから横長のアスペクト比になってほしい。であれば、サイズ指定の最後に ! を付ける必要があります。

convert lenna.png -resize 300x150! lenna_300x200_2.png

Lenna

期待通りになりました!

6.3 パーセント指定によるリサイズ

30%のサイズにしたい場合は以下。

convert lenna.png -resize 30% lenna_30per.png

Lenna

7. グレースケール

白黒256色のグレースケールに変換する。

convert lenna.png -type GrayScale lenna_gray.png

Lenna

8. 2値化

2値化はグレースケールとは違い、0か1(白と黒)の2値に変換する。 閾値の値は「輝度」だが、輝度の値がそもそもよくわからないので、%で指定すると勝手にやってくれる。

convert -threshold 55% lenna.png lenna_th.png

Lenna

9. Gaussian(ガウシアン)ノイズを入れる

noiseで画面にノイズを入れることが出来る。
-noiseでradius、+noiseでどのタイプのノイズを入れるかをしていする。
Gaussianの他に、Impulse、Laplacian、Multiplicative…などあるが略。

convert -noise 1 +noise Gaussian lenna.png lenna_noise.png

Lenna

10. 画像変換

png形式からjpg形式に変換する。

convert lenna.png -quality 100 lenna.jpg

いっぺんに変えたい場合は以下のように。

mogrify -format jpg *.png

10.1 PDFをpngに変換

普通に

convert hoge.pdf hoge.png

で出来たはずだが現在は出来ない。
以下のようなエラーが出る。

convert: not authorized `hoge.pdf' @ error/constitute.c/ReadImage/412.
convert: no images defined `hoge.png' @ error/convert.c/ConvertImageCommand/3210.

どうもセキュリティ関連の制限のよう。 以下のようにPolicyファイルを書き換えればできるが自己責任。

$ sudo vi /etc/ImageMagick-6/policy.xml

  <policy domain="coder" rights="none" pattern="PDF" />
→
  <policy domain="coder" rights="read|write" pattern="PDF" />

11. 比較

間違い探しをする。
いままで使ってきたconvertではなく、compareというコマンドを用いる。

画像はちびむすドリル(https://happylilac.net/kisetsu-sozai.html)さんのフリー画像を拝借。

11.1. かなり位置があっている画像の比較

以下のコマンドで比較する。
なお、2枚の画像の幅、高さは一致していないといけない。

compare left.png right.png diff.png

Left Right
Diff

11.2. 位置ずれがある場合の画像比較

正直、そんなに位置ぴったりなわけ無い。画像サイズすら違うケースもある。
その場合、2枚の写真の特徴量を抽出し、射影変換することで一致させる。
が、コマンドでは出来ないので、それは以下のOpenCVのページで。

11.3. 色変更

赤色が嫌なら変更出来る。

compare left.png right.png -highlight-color white -lowlight-color black diff.png

Diff

12. ディレクトリの中の画像をまとめて変換する方法

xargs や find などを組み合わせて convert で変換することもできるが、mogrify というまとめて変換するツールも提供されている。