(2003.06.08/2006.05.12upd)

逆襲のOS/2:USBスキャナ

OS/2でスキャナを使用するには、sane/tameを使うと便利。どうやらGNU系のプログラムのようだが詳細は知らない。VIA APOLLO PLE133TのマシンにEPSON GT-9700Fをつなぎ、tame 1.0.0 rc3で画像のスキャンに成功。0.96(i815EGで使用)では一部不具合が出たが、この1.0.0 rc3では全く問題なく動作した。ちなみに、本HPのトップページの山鬼のイラストは、このtameでスキャンした。

■入手するファイルと構成

スキャナプログラムは@スキャナドライバ、Aスキャニングのメイン部、Bインターフェース部の三階層からなる。これらはそれぞれ別のプログラムだが、tameのアーカイブの中に同梱されているため、入手するのはtame100rc3.zipだけで良い。

用 途 プログラム名 アーカイブ
ドライバUSBSCAN sane-1.0.13-Epson_USB_061.zip
(tame100rc3.zipに同梱)
メイン部sane
GUI部tametame100rc3.zip
DLL EMX emxrt.zip(v0.9d)

なお、GNU系のプログラムなのでEMXが必要。EMX 0.9d以降で、DLLのみではなくBIN(CMD/EXE)も必要なので注意。私は面倒なので、EMX\BINの中身をすべてtameディレクトリに放り込んだ。

■インストール

インストールは比較的簡単。ただし、USBSCAN以外はHPFS(ロングファイル名)必須。また、EMXのDLLとBINにはパス(LIBPATH/PATH)を通しておくこと。
  1. USBのベースドライバをインストールする(別項参照)。
  2. TAME096.ZIPをHPFS上の適当なディレクトリ内(例えばG:\TAME)で解凍する。
  3. 解凍されたsane-1.0.13-Epson_USB_061.zipを解凍する(EPSONのUSBスキャナを使用する場合)。
  4. TameInst.cmdを実行する(USBSCAN.SYSも自動的にインストールされる)。
  5. いったんリブートする。
  6. \USBSCAN内にあるscaninfoを実行して、スキャナが認識されているか確認する。
  7. デスクトップ上にできたアイコンからTAMEを実行する。
なお、tameのユーザーインターフェースはなかなか凝ったものだが、はっきり言って、非常に判りにくい。Alt-Nでプレビュー、Alt-Sでスキャンと覚えておくと便利。

  0.96で起きたトラブルについて:tameはsaneのscanimage.exeに適当なオプションを付けて呼び出しているのだが、そのオプションのうち「--source "Flatbed"」が私の環境では不適切だったようで、正常なスキャンができなかった。しかし、コマンドラインから直接、以下のように指定したら正常にスキャンした。

scanimage.exe -d usbscan$ -l 0 -t 0 -x 215 -y 297 --mode Binary --focus-position "Focus on glass" --resolution 150 --sharpness 0 --brightness 0 --format tiff > G:\TAME\Images\Image001.tif

■ネガスキャンとコマンドライン

私は良く銀塩写真を撮るのだが、最近はタコラボが多くて、安いDPEに出すと目茶苦茶な発色や明るさでプリントされてしまう。そこで、スキャナを使って自宅でプリントシステムを作ろうと思っている。このtame/saneはネガフィルムのスキャンも可能なので、たいへんに有り難いと思っていたのだが、実はネガのスキャンには大きな問題が二点ある。
  1. ネガは小さいので、スキャンの範囲指定がとても面倒臭い。
  2. 標準的なネガ用設定(透過ユニット/ネガ)でスキャンした画像は、全体に青白く飛んでしまう。
▼色の補正について
まずは2.の問題につて。試行錯誤の結果、tameの[Edit image (more)]メニューにある[Normalize]を使うと、発色(と言うよりも濃淡が)かなりまともになることが判った。このNormalizeのあとに適当な画像ツールで色補正を加えれば、ほぼ正常な画像を作ることができる。

なお、この処理を実行する際には、画像の周囲に余白や黒枠を残してはいけない。おそらく、その画像に含まれる最も濃い色を黒に、最も薄い色を白に割り当てて色の濃淡を再配置していると思われるので、本物の黒や白が混じるとNormalizeの効果が薄れてしまう。

また、このtameからこの処理が可能なのは、取り込んだ直後の画像に限られる。ところが、この処理はかなりの確率で飛ぶ。そうなるとスキャンからやり直しだ。ということで、原理的には対処できるようになったが、実際の作業となると、領域指定の困難さも加わり、かなりの苦行となる。この問題を解決するには次項のようにコマンドラインを使う。

