gorogoronyan FC2

IrfanViewで画像ファイルを自動加工処理

要約

イメージスキャナでスキャンした文書画像の加工処理の話です。 たくさんの画像ファイルを IrfanView を使って コマンドプロンプトで自動的に画像処理してみます。

概略

画像処理で、 2, 3枚程度の画像の加工であれば GUI の画像処理アプリケーションで マウスを使って手作業で加工することもできますが、 大量に画像ファイルがある場合は手作業では面倒になります。 同じような操作を繰り返す作業も多く、手間がかかります。 そこで、コマンドプロンプトで自動的に処理してみます。

以下の処理をコマンドプロンプトで自動的に行う。
  1)モノクロ化
  2)トリミング
  3)画像回転
  4)コントラスト調整
  5)画像縮小
  6)階調(色数)削減

例:
  元画像  300ppi 3200x1600画素  24bitフルカラー         1枚  9MBほど
  処理後  150ppi 1600x 800画素   4bitモノクロ(16階調)   1枚  200kBほど

IrfanView

コマンドプロンプトで自動的に画像処理を行えるツールでは、 ImageMagick もよく知られています。 ただし、ちょっとした画像処理のツールとしては大げさで、 ダウンロードしたりインストールしたりするのも面倒です。

今回はお手軽画像処理アプリケーション IrfanView で処理してみます。 こちらは 3MB ほどのコンパクトなアプリケーションです。

IrfanView
IrfanView

IrfanView は、 通常はマウスで操作するアプリケーションとして使いますが、 コマンドプロンプトでコマンド処理するツールとして使うこともできます。 画像のトリミング、回転、縮小、 コントラストや明るさの調整、モノクロ化、 色数削減といった主だった画像処理ができます。 IrfanViewのフォルダの i_options.txt に使い方の説明が書いてあります (ただし英語)。

コマンドプロンプトの基本的な使い方

ごく基本的な使い方は以下の通り。分かる人は読み飛ばしてください。
プロンプト:アプリケーションを起動する・その2
コマンドプロンプトの使い方

画像処理の例

以下のコマンドの説明では、 アプリケーションのパスと .exe を省略してあります。

i_view64 にオプションをつけて処理する場合は、 IrfanView のウインドは起動されず、バックグランドで処理します。 コマンドライン処理では、 パラメータが誤っていてエラーになった場合でも エラーダイアログは一切出ません。 (何のメッセージもなく黙って処理を終了します)。 ということで、正常に処理が行われない場合は オプションやフォルダ名の指定に誤りがないか確認してください。

コマンドの基本構文

1) 1枚の画像だけ処理する場合
  i_view64  (元の画像のパス) /(画像処理方法) /convert=(出力先の画像パス)

2) 指定したフォルダ以下にある画像をまとめて処理する場合
  i_view64  (元画像のフォルダ)\(ファイルの種類) /(画像処理方法) /convert=(出力先のフォルダ)\(ファイルの種類)

◎例

・1個のファイルだけ変換

  i_view64 d:\work\image\1.png /gray /convert=d:\work\gray\1.png
  1)フォルダ d:\work\image にある画像ファイル 1.png を
  2)モノクロに変換(/gray) して
  3)フォルダ d:\work\gray に 1.png で保存。

・指定したフォルダにある画像ファイルをまとめて変換。

  i_view64 d:\work\image\*.png /gray /convert=d:\work\gray\*.png
  1)フォルダ d:\work\image にあるすべて(* が任意の名前を表す)の png ファイルを、
  2)モノクロに変換(/gray) して、
  3)フォルダ d:\work\gray に png 形式で保存。

◎フォルダ指定で以下の場合はエラーになるので注意

  エラーメッセージもなく黙って処理を終了するので、何も出力されない場合は、
 指定に誤りがないかどうか確認してください。

  × 相対パス指定はエラー
  相対パス指定ができないので、ルートからフルパスで書きます。

  × i_view64 d:\work\image       /gray /convert=d:\work\gray\*.png
  入力フォルダ名のみ指定の場合はエラー。

  ○ i_view64 d:\work\image\*     /gray /convert=d:\work\gray\*.png
  こちらは正常に処理される。

  × i_view64 d:\work\image\*     /gray /convert=d:\work\gray\*
  出力先が * はエラー。出力形式(*.拡張子、上の例では *.png)の指定も必要。

  × i_view64 d:\work\image\*     /gray /convert=d:\work\gray
  出力先がフォルダ名のみもエラー。上と同様、出力形式の指定も必要。

画像ファイルのフォーマットには png などビットマップ系のフォーマットを使います。 jpeg は圧縮のときに劣化するので加工途中の画像では使いません。 文書系の画像だと、最終出力も png の方が良いです。
画像ファイルのフォーマット - png, JPEG など

元画像

スキャンした元画像
スキャンした元画像
 右の画像はイメージスキャナでスキャンした画像です。
2500x3500画素 24bitフルカラーの画像です。
この画像には問題点がいくつかあります。
1) 1枚 14MBほどあり、とても大きいファイルサイズ。
2) 画像の向きが90度回転してる。
3) 不要な余白もある。
4) 文書の紙面は灰色っぽい。
これらを IrfanView で加工して調整します。

モノクロ変換

元が白黒の文書だとフルカラー画像の必要はないのでモノクロ化します。 ファイルサイズが 1/3 程度に小さくなります。

