8月 2013

HomebrewのImageMagickをupgradeしたのだが

久しぶりに ImageMagick をターミナルから使おうとしたら,

dyld: Library not loaded: /usr/local/lib/libtiff.3.dylib

というメッセージが出て,起動しなかった。いろいろ入れているうちに,シンボリック・リンクが壊れているのかも。というか,そもそも ImageMagick をどれで入れたのか記憶がない。Homebrewだった気もするが,自信なし。ということで,brew upgrate imagimagick として最新のにした。そのときのコンソール出力が以下。

rdguru:~ aqua$ brew upgrade imagemagick
==> Upgrading 1 outdated package, with result:
imagemagick 6.8.6-3
==> Upgrading imagemagick
==> Installing imagemagick dependency: libtool
==> Downloading http://ftpmirror.gnu.org/libtool/libtool-2.4.2.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/libtool/2.4.2 --program-prefix=g --enable-ltdl-install
==> make install
==> Caveats
In order to prevent conflicts with Apple's own libtool we have prepended a "g"
so, you have instead: glibtool and glibtoolize.

This formula is keg-only: so it was not symlinked into /usr/local.

Xcode 4.2 and below provide glibtool.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/libtool/lib
    CPPFLAGS: -I/usr/local/opt/libtool/include

==> Summary
 /usr/local/Cellar/libtool/2.4.2: 66 files, 2.2M, built in 22 seconds
==> Installing imagemagick
==> Downloading http://downloads.sf.net/project/machomebrew/mirror/ImageMagick-6.8.6-3.tar.bz2
######################################################################## 100.0%
==> ./configure --disable-osx-universal-binary --without-perl --prefix=/usr/local/Cellar/imagemagick/6.8.6-3 --enable-sh
==> make install
  /usr/local/Cellar/imagemagick/6.8.6-3: 1435 files, 21M, built in 2.2 minutes

よく分からないのだが,Apple標準のlibtoolと衝突してるから,インストールはしたけど,/usr/local にシンボリック・リンクを作ってないよ,ということだろうか。

新しきことを始めるのは難しいなり

自炊したPDFの後処理のために,opencvを勉強して自前のプログラムを作るか,それとも,せっかくWindowsマシンも買ったことだし,Ralpha などで処理するか,悩み中。自分の目的のためには,多機能な画像処理ソフトは実は不要で,やりたいことは,上下左右余白の削除,レベル補正,2倍にリサンプリングしてグレースケール化あるいは白黒2値化,くらいなのである。

で,opencvの出番。ImageMagickでも良いが,以前の実験だと,1ページあたり5秒くらいかかるので,200ページの本で1000秒,つまり20分くらいかかるのである。もう少し速くならないかなあと思うのである。

しかし,まったく新しいことを始めるのは気が重い。ワタシのプログラム経験と言えば,ずっっっっっっと昔,CP/M上でTurbo Pascalとか Mac Plus (68Kでメモリー1M)上でLightning Pascal とか Lightning C とか,そんな時代だからなあ。一応,統合環境のはしりではあると思うが,基本的には,プログラム本体を文書エディターで作成して,ターミナルから cc hoge.c とかいう簡単なことしか出来ない。

とか思うと気が重いのである。思い切って始めてしまえば何てことはないのかもしれないが,近くに先達がいないのもあって,どうしたものかと思いあぐねるのである。

とか考えると,知り合いで未だにTeXをやらない人の気持ちも分かるというものである。ワタシなんぞは,もう20年以上使っているものだから,文章を書くと言えば,TeX以外考えられないが,初めての人には敷居が高いのだろうなあ,と思う。第一,自分でインストールとかしなきゃならないし。

ということで,とりあえず XCode は最新にしたし,Homebrew で opencv もインストールしてあるのだけれど,未だに “Hello World!” 的な,はじめの一歩を踏み出せない状態なのであります。誰かひな形作って,背中押してくれないだろうか・・・。

実家でのWiMAX

ひさびさの実家なので,ネット環境をチェックしてみた。

まずは,持参した au の WiMAX/3G モバイルルーター DATA08W による WiMAX の結果。

お!まずまずのスピードではないか。東京の自宅だとWiMAXは3Mbit/secくらいなので,ずっと速い。

続いて,実家の ADSL+無線LAN での結果。

うーむ。まあ,電話局から遠いから仕方ないですね。

しかし,こういう結果だと,ADSLを解約して WiMAXの据置型にした方が良いのではないかと思ってしまう。月々の料金も似たようなものだし。

ScanSnapの白黒2値読み取りについて

文字主体の本はできれば白黒2値,それが読みにくいなら16階調グレースケールにすることを念頭において,白黒2値化について実験中なのだが,とりあえず,ScanSnap IX500 の白黒2値読み取りについてのメモ。

300dpi カラー読み取りの画像を,赤チャンネル抽出によるグレースケール化,レベル補正,白黒2値化したものと比較すると,直接ScanSnapから300dpi 白黒でスキャンした画像の方が,品質が高そうに思える。

