スキャンしたファイルをHuginでstitchする

雑誌のスキャンはドキュメントスキャナよりフラットベッドスキャナの方が圧倒的に使いやすい。

スキャン画像に変な白い線や黒い線が入ってイライラすることもないし、硬い紙も柔らかい紙も気にせずスキャンできるし、複数ページの巻き込みもない。

買う前には気づかなかったメリットとしては、ポスターやA4ワイド雑誌など、一度でスキャンできないものも複数の画像をつなぎ合わせて(stitch)きれいにスキャンできる。

今まではスキャナに付いてたScan-n-Stitch Deluxeというのを使っていて、全く不満はなかったのだけど、ファイルが増えてくるといちいちポチポチやるのが面倒くさい。バッチで一気に処理したい。

と思って調べていると、Huginというパノラマ画像作成ツールがコマンドラインツールをサポートしてるらしい。というか、Hugin自体がコマンドのフロントエンド(GUI)になってるっぽい。

Hugin tutorial — Stitching flat scanned images

チュートリアルにやり方が載っているのでそのままやれば良い。

・・・はずなのだけど、全然うまくいかん。たぶん高機能すぎて使い方が分からないんだと思う。そもそもカメラを前提にしてるので、設定項目も意味がわからん。

で、試行錯誤の末、超簡単なやり方を見つけた。

f:id:kkobayashi_a:20190318012550p:plain

アシスタントの画面から、"1. Load Images" で画像を読み込み。FOVは10を設定すれば良い。次に"2. Align"を実行。そして"3. Create panorama"で画像を生成。

・・・普通にアシスタントに沿っていれば問題なかった。チュートリアルとはなんだったのか。

親切なことにチュートリアルのページからシェルスクリプトをダウンロードすることができる。これを実行すると期待通りコマンドから一連の処理ができる。

現在のバージョン(2018.0.0)で動くように少し手を加えたけど、概ね元のスクリプトで動くっぽい。

#! /bin/sh
# hugin command tools script to stitch scanned images, fov unknown
# use of fov >= 10 should be OK, could simply set FOV=10
# Terry Duell 2013, 2014

# usage...run-scan-pto_var.sh outputprefix fov

#get the output file prefix
Prefix="$1"

# get the fov
FOV=10

pto_gen --projection=0 --fov=$FOV -o project.pto "$2" "$3"
pto_lensstack -o project1.pto --new-lens i1 project.pto
cpfind -o project1.pto --multirow project1.pto
cpclean -o project2.pto project1.pto
linefind -o project3.pto project2.pto
pto_var -o setoptim.pto --opt 'r,d,e,!r0,!d0,!e0' project3.pto
autooptimiser -n -o autoptim.pto setoptim.pto
pano_modify  --projection=0 --fov=AUTO --center --canvas=AUTO --crop=AUTO --ldr-file=JPG --ldr-compression=95 -o autoptim2.pto autoptim.pto
hugin_executor --stitching --prefix=$Prefix autoptim2.pto

# pto2mk -o project.mk -p $Prefix autoptim2.pto
# make -j 2 -f project.mk all

# open pto files from each step in hugin to check how it all works

古いバージョンではpto2mk & makeでやっていた処理が、今ではhugin_executorで一気にできるようになったんですね。makeをインストールしてない環境でも簡単に実行できるのはよい。

なお3枚以上の画像を結合する場合はpto_lensstackで画像ごとに新しいレンズを割り当てるようにすればよいのだと思う(未確認)。