コマンド例
i_view64 d:\work\image\*.png /gray /convert=d:\work\gray\*.png

  d:\work\image にある png ファイルをモノクロ化して d:\work\gray に出力

・関連
  /invert   ネガに反転
  /swap_bw  白と黒だけ入れ替え

トリミング

トリミングは画像の一部だけを切り出します。 スキャンした画像の不要な余白を除去します。

コマンド例
i_view64 d:\work\gray\*.png /crop=(1,1,1600,3100,0) /convert=d:\work\trim\*.png

  d:\work\gray にある png ファイルを指定したパラメータでトリミングして
  d:\work\trim に出力

  /crop=(X, Y, 幅, 高さ, 基準点)

  X,Y 基準点からの座標

  基準点は、画像の左上、右上などを指定できる。
  0:左上  1:右上  2:左下  3:右下  4:中央

画像を回転させる

コマンド例
i_view64 d:\work\trim\*.png /rotate_r /convert=d:\work\rotate\*.png

  画像を右に 90度回転させて出力。

・関連
  /rotate_r  右に 90度回転
  /rotate_l  左に 90度回転
  /hflip     左右反転
  /vflip     上下反転

モノクロ化、トリミング、回転後の画像。フルカラーで9MB, モノクロで5.4MBほど。
モノクロ化、トリミング、回転後の画像。フルカラーで9MB, モノクロで5.4MBほど。

コントラスト調整

スキャンした文書画像は灰色の中間色を多く含み、読みづらいです。 そこでコントラストを強調して、明るい部分は白に、 暗い部分は黒になるよう調整にします。 活字のみの文書の場合はムダな中間階調が少なくなり、 ファイルサイズも小さくなります。

コマンド例
i_view64 d:\work\rotate\*.png /contrast=110 /convert=d:\work\contrast\*.png

  コントラスト 110 に調整

・関連
  /contrast=X   Xは数値。コントラストの強さ。
  /bright=X     Xは数値。明るさ。
  /gamma=X      Xは数値。ガンマ。こちらも入力・出力の調整用のカーブ。
コントラスト調整後
コントラスト調整後

画像を縮小

コマンド例
i_view64 d:\work\contrast\*.png /resize=(50p,50p) /resample /convert=d:\work\50\*.png

  /resize=(50p,50p) 画像を縦横50%に縮小する。
  /resample もつけておくときれいに縮小されます。ないとかすれた感じになるかも?

色数削減、階調数削減

こちらも、ファイルサイズを小さくしたいときに使うと便利です。 文書系の画像では、階調数が少なくても品質があまり落ちません。 8bit→4bit(16階調) でファイルサイズが半分ほどになります。

コマンド例
i_view64 d:\work\50\*.png /bpp=4 /convert=d:\work\color4bit\*.png

  bppの値
  8bit     256階調   データサイズが大きくなる
  4bit      16階調   文字中心の文書だと、ほどほど品質
  1bit       2階調   こちらはざらざらになるかも

以上、処理結果

一例: サイズは png画像のファイルサイズ

14MB     元画像 3200x1600画素  24bitフルカラー
5.6MB    モノクロ化、トリミング後     8bit 256階調   (24bitフルカラーだと9MBほど)
175kB    コントラスト調整、縦横50%縮小(面積比1/4)、256→16階調削減後
元画像の部分、モノクロ化、回転後 (63kB)
元画像の部分、モノクロ化、回転後 (63kB)
コントラスト調整、縮小、階調削減後 (3.1kB)
コントラスト調整、縮小、階調削減後 (3.1kB)

複数の処理を1つにまとめる

画像処理のオプションを順番に並べて 1回のコマンドで実行します。

コマンド例
i_view64 d:\work\image\*.png /gray /crop=(1,1,1606,3092,0) /rotate_r /contrast=110 /resize=(50p,50p) /resample /bpp=4 /convert=d:\work\result\*.png

(注意点) IrfanViewは、画像処理をコマンドプロンプトとは別のプロセスで行います。 個別の処理をバッチファイルで並べて実行すると、 それぞれの処理を同時に行おうとする (1つの目の処理の結果を待たず、 次の処理も開始する)のでうまく処理されません。

画像処理結果のサンプル

IrfanViewでは色数削減で 4階調にすることもできます。 (バッチ処理ではできないけど、ウインド上で Decrease Color Depth で Custum で指定できる)。 そちらの処理結果も下のサンプルで並べてみた。

4階調の画像は背景色を 255 の白に置き換えています (階調数を減らすときに 背景の白が 255 ではなく、253 など多少灰色になる場合がある)。


元画像:モノクロ 256階調(8bit) pngで63kB

コントラスト調整後 256階調(8bit) 63kB

50%縮小 13kB

16階調(4bit) 13kB

16階調(4bit) 5.7kB

4階調(2bit) 7.2kB

4階調(2bit) 3.3kB

中間の灰色をなくして背景のノイズを飛ばすと画像が見やすくなります。 階調数を下げるとファイルサイズが小さくなります。 文書画像の場合は 16階調程度であればそれほど劣化しません。

文書系の画像では、画素数は多め、階調数は少なめの方が良さそうです。 大きな画像はビューワーで縮小表示で眺めてもきれいに表示されます。 縮小した画像は、階調数が多くても、 ビューワーで拡大表示してもぼやけた表示になります。

関連

inserted by FC2 system