これが,300dpi カラーで読み取ったままの画像。

300dpiカラー圧縮度1

全体的に紙焼けがあるものの,文字は読みやすく,ファイルサイズを気にしなければ,実用上は問題ない。これを1つ前の日記に書いたように,画像梱包,Ralpha, XnView を用いて白黒2値にしたものが,次の画像。

300dpiカラー圧縮度1から白黒2値に変換

紙焼けも除去されていて,まずまずだと思う。ところが,ScanSnapから直接300dpi 白黒で読み込んだ次の画像と較べてみると,明らかに後者の方が品質がよさそうなのである。

300dpi白黒

紙の左端の方に紙焼けの影響が残ってはいるが,それ以外は手動で白黒化したものよりも綺麗というのが,納得の行かないところ。そんなに素晴らしいアルゴリズムなのか?

ところが,画像のサイズを見ると,この白黒画像は縦横ともに300dpiカラーの2倍あるのだ!これはどういうことだろうか。想像だが,300dpiで読み取ったものを2倍に拡大して,それから白黒2値化しているのではないだろうか。そう言えば,スーパーファインについては 300dpi (白黒は600dpi相当) と不思議な事が書いてあった。600dpi相当というのは,そういうことなのかもしれない。

そこで,実験。300dpiカラーで読み取った画像に対して,2倍に拡大(アルゴリズムはLanczos)した後に,白黒2値化を手続きを施してみた。それが次の画像。

300dpiカラー圧縮度1を600dpiに拡大したのち白黒2値に変換

紙焼け除去のためのレベル補正とかの影響を除けば,ScanSnapの300dpi白黒とほぼ同じ品質だと思う。ファイルサイズも,CCITT FAX G4圧縮のTIFFファイル同士で,ほぼ同じであった。

というような訳で,断言は出来ないが,ScanSnapが生成する白黒画像は,おそらくは2倍にリサンプリングしたのちに2値化しているのだろうと思う。だから,白黒とカラーのどちらか一方を選ぶとすれば,フルカラーの方が良いかも。白黒2値化はあとでソフトウェア的に行えるのだから。まあ,それが面倒なら白黒でも悪くはないのだが。

スキャンしたPDFの後処理

以前から懸案ではあったのだが,Windowsマシンも買ったことだし,画像処理関係のツールをいろいろ集めて実験してみた。実は,Mac上でもImageMagickなどで実験していたのだが,Windowsだと専用のツールが豊富にあるようなので,それがWindowsマシン購入の理由の1つだったりするのだ。

自分でスキャンするものについては,スキャンの段階で白黒2値とか選べるが,Bookscanなどのスキャン代行業者に依頼したものは,そういうわけにもいかず,黄色く紙焼けした本など,そのまんまカラーでスキャンされているものが,けっこうある。それをきれいに脱色して,白黒2値あるいは16階調グレースケールあたりに変換するのが目的である。

いくつか試してみた結果,画像梱包,Ralpha Image Resizer, XnView の3つを使って,とりあえず目的を果たした。XnViewはMac版やLinux版もあるが,あとの2つはWindows専用のプログラムである。

まず,画像梱包(pic2pdf)を使って,PDFの画像を抽出する。ソフトの注意書きには,画像梱包でPDFにしたものに対してのみ抽出可能とあったが,スキャンした本のPDFでも大丈夫のようだった。要するに,複雑な構造のPDFもあるから,それは無理ということなのだろう。本をスキャンして作ったPDFは,たいていの場合,単にJPEGのデータにヘッダー(XMLとか)を付加しただけであるから,問題ないのだと思う。抽出のスピードも非常に速い。AcrobatでJPEG出力するよりもずっと速いのだ。しかもJPEGのヘッダーを外すだけなので,基本的に無劣化で画像が取り出せるらしい。

次は,Ralpha Image Resizer を使っての画像処理。紙焼けは,周辺部がとくにひどいので,文字がないことを確認してから,上下左右をトリミングする。そして,同じ分量だけ付け加える。こうすると,紙の周囲が真っ白になる。次に,2倍に拡大する。これで,600dpi相当にオーバーサンプリングしたことになる。最後に白黒2値化するので,解像度を上げておきたいから。続いて,トーンカーブを調節する。ここのところは,ImageMagickのlevel処理のように,high, low, gamma の3つで簡単に処理しても良いと思うのだが,まあ,似たようなもの。プレビュー出来るので,結果を見ながら調節できる。最後に,赤チャンネルのみを抽出してグレースケールにする。

このあと,白黒2値でCCITT FAX G4圧縮のTIFFにしたいのだが,Ralphaでは白黒2値というメニューがない。グレースケールで色数を2色にすれば,白黒2値と同じなのかもだが,それでもJPEGになってしまうのは嫌なので,Ralphaだけで済ますのはあきらめた。結局,Ralphaでは,グレースケールにしてPNGとして出力させて終了。

