新規記事投稿 フォロー記事投稿 記事のキャンセル
From: Akitaka HOSOMI <hosomi@ga2.so-net.ne.jp>
Subject: スタンプ印字された文字の読み取り方法( 試案 )
Date: 1998/08/06 05:58:01

[ 夏休みの自由研究 ]


ダンボール箱にスタンプ印字( 要するに、ゴム印だ )された文字を、 CCD カメラ
を使って、画像としてパソコンに取り込み、これを読み取る方法を検討してみる。

具体的には、みかんのダンボール箱などにスタンプで押された階級文字を例として
考えてみる。みかんの階級表示は、S , M , L , 2L などの文字を使うよね。


スタンプ印字に特有の問題として、


    1. 取り込んだ画像内で正確な位置に文字が印字されているとは、限らない
       ( つまり、印字位置はイイ加減なのだ )

    2. 読み取り対象となる文字以外に、予めダンボールに印字された図形など
       が、取り込んだ画像内に存在する。

    3. インクの量が少ない場合は、文字のカスレ、多い場合は、文字の汚れが
       発生する

    4. スタンプのアタリが悪いと、印字された文字の部分的な欠けが発生する


これだけ、不利な条件が揃うと、まじめなプログラマなら、パソコンに文字を読み
取らせるなどというバカなことは考えず、別の方法を採用する筈だ。

特に、 1.に加え、 2.の条件は、全く致命的で、読み取るべき文字を探すだけで、
骨が折れる。さらに、 3.や 4.が加われば、これは、もう、非常識の極みである。 


-------------------------------------------------------------------------


# まぁ、ブゥたれてても始まらないので、適当に知恵をしぼる ....




[ フーリエ変換法( 試案 ) ]


取り込んだ画像を適当にサンプリングして、濃度( ピクセルの明るさだ )について
の実数列 Sn を作る。

※ ここで、Sn の n という表記については、特に意味はなく、
   数列であることを表しているに過ぎない
   ( つまり、Index として使っているわけではないのだ )

この実数列 Sn に対して FFT を行なう。これを FFT( Sn )とする。


フーリエ変換の性質から、FFT( Sn )は、周波数領域で、パワースペクトルと位相
成分を与える。

さて、Sn の位相( つまり、印字位置のズレだ )は、 FFT( Sn )では、位相成分と
して表現される。つまり、同じ文字なら、印字位置によらず、パワースペクトルは、
同じ特徴を持つことになる。

これで、1. の問題は、基本的にクリアできるだろう。




次に、2. の 予めダンボールに印字された図形 を Gn とする。

このとき、文字と組み合わせた画像表現は、概ね、

    Sn + Gn 

と書ける。

 Sn と Gn は、相対的な位置関係にズレを持つため、画像内で、この Gn を除去し、
直接 Sn のみを取り出すことは難しい。

ところで、これの FFT は、フーリエ変換の線型性から

    FFT( Sn + Gn ) = FFT( Sn ) + FFT( Gn )

と、周波数領域では、それぞれの和の形に分解できる。

基準文字についての FFT( Sn ) や 不要な図形についての FFT( Gn )、 これらの
パワースペクトルは、予め、おおまかに知っておくことができる。

また、相対位置のズレについても、前述のように FFT( Sn )、 FFT( Gn ) の位相
成分として、現れる。

そのため、文字とそれ以外の不要な図形とに周波数領域で分離することは、簡単かも
知れない。




残りは、 3. と 4. だ。

文字のカスレ、汚れ、欠けなどは、基準文字( キレイに印字された文字 )に対して、
適当なフィルタをかけて、基準文字を歪ませたモノだと考えられる。

とすると、このフィルタリング( Ht )は、画像についての畳み込みとして、

    Sn * Ht

と書ける( ただし、* は畳み込み演算を表す )。

これの FFT は、フーリエ変換の性質から、

    FFT( Sn * Ht ) = FFT( Sn ) × FFT( Ht )

と、周波数領域では、積の形になる。

このままでは、分離し難いので、これの対数をとると、

    log( FFT( Sn ) × FFT( Ht ) ) = log( FFT( Sn ) ) + log( FFT( Ht ) )

和の形に書けるので、何やら光明が見えてくる。

この後、逆 FFT を行ない、実際に log( FFT( Ht ) ) を切り離すことができるなら、
楽しい世界が待っていたりもする。

フィルタの周波数成分との違いを際立たせるために、予め、画像に対して、軽くロー
パスフィルタなどをかけておいた方が良いかも知れない。

# 実際にやってみないと、判らない面はある。



以上の方法で、1. 2. 3. 4. の問題をクリアできるなら、認識すべき文字種が限られ
ることから、文字を読み取って判断することは、たやすい。


-------------------------------------------------------------------------

♪ 揺れながら、あつく、Moon Light Dance が、最近のお気に入り。