A.実施例:
A−1:画像処理システム1000の構成
図1は、実施例における画像処理システムの構成を示すブロック図である。画像処理システム1000は、画像処理装置としてのサーバ400と、複合機200と、を備えている。サーバ400は、インターネット70に接続されており、複合機200は、LAN(Local Area Network)80を介して、インターネット70に接続されている。この結果、サーバ400と複合機200は、LAN80とインターネット70とを介して、通信可能である。また、LAN80には、複合機200のユーザのパーソナルコンピュータ500が接続されていても良い。
サーバ400は、CPU410と、DRAMなどの揮発性記憶装置420と、ハードディスクドライブやフラッシュメモリなどの不揮発性記憶装置430と、インターネット70などのネットワークに接続するためのインタフェースを含む通信部480と、を備えている。揮発性記憶装置420には、CPU410が処理を行う際に生成される種々の中間データを一時的に格納するバッファ領域421が設けられている。不揮発性記憶装置430には、コンピュータプログラム431と、UIデータ群433と、が格納されている。
コンピュータプログラム431、および、UIデータ群433は、例えば、サーバ400の管理者によって、インターネット70を介してサーバ400にアップロードされることにより、サーバ400にインストールされる。または、コンピュータプログラム431、および、UIデータ群433は、例えば、DVD−ROMなどに格納された形態で提供され、サーバ400の管理者によって、サーバ400にインストールされても良い。CPU410は、コンピュータプログラム431を実行することにより、後述する画像処理を実現する。
複合機200は、CPU210と、DRAMなどの揮発性記憶装置220と、フラッシュメモリやハードディスクドライブなどの不揮発性記憶装置230と、プリンタ部240と、スキャナ部250と、タッチパネルやボタンなどの操作部260と、液晶ディスプレイなどの表示部270と、外部機器と通信を行う通信部280と、を備えている。例えば、通信部280は、LAN80などのネットワークに接続するためのインタフェースや、外部記憶装置(例えば、USBメモリ)と接続するためのインタフェースを含んでいる。
揮発性記憶装置220には、CPU210が処理を行う際に生成される種々のデータを一時的に格納するバッファ領域221が設けられている。不揮発性記憶装置230には、制御プログラム231が格納されている。
プリンタ部240は、インクジェット方式やレーザー方式などの印刷方式を用いて印刷を実行する。スキャナ部250は、光電変換素子(例えば、CCD、CMOS)を用いて光学的に原稿を読み取ることによってカラー画像やグレー画像を表すスキャンデータを生成する。スキャナ部250は、いわゆるフラットベッド式の原稿台を備えている。なお、原稿台の長手方向のサイズは、ISO(International Organization for Standardizationの略称)216で定められている紙の寸法を規定するA4サイズの長手方向の長さである297mmより少しだけ(例えば、数センチ)長いサイズである。そして、原稿台の短手方向のサイズは、ANSI/ASME(American National Standards Institute/American Society of Mechanical Engineersの略称)Y14.1で定められている紙の寸法を規定するレターサイズの短手方向の長さである215.9mmより少しだけ(例えば、数センチ)長いサイズである。本実施例では、1回で読み取ることができる原稿の最大サイズは、A4サイズより大きくA3サイズ(ISOで定められている紙の寸法)より小さいサイズである。具体的には、スキャナ部250は、長手方向の長さがA4サイズの長手方向の長さより少しだけ長く、かつ、短手方向の長さがレターサイズの短手方向の長さより少しだけ長い原稿を読み取り、当該原稿のサイズの画像を表す画像データを生成する。このために、後述するように、A3サイズの原稿の長手方向の中央付近が重複するように、A3サイズの原稿を2回に分けて読み取ることができる。
CPU210は、制御プログラム231を実行することにより、複合機200の制御を実行する。例えば、CPU210は、プリンタ部240やスキャナ部250を制御して、コピー処理、印刷処理、スキャン処理などを実行する。さらに、CPU210は、サーバ400にアクセスして、サーバ400が提供するサービスを利用するサービス利用処理を、実行することができる。
A−2:画像処理システム1000の動作
図2は、画像処理システム1000の動作を示すシーケンス図である。このシーケンス図の処理は、複合機200が、サーバ400が提供する画像生成サービスの利用指示を、ユーザから受け付けた場合に開始される。この画像生成サービスは、詳細は後述するが、複数個のスキャンデータによって表される複数個のスキャン画像を合成するサービスである。複数個のスキャンデータは、詳細は後述するが、例えば、1回で読み取り可能なサイズより大きなサイズの原稿を、複数回に分けて読み取ることによって生成される。
処理が開始されると、S5では、複合機200のCPU210は、サービス開始要求を、サーバ400に対して送信する。サーバ400のCPU410は、サービス開始要求を受信すると、UIデータ群433(図1)から画像生成サービスの提供に必要なUIデータを選択し、該UIデータを複合機200に対して送信する(S10)。UIデータは、具体的には、ユーザインタフェース画面(以下、UI画面)を表す画面データと、制御データと、を含む。この制御データは、例えば、UI画面を利用して複合機200が所定の処理(具体的には、後述するS15のスキャン処理)を行うために必要な各種のデータを含む。例えば、制御データは、UI画面(例えば、図4)を介して受け付けたユーザの指示に基づいて、複合機200が実行すべき処理(例えば、サーバ400へのスキャンデータの送信)を行うために必要な情報(例えば、スキャンデータの送信先アドレス)を含む。
S15では、CPU210は、受信したUIデータに基づいて、複数個のスキャンデータを生成するスキャン処理を実行する。スキャン処理では、CPU210は、ユーザが用意した原稿を2回に分けて読み取ることによって、2個のスキャンデータを生成する。本実施例のスキャンデータは、RGBの各成分の値(例えば、0〜255の256階調の値)を画素ごとに含むRGB画像データである。
図3は、本実施例で用いられる原稿の一例を示す図である。図3の原稿10のサイズは、スキャナ部250が1回で読み取り可能なサイズ(本実施例では、A4サイズより少し大きなサイズ)の約2倍のサイズ(本実施例では、A3サイズ)である。
図4は、UI画面の一例を示す図である。先ず、CPU210は、図4のUI画面UG1を表示部270に表示する。例えば、UI画面UG1は、原稿台への原稿10の適切な設置を促すメッセージMS1と、スキャンボタンSBと、キャンセルボタンCBと、を含んでいる。ユーザは、UI画面UG1に従って、原稿10の左側の約半分の領域10L(図3)を読み取ることができるように、原稿10を原稿台に設置し、スキャンボタンSBを押下する。スキャンボタンSBの押下に応じて、CPU210は、スキャナ部250を制御して原稿を読み取ることによって、左側スキャンデータを生成する。
図5は、スキャン画像の一例を示す図である。図5(A)には、左側スキャンデータによって表される左側スキャン画像20Lが示されている。左側スキャン画像20Lは、原稿10の左側の約半分の領域10L(図3)を示す左側原稿画像HILと、余白WBLと、を含んでいる。
次に、CPU210は、所定のUI画面(図示省略)を表示部270に表示する。このUI画面は、UI画面UG1と同様に、原稿台への原稿10の適切な設置を促すメッセージと、スキャンボタンと、キャンセルボタンと、を含んでいる。ユーザは、UI画面に従って、原稿10の右側の約半分の領域10R(図3)を読み取ることができるように、原稿10を原稿台に設置し、スキャンボタンを押下する。CPU210は、スキャンボタンの押下に応じて、スキャナ部250を制御して原稿を読み取ることによって、右側スキャンデータを生成する。
図5(B)には、右側スキャンデータによって表される右側スキャン画像20Rが示されている。右側スキャン画像20Rは、原稿10の右側の約半分の領域10R(図3)を示す右側原稿画像HIRと、余白WBRと、を含んでいる。
ここで、図3の原稿10の横方向の中央部CAを表す画像は、左側スキャン画像20Lの右端に沿った領域と、右側スキャン画像20Rの左端に沿った領域と、の両方に含まれている。すなわち、図5にハッチングで示すように、左側スキャン画像20Lは、原稿10の中央部CAを表す画像CILを含み、右側スキャン画像20Rは、原稿10の中央部CAを表す画像CIRを含んでいる。これは、例えば、UI画面や複合機200の説明書などによって、原稿10の中央部CAが、右側スキャンデータの生成時と左側スキャンデータの生成時との両方で読み取られるように、原稿10を原稿台に設置するように、ユーザに指示することによって、実現される。なお、左側スキャン画像20L内の画像CILと、右側スキャン画像20R内の画像CIRとは、ともに原稿10の中央部CAを表しているが、ユーザによって原稿台に設置された原稿10の位置、スキャナ部250の光電変換素子の特性などによって、面積や色などに多少の差は、生じ得る。
図2のS20では、CPU210は、右側スキャン画像20Rを表す右側スキャンデータと、左側スキャン画像20Lを表す左側スキャンデータと、をサーバ400に対して送信する。この結果、S25にて、サーバ400のCPU410は、右側スキャンデータと、左側スキャンデータと、取得して、バッファ領域421に格納する。
S30では、CPU410は、右側スキャンデータを用いて、参照領域決定処理を実行する。参照領域決定処理は、右側スキャンデータによって表される右側スキャン画像20Rの一部の領域である参照領域RA1を決定する処理である。なお、参照領域決定処理の詳細は、後述する。
S32では、CPU410は、探索領域決定処理を実行する。探索領域決定処理は、左側スキャンデータを用いて、左側スキャン画像20L内の一部の領域である探索領域SA1を決定する処理である。なお、探索領域決定処理の詳細は、後述する。
S35では、CPU410は、対応領域決定処理を実行する。対応領域決定処理は、右側スキャン画像20R内の参照領域RA1に対応する左側スキャン画像20L内の対応領域CPを決定する処理である。参照領域RA1に対応する対応領域CPは、次のように定義できる。右側スキャン画像20R内の参照領域RA1(図5(B))内に表されている原稿10の一部分を特定部分SPT(図3)とする。参照領域RA1に対応する対応領域CPは、左側スキャン画像20Lにおいて、原稿10の特定部分SPTを表す領域である。対応領域CPは、S32の探索領域決定処理によって左側スキャン画像20L内に決定された探索領域SA1内から決定される。なお、対応領域処理の詳細は、後述する。
S40では、CPU410は、合成処理を実行する。合成処理では、右側スキャンデータと左側スキャンデータとを用いて、右側スキャン画像20R内の右側原稿画像HIRと、左側スキャン画像20L内の左側原稿画像HILとが合成された合成画像30を表す合成画像データが生成される。
図6は、合成画像30の一例を示す図である。図6に示すように、合成画像30において、右側原稿画像HIRと左側原稿画像HILとは、右側原稿画像HIR内の参照領域RA1と、左側原稿画像HIL内の対応領域CPと、が重なるように、合成される。合成画像30において、右側原稿画像HIRと左側原稿画像HILとが互いに重なり合う領域内の画素の値には、例えば、右側原稿画像HIR(右側スキャン画像20R)内の画素の値が優先的に採用される。これによって、右側原稿画像HIRと左側原稿画像HILとが合成されて、図3の原稿10を表す合成画像30が生成される。
なお、後述する対応領域決定処理において、参照領域RA1に対応する対応領域CPを決定できなかった場合には、例えば、機械的に、左側スキャン画像20Lの右端の辺と、右側スキャン画像20Rの左端の辺と、が接するように、2個のスキャン画像が合成された合成画像を表す合成画像データが生成される(図示省略)。
図2のS45では、CPU410は、生成された合成画像データを複合機200に対して送信する。複合機200のCPU210は、合成画像データを受信すると、受信した合成画像データを不揮発性記憶装置230に格納するとともに、ユーザに合成画像データを受信したことを通知する。合成画像データは、ユーザの利用に供される。例えば、複合機200は、ユーザの指示に基づいて、合成画像データを用いて、合成画像30を印刷することができる。
以上説明した画像処理システム1000によれば、一の原稿10(図3)からそれぞれ別の領域を読み取ることによって得られる複数個の画像データ(具体的には、右側スキャンデータと左側スキャンデータ)を用いて、一の原稿10を表す合成画像データを生成することができる。
次に、図2のS30で示した参照領域決定処理を説明する。図7は、参照領域決定処理のフローチャートである。図8は、参照領域決定処理の説明図である。S105では、CPU410は、CPU410は、右側スキャン画像20R内に、配置範囲FAを決定する。決定された配置範囲FAの内側に、参照領域決定処理によって、参照領域RA1が決定される。配置範囲FAの位置、形状、サイズ(すなわち、縦方向および横方向の画素数)は、予め定められている。
具体的には、配置範囲FAは、図5(B)に示すように、右側スキャン画像20Rの4つの端のうち、原稿10の中央部CAを表す画像CIRが位置している端、本実施例では、右側スキャン画像20Rの左端に沿って配置される。
配置範囲FAの横方向の長さ(すなわち、短手方向の長さ)は、右側スキャン画像20Rにおいて、原稿10の中央部CAを表す画像CIRの横方向の幅より狭いことが好ましい。配置範囲FAの縦方向の長さ(すなわち、長手方向の長さ)は、右側スキャン画像20Rの縦方向の長さと等しい。
S110では、CPU410は、配置範囲FAに配置する単位領域のサイズを決定する。本実施例では、単位領域のサイズは、予め定められた値に決定される。例えば、1個の単位領域の横方向のサイズは、例えば、1〜2画素程度であり、1個の単位領域の縦方向のサイズは、右側スキャン画像20Rの縦方向の画素数の1/6〜1/3程度である。
S115では、CPU410は、配置範囲FA内の複数個の単位領域の中から、1個の注目単位領域を選択する。図8(A)には、配置範囲FA内の複数個の単位領域が示されている。説明のために、配置範囲FA内の画素の座標を、右方向を正方向とするX軸と下方向を正方向とするY軸とを有し、配置範囲FAの左上の画素を(1、1)とする2次元座標系を用いて表す。
図8(A)には、4つの単位領域UAa〜UAdが示されている。単位領域UAaの上端および左端は、配置範囲FAの上端および左端と一致する。単位領域UAbの下端および左端は、配置範囲FAの下端および左端と一致する。単位領域UAcの上端および右端は、配置範囲FAの上端および右端と一致する。単位領域UAdの下端および右端は、配置範囲FAの下端および右端と一致する。
先ず、左上の端の単位領域UAaが最初の注目単位領域として選択される。そして、図8(A)に矢印で示すように、1画素ずつ下方向に位置がずれた単位領域が、順次に選択される。そして、左下の端の単位領域UAbが選択されると、左上の端の単位領域UAaの位置から1画素だけ右方向にずれた部分画像が選択される。その後は、再び1画素ずつ下方向に位置がずれた部分画像が、順次に選択される。最後に選択される部分画像は、右下の端の単位領域UAdである。
1個の注目単位領域が選択されると、S120では、CPU410は、注目単位領域内の複数個の画素を、ばらつき画素と、非ばらつき画素と、に分類し、ばらつき画素の個数(ばらつき画素数)VCuを算出する。
図9は、ばらつき画素と非ばらつき画素とを説明する図である。CPU410は、注目単位領域内の複数個の画素を1個ずつ注目画素TPとして選択して、注目画素TPを中心とする横3画素×3画素分の領域FL内の画素を用いて、注目画素TPのばらつき値Vを算出する。まず、図9の式に示すように、CPU410は、注目画素TPの値(R0、G0、B0)と、周囲の8個の画素の値(Rn、Gn、Bn)のそれぞれと、の差分ΔVnを算出する。nは、注目画素TPの周囲の8個の画素を識別する1〜8までの番号であり、図9の領域FL内の各画素に付された番号である。CPU410は、図9に式で示すように、算出された8個の差分ΔVnの合計値を、注目画素TPのばらつき値Vとして算出する。注目画素TPのばらつき値Vが、所定の閾値Vth以上である場合には、注目画素TPは、ばらつき画素に分類され、所定の閾値Vth未満である場合には、注目画素TPは、非ばらつき画素に分類される。
S125では、CPU410は、注目単位領域のばらつき画素数VCuと、所定の閾値VCthと、を比較する。注目単位領域のばらつき画素数VCuが、閾値VCth以上である場合には(S130:YES)、S135において、CPU410は、注目単位領域の左上の画素の座標UP(X1、Y1)を、内部の画素の値のばらつきが比較的大きい単位領域(以下、ばらつき単位領域とも呼ぶ)を示す情報として記憶する。注目単位領域のばらつき画素数VCuが、閾値VCth未満である場合には(S130:NO)、CPU410は、S135をスキップして、S140に処理を進める。
S140では、CPU410は、配置範囲FA内の全ての単位領域(図8(A))を注目単位領域として処理したか否かを判断する。未処理の単位画像がある場合には(S140:NO)、CPU410は、S115に戻る。全ての単位領域が処理された場合には(S140:YES)、S145において、CPU410は、上述したS135にて1個以上の単位領域の座標P(X1、Y1)が記憶されているか否かを判断する。
単位領域の座標UP(X1、Y1)が記憶されていない場合には(S145:NO)、S150において、CPU410は、基準参照領域RA0(デフォルトの領域)を、参照領域RA1として決定する。基準参照領域RA0については後述する。単位領域の座標UP(X1、Y1)が記憶されている場合には(S145:YES)、S155において、CPU410は、参照領域配置処理を実行する。
図10は、参照領域配置処理のフローチャートである。先ず、図10の参照領域配置処理が開始される時点で、配置範囲FA内には、複数個のばらつき単位領域が特定されている(図8(B))。図8(B)において、黒い丸は、特定されたばらつき単位領域の左上の画素(領域特定画素とも呼ぶ)の位置を示している。
S205では、CPU410は、特定された複数個のばらつき単位領域の中から、互いに近接している1個以上のばらつき単位領域(以下、近接ばらつき単位領域群と呼ぶ)を選択する。具体的には、CPU410は、所定の大きさの判定枠JH(図8(B))を用いて配置範囲FA内を走査して、内部に含まれる領域特定画素の個数が最大である判定枠JHの位置を決定する。
図8(B)には、内部に含まれる領域特定画素の個数が最大である判定枠JHが示されている。図8(B)に示す判定枠JHには、5個の領域特定画素UP1〜UP5が含まれている。CPU410は、さらに、これらの5個の領域特定画素UP1〜UP5との距離が、基準距離Dthより近い領域特定画素を特定する。図8(B)の例では、領域特定画素UP1〜UP5との距離が、基準距離Dthより近い2個の領域特定画素P6、P7が特定される。この結果、図8(B)の例では、7個の領域特定画素UP1〜UP7に対応する7個のばらつき単位領域が、近接ばらつき単位領域群として選択される。
S210では、CPU410は、近接ばらつき単位領域群によって規定される領域VA(以下、ばらつき領域VAとも呼ぶ)内の画素数PCを算出する。図8(C)には、近接ばらつき単位領域群によって規定されるばらつき領域VAの一例を示す図である。ばらつき領域VAは、近接ばらつき単位領域群に含まれる1個以上のばらつき単位領域のうちの少なくとも一個の単位領域に含まれる複数個の画素によって構成される。
S215〜S240では、CPU410は、算出された画素数PCと、3個の画素数閾値PCth1〜PCth3(PCth1<PCth2<PCth3)と、を比較することによって、参照領域RA1を決定する。
先ず、S215では、CPU410は、画素数PCが、第1の画素数閾値PCth1未満であるか否かを判断する。画素数PCが、第1の画素数閾値PCth1未満である場合には(S215:YES)、S230において、CPU410は、基準参照領域RA0(後述)のサイズ(デフォルトのサイズ)の領域を、参照領域RA1として決定する。この場合には、ばらつき領域VAが過度に小さいので、参照領域RA1が過度に小さくならないように、ばらつき領域VAの重心位置を中心とするデフォルトのサイズの領域が、参照領域RA1として決定される。
画素数PCが、第1の画素数閾値PCth1以上である場合には(S215:NO)、S220において、CPU410は、画素数PCが、第2の画素数閾値PCth2未満であるか否かを判断する。画素数PCが、第2の画素数閾値PCth2未満である場合には(S220:YES)、S240において、CPU410は、ばらつき領域VAの外接矩形を、参照領域RA1として決定する。図11は、ばらつき領域VAに基づいて決定される参照領域RA1の一例を示す図である。図11(A)には、特定のばらつき領域VA1の外接矩形が、特定の参照領域RA11として決定される例が示されている。
画素数PCが、第2の画素数閾値PCth2以上である場合には(S220:NO)、S225において、CPU410は、画素数PCが、第3の画素数閾値PCth3未満であるか否かを判断する。画素数PCが、第3の画素数閾値PCth3未満である場合には(S225:YES)、S235において、CPU410は、ばらつき領域VAの内接矩形を、参照領域RA1として決定する。図11(B)には、特定のばらつき領域VA2の内接矩形が、特定の参照領域RA12として決定される例が示されている。
画素数PCが、第3の画素数閾値PCth3以上である場合には(S225:NO)、S230において、CPU410は、デフォルトのサイズの領域を、参照領域RA1として決定する。この場合は、ばらつき領域VAが過度に大きいので、参照領域RA1が過度に大きくならないように、デフォルトサイズの領域が、参照領域RA1として決定される。参照領域RA1が決定されると、参照領域決定処理は終了される。以上の説明から解るように、本実施例の参照領域決定処理では、配置範囲FA内の比較的ばらつきが大きな部分画像の領域が、参照領域RA1として決定される。図5(B)には、右側スキャン画像20Rの配置範囲FA内に決定された参照領域RA1の一例が図示されている。
次に図2のS32の探索領域決定処理について説明する。図12は、探索領域決定処理のフローチャートである。図13は、探索領域決定処理の説明図である。図13(A)には、探索領域SA1の基準となる領域である基準探索領域SA0の例が示されている。図13(B)には、参照領域RA1の基準となる領域である基準参照領域RA0の例が示されている。図13(C)には、探索領域決定処理によって決定されるべき探索領域SA1の例が示されている。図13(D)には、上述した参照領域決定処理(図7)によって決定された参照領域RA1の例が示されている。
図12のS305では、CPU410は、図7の参照領域決定処理によって決定された参照領域RA1の位置情報と外形情報とを取得する。上述したように参照領域RA1は、右側スキャン画像20R内に決定される領域である。参照領域RA1の位置情報は、具体的には、参照領域RA1の左上の画素の位置を示す左上座標(Rx1、Ry1)である(図13(D))。参照領域RA1の外形情報は、具体的には、参照領域RA1の幅Rw1と高さRh1である(図13(D))。幅は、横方向の長さを意味し、高さは、縦方向の長さを意味する。
図13(D)に示すように、参照領域RA1の左上座標(Rx1、Ry1)は、右方向を正方向とするX軸と下方向を正方向とするY軸とを有し、右側スキャン画像20Rの左上の画素の座標を(0、0)とする2次元座標系を用いて表される。また、参照領域RA1の幅Rw1と高さRh1は、画素数で表される。
S310では、CPU410は、基準参照領域RA0の位置情報と外形情報、具体的には、基準参照領域RA0の左上の画素の位置を示す左上座標(Rx0、Ry0)と、幅Rw0と、高さRh0と、を取得する(図13(B))。基準参照領域RA0の左上座標(Rx0、Ry0)は、参照領域RA1の左上座標(Rx1、Ry1)と同じ座標系を用いて表される。基準参照領域RA0の幅Rw0と高さRh0は、画素数で表される。
基準参照領域RA0は、右側スキャン画像20R上に予め規定された領域であり、これらの位置情報と外形情報は、予め定められた値が取得される。本実施例では、基準参照領域RA0は、右側スキャン画像20Rの左端と上端とに接する矩形の領域である。したがって、基準参照領域RA0の左上座標は、右側スキャン画像20Rの左上座標と一致している。すなわち、左上座標(Rx0、Ry0)=(0、0)である。
また、基準参照領域RA0の幅Rw0は、例えば、5画素〜20画素である。基準参照領域RA0の高さRh0は、右側スキャン画像20Rの高さの1/4〜1/2である。
S315では、CPU410は、基準探索領域SA0の位置情報と外形情報、具体的には、基準探索領域SA0の右上の画素の位置を示す右上座標(Sx0、Sy0)と、幅Sw0と、高さSh0と、を取得する(図13(A))。基準探索領域SA0の右上座標(Sx0、Sy0)は、右方向を正方向とするX軸と下方向を正方向とするY軸とを有し、左側スキャン画像20Lの左上の画素の座標を(0、0)とする2次元座標系を用いて表される。
基準探索領域SA0は、左側スキャン画像20L上に予め規定された領域であり、これらの位置情報と外形情報は、予め定められた値が取得される。本実施例では、基準探索領域SA0は、左側スキャン画像20Lの右端と上端とに接する矩形の領域である。したがって、基準探索領域SA0の右上座標は、右側スキャン画像20Rの右上座標と一致している。
また、基準探索領域SA0の幅Sw0は、例えば、左側スキャン画像20Lの幅の1/4〜1/2である。基準探索領域SA0の高さは、上述した基準参照領域RA0の高さと同じである。すなわち、基準探索領域SA0の高さは、左側スキャン画像20Lの高さの1/4〜1/2である。
S320〜S360の処理によって、決定すべき探索領域SA1が決定される。具体的には、図13(C)に示すように、探索領域SA1は、左側スキャン画像20L上に配置される矩形の領域である。探索領域SA1は、探索領域SA1の右上の画素の位置を示す右上座標(Sx1、Sy1)と、探索領域SA1の幅Sw1と、探索領域SA1の高さSh1と、によって定義される。したがって、S320〜S360の処理によって、右上座標(Sx1、Sy1)と、幅Sw1と、高さSh1と、が決定されることによって、探索領域SA1が決定される。
S320では、CPU410は、探索領域SA1の右上座標(Sx1、Sy1)のY座標Sy1を決定する。具体的には、右上座標(Sx1、Sy1)のY座標Sy1は、参照領域RA1の左上座標(Rx1、Ry1)のY座標Ry1と同じ値に決定される(Sy1=Ry1)。
S325では、CPU410は、探索領域SA1の右上座標(Sx1、Sy1)のX座標Sx1を決定する。具体的には、右上座標(Sx1、Sy1)のX座標Sx1は、基準探索領域SA0の右上座標(Sx0、Sy0)のX座標Sx0に、(Rx1−Rx0)を加算した値に決定される(Sx1=Sx0+(Rx1−Rx0))。(Rx1−Rx0)は、基準参照領域RA0から見て参照領域RA1が右方向にずれている量(以下、参照領域RA1の横ずれ量と呼ぶ。)を表している。したがって、探索領域SA1の右上座標(Sx1、Sy1)のX座標Sx1は、基準探索領域SA0の右上座標(Sx0、Sy0)のX座標Sx0を、参照領域RA1の横ずれ量(Rx1−Rx0)分だけ、同じ方向にずらした位置に決定される。
S335では、CPU410は、探索領域SA1の高さSh1を決定する。具体的には、探索領域SA1の高さSh1は、参照領域RA1の高さRh1と同じ値に決定される(Sh1=Rh1)。
S340では、CPU410は、探索領域SA1の幅Sw1を決定する。具体的には、探索領域SA1の幅Sw1は、基準参照領域RA0の幅Rw0に対する参照領域RA1の幅Rw1の比率(Rw1/Rw0)を、基準探索領域SA0の幅Sw0に乗じた値に決定される(Sw1=(Rw1/Rw0)×Sw0)。
S345では、CPU410は、S340で決定された探索領域SA1の幅Sw1が、所定の条件を満たすか否かを判断する。所定の条件は、Sw1<(Sw0+Sx1−Sx0)、かつ、(Sx1−Sx0)>0である。この条件は、基準探索領域SA0の左端のX座標(Sx0−Sw0)より、探索領域SA1の左端のX座標(Sx1−Sw1)が右側にある場合に、すなわち、((Sx0−Sw0)<(Sx1−Sw1))である場合に、満たされる。換言すれば、この条件が満たされない場合は、探索領域SA1の左端が、基準探索領域SA0の左端より左側に位置しており、探索領域SA1が過度に左側に拡がっていることを意味している。
上記の所定の条件が満たされない場合には(S345:NO)、S350において、CPU410は、探索領域SA1の幅Sw1を修正する。具体的には、基準探索領域SA0の左端のX座標(Sx0−Sw0)と、探索領域SA1の左端のX座標(Sx1−Sw1)とが同じになるように、すなわち、(Sx0−Sw0)=(Sx1−Sw1)となるように、幅Sw1の値を修正する(Sw1=Sw0+Sx1−Sx0)。
上記の所定の条件が満たされる場合には(S345:YES)、CPU410は、S350をスキップして、処理をS355に進める。
S355では、CPU410は、探索領域SA1の右上座標(Sx1、Sy1)のX座標Sx1が、左側スキャン画像20L内に位置しているか否かを判断する。具体的には、探索領域SA1の右上座標(Sx1、Sy1)のX座標Sx1が、左側スキャン画像20Lの右上座標のX座標より大きいか否かを判断する。なお、本実施例では、左側スキャン画像20Lの右上座標は、基準探索領域SA0の右上座標(Sx0、Sy0)と一致している。CPU410は、Sx1が、左側スキャン画像20Lの右端のX座標(本実施例ではSx0)より大きい場合には、Sx1が、左側スキャン画像20L内に位置していないと判断する。
探索領域SA1の右上座標(Sx1、Sy1)のX座標Sx1が、左側スキャン画像20L内に位置していない場合には(S355:NO)、S360において、CPU410は、Sx1の値を左側スキャン画像20Lの右端のX座標(本実施例では、基準探索領域SA0の右上座標(Sx0、Sy0)のX座標Sx0)に修正して、探索領域決定処理を終了する。図13(C)には、修正後の右上座標(Sx1a、Sy1)が図示されている(Sx1a=Sx0)。
探索領域SA1の右上座標(Sx1、Sy1)のX座標Sx1が、左側スキャン画像20L内に位置している場合には(S355:YES)、CPU410は、S360をスキップして、探索領域決定処理を終了する。図13(C)の例では、ハッチングされた領域が最終的に探索領域SA1として決定される。
次に、図2のS35の対応領域決定処理について説明する。図14は、対応領域決定処理のフローチャートである。S410では、CPU410は、探索領域SA1内に特定されるべき複数個の候補領域の中から、1個の注目候補領域を特定する。
図15は、探索領域SA1内に特定されるべき複数個の候補領域について説明する図である。候補領域の形状およびサイズは、図7の参照領域決定処理によって右側スキャン画像20R内に決定された参照領域RA1(図5(B))に応じて決定される。まず、参照領域RA1と同じ形状およびサイズを有する枠NPが、探索領域SA1の少なくとも一部とが重なるように、探索領域SA1に対して配置される。そして、枠NP内の領域のうち、探索領域SA1と重なる領域が注目候補領域として特定される。
図15(A)の枠NPaは、最も右側かつ上側に配置される枠である。この枠NPaの左上の画素Paの座標を(k、1)とする。なお、画素Paの座標を(k、1)は、参照領域決定処理の説明の便宜のために用いる座標であり、上述した探索領域決定処理において探索領域SA1を定義するために用いられた座標系の座標とは無関係である。後述する画素Pb〜Pdの座標についても同様である。画素Paの横方向(X軸方向)の位置は、探索領域SA1の右端の画素の横方向の位置と同じである。画素Paの縦方向(Y軸方向)の位置は、探索領域SA1の上端の画素より所定長(具体的には、50〜100画素分の長さ)だけ上方に位置している。したがって、図15(A)においてハッチングで示すように、枠NPa内の領域のうち、左端の1本の画素のライン上に位置する複数個の画素の下側の一部分の領域が、探索領域SA1と重なっている。
図15(B)の枠NPbは、最も右側かつ下側に配置される枠である。この枠NPbの左上の画素Pbの座標を(k、m)とする。画素Pbの横方向の位置は、探索領域SA1の右端の画素の横方向の位置と同じである。画素Pbの縦方向の位置は、探索領域SA1の下端の画素より所定長だけ下方に位置している。したがって、図15(B)においてハッチングで示すように、枠NPb内の領域のうち、左端の1本の画素のライン上に位置する複数個の画素の上側の一部分の領域が、探索領域SA1と重なっている。
図15(C)の枠NPcは、最も左側かつ上側に配置される枠である。この枠NPcの左上の画素Pcの座標を(1、1)とする。画素Pcの横方向の位置は、探索領域SA1の左端の画素の横方向の位置と同じである。画素Pcの縦方向の位置は、探索領域SA1の上端の画素より所定長だけ上方に位置している。したがって、図15(C)においてハッチングで示すように、枠NPc内の領域のうち、下側の一部分の領域が探索領域SA1と重なっている。
図15(D)の枠NPdは、最も左側かつ下側に配置される枠である。この枠NPdの左上の画素Pdの座標を(1、m)とする。画素Pdの横方向の位置は、探索領域SA1の左端の画素の横方向の位置と同じである。画素Pcの縦方向の位置は、探索領域SA1の下端の画素より所定長だけ下方に位置している。したがって、図15(D)においてハッチングで示すように、枠NPc内の領域のうち、上側の一部分の領域が探索領域SA1と重なっている。
複数個の候補領域を特定するために配置される枠NPの左上の画素の座標は、(p、q)で表される(k×m)個の座標の中から、順次に選択される。ここで、pは、1以上k以下の任意の整数であり、qは、1以上m以下の任意の整数である。したがって、探索領域SA1には、(k×m)個の枠NPが配置可能である。換言すれば、探索領域SA1内には、(k×m)個の候補領域が特定可能である。
図15(A)〜図15(C)に矢印で示すように、これらの(k×m)個の枠NPの中から、右上の端の枠NPa(図15(A))が配置されるべき枠NPとして最初に選択される。そして、次回の注目候補領域が特定されるときに、1画素ずつ下方向に位置がずれた枠NPが、順次に選択される。そして、右下の端の枠NPb(図15(B))が選択されると、右上の端の枠NPaの位置から1画素だけ左方向にずれた枠NPが選択される。その後は、再び1画素ずつ下方向に位置がずれた枠NPが、順次に選択される。最後に選択される枠NPは、左下の端の枠NPd(図15(D))である。
図15(A)〜図15(D)の枠NPa〜NPdのように、ほとんどの場合に枠NPの一部が探索領域SA1より外側に位置するので、注目候補領域の大きさは、図5(B)の参照領域RA1より小さくなる。
1個の注目候補領域が特定されると、S415では、CPU410は、注目候補領域内の全ての画素のうち、1個の画素を注目画素として選択する。
S420では、CPU410は、注目候補領域内の注目画素の値と、当該注目画素に対応する参照領域RA1内の画素の値と、の差ΔVPを算出する。注目画素に対応する参照領域RA1内の画素は、注目候補領域内の画像と参照領域RA1内の画像とを、注目候補領域を特定する際に用いた枠NPと、参照領域RA1の外縁とが一致するように重ねた場合に、注目画素と重なる参照領域RA1内の画素である。差ΔVPを算出すべき2個の画素の値を、(R1、G1、B1)と(R2、G2、B2)とする。差ΔVPは、3種類の成分値間の差分の絶対値の和で表される。すなわち、差ΔVPは、(R1−R2)の絶対値と、(G1−G2)の絶対値と、(B1−B2)の絶対値と、の合計値で表される。
続くS425では、CPU410は、算出された差ΔVPが、所定の基準値TH1以下であるか否かを判断する。差ΔVPが、所定の基準値TH1以下である場合には(S425:YES)、S430において、CPU410は、類似画素数SCをカウントアップする。差ΔVPが、所定の基準値TH1以下である場合には、注目候補領域内の注目画素と、当該注目画素に対応する参照領域RA1内の画素とは、類似する画素であると判断できるからである。
差ΔVPが、所定の基準値TH1より大きい場合には(S425:NO)、CPU410は、S430をスキップして、処理をS435に進める。基準値TH1は、例えば、10〜40とされる。
S435では、CPU410は、注目候補領域内の全ての画素を注目画素として処理したか否かを判断する。未処理の画素がある場合には(S435:NO)、CPU410は、S415に戻って、未処理の画素を注目画素として選択する。全ての画素が処理された場合には(S435:YES)、CPU410は、S440に処理を進める。
S440では、CPU410は、参照領域RA1と、注目候補領域と、の類似度(SC/Nt)を算出する。類似度(SC/Nt)は、注目候補領域内の画素の総数Ntに対する類似画素数SCの割合である。類似度(SC/Nt)が大きいほど、参照領域RA1と、注目候補領域とは、類似している。
S445では、CPU410は、類似度(SC/Nt)が、閾値TH2以上であるか否かを判断する。即ち、CPU410は、現在の注目候補領域が参照領域RA1に類似しているか否かを判断する。
類似度(SC/Nt)が、閾値TH2以上である場合、即ち、現在の注目候補領域が参照領域RA1に類似していると判断する場合には(S445:YES)、S450において、CPU410は、現在の注目候補領域を、参照領域RA1に類似する対応領域CPとして決定して、対応領域決定処理を終了する。
類似度(SC/Nt)が、閾値TH2未満である場合には(S445:NO)、S455において、CPU410は、探索領域SA1内の全ての候補領域(図15)を注目候補領域として処理したか否かを判断する。未処理の候補領域がある場合には(S455:NO)、CPU410は、S460において、類似画素数SCを初期化したうえで、S410に戻って、未処理の候補領域を注目候補領域として選択する。全ての候補領域が処理された場合には(S455:YES)、CPU410は、参照領域RA1に対応する対応領域CPを決定できないまま、対応領域決定処理を終了する。
図5(A)には、左側スキャン画像20L内に、決定された対応領域CPが図示されている。
以上説明した実施例によれば、探索領域決定処理において、参照領域RA1の位置を示す位置情報(具体的には、図13(D)の左上座標(Rx1、Ry1))と、参照領域RA1の外形に関する外形情報(具体的には、図13(D)の幅Rw1、高さRh1)と、を用いて、探索領域SA1が決定される(図12のS320〜S340)。そして、対応領域決定処理(図14、図15)では、決定された探索領域SA1内から対応領域CPが決定される。この結果、効率良く対応領域CPを決定することができる。したがって、合成画像データを生成するための処理時間を低減することができる。
より詳しく説明すると、例えば、複合機200のスキャナ部250の仕様などによって、左側スキャン画像20L内の左側原稿画像HILに対して、右側スキャン画像20R内の右側原稿画像HIRの位置が縦方向にずれる量は、所定の想定範囲内に収まる。したがって、参照領域RA1の高さRh1に対して、探索領域SA1の高さSh1が過度に大きいと、探索領域SA1のうち、対応領域CPが存在しない領域が過度に大きくなる。そうすると、対応領域CPとはなり得ない候補領域を注目候補領域として、対応領域CPを探索する処理(図14の対応領域決定処理のS415〜S445)が実行される頻度が高くなる。そうすると、合成画像データを生成するための処理時間が必要以上に長くなる可能性がある。また、左側スキャン画像20Lと右側スキャン画像20Rにおいて、共通に含まれる原稿10の中央部CAの横方向の幅は、所定の想定範囲内に収まるので、参照領域RA1の幅Rw1に対して、探索領域SA1の幅Sw1が過度に大きくても、同様に、処理時間が必要以上に長くなる可能性がある。また、参照領域RA1の位置に対して、探索領域SA1の位置が適切な位置にない場合には、探索領域SA1内に、探索すべき対応領域CPが確実に含まれるようにするために、探索領域SA1のサイズ(幅および高さ)を大きくせざるを得なくなるので、処理時間が必要以上に長くなる可能性がある。上記実施例によれば、参照領域RA1の位置情報と外形情報とを用いて、適切な位置に配置され、適切なサイズを有する探索領域SA1が決定されるので、このような不都合を避けて、合成画像データを生成するための処理時間を低減することができる。
また、参照領域RA1の位置に対して、探索領域SA1の位置が適切な位置にない場合には、探索領域SA1内に探索すべき対応領域CPが含まれない可能性が高くなる。この結果、参照領域RA1に対応する対応領域CPを探索することができずに、2個の画像が精度良く結合された合成画像を表す合成画像データを生成することができない可能性がある。本実施例によれば、参照領域RA1の位置情報と外形情報とを用いて、適切な位置に配置され、適切なサイズを有する探索領域SA1が決定されるので、探索すべき対応領域CPが含まれるように、適切な探索領域SA1を決定することができる。この結果、2個の画像が精度良く結合された合成画像を表す合成画像データを生成することができる。
さらに、上記実施例の探索領域決定処理では、参照領域RA1の基準の位置である第1の基準位置を示す情報として、基準参照領域RA0の左上座標(Rx0、Ry0)が取得される(S310)。また、探索領域SA1の基準の位置である第2の基準位置を示す情報として基準探索領域SA0の右上座標(Sx0、Sy0)が取得される(S315)。そして、参照領域RA1の位置と第1の基準位置との関係と、第2の基準位置と、に基づいて、探索領域SA1の位置が決定される。この結果、参照領域RA1の位置と、基準参照領域RA0および基準探索領域SA0の位置とに応じて、適切な探索領域を決定することができる。
具体的には、探索領域SA1の位置を規定する座標(Sx1、Sy1)は、図13(A)〜(D)に示すように、参照領域RA1の位置が第1の基準位置(すなわち、基準参照領域RA0の位置)に対して右方向にずれている場合には、探索領域SA1の位置が第2の基準位置(すなわち、基準探索領域SA0の位置)に対して右方向にずれ、かつ、参照領域RA1の位置が第1の基準位置に対して上方向にずれている場合には、探索領域SA1の位置が第2の基準位置に対して上方向にずれるように、探索領域SA1の位置が決定される。これは、参照領域RA1が右側スキャン画像20Rの左端から比較的離れた位置、すなわち、基準参照領域RA0の位置から右側にずれた位置に決定された場合には、対応領域CPは、左側スキャン画像20L内においてより右端に近い位置に存在する可能性が高いからである。参照領域RA1が右側スキャン画像20R内の比較的上側に決定された場合には、対応領域CPは、左側スキャン画像20L内の比較的上側に存在する可能性が高いからである。この結果、参照領域RA1の位置と基準参照領域RA0の位置との間の縦方向および横方向の関係に応じて、適切な探索領域SA1を決定することができる。
さらに、上記実施例の探索領域決定処理では、基準参照領域RA0の外形を示す情報(具体的には、幅Rw0と高さRh0)と、基準探索領域SA0の外形を示す情報(具体的には、幅Sw0と高さSh0)とが、取得される(S310、S315)。そして、参照領域RA1の外形と基準参照領域RA0の外形との関係と、基準探索領域SA0の外形と、に基づいて、探索領域SA1の外形が決定される。具体的には、図13(A)〜(D)に示すように、参照領域RA1の幅Rw1が基準参照領域RA0の幅Rw0より長いほど、探索領域SA1の幅Sw1は、基準探索領域SA0の幅Sw0より長くされる。そして、参照領域RA1の高さRh1が基準参照領域RA0の高さRh0より大きいほど、探索領域SA1の高さSh1は、基準探索領域SA0の高さSh0より大きくされる。この結果、参照領域RA1の外形と、基準参照領域RA0の外形と、基準探索領域SA0の外形とに応じて、適切な探索領域SA1の外形を決定することができる。
より具体的には、探索領域SA1の幅Sw1は、参照領域RA1の幅Rw1と基準参照領域RA0の幅Rw0との比率(Rw1/Rw0)を用いて、決定される(S340)。この結果、参照領域RA1と基準参照領域RA0との間の幅の関係に応じて、適切な探索領域SA1の幅を決定することができる。また、探索領域SA1の高さSh1は、参照領域RA1の高さRh1に決定される(S335)。この結果、探索領域SA1の高さSh1を参照領域RA1の高さRh1に応じて適切に決定することができる。換言すれば、探索領域SA1の高さSh1や幅Sh1が、参照領域RA1に対して過度に大きくなることや、過度に小さくなることを抑制して、合成画像データを生成するための処理時間の低減や、合成画像における2個の画像の結合精度の向上を実現することができる。
さらに、探索領域SA1の左端が、基準探索領域SA0の左端より左側に位置しないように、探索領域SA1の幅Sw1が修正される(図3のS345、S350)。換言すれば、探索領域SA1の幅Sw1は、基準探索領域SA0の幅Sw0より小さな値に決定される。この結果、探索領域SA1の幅Sw1が過度に長くなることを抑制して、合成画像データを生成するための処理時間が過度に長くなることを抑制することができる。
さらに、参照領域RA1の外形と基準参照領域RA0の外形との関係と、基準探索領域SA0の外形と、に基づいて決定された探索領域SA1が、左側スキャン画像20Lより外側の領域を含む場合には、修正後の探索領域SA1が左側スキャン画像20Lに含まれるように、探索領域SA1が修正される(図3のS355、S360)。この結果、左側スキャン画像20Lに含まれる適切な探索領域SA1を決定することができる。
また、図13(B)に示すように、基準参照領域RA0は、右側スキャン画像20Rの左方向(X軸方向の反対方向)の端に沿って配置されている。そして、図13(A)に示すように、基準探索領域SA0は、左側スキャン画像20Lの右方向の端に沿って配置されている。ここで、X軸方向は、本実施例において、生成されるべき合成画像において左側スキャン画像20Lと右側スキャン画像20Rとが並ぶ方向と言うことができる。上記構成によれば、適切な基準領域を用いて、合成画像データを生成するための対応領域を決定するために適切な探索領域SA1を決定することができる。
さらに、参照領域決定処理(図7〜図9)では、右側スキャン画像20R内の複数個の画素の値のばらつきに基づいて参照領域RA1が決定される。例えば、参照領域RA1の位置、大きさ、サイズは、それぞれ、右側スキャン画像20Rの配置範囲FA内の複数個の画素の値に基づいて決定されている。具体的には、画素の値のばらつきが比較的大きい単位領域を含むように、参照領域RA1が決定される(図8など)。そして、対応領域決定処理(図14)では、ばらつきに基づいて決定された参照領域に応じて、複数個の候補領域が特定される。この結果、参照領域RA1に対応する適切な対応領域CPが容易に決定される。
より具体的に説明すると、画素の値のばらつきが比較的小さい領域は、特徴が乏しい。このために、画素の値のばらつきが比較的小さい領域が参照領域RA1に決定されると、左側スキャン画像20L内の対応領域CPを決定することが困難になる可能性がある。例えば、左側スキャン画像20L内の誤った領域が、対応領域CPに決定されやすい。画素のばらつきが比較的小さい領域には、例えば、背景を示す領域や、オブジェクトの内部の色の変化が乏しい領域などが含まれる。
これに対して、画素の値のばらつきが比較的大きな領域は、エッジなどを比較的多く含むので、特徴的な部分を含む可能性が高い。このために、画素の値のばらつきが比較的大きな領域が参照領域RA1に決定されると、左側スキャン画像20L内の対応領域CPを容易に決定できる。換言すれば、ばらつきが比較的小さい領域を基準にするよりも、ばらつきが比較的大きい領域を基準にするほうが、対応領域CPに対応する対応領域CPを精度良く決定できる。あるいは、ばらつきが比較的小さい領域を基準にするよりも、ばらつきが比較的大きい領域を基準にするほうが、対応領域CPのサイズが小さくても適切な対応領域CPを決定できるので、処理時間が短くなる。
B.変形例
(1)上記実施例では、参照領域RA1の位置情報として、左上座標(Rx1、Ry1)が用いられ、参照領域RA1の外形情報として、幅Rw1と高さRh1が用いられている。これに代えて、参照領域RA1の位置情報と外形情報とを兼ねる情報として、参照領域RA1の対角を形成する2つの頂点に位置する2つの画素の座標が用いられても良い。具体的には、左上の画素を表す左上座標と、右下の画素を表す右下座標と、の組み合わせが用いられても良い。また、参照領域RA1の位置情報と外形情報とを兼ねる情報として、参照領域RA1の4つの頂点に位置する4つの画素の座標が用いられても良い。上述したいずれの位置情報であっても、参照領域RA1の右側スキャン画像20R上の位置を特定することができる。また、上述したいずれの外形情報であっても、参照領域RA1のサイズを示す幅と高さとを特定することができる。
なお、基準参照領域RA0の位置情報および外形情報、基準探索領域SA0の位置情報および外形情報も、参照領域RA1の位置情報および外形情報と同様に、矩形の対角を形成する2つの頂点に位置する2つの画素の座標や、矩形の4つの頂点に位置する4つの画素の座標が用いられても良い。
(2)上記実施例では、探索領域SA1を決定するために、参照領域RA1の位置情報と外形情報に加えて、基準参照領域RA0や基準探索領域SA0の位置情報や外形情報が用いられている。これに代えて、CPU410は、基準参照領域RA0や基準探索領域SA0の位置情報や外形情報を用いることなく、参照領域RA1の位置情報と外形情報のみを用いて、参照領域RA1を決定しても良い。例えば、CPU410は、探索領域SA1の高さを、参照領域RA1の高さと同じ高さに決定する。そして、CPU410は、探索領域SA1の幅を、参照領域RA1の幅の所定数倍(例えば、20倍)に決定する。そして、CPU410は、探索領域SA1の縦方向の位置を、参照領域RA1の縦方向の位置と同じ位置に決定する。そして、CPU410は、探索領域SA1の横方向の位置を、探索領域SA1の右端の位置が、左側スキャン画像20Lの右端と同じ位置となるように、決定する。
(3)上記実施例では、探索領域SA1を決定するために、基準参照領域RA0の位置と参照領域RA1の位置との関係と、基準探索領域SA0の位置と、を用いている。これに代えて、CPU410は、右側スキャン画像20Rの基準の位置(例えば、右側スキャン画像20Rの左上の画素の位置)と、参照領域RA1の位置と、の関係と、左側スキャン画像20Lの基準の位置(例えば、左側スキャン画像20Lの右上の画素の位置)と、を用いて、探索領域SA1を決定しても良い。例えば、CPU410は、右側スキャン画像20Rの左上の画素の位置に対する参照領域RA1の左上の画素の位置と、左側スキャン画像20Lの右上の画素の位置に対する探索領域SA1の右上の画素の位置とが、鏡像の関係になるように、探索領域SA1を決定しても良い。
(4)2個のスキャンデータによって表される2個の画像を、第1の画像と、第2の画像とする。上記実施例では、第1の画像(具体的には、右側スキャン画像20R)の左端近傍と、第2の画像(具体的には、左側スキャン画像20L)の右端近傍と、が結合されるように、合成画像が生成されている。これに代えて、例えば、2個のスキャンデータの生成に用いられる一つの原稿に応じて、第1の画像の右端近傍と、第2の画像の左端近傍とが、結合されるように、合成画像が生成されてもよい。あるいは、第1の画像の下端近傍と、第2の画像の上端近傍とが、結合されるように、合成画像が生成されても良く、第1の画像の上端近傍と、第2の画像の下端近傍と、が結合されるように、合成画像が生成されてもよい。
そして、このような第1の画像と第2の画像との結合の態様は、予め決められていても良いし、上述した4個の結合の態様の全てについて、それぞれ、参照領域RA1の決定と、対応領域CPの決定と、を実行しても良い。後者の場合には、参照領域RA1と対応領域CPとの類似度が最も高い結合の態様で、第1の画像と第2の画像とが結合された合成画像を表す合成画像データが生成されてもよい。
4個の結合の態様によって、決定される参照領域RA1や探索領域SA1は異なる。また、4個の結合の態様によって、用いられる基準参照領域RA0や基準探索領域SA0は異なる。例えば、第1の画像の下端近傍と、第2の画像の上端近傍とが、結合されるように、合成画像が生成される場合を考える。この場合には、例えば、第1の画像の下端近傍に参照領域RA1が決定され、第2の画像の上端近傍に、探索領域SA1が決定される。例えば、基準参照領域RA0は、第1の画像の下端に沿って配置され、基準探索領域SA0は、第2の画像の上端に沿って配置される。そして、例えば、探索領域SA1の幅は、参照領域RA1の幅と同じに決定され、探索領域SA1の高さは、参照領域RA1の高さと基準参照領域RA0の高さとの比率に、基準探索領域SA0の高さを乗じた値に決定される。
(5)上記実施例では、探索領域SA1の高さSh1は、参照領域RA1の高さRh1と同じにされる(図12のS335)。これは、上記実施例では、右側スキャン画像20R内の右側原稿画像HIRと、左側スキャン画像20L内の左側原稿画像HILとの、縦方向のずれ量が比較的小さいことを想定して、基準探索領域SA0の高さSh0と、基準参照領域RA0の高さRh0と、が等しい値とされているからである(Sh0=Rh0(図13))。例えば、右側スキャン画像20R内の右側原稿画像HIRと、左側スキャン画像20L内の左側原稿画像HILとの、縦方向のずれ量が比較的大きいことを想定される場合には、基準探索領域SA0の高さSh0が、基準参照領域RA0の高さRh0より大きくされ得る(Sh0>Rh0)。
この場合には、探索領域SA1の高さSh1は、参照領域RA1と基準参照領域RA0との高さの比率(Rh1/Rh0)に、基準探索領域SA0の高さSh0を乗じた値に決定されても良い(Sh1=(Rh1/Rh0)×Sh0)。あるいは、探索領域SA1の高さSh1は、参照領域RA1の高さRh1に、想定される縦方向のずれ量を考慮して決定された所定長Mのマージンを加算した値に決定されても良い(Sh1=Sh0+M)。一般的には、探索領域SA1の高さSh1は、参照領域RA1の高さRh1が大きいほど大きくなるように決定されることが好ましい。
(6)参照領域RA1の位置情報は、座標とは異なる情報であっても良い。例えば、参照領域RA1の位置情報は、参照領域RA1の縦方向の位置を3段階(具体的には、上、中、下)で表す情報であっても良い。参照領域RA1の外形情報は、幅と高さとは異なる情報であっても良い。例えば、参照領域RA1の外形情報は、参照領域RA1のサイズを3段階(具体的には、大、中、小)で表す情報であっても良い。この場合には、例えば、参照領域決定処理では、CPU410は、右側スキャン画像20R内の複数個の画素の値のばらつきに基づいて、3段階の位置情報と3段階の外形情報とを組み合わせて得られる9種類のパターンに対応する9種類の参照領域の中から、1個の参照領域RA1を決定する。そして、CPU410は、決定された参照領域RA1に対応する9種類のパターンに対応する9種類の探索領域の中から、1個の探索領域SA1を決定しても良い。
(7)上記実施例では、2個のスキャンデータを用いて、2個のスキャン画像が合成された合成画像を表す合成画像データが生成されている。これに限らず、任意の個数のスキャンデータを用いて合成画像データが生成されても良い。例えば、4個のスキャン画像データを用いて、4個のスキャン画像が合成された合成画像を表す合成画像データが生成されてもよい。
(8)上記実施例では、合成画像データの生成に用いられる2個の画像データは、複合機200のスキャナ部250によって原稿が読み取られることによって生成される2個のスキャンデータである。これに代えて、2個の画像データは、デジタルカメラによって原稿の複数個の領域を撮影することによって、2個の画像データが生成されても良い。
(9)上記実施例では、合成画像データの生成に用いられる2個のスキャンデータは、1つの原稿10を読み取って得られる右側スキャンデータと左側スキャンデータである。これに代えて、2個のスキャンデータは、2個の原稿をそれぞれ読み取って得られる2個のスキャンデータであっても良い。
(10)上記実施例においてサーバ400のCPU410によって実行される処理(例えば、図2のS25〜S40の処理)は、例えば、複合機200のCPU210によって実行されても良い。この場合には、サーバ400は不要であり、複合機200が単体で図2の処理を実行すればよい。また、サーバ400のCPU410によって実行される処理は、複合機200と接続されたパーソナルコンピュータ500(図1)のCPU(図示省略)によって実行されても良い。例えば、パーソナルコンピュータ500のCPUは、パーソナルコンピュータ500にインストールされたスキャナドライバプログラムを実行することによって、これらの処理を実行しても良い。また、サーバ400は、本実施例のように1つの計算機で構成されても良く、複数個の計算機を含む計算システムによって構成されていても良い。
(11)上記実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。