傾き・反り・影がある文書画像の行認識(その2)

現在の進捗報告です。

前回「40列分割塗りつぶし」画像を得ました。
このあと何をやりたいかというと、

  1. 3次スプライン曲線をあてはめる(Curve Fitting)
  2. 3次スプライン曲線がまっすぐになるように画像全体を変形させる
  3. まっすぐになった画像から文字行を切り出す
  4. OCRにかける
  5. OCR結果に基づいて分類する

慣れてる人がやれば一瞬で終わりそうですが、まだ1にも到達していません。

1に到達するためには、以下を逆順に解決する必要があります。

  1. 3次スプライン曲線をあてはめる点の集合を求める
  2. 点の集合を求めるために、文字行を抜き出す
  3. 文字行を抜き出すために、ゴミを取り除く

まず、異様に縦長の部分を取り除きました(白黒反転してるのは気にしない)
異様に縦長のものを取り除く

次に、行っぽいものを抽出して、短い行は取り除きました。
行の抽出は、画像に対してラベリング処理(ピクセル単位)をすると遅いので、各矩形の情報を数値でもっておいて、矩形単位で処理をしました。
行を抽出

これで点の集合が求められるので、次は3次スプライン曲線をフィッティングします。
(点の集合から外れ値を取り除いた方が良さそうですが、後回しにしましょう。全体の完成が先。)

3次スプライン曲線を求めるための連立方程式を解く部分だけはつくりました。
線形代数Iで習ったガウスの消去法ですね。
制御点(3つの予定)を移動させながら各点との距離の和が最小になる組合せを求める予定。

追記

3次スプライン曲線をあてはめて変形させるというアイデアは、以下の論文から得ました。
「大局的最適化に基づく文書画像の湾曲歪み補正法」
http://human.ait.kyushu-u.ac.jp/~uchida/Papers/IS1-037.pdf

3次スプライン曲線による補完を理解するには、次のページがものすごく分かりやすかったです。
「3次スプライン補間を手作業で行う – ますぽんの雑記」
http://d.hatena.ne.jp/mscp/20091227/1261940720

連立方程式を解くための処理はこちらから。他にも数学的トピックがたくさん載っています。
「Java & C++ & Visual C++ Sample Program」
http://www.geocities.jp/java_sample_program/GaussNoSyoukyoHou.html

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA