fc2ブログ

>> 古い記事: 一定時間だけ指定範囲をハイライトする Emacs Lisp
<< 新しい記事: Script-fu: 矩形選択範囲からImagemagick crop用のgeometry表現を得る

スキャンした書籍や書類の余白をImageMagickで除去する

-trim, -fuzz

そういう都合のいいオプションはないものかと調べてみると、 -trim というのが見つかりました。

convert -trim a.png a-out.png
a.png

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-a.png

a-out.png

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-a-out.png


ただし、 -trim オプションは「角のピクセルと同じ色」を除去するようで、 紙の色ムラ・染みなどノイズが混じっていると上手く除去できません。

convert -trim b.png b-out.png
b.png

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-b.png

b-out.png

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-b-out.png

convert -trim c.png c-out.png
c.png
https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-c.png
c-out.png
https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-c-out.png

そこらへんも適当にうまいことやってくれよーと思うわけですが、 なんと大変都合の良いことに -fuzz というオプションがあるんですね。

-trim に添えて -fuzz 50% などと指定してやります。

convert -fuzz 50% -trim b.png b-out2.png
b.png

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-b.png

b-out2.png

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-b-out2.png

すばらしい。


↓ パラメータをいじるとこんな感じで除去の度合いが変化します。

除去しない 0% ←→ 100% 強く除去する

スキャンした紙を加工する

以下、紙からスキャンした場合を想定した例です。

スキャンした画像 original.jpg

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-paper-original.jpg


上記と同じように fuzz + trim

convert -fuzz 50% -trim original.jpg out-1.jpg
out-1.jpg

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-paper-out-1.jpg


パーセント指定を大きくしすぎると 除去しなくていい部分(文字の一部)まで削れてしまいます。

convert -fuzz 70% -trim original.jpg out-2.jpg
out-2.jpg

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-paper-out-2.jpg


せっかくなのでレベル補正しましょうか。

convert -level 0%,75%,0.8 -fuzz 50% -trim original.jpg out-3.jpg
out-3.jpg

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-paper-out-3.jpg


さらに固定幅の余白を付けたい場合は -border を使います。

convert -level 0%,75%,0.8 -fuzz 50% -trim \
  -bordercolor '#ffffff' -border 10%x10% \
  original.jpg out-4.jpg
out-4.jpg

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-paper-out-4.jpg


固定幅の余白を付けるのではなく できあがりの画像サイズを指定して中央に配置したい場合、 -border を使う代わりに次の2つの処理を組み合わせます。

(1) 白で塗りつぶした200x100ピクセルの画像を作成:

convert -size 200x100 xc:white out.jpg

(2) 下敷きとなる画像(sita.jpg) の上にそれより小さな画像(ue.jpg)を重ねる。 配置は上下左右の中央:

convert sita.jpg ue.jpg -gravity center -composite out.jpg

全部一緒に組み合わせるとこうなります。

convert \
  \( -size 320x400 xc:white \) \
  \( -level 0%,75%,0.8 -fuzz 50% -trim original.jpg \) \
  -gravity center -composite out-5.jpg
original.jpg

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-paper-original.jpg

out-5.jpg

https://blog-imgs-45-origin.fc2.com/h/a/r/haraita9283/im-trim-paper-out-5.jpg

分かりにくい場合は無理に繋げなくても中間ファイルを作って段階ごとに処理すれば良いかと思います。

参考

ImageMagick逆引きコマンドリファレンス
ImageMagick逆引きコマンドリファレンスクーガー株式会社 石井 敦

インプレスジャパン 2008-11-28
売り上げランキング : 426384


Amazonで詳しく見る
by G-Tools
「自炊」のすすめ 電子書籍「自炊」完全マニュアル
「自炊」のすすめ 電子書籍「自炊」完全マニュアル
インプレスジャパン 2011-07-22
売り上げランキング : 21130


Amazonで詳しく見る
by G-Tools
電子ブック自炊完全マニュアル
電子ブック自炊完全マニュアル戸田 覚

東洋経済新報社 2010-12-03
売り上げランキング : 67122


Amazonで詳しく見る
by G-Tools

>> 古い記事: 一定時間だけ指定範囲をハイライトする Emacs Lisp
<< 新しい記事: Script-fu: 矩形選択範囲からImagemagick crop用のgeometry表現を得る
** ホームに戻る

コメント

  1. #- |
  2. 2015/06/19(金) 10:48:49 |
  3. URL
  4. [ 編集]
 わかりやすい解説ありがとうございます。

コメントの投稿

管理者にだけ表示を許可する

|