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

こういう画像から行を抜き出したいです。

認識したい画像

スキャンした画像を想定しているおふとんリーディングと比べて、カメラで撮った画像なので、難しいところがたくさんあります。

  • 背景が真っ白じゃない。
  • 真っ白じゃないだけでなく影が入っている。
  • 文書の外側(机とか)まで入っている。
  • 紙が傾いている。
  • 傾いているだけじゃなく、反っている。

これを、次のようにします。思いつきです。

  1. エッジ抽出
  2. エッジ抽出した画像を2値化
  3. 2値化した画像に対して、「ある行に黒いピクセルがひとつでも入っていればその行を全て黒く塗りつぶす」処理を、画像全体を40列に分割して行う

1. エッジ抽出

エッジ抽出なら、背景が白くなくても、影が入っていても(影は明暗の変化が文字よりはゆるやかな気がするから)、文書の外側が入っていても(平坦な机とかなら問題なさそう)、文字だけが抽出できる気がした。Sobelフィルタを使った。もっといいのがあるらしいけど。

sobel

2. 2値化

大津の閾値判別法っていう判別法があるらしいので、閾値を自動判別させて2値化しました。今回の閾値は輝度が22より明るければ白くすることになりました。

22

3. 40列分割塗りつぶし

40列というのは経験則です。1〜100分割くらいして、見た目いい感じに塗りつぶせてるのが30〜40分割くらいでした。どの画像もレシート全体が写っているなら、分割数は固定でもいいのかなと思って。

stair_40

こうすると、同じ行の文字はだいたいくっつくから、曲がったり斜めになっていても行が抽出できるかなと思った。

でも、離れている文字はくっついていないし、近くにある文字も所々くっついてない。

だからこの結果を使って直接文字行を抽出しようとするより、この結果を使って、行の外形を求めて、それに曲線を当てはめて、画像全体の歪みを直した方がいいのかなと。ゆがみが直れば後は左上から順番に走査すればいいよね。

Leave a Reply

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

CAPTCHA