▼コマンドラインでの指定
スキャン領域の指定のしにくさは、実際にtameを使ってみればすぐにわかる。操作が面倒なだけでなく、精度にもかなりの疑問がある。いっそのことコマンドラインでバッチ処理する方が賢いだろう。以下に、フィルムフォルダーの一段目3コマ目の画像を720dpiでスキャンし、test.tifというファイルに保存したあと、Normalize処理を掛けるバッチを示す(1行目と2行目は継続しているので注意)。
  scanimage.exe -d usbscan$ -l 71 -t 79 -x 24 -y 36 --mode Color --source Transparency
   --film-type Negative --resolution 720 --format tiff > test.tif

  nconvert -normalize test.tif
-l-tがスキャンエリアの始点を指定するもの(単位はmm)。3コマ目以外のコマをスキャンするときは、ここを変更する。次の-x-yが、画像の縦横の大きさを指定するもの(単位はmm)。35mmフィルムは36mm×24mmだが、フィルムフォルダーは縦長に置くので、縦横が逆になり24mm×36mmとなる。--resolutionは画像の解像度を指定する。720dpiだと1コマが約1000×約700ドットになる。

Normalize処理はnconvert.exeで行う。この処理は、指定したファイルに直接処理を実行するので注意。念のため、元ファイルはバックアップを取っておいた方が良いと思われる。

  コマの間隔は意外に一定していない。流石にまともなカメラならば安定しているが、古い機種やコンパクトだとけっこうバラける。一応、1コマ=38mmのステップのようなので、nコマ目の-tパラメータは[3+38(n-1)]mmくらいが目安になるが、最終的には微調整が必要。たぶん、正確には37.9mmステップくらいじゃないかと思う。

@標準設定でスキャンしたネガフィルム。全体的に青くて白っぽい。直接このファイルを補正してまともな色を出すのはかなり困難。
A上記の画像@にノーマライズ(Normalize)を掛けたもの。色の濃淡はかなりまともになったが、青が強すぎる。ノーマライズはtameから実行することもできるが、コマンドラインのnconvert.exeを使う方が便利。
B画像ツールを使い、上記の画像Aに色補正を掛けたもの(PMViewで赤+19%、緑+3%、コントラスト+10%)。実際の色にかなり近くなった。

■ポジ連続スキャン用スクリプト

調子に乗って、REXXでポジ用の6コマ連続スキャンスクリプトを作ってみた。なお、γ補正と画像の回転はImageMagicのconvert.exeで行っている。
/* ポジ用連続スキャンスクリプト */

Do n=1 to 6
  t=3+37.9*(n-1);
  nst=right('000'||n,4)
  'scanimage.exe -d usbscan$ -l 71 -t' t '-x 24 -y 36 --mode Color --source Transparency --film-type Positive --resolution 400 --format tiff > test'||nst||'.tif'
  'convert -gamma 1.8 -rotate 270 test'||nst||'.tif img'||nst||'.jpg'
end;

■ポジ/ネガ汎用フィルム・スキャン・スクリプト

まあ、こんな感じで…。ちなみに、normalize後の画像は、赤+20%、コントラスト+10%くらいで、だいたい納得のいく発色になる(もちろん、細かな調整は画像ごとに異なる)。
/* フィルムスキャン (GT-9700F/tame) */
/* 2006.05.12 by Nogure, Ten        */

Dan=1;		/* スキャン対称の段(1/2) */
Kstart=2;	/* スキャンを開始するコマ番号(1〜6) */
Kstop =5;	/* スキャンを終了するコマ番号(1〜6) */
PN='N'		/* ポジ/ネガ指定 P=posi、N=nega */
res=400		/* 解像度:400(preview)、720(〜XGA)、1600/2400/3200(hi-res)*/
dy=0; 		/* コマ駒位置補正:上に黒線+、下に黒線− */
dx=0;		/* ★未実装★ 段位置補正*/

/*** パラメータ設定 ***/
p1=' -d usbscan$';
IF Dan=2 then p2=' -l 8'; else p2=' -l 71';	/* 1段目は71mm、2段目は8mm */
p3=' -x 24 -y 36';				/* 1コマのサイズ */
p4=' --mode Color';
p5=' --source Transparency';			/* 透過ユニット指定 */
IF PN='P' then p6=' --film-type Positive'; else p6='--film-type Negative';
p7=' --resolution '||res;
p8=' --format tiff';

/*** Main loop ***/
Do n=Kstart to Kstop
  /* ファイル名生成 */
  nst=right('00'||n,2)
  IF Dan=1 then nst='01'||nst; else nst='02'||nst;
  fname='scan'||nst||'.tif'
  SAY fname

  /* スキャン位置算出 */
  t=4+37.9*(n-1)+dy;
  pt=' -t'||t;

  /* スキャンの実行とノーマライズ */
  'scanimage.exe' p1 p2 pt p3 p4 p5 p6 p7 p8 '>' fname
  '@copy' fname 'norm.tif'
  'nconvert -normalize norm.tif'
end;

EXIT;

【逆襲のOS/2目次】 【ホーム】