近代デジタルライブラリーの画像の余白を切ってページ分割するための処理

近デジの画像の余白を取って左右に分割する - hitode909の日記を見てて、


と思ったのでやってみた。

選択された領域

http://www.udp.jp/g/2a2.png http://www.udp.jp/g/29D.png
http://www.udp.jp/g/2qI.png http://www.udp.jp/g/1_U.png

やってること

  • 元画像が超でかいので小さくして処理する(速くなる)
  • cannyエッジを検出したあと確率的ハフ変換で線を検出(縦横)

あとは単純に、

  • 横線のうち一番上をtopに
  • 横線のうち一番下をbottomに
  • 縦線のうち一番左をleftに
  • 縦線のうち一番右をrightに

にして、この矩形を余白を取り除いた領域とする。
このとき真ん中に謎の黒い領域があって、その上下が検出されることがあるので、あまり上過ぎたり下過ぎたりする線は使わないようにした。(かなりテキトウ)
ページの中心は、

  • leftからrightの中心を基準点にする
  • 基準点からある距離の範囲の線をサンプリング
  • サンプリングした線のx位置をk-meansで3つにクラスタリング
  • 各クラスの中心を計算してソート
  • 真ん中を選択する

単純にやるとノイズにひっぱられてズレることが多かったので、中心あたりの線の平均を使うようにした。

処理速度

Q9550で、1枚あたり60〜100ms程度だった。