近代デジタルライブラリーの画像の余白を切ってページ分割するための処理
近デジの画像の余白を取って左右に分割する - hitode909の日記を見てて、
近代デジタルの画像を余白切ってページ分割するの、知っていれば一瞬でできる問題だと思うんだけど、やったことないので試すか
と思ったのでやってみた。
やってること
- 元画像が超でかいので小さくして処理する(速くなる)
- cannyエッジを検出したあと確率的ハフ変換で線を検出(縦横)
あとは単純に、
- 横線のうち一番上をtopに
- 横線のうち一番下をbottomに
- 縦線のうち一番左をleftに
- 縦線のうち一番右をrightに
にして、この矩形を余白を取り除いた領域とする。
このとき真ん中に謎の黒い領域があって、その上下が検出されることがあるので、あまり上過ぎたり下過ぎたりする線は使わないようにした。(かなりテキトウ)
ページの中心は、
- leftからrightの中心を基準点にする
- 基準点からある距離の範囲の線をサンプリング
- サンプリングした線のx位置をk-meansで3つにクラスタリング
- 各クラスの中心を計算してソート
- 真ん中を選択する
単純にやるとノイズにひっぱられてズレることが多かったので、中心あたりの線の平均を使うようにした。
処理速度
Q9550で、1枚あたり60〜100ms程度だった。