【実施例1】
【0011】
本実施形態に係る情報処理装置の一例として、カメラ機能を備えたモバイル端末(携帯端末)を例に説明する。モバイル端末は、スマートフォンやタブレット端末などの無線通信機能を有する端末であってもよく、その場合は無線通信機能を介して撮影した画像データを外部サーバ等に送信することも可能である。
【0012】
図1は、モバイル端末100の外観の一例を示す図であり、モバイル端末100の前面101からの外観と、背面103からの外観とをそれぞれ示している。モバイル端末の前面101には、タッチパネルディスプレイ(表示部)102が備えられ、撮影中の画像の表示と、ユーザからの操作指示の入力との2つの機能を備えている。モバイル端末の背面103には、動画及び静止画を取り込むためのカメラ104が備えられている。本実施形態では、モバイル端末100のユーザは、後述のモバイルアプリ(モバイルアプリケーション)において、カメラ104を用いて被写体(帳票等の文書)105を撮影することによって処理を開始することができる。被写体105は、A4,A3等の定形サイズの紙文書に限るものではなく、非定形サイズの紙文書であってもよいし、さらに、帳票等の紙文書だけに限らず、様々なサイズの名刺、写真、カードなどであってもよい。後述のモバイルアプリは、被写体105の画像を、カメラ104を使用して取り込み、タッチパネル102にその画像を出力することができる。
【0013】
[ハードウェア構成]
図2は、モバイル端末100のハードウェアの構成の一例を示す図であり、各種のユニット(201〜207)を含む。CPU(Central Processing Unit)201は、各種のプログラムを実行することにより、後述するフローチャートの各処理を実現するための処理部として機能するプロセッサである。RAM(Random Access Memory)202は、各種の情報を記憶し、また、CPU201の一時的な作業記憶領域としても利用される。ROM(Read Only Memory)203は、各種のプログラム等を記憶する記憶部である。CPU201は、ROM203に記憶されているプログラムをRAM202にロードしてプログラムを実行する。なお、本発明を実現するためのプログラムが格納される記憶媒体は、ROM203に限るものではなく、USBメモリ等のフラッシュメモリや、HDD(Hard Disk Drive)、SSD(Solid State Drive)などのコンピュータ読み取り可能な記憶媒体であっても構わない。また、そのプログラムは、モバイル端末100の記憶媒体に格納されているものに限るものではなく、実行時に無線ネットワークを介してダウンロードするものであってもよいし、Webブラウザ上で実行されるWebアプリケーションであってもよい。なお、モバイル端末100の機能及び後述するシーケンスに係る処理の全部又は一部については専用のハードウェアを用いて実現してもよい。
【0014】
Input/Outputインターフェース204は、タッチパネル102との間で通信を行い、表示データの送信やユーザからの操作指示データの受信等を行う。NIC(Network Interface Card)205は、モバイル端末100を無線通信等を介してネットワーク(不図示)に接続するためのユニットである。
【0015】
カメラインターフェース206は、カメラ104で撮影した被写体105の画像データを取り込むインターフェースである。上述した各ユニットは、バス207を介してデータの送受信を行うことが可能に構成されている。
【0016】
[ソフトウェア構成]
次に、
図3を用いて、モバイル端末100におけるソフトウェア(モバイルアプリケーション)の機能モジュール構成の一例について説明する。
図3に示される各処理部を実現するプログラムは、上述したようにROM203等に記憶されている。
【0017】
モバイル端末100のOS(Operating System)(不図示)は、データ管理部301を有する。データ管理部301は、画像やアプリケーションデータを管理する。OSは、データ管理部301を利用するための制御API(Application Programming Interface)を提供している。モバイルアプリケーション(モバイルアプリ)302は、その制御APIを利用することでデータ管理部301で管理される画像やアプリケーションデータの取得や保存を行う。
【0018】
モバイルアプリ302は、モバイル端末100にて実行可能なアプリケーションである。モバイルアプリ302は、カメラインターフェース206を介して取り込んだ被写体105の画像データに対する各種のデータ処理を行う。
【0019】
メイン制御部303は、モバイルアプリ302を構成する各モジュール部(303〜311)の制御を行う。
【0020】
情報表示部304は、メイン制御部303からの指示に従い、モバイルアプリ302のユーザインタフェース(UI)をユーザに提供する。
図4の画面401は、モバイルアプリ302により提供されるUI画面の一例を示す図である。モバイル端末の画面401は、モバイル端末100のタッチパネル102上に表示されるものであり、カメラ104を介して取り込んだ撮影中の画像が表示され、当該表示された画像等に対するユーザによる操作(ユーザ操作)を、表示されたUIを介して受け付ける。なお、モバイルアプリ302により提供されるUI画面の形態(撮影画像や操作ボタン等の表示位置、大きさ、範囲、配置、表示内容など)は、図に示す形態に限定されるものではなく、モバイルアプリケーション302の機能を実現することができる適宜の構成を採用することができる。
【0021】
操作情報取得部305は、情報表示部304により表示されたUI画面上で為されたユーザの操作に関する情報を取得し、当該取得した操作情報をメイン制御部303に通知する。例えば、UI画面をユーザが手で触れると、操作情報取得部305は、当該触れられた画面上の位置の情報を感知し、感知した位置の情報をメイン制御部303に送信する。
【0022】
撮影画像取得部306は、メイン制御部303の指示によりカメラインターフェース206およびカメラ104を介して撮影された撮影画像を取得し、記憶部307に記憶する。なお、撮影画像をすぐに処理する場合は、撮影画像取得部306は、メイン制御部303や四辺検出部308にダイレクトに送信しても構わない。また、撮影画像取得部306は、撮影時における画像解像度を取得し、メイン制御部303に送信する。
【0023】
記憶部307は、撮影画像取得部306により取得された撮影画像を記憶する。またメイン制御部303の指示により記憶している撮影画像の削除を行うことができる。
【0024】
四辺検出部308は、撮影画像取得部306によって取得され、記憶部307に記憶された画像に対して、エッジ検出処理等を実行することにより、画像中の文書の四辺(紙端)情報を取得する。四辺情報は、撮影画像中の文書と背景との境界線により構成される四辺形の4つの頂点についての、撮影画像上における位置座標を含んでいる。四辺情報の検出には、ハフ(Hough)変換などの直線検出手法や、Cannyアルゴリズムなどのエッジ検出手法等を組みあわせて検出することが考えられるが、様々な環境下で撮影されることを考慮し、自然光による明暗の変化や、文書の背景によるノイズなどに検出結果が左右されない検出手法が好ましい。
【0025】
四辺情報解析部309は、四辺検出部308で検出された四辺情報に基づき、文書の各辺の長さ、文書アスペクト比の推定値、長辺及び短辺など、文書の形状に関する情報を取得する。また、四辺情報解析部309は、四辺検出部308で検出された四辺情報(4つの頂点の位置座標)をもとに、ガイド表示方向の判定処理を行う。ガイド表示方向の判定処理とは、被写体の撮影中にリアルタイム表示されるライブビュー画像に重畳させて表示させる撮影ガイドを、水平方向の直線とすべきか、垂直方向の直線とすべきかを判定する処理である。ガイド表示方向の判定処理は、撮影画像の縦横比と検出された文書の四辺の縦横比とを比較することにより行われる。すなわち、撮影画像の幅をW、高さをHとし、四辺検出部308で検出された四辺情報に基づいて解析される被写体像の幅をw、高さをhとした場合、
条件式(1) (h/w)>(H/W)
を満たすかどうか判定する。なお、被写体像の幅wは、四辺検出部308で検出した四辺形を構成する辺のうち傾きが水平方向に近い方の2辺の長さに基づいて算出し、被写体像の高さhは、検出した四辺形を構成する辺のうち傾きが垂直方向に近い方の2辺の長さに基づいて算出すればよい。
【0026】
そして、上記条件式(1)を満たす(被写体像の縦横比と撮影画像の縦横比とを比較し、被写体像の縦横比の方が大きい)と判定した場合は、撮影ガイドとして、水平方向の直線を、撮影画像表示領域の上端付近と下端付近の2か所に重畳表示すべきと判断する。すなわち、被写体像の方が撮影画像よりも縦長の比率であると判断した場合は、撮影ガイドとして水平方向の直線を画面内の上下端の2か所に重畳表示する。このとき、ユーザは、被写体像の上辺と下辺の2辺が、撮影ガイドとして画面内に重畳表示された水平方向の2辺に合うように、カメラの撮影位置を調整すれば、文書が撮影画像からはみ出ることなく撮影することが可能となる。なお、この撮影ガイドは、撮影画像が表示される領域の左端と右端のそれぞれに接するように表示するようにしてもよいし、撮影画像が表示される領域の端から所定の距離(例えば、5画素などの所定の画素数)内側の位置に重畳表示するようにしてもよい。
【0027】
一方、上記条件式(1)を満たさないと判定した場合は、撮影ガイドとして、垂直方向の直線を、撮影画像表示領域の左端付近と右端付近の2か所に重畳表示すべきと判断する。すなわち、被写体像の方が撮影画像よりも横長の比率であると判断した場合は、撮影ガイドとして垂直方向の直線を画面内の左右端の2か所に重畳表示する。このとき、ユーザは、被写体像の左辺と右辺の2辺が、撮影ガイドとして画面内に重畳表示された垂直方向の2辺に合うように、カメラの撮影位置を調整すれば、文書が撮影画像からはみ出ることなく撮影することが可能となる。なお、この撮影ガイドは、撮影画像が表示される領域の上端と下端のそれぞれに接するように表示するようにしてもよいし、撮影画像が表示される領域の端から所定の距離(例えば、5画素などの所定の画素数)内側の位置に重畳表示するようにしてもよい。
【0028】
ガイドUI指示部311は、四辺情報解析部309のガイド表示方向判定処理での判定結果に基づいて、重畳表示させる撮影ガイドUIの描画命令を生成し、メイン制御部303を介して、情報表示部304にガイドUIをライブビュー画像上に重畳表示するよう指示する。なお、撮影ガイドとして表示される線は、ユーザによって識別しやすい色(例えば、赤色)の線で表示するのが望ましく、また、撮影ガイドの直線は、実線であってもよいし破線や点線であっても構わない。撮影ガイドUIの表示例について、
図5および
図6を用いて説明する。
【0029】
図5は、四辺情報解析部309が、四辺検出部308で検出された被写体像501の四辺情報に基づいて、撮影ガイドとして、垂直方向の2本の直線(502,503)を表示画面500の左端付近と右端付近の2か所に重畳表示すべきと判断した場合における表示例である。表示画面500には撮影画像がライブビュー表示され、さらに、その上に重畳して撮影ガイドUI(502〜506)が表示される。すなわち、被写体像の方が撮影画像よりも横長の比率を有すると判断した場合は、
図5のように表示画面の左端付近と右端付近に垂直方向の破線の直線502,503で撮影ガイドを表示する。このとき、四辺検出部で検出された四辺のうち、垂直方向に近い2本の辺(被写体像の左辺と右辺)504および505が実線で強調表示され、さらに、当該強調表示される辺504,505を、ガイド表示された垂直方向の破線502,503の位置に合わせるべく、モバイル端末の撮影位置を移動させるようにユーザに対して促すガイドメッセージ506を表示する。このとき、四辺形のどの辺をどちらのガイドに合わせるべきかを分かりやすく表示すべく
図5のように矢印を同時に表示するのが望ましい。被写体像の方が撮影画像よりも横長の比率であるため、被写体像の左辺と右辺をそれぞれ垂直線の撮影ガイドに合わせれば、被写体像は撮影画像からはみ出ることなく撮影可能になる。なお、撮影ガイドUI502〜506は、撮影画像内に、被写体像501の四辺形を構成する4つの頂点全てが含まれている場合にのみ表示し、全ての頂点が含まれていない場合は、モバイル端末が被写体に近すぎるので、モバイル端末を被写体から離して撮影するようにユーザに促すガイドメッセージを表示するのが望ましい。
【0030】
図6は、四辺情報解析部309が、四辺検出部308で検出された被写体像601の四辺情報に基づいて、撮影ガイドとして、水平方向の2本の直線(602,603)を表示画面600の上端付近と下端付近の2か所に重畳表示すべきと判断した場合における表示例である。表示画面600には撮影画像がライブビュー表示され、さらに、その上に重畳して撮影ガイドUI(602〜606)が表示される。このとき、四辺検出部で検出された四辺のうち、水平方向に近い2本の辺(被写体像の上辺と下辺)604および605が実線で強調表示され、さらに、当該強調表示される辺604,605を、ガイド表示された水平方向の破線602,603の位置に合わせるべく、モバイル端末の撮影位置を移動させるようにユーザに対して促すガイドメッセージ606を表示する。このとき、四辺形のどの辺をどちらのガイドに合わせるべきかを分かりやすく表示すべく
図6のように矢印を同時に表示するのが望ましい。被写体像の方が撮影画像よりも縦長の比率であるため、被写体像の上辺と下辺をそれぞれ水平線の撮影ガイドに合わせれば、被写体像は撮影画像からはみ出ることなく撮影可能になる。なお、撮影ガイドUI602〜606は、撮影画像内に、被写体像601の四辺形を構成する4つの頂点全てが含まれている場合にのみ表示し、全ての頂点が含まれていない場合は、モバイル端末が被写体に近すぎるので、モバイル端末を被写体から離して撮影するようにユーザに促すガイドメッセージを表示するのが望ましい。
【0031】
自動撮影処理部310は、四辺情報に基づいて、所定の自動撮影条件を満たしたか判断し、自動撮影条件を満たしたと判断した時点での撮影画像を記憶部307へ自動的に保存する。なお、この記憶部に保存される撮影画像は、カメラで撮影中の動画像から抽出した静止画像であってもよいし、撮影条件を満たしたと判断した時点で電子シャッター(またはメカニカルシャッター)を作動させてカメラ104で撮影可能な最大画素数での静止画像を得るようにしてもよい。
【0032】
自動撮影条件としては、例えば、以下のような条件を設定することが可能である。まず、撮影画像の幅をW、高さをHとし、さらに、被写体像の四辺情報に基づいて求めた水平方向に近い2つの辺の長さがw1、w2であり、垂直方向に近い2つの辺の長さがh1、h2であったとする。このとき、被写体像の水平方向の2辺の長さと撮影画像の幅との比率を、所定の閾値αと比較し、被写体像の垂直方向の2辺の長さと撮影画像の高さとの比率を、所定の閾値αと比較する。所定の閾値αは、例えば、0.95に設定する。このとき、四辺形の頂点すべてが撮影画像内にあるという条件を満たし、かつ、下記の条件式(2)(3)の少なくともいずれかを満たせば、自動撮影条件を満たしたと判断する。
条件式(2) (w1/W)>α && (w2/W)>α
条件式(3) (h1/H)>α && (h2/H)>α
【0033】
なお、この撮影条件に、撮影画像における被写体像の傾きが小さいという条件を加えてもよい。この場合は、被写体像の四辺形の頂点の位置座標を比較して、各辺がほぼ水平方向または垂直方向となっているかどうか判断すればよい。
【0034】
また、上述したように、上記条件式(2)(3)の両方を常に判断するように構成してもよいが、撮影ガイドの直線を、水平方向とするか垂直方向とするか判断した後であれば、その表示方向に基づいて条件式(2)(3)のどちらかだけを判断するように構成しても構わない。例えば、
図5のような垂直方向の破線502,503を表示した場合は、四辺形の頂点全てが撮影画像内にあるという条件と上記条件式(2)とを満たすか判断し、条件式(3)の判断はスキップしてもよい。
図6のような水平方向の破線602,603を表示した場合は、四辺形の頂点全てが撮影画像内にあるという条件と上記条件式(3)とを満たすか判断し、条件式(2)の判断はスキップしてもよい。
【0035】
[処理フロー]
図7を用いて、モバイル端末100のモバイルアプリ302が実行する本発明の実施例1の処理フローについて説明する。本フローは、ユーザの操作によりモバイル端末100におけるモバイルアプリ302が起動されることをトリガーに開始する。
【0036】
ステップS701で、メイン制御部303は、撮影画像取得部306で取得された現在の撮影画像のデータ(動画データ)を受信する。
【0037】
ステップS702で、メイン制御部303は、四辺検出部308に対し、撮影画像取得部306で当該取得した撮影画像について四辺検出処理を実行して、四辺情報を取得するよう指示する。
【0038】
ステップS703で、メイン制御部303は、S704での自動撮影条件の判定に用いるための自動撮影条件(条件式や閾値αなど)を呼び出す。
【0039】
ステップS704で、メイン制御部303は、自動撮影処理部310に対し、前述したような自動撮影条件を満たすかどうかの判定処理を実行するように指示する。自動撮影条件を満たす(すなわち、自動撮影を行う)と判定した場合はS705へ遷移し、自動撮影条件を満たさないと判定した場合はS706へ遷移する。
【0040】
ステップS705で、メイン制御部303は、自動撮影処理部310に対し自動撮影を行うよう指示し、自動撮影処理部310は、その時点での撮影画像データを記憶部に記憶する。なお、モバイルアプリ302が、この撮影画像データに対して文字認識処理(OCR処理)を実行して文字認識結果を取得する処理も実行する場合は、さらにOCR処理部(不図示)に対して、当該記憶した撮影画像データに対して更にOCR処理を実行するように指示する。
【0041】
ステップS706で、メイン制御部303は、四辺情報解析部309に対して、S702で得た四辺情報を解析してガイド表示方向を判定するように指示する。四辺情報解析部309でのガイド表示方向判定処理の結果、垂直線のガイドを表示すべきと判断した場合はS707に遷移し、水平線のガイドを表示すべきと判断した場合はS708へ遷移する。
【0042】
ステップS707で、メイン制御部303は、ガイドUI指示部311に、垂直線のガイドを表示するための描画命令を生成させ、情報表示部304を介して、
図5のような垂直線502,503の表示ガイドをライブビュー画面に重畳表示させ、その後、S701へ遷移する。
【0043】
ステップS708で、メイン制御部303は、ガイドUI指示部311に、水平線のガイドを表示するための描画命令を生成させ、情報表示部304を介して、
図6のような水平線602,603の表示ガイドをライブビュー画面に重畳表示させ、その後S701へ遷移する。
【0044】
なお、上述したフローでは、垂直線および水平線のガイド表示について説明したが、S704で自動撮影条件を判断した際に、被写体文書の四辺形の4つの頂点が撮影画像内にないため、前記自動撮影条件を満たさないと判断した場合は、モバイル端末を被写体から遠ざけるようにメッセージを表示する処理を追加してもよい。
【0045】
実施例1によれば、高解像度の被写体の画像を撮影するために、ユーザにとって分かりやすいガイドUIを表示することができる。
【実施例2】
【0046】
実施例2では、現在撮影中の被写体を90度回転させることで、より高解像度の被写体画像を撮影できるかどうか判定する処理を加えた例について、説明する。
【0047】
図9を用いて、モバイル端末100のモバイルアプリ302が実行する本発明の実施例2の処理フローについて説明する。
【0048】
ステップS901で、メイン制御部303は、撮影画像取得部306で取得された現在の撮影画像のデータ(動画データ)を受信する。
【0049】
ステップS902で、メイン制御部303は、四辺検出部308に対し、撮影画像取得部306で当該取得した撮影画像について四辺検出処理を実行して、四辺情報を取得するよう指示する。
【0050】
ステップS903で、メイン制御部303は、四辺情報解析部309に対し、撮影画像中の被写体像に基づいて、被写体の現在の向きが適正であるかどうか判断する。適正だと判断された場合はS904へ、適正でないと判断された場合はS907へ遷移する。
【0051】
被写体の適正方向を判定するための被写体方向適正判定処理は、四辺情報解析部309によって行われる。撮影画像の幅をW、高さをH、撮影画像中の被写体像の幅をw、高さをhとした場合、以下の条件式(4)(5)のいずれかを満たした場合、現在の被写体方向のままで適正であると判定する。
条件式(4) (H/W)>1 && (h/w)≧1
条件式(5) (H/W)<1 && (h/w)≦1
【0052】
なお、撮影画像の幅Wと高さHが同じ(正方形)である場合は、被写体を回転させたとしても変わらないので、S903の判定処理を行わないようにしてもよい。
【0053】
また、この判定を行う場合、撮影画像中の被写体像が傾いている場合や、被写体を斜め方向から撮影したために歪みがある場合は、被写体像の外接矩形や内接矩形の幅及び高さを代わりに用いて判断してもよいし、被写体のアスペクト比を推定して歪み補正を行った後の矩形を用いて判断してもよい。
【0054】
ステップS904で、メイン制御部303は、S905での自動撮影条件の判定に用いるための自動撮影条件(条件式や閾値αなど)を呼び出す。
【0055】
ステップS905で、メイン制御部303は、自動撮影処理部310に対し、実施例1で説明したような自動撮影条件を満たすかどうかの判定処理を実行するように指示する。自動撮影条件を満たす(すなわち、自動撮影を行う)と判定した場合はS906へ遷移し、自動撮影条件を満たさないと判定した場合はS908へ遷移する。
【0056】
ステップS906で、メイン制御部303は、自動撮影処理部310に対し自動撮影を行うよう指示し、自動撮影処理部310は、その時点での撮影画像データを記憶部に記憶する。なお、モバイルアプリ302が、この撮影画像データに対して文字認識処理(OCR処理)を実行して文字認識結果を取得する処理も実行する場合は、さらにOCR処理部(不図示)に対して、当該記憶した撮影画像データに対して更にOCR処理を実行するように指示する。
【0057】
ステップS907で、メイン制御部303は、ガイドUI指示部311に対して、
図8のモバイル端末画面800のように、回転指示のガイドUIを表示するよう指示し、その後S901へ遷移する。
【0058】
図8のモバイル端末画面800は、S903で現在の被写体の方向が適正でない(すなわち、被写体を90度回転させればより高解像度で被写体を撮影できる)と判定した場合に表示されるガイドUIの表示例である。モバイル端末画面800には、撮影ガイドとして、メッセージ802がライブビュー画像上に重畳表示される。メッセージ802は、撮影画像内に被写体像801の四辺形の頂点全てが含まれている場合にのみ表示される。このメッセージ802は、被写体(用紙)を90度回転させて撮影するように、ユーザに促すためのメッセージが表示される。
図8の場合は、被写体を回転させ横向きにすることでより高解像度な画像を取得することが可能となるため、その旨がメッセージとして表示されている。なお、ここでは、被写体を回転させるメッセージを表示するものとしたが、モバイル端末を90度回転させて撮影するように促すメッセージであってもよい。
【0059】
ステップS908で、メイン制御部303は、四辺情報解析部309に対して、S902で得た四辺情報を解析してガイド表示方向を判定するように指示する。四辺情報解析部309でのガイド表示方向判定処理の結果、垂直線のガイドを表示すべきと判断した場合はS909に遷移し、水平線のガイドを表示すべきと判断した場合はS910へ遷移する。
【0060】
ステップS909で、メイン制御部303は、ガイドUI指示部311に、垂直線のガイドを表示するための描画命令を生成させ、情報表示部304を介して、
図5のような垂直線502,503の表示ガイドをライブビュー画面に重畳表示させ、その後S901へ遷移する。
【0061】
ステップS910で、メイン制御部303は、ガイドUI指示部311に、水平線のガイドを表示するための描画命令を生成させ、情報表示部304を介して、
図6のような水平線602,603の表示ガイドをライブビュー画面に重畳表示させ、その後S901へ遷移する。
【0062】
実施例2によれば、高解像度の被写体の画像を撮影するために、ユーザにとって分かりやすいガイドUIを表示することができる。
【0063】
(その他の実施例)
実施例1,2では、垂直線(502,503)または水平線(602,603)の撮影ガイドを、撮影画像が表示される領域の左右端付近または上下端付近に重畳させて表示させるものとしたが、これに限るものではない。
【0064】
例えば、撮影画像が表示される領域が、モバイル端末の画面サイズよりも小さい場合、撮影画像が表示される領域の左右端または上下端のすぐ外側の位置に、撮影ガイドを強調表示するようにしてもよい。
【0065】
また、撮影ガイドは、撮影画像が表示される領域の左右端または上下端のどちらに、被写体像を合わせるべきかをユーザが識別可能なガイドであればよく、直線に限るものではない。例えば、
図5、
図6で示した表示ガイドのうち、垂直線(502,503)や水平線(602,603)は表示せず、矢印を表示するものであってもよい。