以下、本発明を実施形態をもって説明するが、本発明は後述する実施形態に限定されるものではない。図1は、本実施形態の画像処理装置の実施形態のハードウェア機能ブロックを示す。図1に示す実施形態では、画像処理装置は、パーソナルコンピュータ100として実装される。パーソナルコンピュータ100は、中央処理装置(CPU)102と、各種制御プログラムや各種データなどを記憶するROM/RAMといった固体記憶素子104とを備えており、CPU102がアプリケーションを実行するためのデータを提供するとともに、アプリケーションの実行空間を提供している。パーソナルコンピュータ100は、さらにHDD106を備えており、HDD106は、CPU102が実行する各種アプリケーションプログラムや各種データを記憶する。
また、パーソナルコンピュータ100は、外部装置とのデータ通信を制御する通信部108を備えている。通信部108は、特に限定されるものではなく、例えば、USB、SCSI、IEEE1294などのバスラインを介するシリアル/パラレル通信のための通信部として構成することができる。また、通信部108は、ネットワークインタフェースカード(NIC)として参照されるネットワーク通信機能を備えていてもよい。通信部108が、ネットワーク通信機能を備えている場合、画像処理装置は、イーサネット(登録商標)などを介してインターネットまたはローカルエリアネットワーク(LAN)などを介して外部装置と通信することができる。
また、パーソナルコンピュータ100は、ワイアドまたはワイアレスなどの適切な接続方式を使用して、液晶表示装置、CRTなどにより構成される表示装置112、マウスやキーボードなどの入力装置114が接続されていて、適切なインタフェースを介してCPU102に対して指令を行う。また、パーソナルコンピュータ100は、CPU102によるアプリケーション実行結果をユーザに対して表示している。パーソナルコンピュータ100は、さらに、CD−ROM、DVD、またはMOなどの外付けドライブ装置110を備えていて、CD−ROM、DVD、MOなどの記録媒体116との間でデータ送受信を行っている。パーソナルコンピュータ100の上述した各ハードウェア機能ブロックは、システムバスおよびI/Oバス118を介して相互通信し、パーソナルコンピュータ100に対して本実施形態の画像処理装置の機能を提供させている。
パーソナルコンピュータ100は、また、外部プリンタに印刷を実行させるためのプリンタドライバおよびフラットベッドスキャナなどのスキャナ装置を駆動するためのTWAINドライバを実装することができる。パーソナルコンピュータ100は、アプリケーションからのドライバの呼出に応じてプリンタドライバやTWAINドライバを起動して、外部プリンタを使用した印刷実行や、画像データの取り込みなどの処理を実行する。
図2は、本実施形態の画像処理装置を、他の実施形態である複写機200として実装した場合の複写機200のハードウェア機能ブロックを示す。図2に示すように、複写機200は、コントローラ部210と、エンジン部240とを含んで構成される。コントローラ部210とエンジン部240とは、PCI(Peripheral Component Interconnect)バスで接続され、コントローラ部210の処理に対応してエンジン部240が起動される。コントローラ210は、複写機200の処理を制御し、描画、通信、ユーザからの入力を制御する。このため、コントローラ210は、CPU212を備えており、バスブリッジ214、216を介して、ROM/RAMからなる記憶部218およびASIC224にアクセスし、またI/O入力などを受領する。
ASIC224は、複写機200の処理結果の外部出力を制御するための特定用途集積回路として構成され、コントローラ部210への入力を行うための操作パネル230からのユーザ入力を受領し、CPU212への指令を行うとともに、NVRAMなどで構成されるMEM−C220、HDDドライブ222などとの間の入出力制御を管理する。
ASIC224は、例えば、後述するスキャナエンジンが取得したデジタルデータに対して、圧縮処理を実行してファクシミリ送信データを作成し、ファックス送受信を制御するファクシミリコントロールユニット(FCU)232を制御して、ITU−T勧告によるG3またはG4などの規格でのファックス通信を実行する。入来したファクシミリデータを、画像データに伸張する処理を行い、伸張した画像データをエンジン部240に送付する処理を実行する。
また、ASIC224は、USB(Universal Serial Buss)234、IEEE1334バス236などを介して外部機器とのデータ送信を可能としている。エンジン部240は、PCIバスに接続可能なプリンタエンジンおよびスキャナエンジンを含んで構成される。
プリンタエンジンは、感光体ドラムやインクノズルを含むが像形成プロセスを使用する白黒プリンタまたはカラープリンタなどの印刷部(いずれも図示せず)を備える。なお、エンジン部240は、画像データを面積階調で表現するための誤差拡散やガンマ変換などの画像処理部分を含んで構成されていて、RGBの例えばそれぞれ8ビット深度のデジタル画像を、CMYK系の面積階調画像へと変換し、出力を可能とする。また、スキャナは、CCDなどを備えるラインスキャナなどとして構成することができ、原稿台に載置された印刷物を読み取ってデジタル変換し、RGBの8ビット深度の画像データを生成し、以後ASIC224などによる処理を可能としている。その他、CPU212は、計時機能を有し、現在日時を計時しており、図2に示した複写機200の機能は、より詳細に例えば特開2006−177990号公報に記載された構成として実装することができる。
図3は、本実施形態の画像処理装置300のソフトウェア機能ブロックを示す。図3に示した画像処理装置300は、上述したようにパーソナルコンピュータとして実装されている。画像処理装置300は、アプリケーションが作成したデータを外部出力する印刷物出力機能部310と、印刷物をスキャナで読み取ってアプリケーションで処理するインデックスコード付画像取得部350とを含んで構成される。
以下、画像処理装置300の印刷物出力機能部310と、インデックスコード付画像取得部350の機能を分離して説明する。なお、印刷物出力機能部310とインデックスコード付画像取得部350は、画像処理装置300の特定の実装型式にあっては、いずれか一方のみ実装された形態とすることができる。印刷物出力機能部310は、アプリケーション312と、グラフィックエンジン314と、プリンタドライバ316と、スプーラ318とを含んで構成される。アプリケーション312は、文書データなど、複写機やプリンタに印刷させる情報を作成するために利用されるワープロソフトウェア、表計算ソフトウェア、グラフィックソフトウェアといった汎用アプリケーションである。
また、グラフィックエンジン314は、複写機、プリンタ、ディスプレイなどのデバイスの差異を吸収した描画用の関数インタフェースをアプリケーション312に提供するモジュールである。グラフィックエンジン314は、アプリケーション312からの関数呼び出しに応じ、文書データをアプリケーション非依存の形式の、例えばEMF(Enhanced Meta File)形式などのデータに変換し、生成されたデータをプリンタドライバ316に出力するモジュールであり、OS(Operating
System)によって提供される。例えば、Windows(登録商標)、環境においては、GDI(Graphics Device Interface)がグラフィックエンジン314の機能を提供する。また、UNIX(登録商標)、LINUX(登録商標)環境では、X−ウィンドウシステムおよびDEVMODE構造体がグラフィックスエンジン314の機能を提供する。以下、グラフィックスエンジン314により生成されたデータを描画データとして参照する。
プリンタドライバ316は、本実施形態では、印刷データ作成手段として機能し、グラフィックエンジン314によって出力された描画データを、当該プリンタドライバ316が出力対象の複写機またはプリンタが処理可能な形式、例えばPDL(Page Description Language)、以下「印刷データ」として参照する。)に変換する。描画データから印刷データを作成する処理は、従来と同様の処理を使用する。しかしながら、本実施形態におけるプリンタドライバ316は、描画データを印刷データに変換する処理中に、描画データをインデックスコード付画像作成手段として機能するインデックスコード付画像作成部330に渡し、描画データに追加するコード情報の描画データ中での領域を示すインデックスコードを生成させる。その後、インデックスコード付画像作成部330は、インデックスコードを元の描画データに付加してプリンタドライバ316に戻し、インデックスコード付の描画データを印刷データに変換する処理を実行する。
スプーラ318は、印刷ジョブを記憶しておき、印刷データを、印刷指令の順にプリントアウトできるようにするキュー手段として機能するモジュールである。スプーラ318は、プリンタドライバ316から印刷データを受取り、画像形成エンジン320へと印刷データの受領した順で印刷データを送る。なお、画像形成エンジン320は、複写機、プリンタなど画像形成機能を提供する機能部を総称するものとして参照する。
なお、機能説明を明確化する目的から、プリンタドライバ316と、インデックスコード付画像作成部330とを異なる機能モジュールとして説明するが、インデックスコード付画像作成部330は、プリンタドライバ316の機能モジュールとして実装することもできる。
以下、インデックスコード付画像作成部330の処理について説明する。インデックスコード付画像作成部330は、描画データを受取り、ユーザが当該描画データに追加することを指令したコード情報について、エンコード種類、描画データ中での領域範囲を示す範囲情報、および画像の回転角度などの要素情報をエンコードして、インデックスコード画像とし、当該インデックスコード画像を付加した描画データを生成するモジュールである。
インデックスコード付画像作成部330は、コード配置情報取得部332と、デコーダ334とを含んで構成されている。コード配置情報取得部332は、描画データを受け取って描画データ中に含まれるコード情報を解析し、コード情報が描画データ中に示す領域情報、コード種類情報などを取得してコード配置情報リストを生成する、コード配置情報取得手段として機能する。また、デコーダ334は、コード配置情報取得部332が取得した描画データを解釈し、デコード結果をコード配置情報取得部332に返し、描画データ中にコード情報が含まれているか否かの判断を可能とさせている。さらに、インデックスコード付画像作成部330は、インデックスコード作成部336と、エンコーダ338と、画像合成処理部340とを含んで構成されている。
インデックスコード作成部336は、コード配置情報取得部332が作成したコード配置情報リストを受け取って、エンコーダ338に渡し、エンコード後のコード配置情報リストを受領して設定されたコード種類でのインデックスコード画像を生成する、インデックスコード作成手段として機能する。エンコーダ338は、指定された文字列やバイト配列等を1次元バーコードや2次元コードの画像に符号化する。1次元バーコードとしては、Code39、EAN−8、EAN−13、NW−7、Code128などを挙げることができる。また、2次元コードとしては、QR、DataMatrix、PDF417等を挙げることができる。デコーダ334は、上述した1次元バーコードや2次元コードの画像から元の文字列やバイト配列を復号する。デコーダ334およびエンコーダ338については、公知の技術を使用して実装することができる。画像合成部340は、描画データにインデックスコード画像のデータを追加し、インデックスコード付画像を生成する、画像合成手段として機能する。
画像合成部340で作成されたインデックスコード付画像は、プラインタドライバ316において、PDLに変換され、PJL(Printer Job Language)などのプリンタ制御言語が付加されて、印刷データとされ、スプーラ318に転送される。スプーラ318は、印列データを、IEEE1294、USB、イーサネット(登録商標)などのバス、またはネットワークを介して画像形成エンジン320に送付する。複写機、プリンタなどとして実装することができる画像形成エンジン320は、プリンタ制御言語を使用して、送付されたインデックスコード付画像を含む印刷データについて、印刷処理を実行する。なお、画像を印刷する場合に、拡大や縮小を行う場合、画像合成部340は、拡大縮小率に対応してインデックスコード画像の印刷位置を修正する。
図3に示す画像処理装置300は、またインデックスコード付画像取得部350を含んでいる。図3に示した実施形態では、画像処理装置300は、TWAINドライバ354を起動してスキャナ356から画像データを取得する。取得した画像データは、画像処理を実行するアプリケーション352に送られる。アプリケーション352は、OCRソフトなどの画像処理を可能とするアプリケーションのモジュールとして実装することができる。アプリケーション352は、受領したインデックスコード付画像を、インデックスコード付画像読取手段として機能する、インデックスコード付画像読取部360に送付する。インデックスコード付画像読取部360は、さらにインデックスコード読取部364と、一般コード情報読取部366と、デコーダ362とを備えている。
読取られた画像データは、インデックスコード読取手段として機能するインデックスコード読取部364と、コード情報をデコードした制御情報として機能する一般コード情報を提供する一般コード情報読取部366とに入力される。インデックスコード読取部364は、スキャンされたインデックスコード付画像を受取ってコード配置情報リストを復号するモジュールである。一般コード情報読取部366は、画像データとコード配置情報リストとを受け取って画像データ中に含まれる一般コードの位置、エンコード種類、デコードされたバイト列情報などを指定する一般コード情報リストを生成する。デコーダ362は、1次元バーコードや2次元コードの画像から元の文字列やバイト配列を復号するモジュールであり、デコーダ334と同様の機能を有している。なお、一般コード情報は、画像処理装置300の読込画像に関してアプリケーション352が実行する処理を制御する制御情報として機能し、制御情報に基づいて、画像処理装置300は、画像編集、複製出力、画像転送などの処理を実行する。
なお、図3に示す画像処理装置300は、インデックスコード付画像作成部330とインデックスコード付画像読取部360とを同時に含む場合、デコーダ334、デコーダ362、およびエンコーダ338とをコーデックとして機能的に統合し、共用することができる。また、図3に示した実施形態では、アプリケーション312およびアプリケーション352は、例えば同一のドキュメント管理アプリケーション、ドキュメント作成アプリケーション、画像処理アプリケーションなどの、それぞれ出力モジュールおよび読取りモジュールとして実装することができる。
図4は、図3に示したインデックスコード付画像作成部330が実行する処理の実施形態のフローチャートである。図4の処理は、ステップS400から開始し、ステップS401で描画データを受取る。ステップS402では、描画データをコード配置情報取得部332が解析し、画像データ部分を抜き出す。なお、ステップS402で解析する描画データの構成についてはより詳細に後述する。ステップS403では、描画データに未処理の画像データがあるか否かを判断する。未処理の画像データがない場合(no)、処理をステップS407に分岐させ、コード配置リストを返し、ステップS408で処理を終了する。
一方、ステップS403で、未処理の画像データがあると判断された場合(yes)、処理をステップS404に分岐させ、画像データをデコーダ334に渡し、デコード結果を生成する。その後ステップS405でデコード成功か否かを判断し、デコードが不成功であった場合(no)、処理をステップS403に分岐させ、さらに未処理の画像の有無を判断する。ステップS405で、デコードが成功した場合(yes)、ステップS406でコード配置情報リストに新に検出されたコード情報を追加し、コード配置情報リストを更新する。なお、デコードの成功・失敗の判断は、デフォルトのコード情報について失敗した場合でも、コード配置情報取得部332が処理画像領域を例えば90°ごとに回転させ、デコードの角度による成功・失敗を判断し、その回転角度の値を生成する処理も実行する。その後、処理をステップS403に戻し、さらに残りの画像データについての処理を反復させる。
図5は、図4の処理で使用する描画データ500、付随データ510、およびコード配置情報リスト520のデータ構造の実施形態を示した図である。図5に示す描画データ500は、描画コマンド1と、描画コマンド1に対応する付随データ1とが対となって描画を制御する。また、同様に、描画データ500は、描画コマンド2、描画コマンド3などを含み、それぞれに対応する付随データ2、3を登録して構成されている。なお、描画コマンドは、DEVMODE構造体などにより指定される文字、画像、ベクタなどの画像種類に対して、それぞれの位置情報を登録した構造として構成される。
付随データ510は、付随データのデータ構成を示した実施形態を示す。データ構造510は、例えば文字列を記述する描画コマンド、画像を記述する描画コマンド、ベクタを記述する描画コマンドに対し、付随データ510として、文字列、位置、サイズ、色の各情報が対応して付随データ512、514、516として登録されている。コード配置情報取得部332は、プリンタドライバ316は、描画データ500を一旦バッファリングし、コード配置情報取得部332へと描画データ500を渡してデコーダ334によるデコード処理を実行させ、描画データが含むコード情報を取得する。
取得したコード情報は、コード配置情報リスト520に、コード種類、その範囲情報、および回転角度を対応させたレコード522〜レコード530とし、配置情報として登録される。また、デコーダによるデコード結果が失敗した場合には、コード配置情報取得部332は、適切な角度ごとに描画データを回転させ、デコード処理を設定された角度ごとに画像を回転変換することによって試行する。そして、コード配置情報リスト520には、コード配置情報取得部332がコード情報のデコードに成功したときのコード情報の回転角度を、「度」単位で登録する。なお、パーソナルコンピュータ300が作成するコード情報の配置が予め規定されている場合には、回転角度(deg)のフィールドは、必要ではない。
図5に示した実施形態では、コードの範囲情報は、例えば描画データの左上を原点としたときのコード画像の左上隅の(xl,yl)座標および右下隅の(xr、yr)座標の各値を、適切な単位、例えばmm(ミリメートル)で示した値を使用して登録されている。しかしながら、本実施形態では、コード画像の四隅のカーテジアン座標を範囲情報として使用することもできるし、単位についてもミリメートルではなくインチを使用して表現することもできる。また、コードの回転角度についても、degで表現する他、他の単位や表現を用いることができる。さらに、コード配置情報の登録データは、図5の実施形態に限定されるものではなく、登録フィールドとして登録されたデータ種類のうち、不要な場合には不要な要素情報登録する必要は無いし、またさらに追加するべき情報がある場合には要素情報のフィールドを追加することができる。追加することができる要素情報としては、例えばコードサイズに関連する情報、例えば、1次元バーコードやスタック型2次元コードの最細バー幅、マトリクス型2次元コードのセルサイズなど、後述の一般コード読み取り処理時のデコード処理をサポートするような付加情報を挙げることができる。
図6は、インデックスコード作成部336がインデックスコードを作成する処理の実施形態についてのフローチャートである。インデックスコード作成処理は、ステップS600から開始し、ステップS601でコード配置情報リスト520を受領する。ステップS602では、コード配置情報リスト520からインデックスコード作成データを作成する。インデックスコード作成用データとは、コード配置情報リスト520に登録されたレコードに含まれる文字列、数値などをバイト配列に変換したデータを意味する。ステップS603では、インデックスコード作成用データをエンコーダ338に渡し、インデックスコード画像を作成する。インデックスコード画像は、コードの種類は限定されないが、インデックスコード画像のサイズを小さくする点で、1次元バーコードよりも2次元コードを用いる方が望ましい。インデックスコード画像のエンコードが終了した段階でインデックスコード作成部336は、ステップS604で作成したインデックスコード画像を画像合成部340に渡して処理を終了する。
図7は、画像合成部340が実行する処理のフローチャートである。図7の処理は、ステップS700から開始し、ステップS701で、バッファメモリから描画データを読出し、また画像合成部340がバッファリングしておいたインデックスコード画像を読み出す。ステップS702では、描画データを画像データに対応する付随データとして、インデックスコード画像の位置、サイズなどの情報を追加する。ステップS703で、画像合成が終了したインデックスコード付画像をプリンタドライバ316に返し、バッファリングさせ、処理をステップS704で終了させる。
プリンタドライバ316は、受領した描画データをPDLに変換し、プリンタ制御言語のコードを追加した後、スプーラ318に渡す。スプーラ318は、画像形成エンジン320と通信してインデックスコード付画像を画像形成エンジン320に転送する。画像形成エンジン320は、受領した印刷データを、プリンタ制御言語を使用して印刷データの印刷を実行することで、インデックスコード付画像の印刷が完了する。
図8は、本実施形態の画像処理装置300が作成した電子ドキュメント800の実施形態を示す。図8に示した電子ドキュメント800は、複数の画像データ802〜824が存在している。画像処理装置300は、図8に示す印刷物を与えるこの電子ドキュメント800に対するプリント指令を受領すると、グラフィックエンジン314によってコード情報を含む電子ドキュメントを描画データに変換する。描画データは、その後、プリンタドライバ316に渡される。プリンタドライバ316は、描画データをインデックスコード付画像作成部332に渡す。
インデックスコード付画像作成部316は、コード配置情報取得部332は、描画データ中の画像データ802〜824を抽出する。抽出された画像データは、図5に示した描画コマンドの付随情報を抽出することによって取得される。そして、画像データ802〜824は、それぞれデコーダ334に渡されて、デコードが試行されるので、画像データがコード画像である場合は確実にデコードが可能である。図8の電子ドキュメント800では、画像データ802(Code39)、810(PDF417)、816(Code128)、820(QR)、824(DataMatrix)についてデコード試行が成功したものとして説明する。デコード結果は、コード配置情報リスト520に追加され、生成されたコード配置情報リスト520がインデックスコード付画像作成部336に渡される。
インデックスコード付画像作成部336は、コード情報リスト520をインデックスコード作成部336に渡し、コード情報リスト520からインデックスコード作成用データをバイト列として生成する。作成されたインデックスコード作成用データは、エンコーダ338に渡され、インデックスコード画像が作成される。作成されたインデックスコード画像は、画像合成処理部340に渡され、付属データを画像として規定する描画コマンドに対応する付属データの画像として、その、画像、位置およびサイズなどの情報を記述して画像合成を完了する。作成されたインデックスコード付画像は、プリンタドライバ316へと渡され、印刷データとされ、スプーラ318を介して画像形成エンジン320に転送され、印刷物が作成される。
図9は、図8で説明した処理を経て画像形成エンジン320から出力された印刷物900の実施形態を示す。印刷物900は、電子ドキュメント800に対応する画像を、指定された印刷用紙上に形成している。また、画像処理装置300が作成したインデックスコード画像910が合成されており、合成されたインデックスコード画像910は、図9に示した実施形態では、印刷物の左上の文書・画像認識性に影響を与えない領域に追加されているのが示されている。なお、他の実施形態ではインデックスコード画像は、印刷物900の左右上下に4箇所形成させることもできる。左右上下の4箇所に作成する場合には、印刷物をスキャナにより読み込ませる場合の読み取り方向によらず効率的にインデックスコード画像を取得することが可能となる。また、インデックスコード画像を複数形成する場合には、それぞれコード情報の内容を変更し、インデックスコード画像全部が取得された段階で、全コード情報を与えるように、コード情報の内容を互いに変えることもできる。
図10は、本実施形態の画像処理装置がインデックスコート付画像の読取りを実行する場合、インデックスコード読取部360が実行する処理のフローチャートを示す。インデックスコード付画像の読み取り処理は、ステップS1000から開始し、ステップS1001で、スキャナなどが取得した画像データを受取る。ステップS1002では、画像中の領域をインデックスコード抽出の目的で切り出す。ステップS1003では、未処理の領域があるか否かを判断し、未処理の領域がない場合(no)処理をステップS1010に分岐させ、デコード失敗のエラー通知を返し、処理をアプリケーションに返し、処理を終了する。
一方、ステップS1003で未処理の領域がある場合(yes)、ステップS1004で切り出した領域をインデックスコード読取部364に渡し、ステップS1005で、デコーダ362を呼出し、デコード試行を実行する。なお、ステップS1005のデコード試行は、切り出した領域について、デコード失敗した場合でも、角度を修正しながら、デコード試行を行う。デコード試行が結果的に成功しなかった場合(no)、処理をステップS1003に戻し、他の領域の判断を実行させる。また、ステップS1005でデコードに成功した場合(yes)、処理をステップS1006に分岐させ、デコード結果からコード配置情報リストを取得する。さらにステップS1007では、デコードされたインデックスコードの回転角度を取得し、画像読取りの読み取り角度を取得し、読み取り角度およびデコードしたコード配置情報リスト520を後述する一般コード情報読取部366に返し、ステップS1009で処理を終了させる。
図11は、読取り角度およびデコードしたコード配置情報リスト520を取得した一般コード情報読取部366が実行する処理の実施形態を示す。図11に示す一般コード情報読取部366の処理は、ステップS1100から開始し、ステップS1101で画像データを受領し、ステップS1102で画像の向きとコード配置情報リストを受け取ったか否かを判断する。ステップS1102で、画像の向きとコード配置情報リストを受け取っていないと判断された場合(no)、画像データの全域探索を行い、一般コード情報の取得を行い、ステップS1111で、アプリケーションに対して一般コード情報リストを返し、処理をステップS1112で終了させる。
また、ステップS1102で、画像の向きとコード配置情報リストを受け取ったと判断された場合(yes)、ステップS1104で画像データを画像向きの一致させるように回転変換を行い、ステップS1105で、未処理のコード配置情報があるかを判断する。なお、画像の向きの一致処理は、画像データ全体を画像の向きに合わせて回転させた後に画像データの領域切り出し処理をおこなうこともできるし、画像全体の回転を行う代わりに、切り出し領域を画像の向きに合わせて補正するようにしてもよい。切り出し領域の方向を修正する場合、画像データ全体を処理しなくて済むため、処理速度が向上する。未処理のコード配置情報が無いと判断された場合(no)、ステップS1111に処理を分岐させ、一般コード情報リストをアプリケーションに返し、ステップS1112で処理を終了させる。
ステップS1105の判断で未処理のコード配置情報があると判断された場合(yes)、ステップS1106でコード配置情報を基に画像データの領域を切り出し、ステップS1107で切り出した領域の画像をコード配置情報で指定されるデコーダに渡し、デコード結果を作成する。ステップS1108では、デコードが成功したか否かを判断し、デコードに成功しない場合(no)、処理をステップS1105に戻し、処理を繰り返す。また、ステップS1108でデコードが成功した場合(yes)、処理をステップS1109に分岐させ、一般コード情報リストを更新する。その後、さらに未処理の領域があるか否かを、処理をステップS1105に戻して、未処理のコード配置情報が無くなるまで処理を反復させる。
図12は、一般コード情報読取部366が生成する一般コード情報リスト1200の実施形態を示す。一般コード情報リスト1200は、コードごとにリストのレコード1202〜1210が形成されており、レコード内には、コードを特徴付けるための情報が登録されており、各列がコード情報のそれぞれ対応する情報を与えている。一般コード情報を構成する要素情報としては、コードの種類、デコードデータ、コードの位置情報、コードの回転角度などを登録することができる。コード種類、コードの位置情報、コードの回転角度は、コード配置情報リスト520のエンコード種類、範囲情報、回転角度と同様の機能を有する情報である。
また、デコードデータには、図11のステップS1107のデコード処理によって得られた文字列などのバイト配列が格納される。なお、一般コード情報リスト1200に登録できる要素情報は、図12に示した情報に限定されるものではなく、要素情報を適宜削減したり、追加することができる。例えば、追加することができる要素情報としては、例えば誤り訂正レベルや特定産業規格(Industrial Standard)の情報など、デコード処理によって得られる他の情報を追加してもよい。
図13を参照してアプリケーション352がスキャナ356を使用して画像を取得し、取得した画像データから一般コード情報リスト1200を生成するまでの処理の実施形態を説明する。図13に示した実施形態では、図9に示した画像をスキャナ356によって読み込むものとする。
スキャナ356に図9に示した画像を載置して、読取り指令を受領したアプリケーション352は、TWAINドライバ354を呼出し画像900の読み取り処理を実行し、図13に示されるスキャン画像1300を得る。アプリケーション352は、スキャン画像1300のデータをインデックスコード付画像読取部360に渡す。その後、インデックスコード付画像読取部360は、スキャン画像をインデックスコード読取部364に渡す。
スキャン画像1300は、インデックスコード付画像読取部360に渡されると、インデックスコード読取部364は、スキャン画像1300中でインデックスコード画像の存在する可能性のある領域として規定される四隅領域1302、1306、1314、1316を切り出す。切り出した領域1302〜1316は、デコーダ362に渡され、デコード結果が生成される。図13に示した実施形態では、領域1306にコード画像が形成されている。領域1306について、インデックスコードのデコード試行処理では、コード画像の回転が行われ、図示した実施形態では、回転角度270°時計回りにコード画像を回転させた段階でデコードが成功するものとして、以下さらに説明する。
デコード結果は、図5に示したコード配置情報リスト520をアプリケーション352に対して取得させ、デコードしたインデックスコード画像の向き情報および領域1306の位置から、スキャン画像1300の読み取り方向が時計周りに270°回転されていたことが判断される。この判断の結果、アプリケーション352は、取得したコード配置情報リスト520と、スキャン画像1300の向き情報とをインデックスコード付画像読取部360に渡す。
次いで、インデックスコード付画像読取部360は、スキャン画像1300と、コード配置情報リスト520と、スキャン画像の向き情報とを、一般コード情報読取部366に渡す。一般コード情報読取部366は、コード配置情報リスト520と、スキャン画像1300の向き情報とを使用して、領域1304、1308、1312、1318、1320を切り出す。そして切り出した領域1304、1308、1312、1318、1320のそれぞれを、デコーダ362に渡し、デコードを実行する。その結果、切り出した領域1304、1308、1312、1318、1320に含まれる画像は、コード配置情報リスト520に登録されたエンコード方式Code39、PDF417、Code128、QR、DataMatrixを使用しながらも、各コード画像に対してそれぞれのエンコード方式をトライアンドエラーさせることなくデコードされる。
また、図12に示す一般コード情報リスト1200は、本実施形態により、デコード結果から高精度、かつ高速に作成することができる。その後、一般コード情報リスト1200は、インデックスコード付画像読取部360に渡される。インデックスコード付画像読取部360は、取得した一般コード情報リスト1200をアプリケーション352に返し、一般コード情報を使用した後続処理を可能とする。
以上の例では、画像処理装置300のアプリケーション352がTWAINドライバ354を介して画像データを取得するものとして説明した。しかしながら、他の実施形態では、画像データを取得できる限り他のシーケンスを用いることができる。例えば、複写機として実装された画像形成エンジン320が読み取った画像データをファイル化し、画像ファイルをネットワーク上の任意のストレージ領域に保存しておく。アプリケーション352は、保存された画像ファイルにアクセスし、FTP、HTTPなどのファイル転送プロトコルを使用して画像ファイルをダウンロードし、上述したデコード処理に提供することもできる。
以上説明したように、本実施形態では、写真や図表などとともに任意の位置・大きさ・回転角度で埋め込まれた複数多種のエンコード方式を有するコード情報を含む電子ドキュメントについて、高精度・短時間での高効率のコード認識が可能となる。また、印刷処理時にインデックスコードを四隅のいずれかに付与し、読取処理時にインデックスコード検出領域として四隅領域をとるようにすることで、スキャン時の紙原稿の向きによらずに確実にコードを認識させることができる。さらに、本実施形態は、特定の文書作成アプリケーションに限定されることなく、汎用的な電子文書作成アプリケーションによって作成された電子文書に対して適用可能である。
以下、図14を参照して、画像処理装置の第2の実施形態について説明する。第2の実施形態の画像処理装置1400は、機能ブロックとしては第1の実施形態の画像処理装置と同様の構成を備える。しかしながら、各機能ブロックが画像処理装置として実装されるパーソナルコンピュータ1410と、複写機1430とに分離して実装される点で、第1実施形態の画像処理装置とは相違する。
図14に示す画像処理装置1400は、パーソナルコンピュータ1410と、パーソナルコンピュータ1410がネットワークプリンタなどとして接続する複写機1430として実装されている。インデックスコード付画像作成部1450は、複写機1430の機能モジュールとして実装され、パーソナルコンピュータ1410は、専らコード情報を埋め込む処理を実行する。図14に示した実施形態では、プリンタドライバ1416は、既存のものが利用され、複写機1430の機能モジュールが、本実施形態のインデックスコード付画像を作成する。
なお、図14に示すインデックスコード付画像作成部1450は、第1の実施形態で説明したと同様の機能を提供している。第2の実施形態では、コード配置情報取得部1452および画像合成処理部1456は、描画データではなく、プリンタ制御言語のコマンドを含むPDLなどのフォーマットで作成された印刷データを解析することを除き、第1の実施例と同様の処理を実行するため、これ以上の詳細な説明は省略する。第2の実施形態では、インデックスコード付画像の作成を複写機の機能として提供することができる。
図15は、第3の実施形態の画像処理装置1500を示す。第3の実施形態の画像処理装置1500は、インデックスコード付画像読取部1510は、第1の実施形態と同様の機能モジュールを含んで構成される。しかしながら、第3の実施形態では、読取処理シーケンスでスキャナ1530からの画像データを使用してインデックスコードを読取り、一般コード情報リスト生成処理を実行する点で相違する。図15の画像処理装置1500を詳細に説明すると、画像処理装置1500は、スキャナ1530と、スキャナを制御し、ラスタデータなどにイメージ変換し、さらに処理要求を外部から受領して画像に対して各種の処理を実行するアプリケーションとを含んでいる。読取られた画像データは、インデックスコード読取手段として機能するインデックスコード読取部1512と、コード情報をデコードした制御情報として機能する一般コード情報を提供する一般コード情報読取部1514とに入力される。インデックスコード読取部1512は、スキャンされたインデックスコード付画像を受取ってコード配置情報リストを復号するモジュールである。一般コード情報読取部1514は、画像データとコード配置情報リストとを受け取って画像データ中に含まれる一般コードの位置、エンコード種類、デコードされたバイト列情報などを指定する一般コード情報リストを生成する。デコーダ1516は、1次元バーコードや2次元コードの画像から元の文字列やバイト配列を復号するモジュールであり、デコーダ334と同様の機能を有している。なお、一般コード情報は、画像処理装置1500の読込画像に関してアプリケーション1520が実行する処理を制御する制御情報として機能し、制御情報に基づいて、画像処理装置300は、画像編集、複製出力、画像転送などの処理を実行させている。
画像処理装置の第4の実施形態では、画像処理装置は、インデックスコード付画像に、インデックスコードを複数画像データに配置する処理を実行する。第4の実施形態では、インデックスコード画像は、画像処理装置300により指定される描画データの複数の指定領域、例えば四隅に配置される。四隅に配置されるインデックスコード画像は、すべて同一の情報(全ての一般コードの配置情報)をエンコードすることができる。上述したインデックスコードを使用することにより、インデックスコード読取処理時に一部のインデックスコードが読めなかった場合でも残りのインデックスコードから一般コード情報リストを取得でき、コード認識精度を向上させることができる。
また、全てのインデックスコードに同じ情報(全ての一般コードの配置情報)をエンコードすることに代えて、各インデックスコードに一般コードの配置情報を分散してエンコードするように実装することができる。各インデックスコードに一般コードの情報を分散して配置することにより、インデックスコード1つあたりの画像サイズを小さく抑えることができ、文書のレイアウトや見た目に対する影響を低減させることができる。
以下、画像処理装置の第5の実施形態について説明する。画像処理装置の第5の実施形態では、機能モジュール構成は、第1の実施形態のものと同様に実装される。しかしながら、インデックスコード作成部336およびコード配置情報取得部332の処理が異なる。図16は、画像処理装置の第5の実施形態におけるインデックスコード作成部336の処理のフローチャートである。図6の処理とは異なり、図16の処理では、インデックスコード作成用データをエンコーダに渡す前に、ステップS1603でインデックスコード作成用データにヘッダデータを付加する。
ヘッダデータは、例えば24ビットの固定長データとして構成することができ、後述するインデックスコード読取部の処理において、インデックスコードを、一般のコードとの区別を容易に識別するための識別データとして用いられる。第5の実施形態では、画像データ中に複数のコード情報が存在する場合であってもデコード処理を排除して直接インデックスコードを識別することができ、インデックスコード画像を付加する位置を予め定めずとも、画像データの特性に応じて適切な箇所に埋設することが可能となる。
図17は、画像処理装置の第5の実施形態で、コード配置情報取得部332が実行する処理のフローチャートである。図10とは、ステップS1006で、デコード結果からコード配置情報リストを取得する処理を実行する前に、ステップS1706でデコードデータがインデックスコードのデータかを判断する。説明する実施形態では、デコードデータの最初の3byte(24ビット)の固定長データが、インデックスコードを示す値と一致しているか否かを比較する。ステップS1706でデコードデータがインデックスコードのデータであると判断された場合(yes)、ステップS1707でコード配置情報リストを取得し、ステップS1708で画像の向き情報の取得を行い、ステップS1710で取得した情報をアプリケーションに返し、ステップS1711で処理を終了させる。
一方、ステップS1706でデコードデータがインデックスコードのデータでない(一般コードのデータである)と判断された場合(no)、処理をステップS1703に戻し、未処理の領域があるか否かを判断し、未処理の領域が無くなるまで、処理を反復させる。
図16および図17に示した処理を使用することで、インデックスコード検出領域に一般コードが含まれている場合でも一般コードをインデックスコードとみなして処理することがなくなるので、誤動作を防止し、検出効率を高めることが可能となる。
なお、第5の実施形態では、インデックスコードを一般コードと区別するための識別データとしての固定長データを、インデックスコード作成データの先頭に付加するものとして説明した。さらに他の実施形態では、例えば固定長データをインデックスコード作成データの末尾に付加することもできる。さらに、他の実施形態では、インデックスコード作成データからSHA−1、MD−5などの既知の一方向関数を使用してハッシュ値を算出し、ハッシュ値を識別データとして使用することもできる。
以下、図18、図19を使用して本発明の第6の実施形態における画像処理装置について説明する。第6の実施形態における画像処理装置は、第1の実施形態を同様に実装することができるが、コード配置情報リストおよびインデックスコード読取部364、一般コード情報読取部366での処理が異なる。図18は、第6の実施形態の画像処理装置が使用するコード配置情報リスト1800である。なお、図18に示すコード配置情報リストは、図5のコード配置情報リスト520と比較し、インデックスコード自身の位置および回転角度の情報を格納するレコードが追加されている点に留意されたい。
図19は、第6の実施形態におけるインデックスコード読取部364の処理のフローチャートである。処理は、図10に示した処理とは、ステップS1907で画像の向き情報ではなく、デコードされたインデックスコードの位置・回転角度を一般コード情報読取部366に返すことを除き、図10の処理と同様にして処理が実行される。また、図20は、本発明の第6の実施形態におけるインデックスコード読取部364の処理のフローチャートを示す。図20に示した実施形態は、図11の処理とは、画像の向き情報ではなく、ステップS2002で、デコードされたインデックスコードの位置・回転角度を受取り、以後の処理に利用する点で相違する。
さらに、ステップS2004では、画像データの位置補正を実行する点で相違する。その他の処理ステップは、図10の処理と共通するので詳細な説明は省略する。ステップS2004の位置補正処理は、インデックスコード読取部364は、コード情報リスト1800に記載されているインデックスコードの位置・回転角度と、実際にデコードされたインデックスコードの位置・回転角度とを比較し、位置および回転角度が、それぞれ一致するように画像データを回転・並進移動を行う処理を実行する。
第6の実施形態では、スキャン時に紙文書がある程度ずれている場合でもスキャン画像のズレを補正することができ、一般コード情報の領域を適切に切り出すことが可能になり、コード認識精度を向上させることができる。第6の実施形態では、ステップS2004で画像データの位置補正処理を行った後、ステップS2006で画像データの領域切り出し処理を行なうものとして説明している。しかしながら、さらに他の実施形態では、画像全体の位置補正処理を行う代わりに、ステップS2006で切り出し領域について位置補正を実行するようにしてもよい。説明する他の実施形態では、画像データ全体について回転および並進移動処理を実行する必要が無くなるのでさらに、処理速度を向上させることができる。
以下、図21を使用して次に、第7の実施形態の画像処理装置が実行する処理を説明する。第7の実施形態における画像処理装置は、第4の実施形態および第6の実施形態を組合わせた構成を備え、一般コード情報読取部364での処理内容が異なる。図21に示したインデックスコード読取部364の処理についてのフローチャートを示す。図20の処理とは、画像データの回転処理ではなく、ステップS2104で画像データのスキュー補正処理を実行する。スキュー補正は、四隅に配置された各々のインデックスコードにおけるコード情報リスト1800に記載の位置と、実際にデコードされた位置の差を計算し、スキュー補正処理を行うことで実現される。
したがって、図21の実施形態は、四隅に配置されたインデックスコードをスキュー補正のためのタイミングマークとして利用するものである。第7の実施形態は、スキャン時に印刷物がある程度ズレて読込まれた場合や、ソータなどの搬送装置による搬送時に歪みが生じた印刷物でもスキャン画像のズレや歪みを補正することができ、一般コードの領域を適切に切り出すことで、第4の実施例よりもさらにコード認識精度を向上させることができる。
図22は、本実施形態の画像処理装置の実装形態2200を示す。図22に示すように、画像処理装置の実装形態2200としては、パーソナルコンピュータ2202または多機能複写機2206として実装することができる。画像処理装置をパーソナルコンピュータ2202として実装する場合、パーソナルコンピュータ2202は、本実施形態の画像処理方法を実装する機能をプリンタドライバとして実装する。また、パーソナルコンピュータ2202は、例えばドキュメント管理アプリケーション、ドキュメント作成アプリケーションとしてインデックスコード付画像読取り部360を実装する。
パーソナルコンピュータ2202は、ドキュメント管理アプリケーションなどを使用して作成した電子ドキュメントに対して、以後の画像処理を制御するためのコード情報を追加する。ドキュメント管理アプリケーションは、制御情報を適切なエンコード方式を使用してコード画像とする。パーソナルコンピュータ2202は、コード画像からコード配置情報、インデックスコード画像を作成し、電子ドキュメントに付加し、インデックスコード付画像を印刷データとして生成する。
印刷データは、例えば、ローカルプリンタ、ネットワークプリンタなどとして構成された多機能複写機2206に転送され、印刷物2208として出力される。印刷物2208は、パーソナルコンピュータ2202に接続されたフラットベットタイプのスキャナ2204によりインデックスコード付画像としてパーソナルコンピュータ2202へと転送される。パーソナルコンピュータ2202は、インデックスコード付画像を解析し、制御情報などを含む一般コード情報を取得し、読み込んだ印刷物に対する以後の画像処理を制御している。
また、複写機として本実施形態の画像処理装置を実装する場合、画像処理装置の各機能モジュールは、複写機のアプリケーションまたはミドルウェアとして実装される。多機能複写機2206は、電子ドキュメントに対して画像処理を制御するための制御情報からコード画像を作成し、電子ドキュメントに付加して、電子写真方式、インクジェット記録方式などのプロセスを使用して印刷物2208を作成する。作成された印刷物2208は、ユーザに配布される。印刷物2208の配布を受けたユーザが印刷物2208に対して画像形成、画像編集、画像転送などを含む画像処理を行うために、多機能複写機2206で印刷物2208を読み込ませる。多機能複写機2206は、インデックスコード付画像を解析し、一般コード情報として制御情報を取得し、多機能複写機2206における以後の画像処理を制御している。
本実施形態の上記機能は、C、C++、Java(登録商標)、など、レガシープログラミング言語やオブジェクト指向プログラミング言語などで記述された装置実行可能なプログラムにより実現でき、当該プログラムは、ハードディスク装置、CD−ROM、MO、フレキシブルディスク、EEPROM、EPROMなどの装置可読な記録媒体に格納して頒布することができ、また他装置が可能な形式でネットワークを介して伝送することができる。
これまで本実施形態につき説明してきたが、本発明は、上述した実施形態に限定されるものではなく、他の実施形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
100…パーソナルコンピュータ、102…CPU、104…ROM/RAM、106…HDD、108…通信部、110…ドライブ装置、112…表示装置、114…入力装置、116…記録媒体、118…システムバス・I/Oバス、200…複写機、210…コントローラ、240…エンジン部、300…画像処理装置、310…印刷物出力機能部、350…インデックスコード付画像取得部、312、352…アプリケーション、314…グラフィックエンジン、316…プリンタドライバ、318…スプーラ、320…画像形成エンジン、354…TWAINドライバ、360…インデックスコード付画像読取部、362…デコーダ、364…インデックスコード読取部、366…一般コード情報読取部