(57)【要約】【課題】書字方向の推定精度が低下するのを抑制すること。【解決手段】認識装置１０は、入力画像を取得する処理と、入力画像を第１の方向へ異なる暈け具合で暈かす第１の暈け画像群と、入力画像を第１の方向と垂直な方向へ異なる暈け具合で暈かす第２の暈け画像群とを生成する処理と、第１の暈け画像群および第２の暈け画像群に含まれる暈け画像ごとに、画像要素の塊の数を算出する処理と、第１の暈け画像群の間で現れる画像要素の塊の数の変化量が所定の閾値以上である暈け度合の第１変化点と、第２の暈け画像群の間で現れる画像要素の塊の数の変化量が所定の閾値以上である暈け度合の第２変化点とのうちより暈け度合の弱い段階で変化点が現れる方向を判定する処理とを実行する。【選択図】図１
2017076291.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
入力画像を取得する処理と、
前記入力画像を第１の方向へ異なる暈け具合で暈かす第１の暈け画像群と、前記入力画像を前記第１の方向と垂直な方向へ異なる暈け具合で暈かす第２の暈け画像群とを生成する処理と、
前記第１の暈け画像群および前記第２の暈け画像群に含まれる暈け画像ごとに、画像要素の塊の数を算出する処理と、
前記第１の暈け画像群の間で現れる画像要素の塊の数の変化量が所定の閾値以上である暈け度合の第１変化点と、前記第２の暈け画像群の間で現れる画像要素の塊の数の変化量が所定の閾値以上である暈け度合の第２変化点とのうちより暈け度合の弱い段階で変化点が現れる方向を判定する処理と
を実行させることを特徴とする認識プログラム。
【請求項２】
前記判定する処理は、前記第１変化点または前記第２変化点のいずれかが存在しない場合、前記入力画像の書字方向を横書きまたは縦書きのいずれでもないと判定することを特徴とする請求項１に記載の認識プログラム。
【請求項３】
前記生成する処理は、前記入力画像を前記第１の方向として水平方向へ暈かすと共に、前記入力画像を前記第１の方向と垂直な方向として垂直方向へ暈かし、
前記判定する処理は、前記第１変化点が前記第２変化点よりも前記暈け度合が弱い段階で現れる場合に前記入力画像の書字方向を横書きと判定し、前記第２変化点が前記第１変化点よりも前記暈け度合が弱い段階で現れる場合に前記入力画像の書字方向を縦書きと判定することを特徴とする請求項１または２に記載の認識プログラム。
【請求項４】
前記算出する処理は、前記第１の暈け画像群および前記第２の暈け画像群に含まれる暈け画像ごとに、当該暈け画像にラベリング処理を適用することにより得られる連結成分の数を算出することにより、前記画像要素の塊の数を算出することを特徴とする請求項１〜３のいずれか１つに記載の認識プログラム。
【請求項５】
前記コンピュータに、
前記入力画像にラベリング処理を適用することにより得られる連結成分の高さの統計値または幅の統計値を算出する処理をさらに実行させ、
前記生成する処理は、前記連結成分の高さの統計値または幅の統計値から定まる更新幅にしたがって前記暈け度合を更新しながら前記第１の暈け画像群および前記第２の暈け画像群を生成することを特徴とする請求項４に記載の認識プログラム。
【請求項６】
前記生成する処理は、前記暈け度合を第１の値から前記連結成分の高さの統計値または幅の統計値と前記入力画像の高さまたは幅とにより定まる第２の値まで更新しながら前記第１の暈け画像群および前記第２の暈け画像群を生成することを特徴とする請求項５に記載の認識プログラム。
【請求項７】
コンピュータが、
入力画像を取得する処理と、
前記入力画像を第１の方向へ異なる暈け具合で暈かす第１の暈け画像群と、前記入力画像を前記第１の方向と垂直な方向へ異なる暈け具合で暈かす第２の暈け画像群とを生成する処理と、
前記第１の暈け画像群および前記第２の暈け画像群に含まれる暈け画像ごとに、画像要素の塊の数を算出する処理と、
前記第１の暈け画像群の間で現れる画像要素の塊の数の変化量が所定の閾値以上である暈け度合の第１変化点と、前記第２の暈け画像群の間で現れる画像要素の塊の数の変化量が所定の閾値以上である暈け度合の第２変化点とのうちより暈け度合の弱い段階で変化点が現れる方向を判定する処理と
を実行することを特徴とする認識方法。
【請求項８】
入力画像を取得する取得部と、
前記入力画像を第１の方向へ異なる暈け具合で暈かす第１の暈け画像群と、前記入力画像を前記第１の方向と垂直な方向へ異なる暈け具合で暈かす第２の暈け画像群とを生成する生成部と、
前記第１の暈け画像群および前記第２の暈け画像群に含まれる暈け画像ごとに、画像要素の塊の数を算出する算出部と、
前記第１の暈け画像群の間で現れる画像要素の塊の数の変化量が所定の閾値以上である暈け度合の第１変化点と、前記第２の暈け画像群の間で現れる画像要素の塊の数の変化量が所定の閾値以上である暈け度合の第２変化点とのうちより暈け度合の弱い段階で変化点が現れる方向を判定する判定部と
を有することを特徴とする認識装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、認識プログラム、認識方法及び認識装置に関する。
【背景技術】
【０００２】
画像に含まれる文字を認識する技術の一例として、ＯＣＲ（Optical  Character  Recognition）が知られている。例えば、文書を撮影することにより得られた文書画像にＯＣＲソフトが適用される場合、文字認識を行う前処理として、文字が書き進められる方向、いわゆる書字方向がレイアウト解析等により推定される。かかる書字方向の一例としては、文字を列ごとに上から下に縦に連ねる縦書きと、文字を行ごとに一方向に横に並べる横書きとが挙げられる。
【０００３】
これら縦書き及び横書きの書字方向を推定するレイアウト解析の精度は、文字認識の精度にも大きな影響を与える。例えば、書字方向を推定する技術として、次のような方法が知られている。すなわち、文書画像を２値化することにより２値化画像を生成した後に、２値化画像上に存在する空白から文字が一定の間隔以内に集まる文字ブロック間の境界を定義するセパレータを求める。そして、２値化画像を上記のセパレータで区切ることにより抽出された文字ブロックを水平方向および垂直方向に走査して黒画素をカウントすることにより、黒画素のヒストグラムを走査方向ごとに生成する。その後、走査方向ごとに生成された黒画素のヒストグラムから黒画素の度数が谷、例えば「０」もしくはその近傍の値となる箇所を検出することにより行間を検出する。その上で、水平方向または垂直方向いずれの走査方向で走査することにより得られた黒画素のヒストグラムに行間が存在するのかにより書字方向を推定する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平０４−３３０５８７号公報
【特許文献２】特開平０８−３０５７９３号公報
【特許文献３】特開平０６−０２００９２号公報
【特許文献４】特開２０１３−１５７９５６号公報
【非特許文献】
【０００５】
【非特許文献１】秋山  照雄，増田  功  「書式指定情報によらない紙面構成要素抽出法」電子通信学会論文誌  Ｖｏｌ，Ｊ６６−Ｄ  Ｎｏ．１
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の技術では、文字ブロックの抽出に失敗すると、書字方向の推定精度が低下する場合がある。
【０００７】
例えば、雑誌などのように紙面のデザインが多様で文字ブロックが矩形で囲まれた領域でない場合、複数の文字ブロックが一つの文字ブロックとして誤検出される場合がある。この場合、文書画像の文字ブロック間で行間の位置がずれていたり、あるいは文書画像上で文字が並ぶ行や列の方向が水平または垂直から傾いていたりすると、黒画素のヒストグラム上で黒画素の度数が谷となる箇所、すなわち行間を検出できず、書字方向を推定できない事態に陥る場合がある。
【０００８】
１つの側面では、本発明は、書字方向の推定精度が低下するのを抑制できる認識プログラム、認識方法及び認識装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
一態様では、認識プログラムは、コンピュータに、入力画像を取得する処理と、前記入力画像を第１の方向へ異なる暈け具合で暈かす第１の暈け画像群と、前記入力画像を前記第１の方向と垂直な方向へ異なる暈け具合で暈かす第２の暈け画像群とを生成する処理と、前記第１の暈け画像群および前記第２の暈け画像群に含まれる暈け画像ごとに、画像要素の塊の数を算出する処理と、前記第１の暈け画像群の間で現れる画像要素の塊の数の変化量が所定の閾値以上である暈け度合の第１変化点と、前記第２の暈け画像群の間で現れる画像要素の塊の数の変化量が所定の閾値以上である暈け度合の第２変化点とのうちより暈け度合の弱い段階で変化点が現れる方向を判定する処理とを実行させる。
【発明の効果】
【００１０】
書字方向の推定精度が低下するのを抑制できる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１に係る認識装置の機能的構成を示す図である。
【図２Ａ】図２Ａは、文書画像の一例を示す図である。
【図２Ｂ】図２Ｂは、文書画像の一例を示す図である。
【図３Ａ】図３Ａは、黒画素のヒストグラムの一例を示す図である。
【図３Ｂ】図３Ｂは、黒画素のヒストグラムの一例を示す図である。
【図４Ａ】図４Ａは、黒画素のヒストグラムの一例を示す図である。
【図４Ｂ】図４Ｂは、黒画素のヒストグラムの一例を示す図である。
【図５】図５は、画像ピラミッドの一例を示す図である。
【図６】図６は、暈け画像におけるブロブの抽出結果の一例を示す図である。
【図７】図７は、暈かし関数の一例を示す図である。
【図８】図８は、暈け画像におけるブロブの抽出結果の一例を示す図である。
【図９】図９は、暈かし関数の一例を示す図である。
【図１０】図１０は、実施例１に係る書字方向の推定処理の手順を示すフローチャートである。
【図１１】図１１は、実施例１に係る暈け画像の生成処理の手順を示すフローチャートである。
【図１２】図１２は、実施例１に係るブロブ数算出処理の手順を示すフローチャートである。
【図１３】図１３は、実施例１及び実施例２に係る認識プログラムを実行するコンピュータのハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して本願に係る認識プログラム、認識方法及び認識装置について説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１３】
［認識装置の構成］
図１は、実施例１に係る認識装置の機能的構成を示す図である。図１に示す認識装置１０は、入力画像に含まれる文字を認識する文字認識処理を行うものである。かかる文字認識処理の一環として、水平方向および垂直方向の暈かし方向別に入力画像を段階的に暈かす場合に、黒画素のブロブが大きく減少する暈け具合の変化がより暈け具合の弱い段階で現れる暈かし方向を判定することにより、入力画像の書字方向を推定する書字方向の推定処理を実現する。
【００１４】
一実施形態として、認識装置１０は、上記の文字認識処理がパッケージソフトウェアやオンラインソフトウェアとして提供される文字認識プログラム、いわゆるＯＣＲソフトを所望のコンピュータにインストールさせることによって実装できる。かかるＯＣＲソフトは、上記の書字方向の推定処理を実現する推定プログラムをコンポーネントとして含むアプリケーションプログラムとして提供されることとしてもよいし、推定プログラムがＯＣＲソフトにアドオンされるライブラリとして提供されることとしてもよい。例えば、スマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）などの移動体通信端末のみならず、タブレット端末やスレート端末などを含む携帯端末装置に文字認識プログラムをインストールさせる。これによって、携帯端末装置を認識装置１０として機能させることができる。なお、ここでは、一例として、認識装置１０が携帯端末装置として実装される場合を例示して以下の説明を行うが、パーソナルコンピュータを始めとする据置き型の端末装置に文字認識プログラムをインストールさせることもできる。
【００１５】
以下では、あくまで一例として、ユーザにより使用されるコンピュータで上記の文字認識プログラムが実行される場合を例示するが、必ずしもユーザのコンピュータ上で上記の文字認識プログラムが実行されずともかまわない。すなわち、ユーザのコンピュータから送信される画像を入力画像とし、当該入力画像の書字方向の推定結果または当該入力画像の文字認識結果を出力する機能が実現されればよく、ネットワーク上のコンピュータ、例えばサーバ装置、物理マシンまたは物理マシン群により形成されるクラウドとして実装されることとしてもかまわない。
【００１６】
図１には、上記の文字認識処理を仮想的に実現する処理部及び処理部が参照または登録を行う記憶部が図示されているが、これらは上記の文字認識処理を行う上で最小限の処理部及び記憶部が示されているに過ぎない。すなわち、認識装置１０は、図１に示した機能部以外にも既知のコンピュータが標準装備する各種の機能部を有することとしてもかまわない。例えば、認識装置１０がタブレット端末として実装される場合には、加速度センサや角速度センサなどのモーションセンサをさらに有することとしてもよい。また、認識装置１０が移動体通信端末として実装される場合には、アンテナ、ＧＰＳ（Global  Positioning  System）受信機などの機能部をさらに有していてもかまわない。また、認識装置１０が据置き端末として実装される場合には、キーボード、マウスやディスプレイなどの入出力デバイスを有することとしてもよい。
【００１７】
図１に示すように、認識装置１０は、画像記憶部１１と、取得部１２と、変換部１３と、生成部１４と、ブロブ数算出部１５と、極値算出部１６と、判定部１７とを有する。
【００１８】
画像記憶部１１は、画像データを記憶する記憶部である。
【００１９】
一実施形態として、画像記憶部１１には、図示しないカメラ等により撮影が行われた場合、カメラにより撮像された画像データが登録される。この他、画像記憶部１１には、図示しない通信インタフェースなどを介して、ネットワーク上の任意のコンピュータから画像データのダウンロードが行われた場合、当該ダウンロードされた画像が登録される。なお、画像記憶部１１には、任意のファイル形式、いわゆるフォーマットで画像を保存することができる。
【００２０】
図２Ａ及び図２Ｂは、文書画像の一例を示す図である。図２Ａ及び図２Ｂには、一例として、いずれも横書きの文書画像が示されている。このうち、図２Ａに示す文書画像に上記の従来技術で説明したレイアウト解析が適用される場合、図中の上段に存在する文字ブロック２０Ａ１と、図中の下段に存在する文字ブロック２０Ａ２とが空白により明りょうに隔てられている。このため、図２Ａに示す文書画像からは、上記の従来技術で説明したレイアウト解析でも、空白からセパレータを定義できる結果、文字ブロック２０Ａ１及び文字ブロック２０Ａ２を個別に抽出することが期待できる。一方、図２Ｂに示す文書画像に上記の従来技術で説明したレイアウト解析が行われる場合、左右の文字ブロックが吹き出し２１Ｂを通じて繋がる結果、両者を区切るセパレータを定義するのが困難である。このため、上記の従来技術で説明したレイアウト解析では、図２Ｂに示す文書画像から左右の文字ブロックが１つの文字ブロック２０Ｂとして抽出される可能性が高い。
【００２１】
図３Ａ、図３Ｂ、図４Ａ及び図４Ｂは、黒画素のヒストグラムの一例を示す図である。図３Ａには、図２Ａに示した文書画像に含まれる文字ブロックを水平方向へ走査することによりカウントされた黒画素の個数が垂直方向へ投影されたヒストグラムが示されると共に、図３Ｂには、図２Ａに示した文書画像に含まれる文字ブロックを垂直方向へ走査することによりカウントされた黒画素の個数が水平方向へ投影されたヒストグラムが示されている。一方、図４Ａには、図２Ｂに示した文書画像に含まれる文字ブロックを水平方向へ走査することによりカウントされた黒画素の個数が垂直方向へ投影されたヒストグラムが示されると共に、図４Ｂには、図２Ｂに示した文書画像に含まれる文字ブロックを垂直方向へ走査することによりカウントされた黒画素の個数が水平方向へ投影されたヒストグラムが示されている。なお、図３Ａ、図３Ｂ、図４Ａ及び図４Ｂに示すグラフの縦軸は、いずれも黒画素の度数、例えば個数や出現確率などを指す。また、図３Ａ及び図４Ａに示すグラフの横軸は、図２Ａまたは図２Ｂに示した文書画像の垂直方向に対応するＹ軸の座標を指し、図３Ｂ及び図４Ｂに示すグラフの横軸は、図２Ａまたは図２Ｂに示した文書画像の水平方向に対応するＸ軸の座標を指す。
【００２２】
図３Ａに示すように、文字ブロックが水平方向に走査された場合、黒画素のヒストグラム上で黒画素の度数が谷となる箇所、すなわち行間を検出できる。一方で、図３Ｂに示すように、文字ブロックが垂直方向に走査された場合、黒画素のヒストグラム上で行間を検出することはできない。よって、図２Ａに示した文書画像が入力画像とされた場合、上記の従来技術で説明したレイアウト解析でも、書字方向が「横書き」であると推定できる。
【００２３】
これとは対照に、図４Ａ及び図４Ｂに示す通り、文字ブロックが水平方向に走査された場合、並びに、文字ブロックが垂直方向に走査された場合のいずれの場合においても、黒画素のヒストグラム上で黒画素の度数が谷となる箇所、すなわち行間を検出することはできない。したがって、上記の従来技術で説明したレイアウト解析では、図２Ｂに示す文書画像から書字方向を推定するのは困難である。
【００２４】
これらのことから、以下では、図２Ｂに示す文書画像のように、複数の文字ブロックが一つの文字ブロックとして誤検出され得る文書画像が入力とされる場合でも、書字方向を正確に推定できる書字方向の推定方法を実現する各処理部について説明する。
【００２５】
取得部１２は、画像を取得する処理部である。
【００２６】
一実施形態として、取得部１２は、次のような条件で上記の書字方向の推定処理を起動し、画像記憶部１１に記憶された画像を取得する。例えば、取得部１２は、図示しない操作部等を介して、画像記憶部１１に記憶された画像の中から画像の指定を受け付けた場合、当該指定が受け付けられた画像を画像記憶部１１から読み出す。この他、取得部１２は、画像記憶部１１に新規の画像が登録される度に、新規登録が行われた画像を画像記憶部１１から読み出す。この場合、取得部１２により上記の書字方向の推定処理が起動され、バックグラウンドで書字方向の推定処理が実行されることになる。このように取得部１２により取得された画像が上記の書字方向の推定処理の入力とされる。以下では、取得部１２により取得された画像、すなわち上記の書字方向の推定処理の入力とされる画像のことを「入力画像」と記載する場合がある。
【００２７】
なお、ここでは、あくまで一例として、認識装置１０が有する画像記憶部１１から画像を取得する場合を例示したが、必ずしも認識装置１０が画像を保存しておらずともかまわない。例えば、取得部１２は、図示しない通信インタフェースを介して、ネットワーク上のコンピュータ、例えばファイルサーバ、Ｗｅｂサーバやクラウドから画像を取得することもできる。この他、取得部１２は、メモリカードやＵＳＢ（Universal  Serial  Bus）メモリなどのリムーバブルメディアから画像を取得することもできる。
【００２８】
変換部１３は、入力画像の画像形式を所定の画像形式へ変換する処理部である。
【００２９】
一実施形態として、変換部１３は、取得部１２により取得された入力画像がカラー形式であるか否かを判定する。このとき、変換部１３は、入力画像がカラー形式である場合、入力画像をカラー形式からグレースケール形式へ変換する。かかるグレースケールへの変換は、任意の手法により実現することができる。例えば、入力画像がＲＧＢ表色系の画像データである場合、変換部１３は、入力画像に含まれる画素が持つＲＧＢの画素値をＬ＊ａ＊ｂ表色系やＹＵＶ表色系の画素値に変換した上で明度Ｌや輝度Ｙを各画素の画素値に設定することにより、カラー形式からグレースケール形式へ変換することができる。
【００３０】
なお、ここでは、他の表色系の画素値へ変換する場合を例示したが、あくまで一例であり、グレースケールへの変換方法はこれに限定されない。例えば、変換部１３は、ＲＧＢの画素値のうち少なくともいずれか１つの成分の画素値を代表して抽出することにより変換を実現してもよいし、複数の成分の画素値に統計処理を実行することにより１つの代表値を算出することにより変換を実現してもよい。
【００３１】
生成部１４は、入力画像から暈け度合が異なる複数の暈け画像を生成する処理部である。
【００３２】
一実施形態として、生成部１４は、変換部１３によりカラーからグレースケールへ変換された入力画像に対し、ガウスフィルタを適用してフィルタの畳み込み演算を行うことにより、暈け画像を生成する。ここで、生成部１４は、画像を水平方向に暈かすガウスフィルタを入力画像に適用する畳み込み演算と、画像を垂直方向に暈かす垂直方向用のガウスフィルタを入力画像に適用する畳み込み演算とを独立して実行する。これによって、生成部１４は、入力画像が水平方向へ暈かされた暈け画像と、入力画像が垂直方向へ暈かされた暈け画像とを生成する。以下では、前者のことを「水平暈け画像」と記載し、後者のことを「垂直暈け画像」と記載する場合がある。さらに、生成部１４は、ガウスフィルタの生成に用いるガウス関数の分散σ２、言い換えればスケールｔを初期値ｔｓから目標値ｔｅまで所定の更新幅Δｔで変化させながらガウスフィルタを計算することにより異なる暈け度合が設定されたガウスフィルタを生成し、ガウスフィルタごとに畳み込み演算を実行する。この結果、１つの入力画像から図５に示す構造を持つ画像ピラミッドが生成される。図５は、画像ピラミッドの一例を示す図である。図５に示すように、水平及び垂直の暈かし方向ごとに、水平方向のスケールｔＨが異なる一連の水平暈け画像と、垂直方向のスケールｔＶが異なる一連の垂直暈け画像とが生成される。
【００３３】
［ガウスフィルタの算出式］
ここで、上記の水平暈け画像の生成に用いる第１のガウスフィルタは、一例として、下記の式（１）にしたがって算出することができる。また、上記の垂直暈け画像の生成に用いる第２のガウスフィルタも、一例として、下記の式（２）にしたがって算出することができる。
【００３４】
【数１】
2017076291.tif 000003
【数２】
2017076291.tif 000004
【００３５】
上記の式（１）における（ｘ，ｙ）は、画像上の座標を指す。このうち、「ｘ」は、画像の水平方向に対応するＸ軸の座標を指す一方で、「ｙ」は、画像の垂直方向に対応するＹ軸の座標を指す。また、上記の式（１）における「ｔＨ」は、水平方向のスケールを指し、また、上記の式（２）における「ｔＶ」は、垂直方向のスケールを指す。また、上記の式（１）及び上記の式（２）における「ｃ」は、１よりも十分に小さく、かつ符号が正である定数を指し、実験等の結果により設定される。例えば、０．１〜０．２の値が定数ｃとして採用される。
【００３６】
これら式（１）及び式（２）を用いて、生成部１４は、スケールｔを初期値ｔｓ、例えば「０」に設定してｔ＝０のガウスフィルタを算出した後、スケールｔの値が目標値ｔｅに更新されるまでスケールｔの値をΔｔずつインクリメントしながら各スケールｔのガウスフィルタを水平及び垂直の暈かし方向ごとに算出する。これによって、行数及び列数が等しい等方性を持つガウスフィルタばかりが算出されるとは限らず、行数及び列数が異なるフィルタ、すなわち非等方性を持つガウスフィルタが算出される場合もある。例えば、スケールｔが大きくなるほど、第１のガウスフィルタの場合、行数が列数よりも大きいガウスフィルタが生成される一方で、第２のガウスフィルタの場合、列数が行数よりも大きいガウスフィルタが生成される可能性が高まる。
【００３７】
ここで、スケールｔが「０」である場合、ガウス関数の分散σ２がゼロに設定される。それ故、ｔ＝０のガウスフィルタが適用された入力画像からは、暈けがない画像、すなわち入力画像と同一の画像が暈け画像として生成されることになる。したがって、ｔ＝０のガウスフィルタは、必ずしも上記の（１）及び上記の式（２）を用いる計算により算出せずともかまわず、入力画像をそのままｔ＝０の暈け画像として用いることができる。なお、ここで、スケールｔの初期値ｔｓを「０」とする場合を例示したが、初期値ｔｓは必ずしも「０」でなくともかまわない。
【００３８】
［フィルタサイズ］
このように、スケールｔを段階的に更新しながらガウスフィルタを算出する場合、ガウスフィルタのフィルタサイズもスケールｔに連動して変えることができる。なぜなら、スケールｔが大きく設定されるほど大きな範囲で入力画像を暈かすにもかかわらず、スケールに比べて小さなフィルタサイズが設定されれば、フィルタサイズが制約となって水平方向または垂直方向の暈かしが適切に機能しないからである。
【００３９】
したがって、生成部１４は、ガウスフィルタのスケールｔが大きくなるにつれてフィルタサイズも大きく設定する。例えば、第１のガウスフィルタ及び第２のガウスフィルタのフィルタサイズＬは、下記の式（３）により算出することができる。例えば、下記の式（３）における「σ」は、ガウス関数の標準偏差である。下記の式（３）における「ｎ」は、整数であり、計算速度または精度のいずれを優先するのかによってその値を変えることができる。例えば、精度よりも計算速度を優先する場合、整数ｎには「１」を採用できる。また、計算速度よりも精度を優先する場合、整数ｎには「２」を採用できる。また、下記の式（３）における「integer」は、整数型を指し、ここでは、一例として、ｎ＊σの乗算値が四捨五入等により整数へされる。但し、σが０でない小さな値をとる場合には、Ｌの最小値は３とされる。
【００４０】
Ｌ＝２＊integer（ｎ＊σ）＋１・・・（３）
【００４１】
ブロブ数算出部１５は、暈け画像に含まれるブロブ数を算出する処理部である。ここでは、あくまで一例として、画像要素の塊であるブロブをラベリング処理により算出する場合を例示するが、ラベリング処理以外の手法により画像要素の塊を抽出し、その数を算出することとしてもかまわない。以下では、あくまで一例として、ラベリング処理により同一のラベルが付与された黒画素の連結成分のことを「ブロブ」と記載する場合がある。
【００４２】
一実施形態として、ブロブ数算出部１５は、生成部１４により生成された一連の水平暈け画像及び一連の垂直暈け画像の各暈け画像に対し、次のような処理を実行する。すなわち、ブロブ数算出部１５は、暈け画像に含まれる各画素が持つ画素値が閾値以上であるか否かを判定する。そして、ブロブ数算出部１５は、画素値が閾値以上である画素に黒に対応する画素値「０」を設定する一方で、画素値が閾値未満である画素に白に対応する画素値「１」を設定する。これによって、暈け画像に含まれる各画素が白の画素値「１」または黒の画素値「０」に２値化された２値化画像を得ることができる。
【００４３】
そして、ブロブ数算出部１５は、２値化画像にラベリング処理を実行する。ここで言う「ラベリング処理」とは、２値化画像上で白または黒が連続する画素に同一のラベルを割り当てる処理を指し、既知の任意の手法を適用することができる。文書内の文字は、黒または黒に準じる色で表現されるので、ここでは、一例として、黒「０」が連続する画素に同一の識別情報が割り当てられる場合を想定する。このように、暈け画像の２値化画像にラベリング処理が行われることにより、同一のラベルが付与された黒画素の連結成分が「ブロブ」として抽出される。その上で、ブロブ数算出部１５は、上記のラベリング処理により暈け画像の２値化画像から抽出された黒画素のブロブ数を計数し、当該黒画素のブロブ数を対数へ変換する。
【００４４】
これによって、水平及び垂直の暈かし方向ごとに、一連の暈け画像のスケールｔと、各スケールｔの暈け画像に含まれる黒画素のブロブ数の対数との対応関係が得られる。以下では、プロセッサ上で仮想的に実現される各処理部がブロブ数の対数の変化をスケールを独立変数とする関数として扱うこととし、当該関数のことを「暈かし関数」と記載する場合がある。さらに、暈かし関数の暈かし方向を総称する場合に「暈かし関数log  f(t)」と記載し、暈かし方向が水平方向である暈かし関数のことを指す場合に「暈かし関数log  f(tH)」と記載すると共に、暈かし方向が垂直方向である暈かし関数のことを指す場合に「暈かし関数log  f(tV)」と記載する場合がある。
【００４５】
極値算出部１６は、暈かし関数の１次微分の極値を算出する処理部である。
【００４６】
一実施形態として、極値算出部１６は、暈かし関数log  f(t)をスケールｔで微分することにより１次導関数dlog  f(t)/dtを算出する。さらに、極値算出部１６は、暈かし関数の２次導関数d2log  f(t)/dt2を算出する。そして、極値算出部１６は、暈かし関数の２次導関数d2log  f(t)/dt2の値が「０」となるゼロクロス点を検出することにより、暈かし関数の１次導関数dlog  f(t)/dtの極値、ここではガウスフィルタの暈かしによりスケールの増加に伴ってブロブ数が単調に減少するので極小値を算出する。その上で、極値算出部１６は、暈かし関数の１次導関数dlog  f(t)/dtの極値が求まる度に、これまでに求められた極値数を１つインクリメントすることにより、水平および垂直の暈かし方向ごとに極値数を集計する。このようにして、水平および垂直の暈かし方向ごとに、１次導関数dlog  f(tH)/dtの極値数、および、１次導関数dlog  f(tV)/dtの極値数が求められる。
【００４７】
判定部１７は、水平および垂直の暈かし方向のうち黒画素のブロブが局所的に大きく減少する暈け具合の変化がより暈け度合の弱い段階で現れる暈かし方向を判定する処理部である。
【００４８】
すなわち、文書画像は、図、表や写真を含んでいても、縦書きまたは横書きの文字部分が一定の割合以上で存在する公算が高い。よって、文書画像には、文字、行または列、章（行の一塊）、ページなどの各階層で固有のスケールを持つ画像要素が存在する。
【００４９】
ここで、書字方向が縦書きまたは横書きのいずれの文書画像が入力画像とされる場合でも、文字と文字の間隔が行と行の間隔、あるいは列と列の間隔よりも小さいという傾向を持つことに変わりはない。それ故、入力画像が水平方向または垂直方向に暈かされたならば、黒画素のブロブが文字単位から行単位または列単位へ暈ける暈け度合の変化点の方が、行間または列間でまたがる文字が１つに暈ける暈け度合の変化点よりも先に現れる。
【００５０】
このことから、黒画素のブロブが局所的に大きく減少する暈け具合の変化がより暈け度合の弱い段階で現れる暈かし方向を判定することにより、当該暈かし方向に対応する方向を書字方向と推定することができる。
【００５１】
一実施形態として、判定部１７は、極値算出部１６により算出された暈かし方向が水平方向である暈かし関数の１次導関数dlog  f(tH)/dtの極値数がゼロであるか否かを判定する。このとき、１次導関数dlog  f(tH)/dtの極値数がゼロである場合、次のような理由から、入力画像が文字主体の文書画像ではなく、入力画像に含まれる内容の主体が文字以外のコンテンツ、例えば風景、図や表などである非文書画像である可能性が高まる。なぜなら、入力画像が横書きであると仮定する場合、水平方向の暈かしにより黒画素のブロブが文字単位から行単位へ変化するが、当該変化が上記の判定により否定されると共に、入力画像が縦書きであると仮定する場合、異なる列にまたがる文字が水平方向の暈かしにより１つに暈ける黒画素のブロブの変化が生じるはずであるが、当該変化も上記の判定により否定されるからである。このような場合、判定部１７は、書字方向の推定結果として「推定不能」をＯＣＲソフト等の出力先へ出力する。
【００５２】
一方、判定部１７は、１次導関数dlog  f(tH)/dtの極値数がゼロでない場合、極値算出部１６により算出された暈かし方向が垂直方向である暈かし関数の１次導関数dlog  f(tV)/dtの極値数がゼロであるか否かをさらに判定する。このとき、１次導関数dlog  f(tV)/dtの極値数がゼロである場合、次のような理由から、入力画像が非文書画像である可能性が高まる。なぜなら、入力画像が横書きであると仮定する場合、異なる行にまたがる文字が垂直方向の暈かしにより１つに暈ける黒画素のブロブの変化が生じるはずであるが、当該変化が上記の判定により否定されると共に、入力画像が縦書きであると仮定する場合、垂直方向の暈かしにより黒画素のブロブが文字単位から列単位へ変化するが、当該変化も上記の判定により否定されるからである。このような場合、判定部１７は、書字方向の推定結果として「推定不能」をＯＣＲソフト等の出力先へ出力する。
【００５３】
また、暈かし関数の１次導関数dlog  f(tV)/dtの極値数もゼロでない場合、水平方向または垂直方向のいずれかの暈かし方向で、黒画素のブロブが文字単位から行単位または列単位へ暈ける暈け度合の変化が現れていることがわかる。この場合、判定部１７は、水平方向である暈かし関数の１次導関数dlog  f(tH)/dtで極値が検出されるスケールのうち最小のスケールｔＨＭ１と、垂直方向である暈かし関数の１次導関数dlog  f(tV)/dtで極値が検出されるスケールのうち最小のスケールｔＶＭ１との大小関係を比較する。
【００５４】
ここで、大小関係の比較結果がスケールｔＨＭ１＜スケールｔＶＭ１である場合、水平方向の暈かしにより、黒画素のブロブが文字単位から行単位へ暈ける暈け度合の変化が現れていると推定できる。この場合、判定部１７は、書字方向の推定結果として「水平方向」をＯＣＲソフト等の出力先へ出力する。一方、大小関係の比較結果がスケールｔＨＭ１＜スケールｔＶＭ１でない場合、垂直方向の暈かしにより、黒画素のブロブが文字単位から列単位へ暈ける暈け度合の変化が現れていると推定できる。この場合、判定部１７は、書字方向の推定結果として「垂直方向」をＯＣＲソフト等の出力先へ出力する。
【００５５】
なお、上記の取得部１２、変換部１３、生成部１４、ブロブ数算出部１５、極値算出部１６及び判定部１７などの処理部は、次のようにして実装できる。例えば、中央処理装置、いわゆるＣＰＵ（Central  Processing  Unit）などに、上記の各処理部と同様の機能を発揮するプロセスをメモリ上に展開して実行させることにより実現できる。これらの処理部は、必ずしも中央処理装置で実行されずともよく、ＭＰＵ（Micro  Processing  Unit）に実行させることとしてもよい。また、上記の各機能部は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などのハードワイヤードロジックによっても実現できる。
【００５６】
また、上記の画像記憶部１１には、一例として、各種の半導体メモリ素子、例えばＲＡＭ（Random  Access  Memory)やフラッシュメモリを採用できる。また、上記の画像記憶部１１は、必ずしも主記憶装置でなくともよく、補助記憶装置であってもかまわない。この場合、ＨＤＤ（Hard  Disk  Drive）、光ディスクやＳＳＤ（Solid  State  Drive）などを採用できる。
【００５７】
［書字方向の推定の具体例］
ここで、図６〜図９を用いて、書字方向の推定方法の一例を説明する。図６及び図８は、暈け画像におけるブロブの抽出結果の一例を示す図である。図７及び図９は、暈かし関数の一例を示す図である。図６及び図８には、図２Ｂに示した文書画像を入力画像とし、入力画像の暈け画像から抽出されたブロブの抽出結果が示されている。図６には、水平方向のスケールｔＨが異なる一連の水平暈け画像から抽出されたブロブが示されると共に、図８には、垂直方向のスケールｔＶが異なる一連の垂直暈け画像から抽出されたブロブが示されている。また、図７の上段には、暈かし方向が水平方向である暈かし関数log  f(tH)が示されると共に、図７の下段には、１次導関数dlog  f(tH)/dtが示されている。さらに、図９の上段には、暈かし方向が垂直方向である暈かし関数log  f(tV)が示されると共に、図９の下段には、１次導関数dlog  f(tV)/dtが示されている。
【００５８】
図６の上段には、ｔＨ＝０の水平暈け画像（＝入力画像）からのブロブの抽出結果が示されている。この通り、スケールｔＨが初期値の段階では、暈け画像から文字単位のブロブが抽出されることがわかる。そして、スケールｔＨがΔｔ刻みで更新されると、図６の中段に示すように、文字単位のブロブが水平方向の暈かしによって行単位のブロブへ暈ける。さらに、スケールｔＨがΔｔ刻みで更新されると、図６の下段に示すように、行単位のブロブが水平方向の暈かしによってページ単位のブロブへ暈ける。
【００５９】
これら一連の水平暈け画像から算出されるブロブ数の対数から、図７の上段に示す暈かし関数log  f(tH)が得られる。この暈かし関数の２次導関数d2log  f(tH)/dt2の値が「０」となるゼロクロス点を検出することにより、暈かし関数の１次導関数dlog  f(tH)/dtの極値が算出される。すなわち、図７の下段に示すように、スケールｔ＝ｔＨＭ１の点、及び、スケールｔ＝ｔＨＭ２の点が極値として算出される。これら２つの極値は、文字単位のブロブが水平方向の暈かしによって行単位のブロブへ暈けたスケールと、行単位のブロブが水平方向の暈かしによってページ単位のブロブへ暈けたスケールとに対応する。
【００６０】
このように、水平方向の暈かしでは、１次導関数dlog  f(tH)/dtの極値数が「２」であると判別できるので、入力画像が水平方向に文字、行（段組みの一行）、ページといった３つの階層構造を持つことを推定できる。
【００６１】
一方、図８の上段には、ｔＶ＝０の垂直暈け画像（＝入力画像）からのブロブの抽出結果が示されている。この通り、スケールｔＶが初期値の段階では、暈け画像から文字単位のブロブが抽出されることがわかる。そして、スケールｔＨがΔｔ刻みで更新されると、図８の下段に示すように、垂直方向の暈かしにより、異なる行にまたがる文字が１つに暈ける。
【００６２】
これら一連の垂直暈け画像から算出されるブロブ数の対数から、図９の上段に示す暈かし関数log  f(tV)が得られる。この暈かし関数の２次導関数d2log  f(tV)/dt2の値が「０」となるゼロクロス点を検出することにより、暈かし関数の１次導関数dlog  f(tV)/dtの極値が算出される。すなわち、図９の下段に示すように、スケールｔ＝ｔＶＭ１の点が極値として算出される。かかる極値は、垂直方向の暈かしにより、異なる行にまたがる文字が１つに暈けたスケールに対応する。
【００６３】
このように、垂直方向の暈かしでは、１次導関数dlog  f(tV)/dtの極値数が「１」であると判別できるので、入力画像が垂直方向に文字、ページといった２つの階層構造を持つことを推定できる。
【００６４】
ここで、暈かし方向が水平方向である暈かし関数の１次導関数dlog  f(tH)/dtの極値数がゼロでなく、かつ暈かし方向が垂直方向である暈かし関数の１次導関数dlog  f(tV)/dtの極値数がゼロでないことから、縦書きまたは横書きのいずれかの書式で文字が記述された文書画像であるとプロセッサに判定させることができる。さらに、水平方向である暈かし関数の１次導関数dlog  f(tH)/dtで極値が検出されるスケールのうち最小のスケールｔＨＭ１が、垂直方向である暈かし関数の１次導関数dlog  f(tV)/dtで極値が検出されるスケールのうち最小のスケールｔＶＭ１よりも小さいことから、書字方向の推定結果が「水平方向」であるとプロセッサに推定させることができる。
【００６５】
以上のことから、本実施例に係る書字方向の推定方法によれば、一例として、図２Ｂに示す文書画像が入力画像とされる場合、言い換えれば複数の文字ブロックが一つの文字ブロックとして誤検出され得る文書画像が入力とされる場合でも、書字方向を正確に推定できる。
【００６６】
［ブロブ数の対数化について］
ここで、暈かし関数でブロブ数の代わりにブロブ数の対数を用いることとしたのは、次のような理由が挙げられる。例えば、文字単位のブロブが行単位のブロブへ暈ける場合と、行単位のブロブがページ単位のブロブへ暈ける場合とでは、ブロブ数の減少幅が大きくことなる。すなわち、行単位のブロブがページ単位のブロブへ暈ける場合の減少幅の方が、文字単位のブロブが行単位のブロブへ暈ける場合の減少幅よりも著しく小さくなることがある。このように、スケールが大きくなるほどスケールが小さい場合よりもブロブ数の減少幅が検出されづらくなる。このため、スケールが小さい場合でもスケールが大きい場合でも、同一のレベルの値をプロセッサに扱わせるために、暈かし関数には、ブロブ数の代わりにブロブ数の対数が用いられる。
【００６７】
なお、ここでは、黒画素のブロブが局所的に大きく減少する暈け具合の変化点として極値を求める場合を例示したが、ブロブの構成単位が暈けにより切り替わる変化点はブロブ数の対数の変化量、すなわち減少幅が所定の閾値以上であるか否かにより推定することができるので、ブロブ数の対数の減少幅が閾値以上であるスケールの変化点が存在するか否かにより、黒画素のブロブが局所的に大きく減少する暈け具合の変化点を求めることもできる。
【００６８】
［処理の流れ］
次に、本実施例に係る認識装置１０の処理の流れについて説明する。なお、ここでは、認識装置１０により実行される（１）書字方向の推定処理を説明した後に、推定処理のサブルーチンとして実行される（２）暈け画像の生成処理、（３）ブロブ数算出処理について説明することとする。
【００６９】
（１）書字方向の推定処理
図１０は、実施例１に係る書字方向の推定処理の手順を示すフローチャートである。この処理は、一例として、画像記憶部１１に記憶された画像の中から画像の指定を受け付けた場合や画像記憶部１１に新規の画像が登録された場合に開始される。
【００７０】
図１０に示すように、取得部１２により画像が取得されると（ステップＳ１０１）、変換部１３は、ステップＳ１０１で取得された入力画像をカラー形式からグレースケール形式へ変換する（ステップＳ１０２）。なお、入力画像がグレースケールである場合には、ステップＳ１０２の処理を省略することができる。
【００７１】
そして、生成部１４は、ステップＳ１０２でグレースケールへ変換された入力画像から暈け度合が異なる複数の暈け画像を生成する「暈け画像の生成処理」を実行する（ステップＳ１０３）。
【００７２】
続いて、ブロブ数算出部１５は、ステップＳ１０３で生成された一連の水平暈け画像及び一連の垂直暈け画像の各暈け画像ごとに当該暈け画像に含まれるブロブ数を算出する「ブロブ数算出処理」を実行する（ステップＳ１０４）。
【００７３】
その後、極値算出部１６は、ステップＳ１０４で水平及び垂直の暈かし方向ごとに算出された各スケールｔの暈け画像に含まれる黒画素のブロブ数の対数から定まる暈かし関数の２次導関数d2log  f(t)/dt2の値が「０」となるゼロクロス点を検出することにより、暈かし関数の１次導関数dlog  f(t)/dtの極値を水平および垂直の暈かし方向ごとに算出する（ステップＳ１０５）。そして、極値算出部１６は、ステップＳ１０５で極値が算出された回数、すなわち極値数を水平および垂直の暈かし方向ごとに集計する（ステップＳ１０６）。
【００７４】
続いて、判定部１７は、ステップＳ１０６で集計された極値数のうち暈かし方向が水平方向である暈かし関数の１次導関数dlog  f(tH)/dtの極値数がゼロであるか否かを判定する（ステップＳ１０７）。
【００７５】
このとき、１次導関数dlog  f(tH)/dtの極値数がゼロである場合（ステップＳ１０７Ｙｅｓ）、上記の理由から、入力画像が非文書画像である可能性が高まる。この場合、判定部１７は、書字方向の推定結果として「推定不能」をＯＣＲソフト等の出力先へ出力し（ステップＳ１０９）、処理を終了する。
【００７６】
また、１次導関数dlog  f(tH)/dtの極値数がゼロでない場合（ステップＳ１０７Ｎｏ）、判定部１７は、ステップＳ１０６で集計された極値数のうち暈かし方向が垂直方向である暈かし関数の１次導関数dlog  f(tV)/dtの極値数がゼロであるか否かをさらに判定する（ステップＳ１０８）。
【００７７】
このとき、１次導関数dlog  f(tV)/dtの極値数がゼロである場合（ステップＳ１０８Ｙｅｓ）、入力画像が非文書画像である可能性が高まる。この場合、判定部１７は、書字方向の推定結果として「推定不能」をＯＣＲソフト等の出力先へ出力し（ステップＳ１０９）、処理を終了する。
【００７８】
一方、暈かし関数の１次導関数dlog  f(tV)/dtの極値数もゼロでない場合（ステップＳ１０８Ｎｏ）、水平方向または垂直方向のいずれかの暈かし方向で、黒画素のブロブが文字単位から行単位または列単位へ暈ける暈け度合の変化が現れていることがわかる。この場合、判定部１７は、水平方向である暈かし関数の１次導関数dlog  f(tH)/dtで極値が検出されるスケールのうち最小のスケールｔＨＭ１と、垂直方向である暈かし関数の１次導関数dlog  f(tV)/dtで極値が検出されるスケールのうち最小のスケールｔＶＭ１との大小関係を比較する（ステップＳ１１０）。
【００７９】
ここで、大小関係の比較結果がスケールｔＨＭ１＜スケールｔＶＭ１である場合（ステップＳ１１０Ｙｅｓ）、水平方向の暈かしにより、黒画素のブロブが文字単位から行単位へ暈ける暈け度合の変化が現れていると推定できる。この場合、判定部１７は、書字方向の推定結果として「水平方向」をＯＣＲソフト等の出力先へ出力し（ステップＳ１１１）、処理を終了する。
【００８０】
一方、大小関係の比較結果がスケールｔＨＭ１＜スケールｔＶＭ１でない場合（ステップＳ１１０Ｎｏ）、垂直方向の暈かしにより、黒画素のブロブが文字単位から列単位へ暈ける暈け度合の変化が現れていると推定できる。この場合、判定部１７は、書字方向の推定結果として「垂直方向」をＯＣＲソフト等の出力先へ出力し（ステップＳ１１２）、処理を終了する。
【００８１】
（２）暈け画像の生成処理
図１１は、実施例１に係る暈け画像の生成処理の手順を示すフローチャートである。この処理は、図１０に示したステップＳ１０３の処理に対応し、ステップＳ１０２で入力画像がグレースケールへ変換された場合、あるいはステップＳ１０１でグレースケールの入力画像が取得された場合に開始される。なお、ここでは、暈かし方向が水平及び垂直のいずれの場合でも、ガウスフィルタの計算に式（１）の水平方向用のアルゴリズムまたは式（２）の垂直方向用のアルゴリズムを用いるのか以外は処理内容が同一であるので、片方の暈け画像の生成、すなわち水平暈け画像を生成する場合を例示する。
【００８２】
図１１に示すように、生成部１４は、スケールｔＨを初期値ｔｓ、例えば「０」に設定する（ステップＳ３０１）。続いて、生成部１４は、暈かし方向が水平であるガウスフィルタを算出するアルゴリズム、すなわち上記の式（１）にスケールｔＨを適用することにより、当該スケールｔＨのガウスフィルタを算出する（ステップＳ３０２）。
【００８３】
続いて、生成部１４は、ステップＳ３０２で算出されたスケールｔＨのガウスフィルタをステップＳ１０２でグレースケール形式へ変換された入力画像に適用して、畳み込み演算を行う（ステップＳ３０３）。これによって、スケールｔＨの水平暈け画像が生成されることになる。
【００８４】
このとき、スケールｔＨが目標値ｔｅまで更新されていない場合（ステップＳ３０４Ｎｏ）、生成部１４は、スケールｔＨの値に所定の更新値Δｔをインクリメントし（ステップＳ３０５）、上記のステップＳ３０２及びステップＳ３０３の処理を繰り返し実行する。その後、スケールｔＨが目標値ｔｅまで更新されると（ステップＳ３０４Ｙｅｓ）、処理を終了する。
【００８５】
なお、ここでは、図１１を参照して、一連の水平暈け画像が生成される場合を例示したが、垂直暈け画像を生成する場合にも、ガウスフィルタの計算に式（２）の垂直方向用のアルゴリズムを用いることにより、同様にして、一連の垂直暈け画像を生成できる。これら水平暈け画像および垂直暈け画像は、いずれの暈け画像が先に生成されることとしてもよいし、両者が並行して生成されることとしてもかまわない。
【００８６】
（３）ブロブ数算出処理
図１２は、実施例１に係るブロブ数算出処理の手順を示すフローチャートである。この処理は、図１０に示したステップＳ１０４の処理に対応し、ステップＳ１０３の処理が実行された後に実行される。
【００８７】
図１２に示すように、ブロブ数算出部１５は、ステップＳ１０３で暈け画像の生成に用いられたスケールｔを１つ選択する（ステップＳ５０１）。続いて、ブロブ数算出部１５は、ステップＳ５０１で選択されたスケールｔに対応する水平暈け画像の２値化画像を生成する（ステップＳ５０２）。
【００８８】
そして、ブロブ数算出部１５は、ステップＳ５０２で得られた水平暈け画像の２値化画像にラベリング処理を適用して得られたブロブを計数する（ステップＳ５０３）。続いて、ブロブ数算出部１５は、ステップＳ５０３で得られたブロブ数を対数へ変換する（ステップＳ５０４）。
【００８９】
また、ブロブ数算出部１５は、ステップＳ５０１で選択されたスケールｔに対応する垂直暈け画像の２値化画像を生成する（ステップＳ５０５）。
【００９０】
そして、ブロブ数算出部１５は、ステップＳ５０５で得られた垂直暈け画像の２値化画像にラベリング処理を適用して得られたブロブを計数する（ステップＳ５０６）。続いて、ブロブ数算出部１５は、ステップＳ５０６で得られたブロブ数を対数へ変換する（ステップＳ５０７）。
【００９１】
その後、未選択のスケールがなくなるまで（ステップＳ５０８Ｙｅｓ）、未選択のスケールを選択し（ステップＳ５０１）、ステップＳ５０２〜ステップＳ５０７の処理を繰り返し実行する。そして、未選択のスケールがなくなると（ステップＳ５０８Ｎｏ）、処理を終了する。
【００９２】
［実施例１の効果］
上述してきたように、本実施例１に係る認識装置１０は、水平方向および垂直方向の暈かし方向別に入力画像を段階的に暈かす場合に、黒画素のブロブが大きく減少する暈け具合の変化がより暈け具合の弱い段階で現れる暈かし方向を判定する。したがって、本実施例に係る認識装置１０によれば、書字方向の推定精度が低下するのを抑制できる。
【実施例２】
【００９３】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【００９４】
［スケールの更新幅Δｔ］
上記の実施例１で説明を行ったスケールの更新幅Δｔは、その値が大きすぎるとブロブ数の対数の一次微分のグラフに極値が観測されづらくなる一方で、これとは逆に小さすぎると処理時間が増加するという傾向を持つ。
【００９５】
このことから、スケールの更新幅Δｔを適切に設定するために、次のような処理を実行することができる。例えば、入力画像が２値化された２値化画像にラベリング処理を適用することによりブロブを抽出した上で、各ブロブの外接矩形の高さの平均サイズＳｈ及び幅の平均サイズＳｗを算出する。各ブロブの外接矩形の高さの平均サイズＳｈ及び幅の平均サイズＳｗは、およそ平均文字高さおよび平均文字幅と同等のサイズになると推定できる。その上で、水平暈け画像を生成する場合には、スケールｔＨの初期値を十分に小さい値、例えばｔＳ＝０．０００１から開始し、スケールｔＨの更新幅ΔｔをＳｗよりも小さい値、例えばΔｔ＝Ｓｗ／５と設定すると共に、目標値ｔｅまでのΔｔの更新回数を入力画像の幅／Δｔ、すなわち目標値ｔｅを入力画像の幅／２と設定することができる。また、垂直暈け画像を生成する場合には、先の水平暈け画像の説明において「Ｓｗ」を「Ｓｈ」と読み替えると共に「入力画像の幅」を「入力画像の高さ」と読み替えることにより、同様にして、スケールｔＶの更新幅Δｔや目標値ｔｅを適切に設定できる。
【００９６】
［暈け画像の生成方法］
上記の実施例１では、ガウスフィルタを用いて入力画像の暈け画像を生成する場合を例示したが、暈け画像の生成方法はこれに限定されない。例えば、入力画像を段階的に縮小することにより一連の暈け画像を生成することができる。この場合、画素を間引く処理が入力画像に適用されることとなるが、当該間引き処理においては、複数の画素のうち最も画素値が低い画素、すなわち黒色に近い画素を残す一方でそれ以外の画素を間引くことにより、ガウスフィルタを用いる畳み込み演算により生成される暈け画像と同等の暈け画像を得ることができる。
【００９７】
［分散および統合］
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されておらずともよい。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、取得部１２、変換部１３、生成部１４、ブロブ数算出部１５、極値算出部１６または判定部１７を認識装置１０の外部装置としてネットワーク経由で接続するようにしてもよい。一例として、取得部１２、変換部１３、生成部１４、ブロブ数算出部１５、極値算出部１６または判定部１７を有するサーバ装置を構築し、クライアント端末へ書字方向の推定結果を送信することもできる。また、取得部１２、変換部１３、生成部１４、ブロブ数算出部１５、極値算出部１６または判定部１７を別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記の認識装置１０の機能を実現するようにしてもよい。
【００９８】
［認識プログラム］
また、上記の実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図１３を用いて、上記の実施例と同様の機能を有する認識プログラムを実行するコンピュータの一例について説明する。
【００９９】
図１３は、実施例１及び実施例２に係る認識プログラムを実行するコンピュータのハードウェア構成例を示す図である。図１３に示すように、コンピュータ１００は、操作部１１０ａと、スピーカ１１０ｂと、カメラ１１０ｃと、ディスプレイ１２０と、通信部１３０とを有する。さらに、このコンピュータ１００は、ＣＰＵ１５０と、ＲＯＭ１６０と、ＨＤＤ１７０と、ＲＡＭ１８０とを有する。これら１１０〜１８０の各部はバス１４０を介して接続される。
【０１００】
ＨＤＤ１７０には、図１３に示すように、上記の実施例１で示した取得部１２、変換部１３、生成部１４、ブロブ数算出部１５、極値算出部１６及び判定部１７と同様の機能を発揮する認識プログラム１７０ａが記憶される。この認識プログラム１７０ａは、図１に示した取得部１２、変換部１３、生成部１４、ブロブ数算出部１５、極値算出部１６及び判定部１７の各構成要素と同様、統合又は分離してもかまわない。すなわち、ＨＤＤ１７０には、必ずしも上記の実施例１で示した全てのデータが格納されずともよく、処理に用いるデータがＨＤＤ１７０に格納されればよい。
【０１０１】
このような環境の下、ＣＰＵ１５０は、ＨＤＤ１７０から認識プログラム１７０ａを読み出した上でＲＡＭ１８０へ展開する。この結果、認識プログラム１７０ａは、図１３に示すように、認識プロセス１８０ａとして機能する。この認識プロセス１８０ａは、ＲＡＭ１８０が有する記憶領域のうち認識プロセス１８０ａに割り当てられた領域にＨＤＤ１７０から読み出した各種データを展開し、この展開した各種データを用いて各種の処理を実行する。例えば、認識プロセス１８０ａが実行する処理の一例として、図１０〜図１２に示す処理などが含まれる。なお、ＣＰＵ１５０では、必ずしも上記の実施例１で示した全ての処理部が動作せずともよく、実行対象とする処理に対応する処理部が仮想的に実現されればよい。
【０１０２】
なお、上記の認識プログラム１７０ａは、必ずしも最初からＨＤＤ１７０やＲＯＭ１６０に記憶されておらずともかまわない。例えば、コンピュータ１００に挿入されるフレキシブルディスク、いわゆるＦＤ、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に認識プログラム１７０ａを記憶させる。そして、コンピュータ１００がこれらの可搬用の物理媒体から認識プログラム１７０ａを取得して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ１００に接続される他のコンピュータまたはサーバ装置などに認識プログラム１７０ａを記憶させておき、コンピュータ１００がこれらから認識プログラム１７０ａを取得して実行するようにしてもよい。
【符号の説明】
【０１０３】
１０    認識装置
１１    画像記憶部
１２    取得部
１３    変換部
１４    生成部
１５    ブロブ数算出部
１６    極値算出部
１７    判定部
【図１】
2017076291.tif 000005
【図２Ａ】
2017076291.tif 000006
【図２Ｂ】
2017076291.tif 000007
【図３Ａ】
2017076291.tif 000008
【図３Ｂ】
2017076291.tif 000009
【図４Ａ】
2017076291.tif 000010
【図４Ｂ】
2017076291.tif 000011
【図５】
2017076291.tif 000012
【図６】
2017076291.tif 000013
【図７】
2017076291.tif 000014
【図８】
2017076291.tif 000015
【図９】
2017076291.tif 000016
【図１０】
2017076291.tif 000017
【図１１】
2017076291.tif 000018
【図１２】
2017076291.tif 000019
【図１３】
2017076291.tif 000020