ImageMagick
ImageMagickを用いた画像処理のメモ。
ImageMagickは画像系ツールの総称。
convert、mogrity、compare、identify、montage、composite、display などのツール群。
displayは地味に便利。
1. インストール
$ sudo apt-get -y install imagemagick
2. 加工元画像(lenna.png)
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度 |
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) |
5. クロッピング
画像を抜き出すダイレクトなオプションは -crop です。 -crop (切り取りサイズ)+(切り取り場所の左上)のように使います。
convert -crop (切り取り幅)x(切り取り高)+(左上のX座標)+(左上のY座標)
convert -crop 200x200+100+100 lenna.png lenna_crop.png
6. 拡大・縮小
-resizeオプションでサイズ変更ができる。
6.1 サイズ変更
300x150にサイズ変更をする。
convert lenna.png -resize 300x150 lenna_300x200.png
???
期待と違って正方形のままです。
どうやらアスペクト比が維持されているようです。
6.2 アスペクト比を無視するサイズ変更
300x150にしたのだから横長のアスペクト比になってほしい。であれば、サイズ指定の最後に ! を付ける必要があります。
convert lenna.png -resize 300x150! lenna_300x200_2.png
期待通りになりました!
6.3 パーセント指定によるリサイズ
30%のサイズにしたい場合は以下。
convert lenna.png -resize 30% lenna_30per.png
7. グレースケール
白黒256色のグレースケールに変換する。
convert lenna.png -type GrayScale lenna_gray.png
8. 2値化
2値化はグレースケールとは違い、0か1(白と黒)の2値に変換する。 閾値の値は「輝度」だが、輝度の値がそもそもよくわからないので、%で指定すると勝手にやってくれる。
convert -threshold 55% lenna.png lenna_th.png
9. Gaussian(ガウシアン)ノイズを入れる
noiseで画面にノイズを入れることが出来る。
-noiseでradius、+noiseでどのタイプのノイズを入れるかをしていする。
Gaussianの他に、Impulse、Laplacian、Multiplicative…などあるが略。
convert -noise 1 +noise Gaussian lenna.png lenna_noise.png
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
11.2. 位置ずれがある場合の画像比較
正直、そんなに位置ぴったりなわけ無い。画像サイズすら違うケースもある。
その場合、2枚の写真の特徴量を抽出し、射影変換することで一致させる。
が、コマンドでは出来ないので、それは以下のOpenCVのページで。
11.3. 色変更
赤色が嫌なら変更出来る。
compare left.png right.png -highlight-color white -lowlight-color black diff.png
12. ディレクトリの中の画像をまとめて変換する方法
xargs や find などを組み合わせて convert で変換することもできるが、mogrify というまとめて変換するツールも提供されている。