Ralphaで出力したPNGファイルをXnViewで一括変換する。一気に白黒2値とどれくらい違うが疑問だが,段階を踏むことにして,グレースケールの色数を4bit, 3bit, 2bitと下げていき,最後に1bitつまり白黒2値にする。白黒2値にする際には,閾値(しきいち,threshold)というパラメーターがあるはずなのだが。何故か見当たらない。ここが謎なのだが,ともかく白黒2値にする。出力はCCITT FAX G4圧縮のTIFFファイルとする。

最後に,再び画像梱包を使う。解像度を600dpiと指定して,PDFに固める。解像度の指定をしておくと,Acrobatで見るとき,100%でもそれほど巨大にならないし,それに,表紙と裏表紙(これはPDFから抽出したままで,2倍にしていない)を後からAcrobatで加えるとき,同じ大きさで表示されるので,ちょうど良い。

以上で作業は終了。これをバッチ処理できるスクリプトがあればよいのだが。書式は,
mypdf2pdf hoge.pdf -level high low gamma -color 1-2 143-144 -resize 2 hoge2.pdf
とかいった感じで。

自炊事始め2

裁断の要領や注意点(紙がくっついてないかを、くどいくらいにチェックすること)も分かってきたので、いよいよハードカバーの書籍の解体・裁断・スキャンをやってみた。

少々ためらったが、シュヴァルツの解析学(全7巻)を遡上に。まずは、第7巻から。魚をさばくのに比べればずっと楽。(というか、やったことないから、想像だが。) 本体と表紙をくっつけているガーゼ(?)のような部分があるので、カッターで真っ直ぐに切ると、繋ぎ目がきれいに外れるようだ。上手くやると背表紙に傷をつけることなく、ハードカバーだけがパカっと取れる。まあ、どのみち廃棄するのではあるが、中には裁断後も残す本もあるだろうから。

裁断機Durodex 200DX, OFLAカッターハイパーH型, PLUS カッティングマット, アルミ直尺アル助

道具は、カッター、カッティングマット、定規、そして裁断機。

ハードカバーを解体・裁断 (シュヴァルツ 解析学7)

上で書いたように、脇の部分(?)というか、繋ぎ目を切断してハードバウンドを外す。読み取りはまだ試行錯誤中だが、網掛けの挿絵のない数学書の場合、白黒が一番読みやすいと思う。ScanSnapではPDFかJPEGしか選べないのだが、白黒だとJPEGも選べずにPDFの一択になってしまう。内部フォーマットはJPEGなのか、それともTIFFなのか、それも分からない。まあ、でも、これでまずまず満足の画質ではある。

白黒で読み取ったページ

念のため、カラーのJPEGでも読み取っておくことにした。圧縮もレベル2と少なめにした。ホントはRAWというかTIFFかPNGで読み取ったものを原本にしたいところだが、まあ、その代わりといったところ。

カラーで読み取ったページ

白黒での読み込みも、実はカラーで読み取ってから、画像処理用のCPUか何かでソフトウェア的に白黒にしているのだと思う。だとすれば、カラーで読み取ってから、ImageMagickなどで変換するのと、(手間を除けば)変わらないのはず。

しかし、本を解体するのは、心理的な抵抗感があるなあ。そのうち慣れちゃうのかもだけど。

自炊事始め

一昨日,初めてScansnap IX500でスキャンしたのだが,昨日は,これまた初めて裁断機 Durodex 200DX を使ってみた。幾つか失敗もしたので,反省点を含めてメモ。

  • 裁断後,ページがくっついてないかを,キチンと確認すること。ホッチキス留めの雑誌で失敗したのだが,内側のページがほんの僅かではあるが,くっついていて,そのせいでジャムってしまった。ぱっと見るとちゃんと裁断されているように感じるのだが,油断すべからず。安全を考えるのなら,多めに裁断しよう。
  • 上に関連するのだが,裁断時にページが圧着されるというか,圧力が加わるので,一度パラパラとページをばらすようにした方がよい。静電気で圧着のようになる可能性もあり。そうすると,スキャナーで紙を引き込む時に,くっついたページまで引きずられることとなる。
  • スキャナーの設定について。デフォルトはあまりにざっくりな感じなので,自分の用途を考えて,幾つか設定すべし。とりあえず,PDFかJPEGか,カラーグレー自動か手動でモノクロか,両面か片面か,JPEGの圧縮度をどうするか,このあたりを考えて,複数設定しておくこと。あとでImageMagickなどで補正することを前提とすれば,自動にせずにカラーで読み込んでおくのが良いかも。

ドキュメントスキャナーと裁断機を購入

ついにスキャナーと裁断機を購入した。

ScanSnap IX500 と 裁断機 Durodex 200DX

スキャナーは定番のScanSnap IX500という機種。TWAINに対応していないとか,気に入らないところもあるのだが,総合的にはまあこれだろうな,ということで。裁断機は縦置きで保管できて場所を取らない(比較の問題ですが)ということで,Durodexの200DXにした。

来週になったら少し暇になるから,ホントの自炊(今までは業者に依頼していたので)を始めてみようかな。