A.第1実施例
A−1.画像処理システム1000の構成
図1は、画像処理システムの構成を示すブロック図である。画像処理システム1000は、画像処理装置としてのサーバ400と、スキャナ200と、を備えている。サーバ400は、インターネット70に接続されており、スキャナ200は、LAN(Local Area Networkの略称)80を介して、インターネット70に接続されている。この結果、サーバ400とスキャナ200は、LAN80とインターネット70とを介して、通信可能である。また、LAN80には、スキャナ200のユーザのパーソナルコンピュータ500が接続されていても良い。
サーバ400は、サーバ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は、スキャナ200のコントローラの一例としてのCPU210と、DRAMなどの揮発性記憶装置220と、フラッシュメモリやハードディスクドライブなどの不揮発性記憶装置230と、読取実行部250と、タッチパネルやボタンなどの操作部260と、ユーザインタフェース画面(以下、UI画面とも呼ぶ)を表示するための液晶ディスプレイなどの表示部270と、外部機器と通信を行う通信部280と、を備えている。例えば、通信部280は、LAN80などのネットワークに接続するためのインタフェースや、USBメモリなどの外部記憶装置と接続するためのインタフェースを含んでいる。
揮発性記憶装置220には、CPU210が処理を行う際に生成される種々のデータを一時的に格納するバッファ領域221が設けられている。不揮発性記憶装置230には、制御プログラム231が格納されている。制御プログラム231は、プリンタ100の製造時に不揮発性記憶装置230に予め格納されて提供され得る。これに代えて、制御プログラム231は、例えば、インターネットを介して接続されたサーバからダウンロードされる形態、あるいは、CD−ROMなどに記録された形態で提供され得る。
読取実行部250は、後述する図2の搬送部20と、センサ部30と、を備え、光学的に原稿を読み取ることによってカラー画像やグレー画像を表すスキャンデータを生成する。
CPU210は、制御プログラム231を実行することにより、スキャナ200の制御を実行する。例えば、CPU210は、読取実行部250を制御して、スキャン処理などを実行する。さらに、CPU210は、サーバ400にアクセスして、サーバ400が提供するサービスを利用することができる。
図2は、スキャナ200の概略構成を示す図である。スキャナ200は、略箱状の筐体40と、カバー45と、搬送部20と、センサ部30と、を備えている。カバー45は、筐体40の上壁面の後方側(図2の左側)に、開閉可能に取り付けられ、開状態で、原稿を載置するトレイとして機能する。筐体40内には、上側導入口12から排出口14に至る第1搬送経路T1と、下側導入口13から排出口14に至る第2搬送経路T2と、が形成されている。第1搬送経路T1と第2搬送経路T2は、センサ部30より上流側で合流しており、第1搬送経路T1と第2搬送経路T2との合流後の下流側の部分は、共通の経路となっている。
搬送部20は、搬送経路T1、T2に沿って、1枚ずつ原稿を搬送する機構である。搬送部20は、供給ローラ21と、分離パッド22と、一対の第1搬送ローラ23、24と、一対の第2搬送ローラ25、26と、を備える。
センサ部30は、第1イメージセンサ31と第2イメージセンサ32とを備える。イメージセンサ31、32は、一列に並んだCCDやCMOSなどの光電変換素子を用いて、搬送部20によって搬送される原稿を読み取るラインセンサ(例えば、いわゆるCIS(Contact Image Sensorの略)である。第1イメージセンサ31は、原稿の第1面(例えば、表面)の画像を読み取り、第2イメージセンサ32は、原稿の第1面の反対側の第2面(例えば、裏面)の画像を読み取る。
以上の説明から解るように、本実施例のスキャナ200の読取実行部250は、原稿の両面(第1面と第2面)を同時に読み取ることによって、第1面を示すスキャンデータと、第2面を示すスキャンデータと、を生成することができる。
A−2.画像処理システム1000の動作
図3は、画像処理システム1000の動作を示すシーケンス図である。このシーケンス図の処理は、スキャナ200が、サーバ400が提供する画像生成サービスの利用指示を、ユーザから受け付けた場合に開始される。この画像生成サービスは、詳細は後述するが、複数個のスキャンデータによって表される複数個の画像が配置され、複数個の画像で1個の対象物(具体的には、後述する原稿10)を示す配置済画像を表す配置済画像データを生成するサービスである。複数個のスキャンデータは、詳細は後述するが、例えば、1回で読み取り可能なサイズより大きなサイズの原稿を、複数回に分けて読み取ることによって生成される。
処理が開始されると、S5では、スキャナ200のCPU210は、サービス開始要求を、サーバ400に対して送信する。サーバ400のCPU410は、サービス開始要求を受信すると、図1に示されるUIデータ群433から画像生成サービスの提供に必要なUIデータを選択し、S10にて、該UIデータをスキャナ200に対して送信する。UIデータは、具体的には、UI画面を表す画面データと、制御データと、を含む。この制御データは、例えば、UI画面を利用してスキャナ200が後述するS15のスキャン処理などの所定の処理を行うために必要な各種のデータを含む。例えば、制御データは、スキャナ200が実行すべき処理を行うために必要な情報、例えば、画像ファイルの送信先アドレスなどを含む。スキャナ200が実行すべき処理は、例えば、後述するS20にて画像ファイルをサーバ400へ送信する処理を含む。
S15では、CPU210は、受信したUIデータに基づいて、複数個(本実施例では2個)のスキャンデータを生成するスキャン処理を実行する。本実施例のスキャンデータは、例えば、0〜255の256階調の値で表されるRGBの各成分の成分値を画素ごとに含むRGB画像データである。RGBの各成分の成分値を、R値、G値、B値とも呼ぶ。
図4は、原稿を説明する図である。図4(A)には、本実施例の原稿の一例が示されている。この原稿10のサイズは、本実施例では、A3サイズである。線VLは、A3サイズの原稿10の長手方向の中央部に位置し、原稿10の短辺と平行な線である。左領域10Lは、原稿10の左側の半分の領域、すなわち、線VLより左側の領域である。右領域10Rは、原稿10の右側の半分の領域、すなわち、原稿10の線VLより右側の領域である。左領域10Lのサイズ、および、右領域10Rのサイズは、A4サイズである。なお、A3サイズ、および、A4サイズは、ISO(International Organization for Standardizationの略)216で定められている紙の寸法である。
図4の符号10L、10Rが付された矢印は、領域10L、10Rの位置と向きを示す。すなわち、これらの矢印が配置された位置、および、これらの矢印が示す向きに、これらの領域10L、10Rが配置されていることを意味している。後述する図では、領域10L、10R内の画像の図示を省略して、符号付きの矢印のみで、これらの領域10L、10Rの位置および向きを示す場合がある。
図4(B)、(C)に示すように、原稿10は、折れ線VLで二つ折りにされた状態で、キャリアシート50に収容される。二つ折りにされた状態の原稿10の一方の面には右領域10Rが位置し、他方の面には、左領域10Lが位置する。
キャリアシート50は、2枚の透明なシート部材52、53と、帯状部51と、を備えている。2枚のシート部材52、53は、互いに同一の形状およびサイズの矩形を有している。2枚のシート部材52、53は、互いに重ね合わされた状態で、2個の短辺のうちの一方に対応する端部(図4の上方の端部)が、帯状部51によって固定されている。キャリアシート50は、2枚のシート部材52、53で原稿を挟むことによって、該原稿を収容する。
2枚のシート部材52、53のそれぞれの長手方向の長さは、A4サイズの長手方向の長さである297mmとほぼ等しい。また、2枚のシート部材52、53のそれぞれの短手方向の長さは、レターサイズの短手方向の長さである215.9mmとほぼ等しい。レターサイズは、ANSI/ASME(American National Standards Institute/American Society of Mechanical Engineersの略)Y14.1で定められている紙の寸法である。このために、キャリアシート50は、広げたままの状態のA4サイズおよびレターサイズの原稿を、収容することができる。また、キャリアシート50は、2つ折りにされた状態のA3サイズの原稿10を、収容することができる。
原稿10がキャリアシート50に収容される態様には、左領域10Lが表面となる態様(図4(B))と、右領域10Rが表面となる態様(図4(C))と、の2種類がある。
キャリアシート50は、原稿10を収容した状態で、例えば、帯状部51を下流側にして、上側導入口12にセットされる。スキャナ200の搬送部20は、ユーザの開始指示に基づいて、キャリアシート50を第1搬送経路T1に沿って搬送する。スキャナ200の第1イメージセンサ31は、第1搬送経路T1を搬送されるキャリアシート50内の原稿10の表面を読み取ることによって、第1スキャンデータを生成する。第2イメージセンサ32は、キャリアシート50内の原稿10の裏面を読み取ることによって、第2スキャンデータを生成する。上述したように、原稿10がキャリアシート50に収容される態様には、2種類の態様があるので、スキャンデータの生成には、第1スキャンデータが左領域10Lを表し、第2スキャンデータが右領域10Rを表す第1パターンと、第1スキャンデータが右領域10Rを表し、第2スキャンデータが左領域10Lを表す第2パターンと、の2種類がある。
図5は、本実施例で用いられる画像の一例を示す図である。図5(A)には、第1スキャンデータによって表される第1スキャン画像SI1と、第2スキャンデータによって表される第2スキャン画像SI2と、が示されている。第1スキャン画像SI1は、第1原稿画像CI1と、余白WB1と、を含んでいる。また、第2スキャン画像SI2は、第2原稿画像CI2と、余白WB2と、を含んでいる。図5(A)の例では、第1パターンでスキャンデータが生成されているので、第1原稿画像CI1は、原稿10の左領域10Lを表し、第2原稿画像CI2は、原稿10の右領域10Rを表している。
ここで、第1スキャン画像SI1において、第1原稿画像CI1が傾いているのは、第1スキャンデータの生成時に、キャリアシート50に対して原稿10が傾いていたこと、および/または、キャリアシート50の搬送方向に対してキャリアシート50が傾いていたことに起因している。第2スキャン画像SI2において、第2原稿画像CI2が傾いているのも同様である。また、第1スキャン画像SI1内の第1原稿画像CI1には、原稿10の左領域10Lの全体が表されていない。すなわち、第1原稿画像CI1は、右上の部分LA1が欠けている。同様に、第2スキャン画像SI2内の第2原稿画像CI2には、原稿10の右領域10Rの全体が表されていない。すなわち、第2原稿画像CI2は、左上の部分LA2が欠けている。これは、キャリアシート50の搬送方向と垂直な方向の位置が、イメージセンサ31、32の当該方向の中心からずれることによって、キャリアシート50の当該方向の端部(すなわち、2つ折りにされた原稿10の当該方向の端部)が、イメージセンサ31、32の読み取り可能範囲からはみ出すからである。この原稿画像CI1、CI2の欠けた部分LA1、LA2の形状は、上述したように原稿画像CI1、CI2が傾いていることに起因して、図5(A)の例では、縦方向に延びる細長い三角形となっている。第1スキャン画像SI1において、第1原稿画像CI1の欠けた部分LA1に対応する端DT1は、第1スキャン画像SI1の右端の一部と一致している。そして、第1スキャン画像SI1において、第1原稿画像CI1の端DT1以外の端は、第1スキャン画像SI1の端とは、一致しておらず、第1スキャン画像SI1の端に対して傾斜している。同様に、第2スキャン画像SI2において、第2原稿画像CI2の欠けた部分LA2に対応する端DT2は、第2スキャン画像SI2の左端の一部と一致している。
S15のスキャン処理において、第1スキャンデータ、および、第2スキャンデータは、それぞれ、所定のフォーマットのファイル、例えば、JPEG(Joint Photographic Experts Groupの略)フォーマットの画像ファイルに変換される。
図3のS20では、CPU210は、第1スキャンデータの画像ファイル(第1画像ファイルとも呼ぶ)と、第2スキャンデータの画像ファイル(第2画像ファイルとも呼ぶ)と、をサーバ400に対して送信する。この結果、S25にて、サーバ400のCPU410は、これらの2個の画像ファイルを取得する。CPU410は、これらの画像ファイルから第1スキャンデータおよび第2スキャンデータ取得して、バッファ領域421に格納する。例えば、JPEG形式の画像ファイルが用いられる場合には、画像ファイルから、所定の変換処理によって、RGB画像データに変換されたスキャンデータが取得されて、バッファ領域421に格納される。
S30では、CPU410は、第1スキャンデータと第2スキャンデータとに対して、それぞれ、傾き補正処理を実行して、第1補正済スキャン画像(後述)を表す第1補正済スキャンデータ、および、第2補正済スキャン画像(後述)を表す第2補正済スキャンデータを生成する。具体的には、CPU410は、処理対象のスキャンデータに対してハフ変換やエッジ検出処理などの公知の処理を実行して、スキャン画像SI1、SI2内の原稿画像CI1、CI2の上端を検出する。CPU410は、原稿画像CI1、CI2の上端と、スキャン画像SI1、SI2の上端と、が、平行になるように、スキャン画像SI1、SI2の回転角度を決定する。CPU410は、決定された回転角度で、スキャン画像SI1、SI2を回転して、補正済スキャン画像を表す補正済スキャンデータを生成する。ここで、検出すべき原稿画像の端は、上端に代えて、下端でも良いが、右端や左端でないことが好ましい。これは、上述したように、スキャン画像SI1、SI2内の原稿画像CI1、CI2の左端および右端は、欠けている場合があり、原稿10の端を表していないからである。すなわち、スキャン画像SI1、SI2内の原稿画像CI1、CI2の左端および右端は、図5(A)の端DT1、DT2のように、スキャン画像SI1、SI2の端と一致しており、傾き補正処理には、利用できない場合があるからである。換言すれば、傾き補正処理で検出すべき原稿画像CI1、CI2の端は、スキャン画像SI1、SI2の端と一致していない端であることが好ましい。
このように予め傾き補正を実行することによって、後述する配置済画像を表す配置済画像データを生成する際に、配置済画像が傾いたまま配置されることを抑制できる。
図3のS35〜S45では、CPU410は、2個の補正済スキャン画像のそれぞれの右端と左端の余白を除去するとともに、除去することができない残存余白領域内に補足画像を形成する一連の前処理を実行する。これらの前処理は、S35の余白除去処理と、S40、S42の残存余白特定処理A、Bと、S45の補足処理と、を含むが、これらの処理の詳細については、後述する。
これらの前処理が実行されることによって、第1処理済スキャン画像AI1を表す第1処理済スキャンデータと、第2処理済スキャン画像AI2を表す第2処理済スキャンデータとが生成される。図5(B)には、処理済スキャン画像AI1、AI2の一例が図示されている。図5(B)に示すように、処理済スキャン画像AI1、AI2の上下の端には、余白WB1、WB2が存在しているが、処理済スキャン画像AI1、AI2の左端および右端には、余白が存在していない。これは、S35〜S45の前処理によって、左端および右端の余白の除去や、左端および右端の残存余白に対する補足画像の形成が、行われたからである。
S50では、CPU410は、処理済スキャン画像AI1、AI2(すなわち、原稿画像CI1、CI2)において欠損している画素を復元する画素復元処理を実行する。図4(B)、(C)に示すように、2個のスキャン画像SI1、SI2は、二つ折りにされた原稿10を読み取ることによって生成された画像である。このために、原稿10の折れ線VL上に位置するごく細い領域の画像は、原稿画像CI1、CI2のいずれにも表れておらず、欠損している。画素復元処理において復元される画像は、原稿10の折れ線VL上に位置するごく細い領域の画像である。画素復元処理については、後述する。
S55では、CPU410は、配置位置決定処理を実行する。配置位置決定処理は、原稿10を適切に表すことができる2個の処理済スキャン画像AI1、AI2の相対的な位置(換言すれば、2個の原稿画像CI1、CI2の相対的な位置)を決定する処理である。配置位置決定処理については、後述する。
S60では、CPU410は、配置済画像生成処理を実行する。配置済画像生成処理では、第1処理済スキャンデータと第2処理済スキャンデータとを用いて、2個の処理済スキャン画像AI1、AI2(換言すれば、2個の原稿画像CI1、CI2)が配置された配置済画像OIを表す配置済画像データが生成される。図5(C)には、配置済画像OIの一例が示されている。配置済画像OIにおいて、2個の原稿画像CI1、CI2は、配置位置決定処理にて決定済の相対的な位置に配置される。この結果、2個の原稿画像CI1、CI2で、図4(A)の原稿10を示す1個の配置済画像OIを表す配置済画像データが生成される。
なお、CPU410は、生成された配置済画像データを所定の形式の画像ファイルに変換することによって、配置済画像を表す配置済画像ファイルを生成する。例えば、RGB画像データである配置済画像データが、JPEG圧縮されることによって、JPEG形式の配置済画像ファイルが生成される。なお、変形例では、配置済画像データから、PDF形式の配置済画像ファイルが生成されてもよい。
S65では、CPU410は、生成された配置済画像ファイルをスキャナ200に対して送信する。スキャナ200のCPU210は、配置済画像ファイルを受信すると、受信した配置済画像ファイルを不揮発性記憶装置230に格納するとともに、ユーザに配置済画像ファイルを受信したことを通知する。配置済画像ファイルは、ユーザの利用に供される。例えば、スキャナ200は、ユーザの指示に基づいて、配置済画像ファイルを用いて、配置済画像OIを印刷することができる。
A−3.余白除去処理
図3のS35の余白除去処理について説明する。図6は、余白除去処理のフローチャートである。余白除去処理は、処理対象の画像データを用いて、処理対象の画像の処理対象の端に存在する余白を、処理対象の端に沿ったライン単位で除去する処理である。
S100では、CPU410は、処理対象の端の中から、1個の注目端を選択する。本実施例では、処理対象の画像は、S30の傾き補正処理後の2個の補正済画像である。処理対象の端は、2個の補正済画像のそれぞれの左端および右端、すなわち、計4個の端である。図7は、本実施例のスキャン画像の一例を示す図である。図7(A)には、第1スキャンデータに対して傾き補正処理を実行して生成される第1補正済スキャンデータによって表される第1補正済スキャン画像RI1が示されている。この第1補正済スキャン画像RI1は、第1原稿画像CI1と余白WB1と、を含んでいる。第1補正済スキャン画像RI1の第1原稿画像CI1は、図5(A)に示す傾いた状態から、傾きが補正された状態になっている。第1補正済スキャン画像RI1の余白WB1は、傾き補正処理前の第1スキャン画像SI1に存在していた元余白WB1aと、傾き補正処理によって付加された付加余白WB1bと、を含んでいる。図7(A)にて、元余白WB1aは、ハッチングで示され、付加余白WB1bは、黒のベタ塗りで示されている。本実施例の傾き補正処理では、画像の重心を回転軸として画像の回転が行われ、補正後と補正前とで、矩形の画像の形状およびサイズは、変わらない。このために、傾き補正処理前の第1スキャン画像SI1の端の一部は、傾き補正処理によって削除されるとともに、付加余白WB1bが傾き補正処理によって付加される。元余白WB1aは、第1特定色、具体的には、スキャナ200においてイメージセンサ31、32と対向する部分の色、本実施例では、グレーを有している。付加余白WB1bは、第2特定色、具体的には、予め定められた画素値で示される色、本実施例では、白色を有している。以上の説明からも解るように、第1補正済スキャン画像RI1の短辺及び長辺のサイズは、スキャン画像SI1の短辺及び長辺のサイズと同じである。
なお、図示は省略するが、第2スキャンデータに対して傾き補正処理を実行して生成される第2補正済スキャンデータによって表されるスキャン画像を、第2補正済スキャン画像RI2とする。第2補正済スキャン画像RI2は、第1補正済スキャン画像RI1と同様に、第2原稿画像CI2と、元余白と付加余白とを含む余白WB2と、を含んでいる。
例えば、S100では、第1補正済スキャン画像RI1の右端RT1または左端LT1が、注目端として選択される。
S105では、CPU410は、注目端が属する補正済スキャン画像(以下、注目スキャン画像とも呼ぶ)内の複数本の縦方向のラインの中から、1本の注目ラインを選択する。複数本の縦方向のラインは、横方向の位置が互いに等しく、縦方向に沿って並ぶ複数個の画素によって構成されるラインである。最初の注目ラインは、注目端に位置するラインである。例えば、注目端が、第1補正済スキャン画像RI1の右端RT1である場合には、最初の注目ラインは、第1補正済スキャン画像RI1の右端RT1に位置するラインである。注目ラインは、注目スキャン画像において、注目端から第1補正済スキャン画像RI1の内側に向かう方向、すなわち、注目端が右端RT1である場合には左方向に向かって、注目端が左端LT1である場合には右方向に向かって順次に選択される。
S110では、CPU410は、注目ラインに含まれる複数個の画素から、1個の注目画素を選択する。例えば、注目ラインに含まれる複数個の画素から、上から下に向かう順序で1個ずつ注目画素が選択される。
S115では、CPU410は、注目画素が、余白が有するべき特定色、すなわち、上述した第1特定色または第2特定色を有する特定色画素であるか否かを判断する。CPU410は、注目画素が、特定色を示す所定範囲内の画素の値(RGB値)を有する場合には、注目画素が特定色画素であると判断し、特定色を示す範囲外の画素の値を有する場合には、注目画素が特定色とは異なる色を有する非特定色画素であると判断する。
注目画素が特定色画素である場合には(S115:YES)、CPU410は、S120にて、画素カウンタWCに1を加算する。画素カウンタWCは、注目ライン上の特定色画素の個数をカウントするためのカウンタである。注目画素が非特定色画素である場合には(S115:NO)、CPU410は、S120をスキップする。
S125では、注目ラインの全ての画素を注目画素として処理したか否かを判断する。未処理の画素がある場合には(S125:NO)、CPU410は、S110に戻って、未処理の画素を注目画素として選択する。全ての画素が処理された場合には(S125:YES)、CPU410は、現在の画素カウンタWCが、所定の閾値TH1より大きいか否かを判断する。閾値TH1は、例えば、注目スキャン画像の縦方向の画素数(すなわち、1本の縦方向のラインに含まれる画素数)の70%の値に設定される。
画素カウンタWCが、所定の閾値TH1より大きい場合には、注目ラインは、余白を構成する余白ラインであると、考えられる。画素カウンタWCが所定の閾値TH1より大きい場合には(S130:YES)、CPU410は、S135に処理を進める。画素カウンタWCが、所定の閾値TH1以下である場合には、注目ラインは、余白ラインではないと、考えられる。画素カウンタWCが所定の閾値TH1以下である場合には(S130:NO)、CPU410は、S150に処理を進める。
S135では、CPU410は、余白ラインの本数をカウントするための余白カウンタWLに1を加算する。S140では、CPU410は、画素カウンタWCを初期化する(0にする)。S145では、CPU410は、確認対象のラインを全て注目ラインとして処理したか否かを判断する。確認対象のラインは、注目端のラインを含み、注目端から第1補正済スキャン画像RI1の内側に向かう方向に連続して並ぶ所定本数分のラインである。余白除去処理における所定本数は、例えば、注目スキャン画像が、300dpiの横方向の読取解像度を有するスキャン画像である場合に、80本である。未処理の確認対象のラインがある場合には(S145:NO)、CPU410は、S105に戻って、現在の注目ラインの次の注目ラインを選択する。次の注目ラインは、注目端が右端である場合には、現在の注目ラインの左側に隣接するラインであり、注目端が左端である場合には、現在の注目ラインの右側に隣接するラインである。全ての確認対象のラインを処理した場合には(S145:YES)、CPU410は、S150に処理を進める。確認対象のラインの本数が十分に大きく設定されているので、通常は、注目ラインが原稿画像CI1の端に達した時点で、S130を経由して、S150に処理が進められる。したがって、全ての確認対象のラインが処理されることは、例えば、注目スキャン画像に原稿画像が含まれていない場合などのイレギュラーな場合を除いて、発生しない。
S150では、CPU410は、余白カウンタWL分の端部画像を余白として、注目スキャン画像から除去する。図7(B)には、余白除去処理後の補正済スキャン画像の一例が示されている。この余白除去処理後の第1補正済スキャン画像DI1は、図7(A)の第1補正済スキャン画像RI1が注目スキャン画像である場合の例である。注目端が、第1補正済スキャン画像RI1の左端LT1である場合には、図7(B)に破線で示す左側の端部領域DALが、S150にて除去される。注目端が、第1補正済スキャン画像RI1の右端RT1である場合には、図7(B)に示す例では、除去すべき余白(端部領域)は特定されないので、右側の端部領域は除去されない。補正済画像によっては、左右の両端のいずれの端部領域も除去される可能性がある。
S155では、処理対象の全ての端を注目端として処理したか否かを判断する。未処理の端がある場合には(S155:NO)、CPU410は、S100に戻って、未処理の端を注目端として選択する。全ての端が処理された場合には(S155:YES)、CPU410は、余白除去処理を終了する。図7(B)に示すように、余白除去処理によって、処理対象の端に沿う複数本の余白ラインが、処理対象の画像第1補正済画像から特定されて、除去される。複数本の余白ラインのそれぞれは、処理対象の端が位置する方向(例えば、右方向または左方向)と垂直であり、かつ、処理対象の画像の処理対象の端に沿う方向(例えば、縦方向)の全長分のラインであり、かつ、処理対象の画像の余白を構成すると判断されるラインである、と言うことができる。
この余白除去処理によって、図7(A)の第1補正済スキャン画像DI1を示す余白除去処理後の第1補正済スキャンデータが生成される。また、図示は省略するが、第2補正済スキャン画像RI2から左端および右端の端部領域が除去された第2補正済スキャン画像DI2を示す余白除去処理後の第2補正済スキャンデータが生成される。
A−4.残存余白特定処理A
図3のS40の残存余白特定処理Aについて説明する。余白除去処理後の補正済スキャン画像の左端および右端には、余白が残存する場合がある。例えば、図7(B)の余白除去処理後の第1補正済スキャン画像DI1は、右端RT1に位置する残存余白SA1と、左端LT1に位置する残存余白SA2と、を含んでいる。残存余白SA1は、第1補正済スキャン画像DI1内の第1原稿画像CI1の傾斜端GTRに隣接する領域である。この傾斜端GTRは、原稿画像CI1の右方向の端であり、かつ、第1補正済スキャン画像DI1の右端RT1に対して、角度θ1だけ傾斜した端である。角度θ1は、傾き補正処理において、第1スキャン画像SI1を回転させる際の回転角度である。傾斜端GTRは、上述した第1原稿画像CI1の欠けた部分LA1に対応する端であり、傾き補正前は、第1スキャン画像SI1の右端と一致していた端である。また、残存余白SA1は、傾き補正処理によって付加された付加余白WB1bの一部であり、傾き補正処理前の第1スキャン画像SI1には、存在しない領域である。すなわち、残存余白SA1は、第1補正済スキャン画像DI1内の第1スキャン画像SI1より外側に位置する領域である。また、残存余白SA1は、補正済スキャン画像の左端または右端(図7(B)の例では右端)に接し、縦方向に延びる細長い三角形を有している。残存余白特定処理Aは、このような残存余白SA1を特定する処理である。
図8は、残存余白特定処理Aのフローチャートである。図9は、残存余白特定処理Aの説明図である。S200では、CPU410は、2個のスキャン画像SI1、SI2から、注目スキャン画像を選択する。以下では、第1スキャン画像SI1が注目スキャン画像であるとして説明するが、第2スキャン画像SI2が注目スキャン画像である場合も同様に処理が行われる。
S205では、CPU410は、注目スキャン画像、すなわち、傾き補正前の第1スキャン画像SI1と同一形状、同一サイズを有する矩形の第1マスク画像MI1を表す第1マスク画像データを生成する。図9(A)には、第1マスク画像MI1が図示されている。第1マスク画像データは、例えば、全ての画素の値が「ON」の値とされた二値画像データである。
S210では、CPU410は、図3のS20にて第1スキャン画像SI1に対して実行された傾き補正処理と同一の処理を、第1マスク画像データに対して実行して、第1補正済マスク画像AMI1を表す第1補正済マスクデータを生成する。すなわち、CPU410は、第1マスク画像MI1を、画像の重心を回転軸として、上述した回転角度θ1だけ回転させる。そして、CPU410は、回転によって、回転前の第1補正済マスク画像AMI1の矩形の領域からはみ出した画像については削除し、回転によって、回転前の第1補正済マスク画像AMI1の矩形の領域内に生じた隙間については付加余白WBa〜WBdを付加する。このとき、CPU410は、付加余白WBa〜WBdを構成する画素の値を「OFF」の値とする。これによって、第1補正済マスク画像AMI1において、第1マスク画像MI1を構成する画素と、付加余白WBa〜WBdを構成する画素と、が区別可能とされる。図9(B)には、傾き補正処理後の第1補正済マスク画像AMI1が示されている。図9(B)の第1補正済マスク画像AMI1において、黒色の部分は、第1マスク画像MI1を構成する画素を示し、白色の部分は、付加余白WBa〜WBdを構成する画素を示す。
S215では、CPU410は、図2のS35の余白除去処理において、第1補正済スキャン画像RI1から除去された端部領域DAL(図7(B))と同じサイズの端部領域DLを、第1補正済マスク画像AMI1から除去する。図9(C)には、端部領域DLが除去された後の第1補正済マスク画像DMI1が図示されている。
S220では、CPU410は、図9(C)の第1補正済マスク画像DMI1に、残存している付加余白WBa、WBc、WBdから、残存余白SA1を特定する。具体的には、CPU410は、付加余白WBa、WBc、WBdのうち、第1補正済マスク画像DMI1の右端または左端に接触し、かつ、右端または左端に接触した部分の長さ(画素数)が、基準長さLs(図9(C))より長い余白を、残存余白SA1として特定する。図9(C)の例では、第1補正済マスク画像DMI1の右端に沿った付加余白WBdが、残存余白SA1として特定される。基準長さLsは、例えば、第1補正済マスク画像DMI1の縦方向の長さの30%〜50%に設定される。なお、CPU410が、付加余白WBa、WBc、WBdのうち、第1補正済マスク画像DMI1の右端または左端に接触し、かつ、右端または左端に接触した部分の長さが、基準長さLsより長い余白を特定しない場合には、S220にて、残存余白SA1が特定されない。
S225では、CPU410は、2個のスキャン画像SI1、SI2について処理したか否かを判断する。未処理のスキャン画像がある場合には(S225:NO)、CPU410は、S200に戻って、未処理のスキャン画像を注目スキャン画像として選択する。2個のスキャン画像について処理された場合には(S225:YES)、CPU410は、残存余白特定処理Aを終了する。この結果、2個の補正済スキャン画像内の残存余白が特定される。例えば、図7(B)の第1補正済スキャン画像DI1内に、図7(B)の残存余白SA1が特定される。なお、図示は省略するが、第2補正済スキャン画像DI2においても同様に残存余白が特定される。
なお、2個のスキャン画像SI1、SI2に、欠けた部分LA1、LA2が存在しない場合には、残存余白特定処理Aで特定されるべき残存余白は存在しないので、残存余白特定処理Aによって残存余白は特定されない。
A−5.残存余白特定処理B
図3のS42の残存余白特定処理Bについて説明する。余白除去処理後の補正済スキャン画像の左端および右端には、上述した残存余白SA1とは異なるタイプの余白が残存する場合がある。例えば、図7(B)の余白除去処理後の第1補正済スキャン画像DI1の左側の残存余白SA2は、右側の残存余白SA1とは異なるタイプの余白である。残存余白SA2は、第1補正済スキャン画像DI1内の第1原稿画像CI1の傾斜端GTLに隣接する領域である。この傾斜端GTLは、第1原稿画像CI1の左方向の端であり、かつ、第1補正済スキャン画像DI1の左端LT1に対して、角度θ2だけ傾斜した端である。角度θ2(図7(B))は、傾き補正処理において、第1スキャン画像SI1を回転させる際の回転角度θ1(図7(B))と、傾斜端GTLの実傾斜角度θ3(図5(A))と、の差分の絶対値である(θ2=|θ1−θ3|)。実傾斜角度θ3は、図5(A)に示すように、傾き補正処理前の第1スキャン画像SI1において、第1原稿画像CI1の左端が、第1スキャン画像SI1の左端に対して傾斜する角度である。傾き補正処理では、実傾斜角度θ3と、傾き補正処理の回転角度θ1と、が等しくなるように、回転角度θ1が決定するが、実際には、誤差のために、実傾斜角度θ3と、傾き補正処理の回転角度θ1が、完全には一致しない。このために、傾斜端GTLは、第1補正済スキャン画像DI1の左端LT1に対して、角度θ2だけ傾斜する。残存余白SA2は、残存余白SA1と同様に、補正済スキャン画像の左端または右端(図7(B)の例では左端)に接し、縦方向に延びる細長い三角形を有している。残存余白特定処理Bは、このような残存余白SA2を特定する処理である。
図10は、残存余白特定処理Bのフローチャートである。S300では、CPU410は、余白除去処理後の2個の補正済スキャン画像DI1、DI2のそれぞれの4個の頂点(合計8個の頂点)から、1個の注目頂点を選択する。図7(B)には、第1補正済スキャン画像DI1の4個の頂点P1〜P4が図示されている。
S305では、CPU410は、注目頂点が属する補正済スキャン画像(以下、注目スキャン画像とも呼ぶ)内の複数本の縦方向のラインの中から、1本の注目ラインを選択する。最初の注目ラインは、注目スキャン画像の左端および右端のうち、注目頂点が位置する側の端(以下、注目端とも呼ぶ)に位置するラインである。例えば、注目頂点が、図7(B)の第1補正済スキャン画像DI1の右上の頂点P2である場合には、最初の注目ラインは、第1補正済スキャン画像DI1の右端に位置するラインである。注目ラインは、注目スキャン画像の左端および右端のうち、注目頂点が属する端から第1補正済スキャン画像DI1の内側に向かう方向、すなわち、注目頂点が右端上の頂点P2、P4である場合には左方向に向かって、注目頂点が左端上の頂点P1、P3である場合には右方向に向かって順次に選択される。
S310では、CPU410は、注目ライン上において、注目頂点が位置する側の端から反対側に向かって、特定色画素が連続する個数Ln(以下、連続数Lnとも呼ぶ)を算出する。注目頂点が上端上の頂点P1、P2である場合には、連続数Lnは、注目ラインの上端から下側に向かって特定色画素が連続する個数である。残存余白特定処理Bにおける特定色画素は、上述した第1特定色を有する画素、すなわち、元余白WB1aの色を有する画素である。
S315では、CPU410は、算出された連続数Lnが、所定の閾値TH2より大きいか否かを判断する。閾値TH2は、例えば、10画素に設定される。連続数LnがTH2より大きい場合には(S315:YES)、この注目ライン上の特定色画素は、特定すべき残存余白SA2を構成している可能性があるので、CPU410は、S320に処理を進める。連続数LnがTH2以下である場合には(S315:NO)、この注目ライン上の特定色画素は、特定すべき残存余白SA2を構成していないと考えられるので、CPU410は、S335に処理を進める。
S320では、CPU410は、現在の注目ラインの特定色画素の連続数Lnが、1つ前の注目ラインの特定色画素の連続数L(n−1)より小さいか否かを判断する。残存余白SA2は、上述したように、補正済スキャン画像DI1、DI2の左端または右端(図7(B)の例では左端)に接し、縦方向に延びる細長い三角形を有している。このために、注目ラインの特定色画素が残存余白SA2を構成している場合には、注目ラインの特定色画素の連続数Lnは、注目ラインが補正済スキャン画像の左端または右端から離れるに連れて、段階的に少なくなる。
このために、連続数Lnが、連続数L(n−1)より小さい場合には(S320:YES)、注目ラインの特定色画素は残存余白SA2を構成していると考えられるので、CPU410は、次の注目ラインに処理を進めるべく、S325に処理を進める。連続数Lnが、連続数L(n−1)以上である場合には(S320:NO)、注目ラインの特定色画素は残存余白SA2を構成しないと考えられるので、CPU410は、次の注目ラインに処理を進めることなく、S335に処理を進める。
S325では、CPU410は、確認対象のラインを全て注目ラインとして処理したか否かを判断する。確認対象のラインは、注目端のラインを含み、注目端から離れる方向に連続して並ぶ所定本数分のラインである。残存余白特定処理Bにおける所定本数は、例えば、注目スキャン画像が、300dpiの横方向の読取解像度を有するスキャン画像である場合に、10本である。未処理の確認対象のラインがある場合には(S325:NO)、CPU410は、S305に戻って、現在の注目ラインの次の注目ラインを選択する。次の注目ラインは、注目端が右端である場合には、現在の注目ラインの左側に隣接するラインであり、注目端が左端である場合には、現在の注目ラインの右側に隣接するラインである。全ての確認対象のラインを処理した場合には(S325:YES)、CPU410は、S330に処理を進める。確認対象のラインの本数が十分に大きく設定されているので、通常は、全ての確認対象のラインが処理されることは発生しない。
S330では、注目端から現在の注目ラインまでの連続する特定色画素を、残存余白SA2を構成する余白画素として決定する。
S335では、注目端から1つ前の注目ラインまでの連続する特定色画素を、残存余白SA2を構成する余白画素として決定する。
なお、最初の注目ライン上の特定色画素の連続数Lnが閾値TH2以下である場合には、余白画素として決定される画素はないので、S335にて、残存余白SA2を構成する余白画素は決定されない。
S340では、CPU410は、S330またはS335にて決定された余白画素を記録する。例えば、注目スキャン画像と同じ形状およびサイズを有する記録用のマスク画像データが用意され、決定された余白画素が記録される。
S345では、CPU410は、2個の補正済スキャン画像DI1、DI2のそれぞれの4個の頂点を注目頂点として処理したか否かを判断する。未処理の頂点がある場合には(S345:NO)、CPU210は、S300に戻って、未処理の頂点を注目頂点として選択する。全ての頂点が処理された場合には(S345:YES)、CPU410は、残存余白特定処理Bを終了する。残存余白特定処理Bによって、例えば、図7(B)の第1補正済スキャン画像DI1内に、図7(B)の残存余白SA2が特定される。なお、図示は省略するが、第2補正済スキャン画像DI2においても同様に残存余白が特定される。
A−6.補足処理
図3のS45の補足処理について説明する。補足処理は、傾斜端GTR、GTLに沿う原稿画像CI1、CI2内の複数個の画素の値を用いて、残存余白特定処理A、Bにて特定された残存余白SA1、SA2内に、補足画像を形成する処理である。図11は、補足処理のフローチャートである。
S400では、CPU210は、残存余白特定処理A、Bにて補正済スキャン画像DI1、DI2内に特定された残存余白SA1、SA2を構成する複数個の余白画素の中から、1個の注目画素TPを選択する。注目画素TPは、複数個の余白画素のうち、補正済スキャン画像DI1、DI2の原稿画像CI1、CI2に近い画素から順に、選択される。
S405では、CPU210は、注目画素TPの周囲領域RAを設定する。周囲領域RAは、図11に示すように、注目画素TPの周囲に位置する複数個の画素を含む範囲である。具体的には、例えば、周囲領域RAは、注目画素TPを中心とし、縦3個×横3個の画素を含む矩形の領域である。
S410では、CPU410は、周囲領域RA内の注目画素TPを除く8個の周囲画素の中から、有効画素値を有する1個以上の有効周囲画素を選択する。有効周囲画素は、原稿画像CI1、CI2を構成する画素と、補足処理にて既に画素の値が決定済の余白画素と、のいずれかである。換言すれば、有効周囲画素は、補正済スキャン画像DI1、DI2から、画素の値が未決定の余白画素を除いた画素である。上述したように、注目画素TPは、複数個の余白画素のうち、補正済スキャン画像DI1、DI2の原稿画像CI1、CI2に近い画素から順に、選択されるので、周囲領域RAには少なくとも1個の有効周囲画素が含まれる。
S415では、CPU410は、選択済の1個以上の有効周囲画素のG値の中央値(メディアン)を有する画素を特定する。S420では、CPU410は、G値の中央値を有する画素のRGB値を、注目画素のRGB値として決定する。変形例としては、有効周囲画素のG値以外の値の中央値(メディアン)を有する画素を特定し、当該中央値を有する画素のRGB値を、注目画素のRGB値として決定しても良い。G値以外の値としては、輝度値、R値、B値などが採用され得る。
S425では、CPU410は、2個の補正済スキャン画像DI1、DI2内の全ての余白画素を注目画素TPとして処理したか否かを判断する。未処理の余白画素がある場合には(S425:NO)、CPU210は、S400に戻って、未処理の余白画素を注目画素TPとして選択する。全ての余白画素が処理された場合には(S425:YES)、CPU410は、補足処理を終了する。補足処理によって、処理済スキャン画像AI1、AI2(図5(B))をそれぞれ示す2個の処理済スキャンデータが生成される。図7(C)には、第1処理済スキャン画像AI1が図示されている。図7(C)から解るように、第1処理済スキャン画像AI1内の残存余白SA1、SA2内には、補足画像が形成されている。
A−7.画素復元処理
図3のS50の画素復元処理について説明する。画素復元処理は、上述したように処理済スキャン画像AI1、AI2(すなわち、原稿画像CI1、CI2)において欠損している画素を復元する処理である。復元すべき画素は、上述したように、原稿10の折れ線VLに対応するごく細い領域内の画素である。
図12は、画素復元処理のフローチャートである。図13は、画素復元処理と、後述する配置位置決定処理の説明図である。S500では、CPU410は、処理対象の端の中から、1個の注目端を選択する。本実施例では、処理対象の端は、2個の処理済スキャン画像AI1、AI2(図13(A))のそれぞれの左端LT1、LT2および右端RT1、RT2(すなわち、計4個の端)である。原稿10の折れ線VLに対応する端は、各処理済スキャン画像の左端および右端のうちの一方であるが、現時点では、いずれの端が原稿10の折れ線VLに対応する端であるかが不明である。このために、各処理済スキャン画像の左端および右端の両方が、処理対象の端とされている。
S505では、CPU410は、注目端に沿って復元領域を設定する。図13(A)には、第1処理済スキャン画像AI1の左端LT1および右端RT1に沿う復元領域AL1、AR1と、第2処理済スキャン画像AI2の左端LT2および右端RT2に沿う復元領域AL2、AR2と、が図示されている。例えば、第1処理済スキャン画像AI1の右端RT1が注目端である場合には、当該右端RT1に沿う復元領域AR1が設定される。設定される復元領域は、注目端に接し、注目端の外側に位置し、注目端に沿って注目端の全長に亘って上端から下端まで延びるごく細い線状の領域である。復元領域の幅ΔWは、例えば、処理済スキャン画像AI1、AI2の横方向の読取解像度が、300dpiである場合に、3画素である。
S510では、CPU410は、復元領域内の注目ラインを選択する。例えば、本実施例では、復元領域の横方向の幅ΔWは3画素であるので、縦方向に延びる3本の画素のラインを含んでいる。CPU410は、3本の画素のラインの中から、1本の注目ラインを、注目端に近い側(すなわち、内側)から順に選択する。例えば、図6の右側に示すように、復元領域AR1は、3本のラインL1〜L3を含んでいる。したがって、この場合には、最初にラインL1が、注目ラインとして選択され、次にラインL2が注目ラインとして選択される。
S515では、CPU410は、注目ラインに含まれる複数個の画素から1個の注目画素TPを選択する。例えば、注目ラインに含まれる複数個の画素から、上から下に向かう順序で1個ずつ注目画素TPが選択される。
S520では、CPU410は、注目画素TPの周囲領域RAを設定する。周囲領域RAは、図12に示すように、補足処理にて用いられた周囲領域RA(図11)と同じ範囲である。
S525では、CPU410は、周囲領域RA内の注目画素TPを除く8個の周囲画素の中から、有効画素値を有する1個以上の有効周囲画素を選択する。有効周囲画素は、処理済スキャン画像AI1、AI2を構成する画素(上述した補足処理にて形成された補足画像の画素を含む)と、画素復元処理にて既に画素の値が決定済の復元領域内の画素と、のいずれかである。例えば、図12の例では、周囲領域RA内のハッチングされた4個の画素が有効周囲画素として選択される。
S530では、図11のS415と同様に、CPU410は、選択済の1個以上の有効周囲画素のG値の中央値(メディアン)を有する画素を特定する。S535では、図11のS420と同様に、CPU410は、G値の中央値を有する画素のRGB値を、注目画素のRGB値として決定する。
S540では、CPU410は、注目ラインの全ての画素を注目画素TPとして処理したか否かを判断する。未処理の画素がある場合には(S540:NO)、CPU410は、S515に戻って、未処理の画素を注目画素TPとして選択する。全ての画素が処理された場合には(S540:YES)、CPU410は、S545にて、注目端について設定された復元領域の全てのラインを注目ラインとして処理したか否かを判断する。未処理のラインがある場合には(S545:NO)、CPU410は、S510に戻って、未処理のラインを注目ラインとして選択する。全てのラインが処理された場合には(S545:YES)、CPU410は、S550にて、処理対象の全ての端を注目端として処理したか否かを判断する。未処理の端がある場合には(S550:NO)、CPU410は、S500に戻って、未処理の端を注目端として選択する。全ての端が処理された場合には(S550:YES)、CPU410は、画素復元処理を終了する。画素復元処理によって、図13(A)の4個の復元領域AL1、AR1、AL2、AR2内の複数個の画素の値が決定される。
なお、復元領域AL1、AR1、AL2、AR2は、処理済スキャン画像AI1、AI2に隣接する領域であるが、バッファ領域421内では、復元領域AL1、AR1、AL2、AR2内の画素を含む画像データは、必ずしも処理済スキャン画像AI1、AI2を表す処理済スキャンデータと一体とされている必要はなく、別の画像データであって良い。
A−8.配置位置決定処理
図3のS55の配置位置決定処理について説明する。配置位置決定処理は、上述したように、原稿10を適切に表すことができる2個の処理済スキャン画像AI1、AI2の相対的な位置(換言すれば、2個の原稿画像CI1、CI2の相対的な位置)を決定する処理である。
図14は、配置位置決定処理のフローチャートである。S600では、CPU410は、第1処理済スキャン画像AI1を右画像とし、第2処理済スキャン画像AI2を左画像とする第1の配置順に設定する。図13(A)では、2個の処理済スキャン画像AI1、AI2は、第1の配置順で並べられている。第1の配置順では、第1処理済スキャン画像AI1の右端RT1と、第2処理済スキャン画像AI2の左端LT2と、が対向する。S605では、CPU410は、第1の配置順にて類似領域特定処理を実行する。
図15は、類似領域特定処理のフローチャートである。S700では、CPU410は、右画像の左端に沿って基準領域CAを決定する。基準領域CAは、右画像の左端に沿う復元領域の全体が、基準領域CAとして決定される。第1の配置順(図13(A))では、第2処理済スキャン画像AI2の左端LT2に沿う復元領域AL2の全体が、基準領域CAとして決定される。
S705では、CPU410は、所定の探索領域SAに基づいて決定される複数個の候補領域の中から、1個の注目候補領域を決定する。探索領域SAは、例えば、左画像の右上部分に設定される範囲である。第1の配置順(図13(A))では、探索領域SAは、処理済スキャン画像AI1の右上部分に破線で示す範囲である。
図16は、図13(A)の探索領域SA近傍の拡大図である。探索領域SAは、縦M画素×横N画素分の矩形の範囲である(M、Nは、2以上の整数)。Nは、例えば、約10であり、Mは、例えば、数十から数百である。図16の例では、探索領域SAの右端は、処理済スキャン画像AI1の右側の復元領域AR1の右端と一致している。また、探索領域SAの縦方向の中心は、処理済スキャン画像AI1の上端に位置している。
CPU410は、探索領域SA内の(M×N)個の画素位置から、1個の注目画素位置を選択する。図16の例では、CPU410は、当該注目画素位置に、基準領域CAの左上の画素Pc(図13(A))が位置するように、基準領域CAを配置した場合に、基準領域CAと重なる第1処理済スキャン画像AI1および復元領域AR1内の領域を、注目候補領域として特定する。このように、探索領域SA内の(M×N)個の画素位置が、(M×N)個の候補領域と1対1で対応している。例えば、図16のハッチングで示す候補領域NT1は、探索領域SA内の右上の画素位置Pt1が注目画素位置である場合に特定される。図16のハッチングで示す候補領域NT2は、探索領域SA内の左下の画素位置Pt2が注目画素位置である場合に特定される。
例えば、最初の注目候補領域は、図16の候補領域NT1である。そして、注目候補領域NT1を特定するための探索領域SA内の画素位置を、候補領域NT1を特定する際の位置から縦方向や横方向に1画素刻みで移動させることで、(M×N)個の候補領域から1個の注目候補領域が順次に特定される。
1個の注目候補領域が特定されると、S710では、CPU410は、注目候補領域の類似率(SC/Nt)を算出する。注目候補領域の類似率(SC/Nt)は、注目候補領域と、基準領域CAとが類似している程度を示す指標値である。
類似率(SC/Nt)の算出方法は、以下のとおりである。先ず、CPU410は、注目候補領域内の複数個の画素を1個ずつ注目画素として選択して、注目画素が、類似画素であるか非類似画素であるかを判断する。具体的には、CPU410は、注目候補領域内の注目画素の成分値と、当該注目画素に対応する基準領域CA内の画素の成分値と、の差ΔVPを算出する。注目画素に対応する基準領域CA内の画素は、注目候補領域と基準領域CAとを重ねた場合に、注目画素と重なる基準領域CA内の画素である。差ΔVPを算出すべき2個の画素の成分値を、(R1、G1、B1)と(R2、G2、B2)とする。差ΔVPは、例えば、3種類の成分値間の差分の絶対値の和で表される。すなわち、差ΔVPは、(R1−R2)の絶対値と、(G1−G2)の絶対値と、(B1−B2)の絶対値と、の合計値で表される。
CPU410は、算出された差ΔVPが、所定の基準値TH3以下である場合には、注目画素が類似画素であると判断し、算出された差ΔVPが、所定の基準値TH3より大きい場合には、注目画素が非類似画素であると判断する。差ΔVPが、所定の基準値TH3以下である場合には、注目候補領域内の注目画素の色と、当該注目画素に対応する基準領域CA内の画素の色とは、類似すると判断できるからである。
CPU410は、注目候補領域内の類似画素の個数SCを、注目候補領域内の画素の総数Ntで除することによって、注目候補領域の類似率(SC/Nt)を算出する。類似率(SC/Nt)は、注目候補領域内の画素の総数Ntに対する類似画素の個数SCの割合である。類似率(SC/Nt)が大きいほど、基準領域CAと、注目候補領域とは、類似している。
S715では、CPU410は、(M×N)個の全ての候補領域を注目候補領域として処理したか否かを判断する。未処理の候補領域がある場合には(S715:NO)、CPU410は、S705に戻って、未処理の候補領域を注目候補領域として特定する。全ての候補領域が処理された場合には(S715:YES)、CPU410は、S720に処理を進める。
S720では、CPU410は、(M×N)個の候補領域の中うち、最も類似率(SC/Nt)が高い領域を、類似領域として決定する。
図14に戻って説明を続ける。図14のS610では、CPU410は、S600とは反対の配置順、すなわち、第2処理済スキャン画像AI2を右画像とし、第1処理済スキャン画像AI1を左画像とする第2の配置順(図示省略)に設定する。第2の配置順では、第1処理済スキャン画像AI1の左端LT1と、第2処理済スキャン画像AI2の右端RT2と、が対向する。S615では、CPU410は、第2の配置順にて類似領域特定処理を実行する。この類似領域特定処理は、上述した図15の類似領域特定処理と同じである。ただし、基準領域CAは、左画像である第1処理済スキャン画像AI1の左端LT1に沿う復元領域AL1の全体に決定され、探索領域SAは、右画像である第2処理済スキャン画像AI2の右上部分に設定される。
S620に移行した時点で、第1の配置順と第2の配置順のそれぞれについて、類似領域と、当該類似領域の類似率(SC/Nt)と、が決定されている。S620では、CPU410は、第1の配置順と第2の配置順のうち、類似率(SC/Nt)が高い類似領域が決定された配置順を、採用すべき配置順として決定する。
S625では、CPU410は、決定された類似領域の位置に基づいて、2個の処理済スキャン画像AI1、AI2の相対的は配置位置を決定する。具体的には、決定された類似領域に対応する探索領域SA内の画素位置Ps(図13(B))が特定される。例えば、決定された類似領域が、図16の候補領域NT1である場合には、探索領域SAの画素位置Pt1が、類似領域に対応する探索領域SA内の画素位置Psとして特定される。そして、特定された探索領域SA内の画素位置と、基準領域CAの左上の画素Pc(図13(A))と、が重なる位置が、2個の処理済スキャン画像AI1、AI2の相対的は配置位置として決定される。相対的は配置位置として決定されると、配置位置決定処理は終了される。
A−9.配置済画像生成処理
図3のS60の配置済画像生成処理について説明する。配置済画像生成処理は、上述したように、第1処理済スキャンデータと第2処理済スキャンデータとを用いて、2個の処理済スキャン画像AI1、AI2(換言すれば、2個の原稿画像CI1、CI2)が配置された配置済画像OIを表す配置済画像データが生成する処理である。
図17は、配置済画像生成処理のフローチャートである。S800にて、CPU410は、2個の処理済スキャン画像AI1、AI2を決定済の配置位置に配置した一の配置済画像OIを表す配置済画像データを生成する。図13(B)の配置済画像OIは、2個の原稿画像CI1、CI2が配置され、これらの2個の原稿画像CI1、CI2で1個の原稿10を示している。なお、配置済画像OIには、図11の補足処理にて形成された補足画像が含まれる。ただし、配置済画像OIには、図12の画素復元処理にて生成された復元領域AL1、AL2、AR1、AR2内の画像は、含まれない。
S805では、CPU410は、配置済画像OIにおいて、2個の処理済スキャン画像AI1、AI2の間に、間隔ΔIT(図13(B))があるか否かを判断する。上述した配置位置決定処理において、基準領域CAおよび探索領域SAは、2個の処理済スキャン画像AI1、AI2より外側に位置する復元領域(例えば、復元領域AR1およびAL2)を含んでいる。このために、配置位置決定処理において決定される相対的に位置に2個の処理済スキャン画像AI1、AI2を配置すると、2個の処理済スキャン画像AI1、AI2の間に、ごく狭い間隔ΔIT、例えば、1〜5画素の幅のΔITが発生し得る。
間隔ΔITがある場合には(S805:YES)、CPU410は、S810にて、中間画素生成処理を実行する。中間画素生成処理は、2個の処理済スキャン画像AI1、AI2の間の間隔ΔITに位置している複数個の中間画素のRGB値を決定する処理である。間隔ΔITがない場合には(S805:NO)、中間画素が存在しないので、中間画素生成処理は、スキップされる。
図18は、第1実施例の中間画素生成処理のフローチャートである。図19は、第1実施例の中間画素生成処理の説明図である。図19(A)、(B)には、2個の処理済スキャン画像AI1、AI2の間の複数個の中間画素によって構成される中間領域NAの拡大図が示されている。S900では、CPU410は、中間領域NA内の1本以上のラインの中から、1本ずつ注目ラインを選択する。図19(A)、(B)の例では、中間領域NAは、縦方向に延びる5本のラインL1〜L5を含んでいる。注目ラインは、2個の処理済スキャン画像AI1、AI2のうちの近い方の画像との距離が短い順に1本ずつ注目ラインとして選択される。図19(A)、(B)の例では、2個の処理済スキャン画像AI1、AI2に接するラインL1、L5が、1番目と2番目の注目ラインとしてそれぞれ選択され、次に、これらの2本のラインL1、L5に接するラインL2、L4が、3番目と4番目の注目ラインとしてそれぞれ選択され、ラインL3が、最後の注目ラインとして選択される。
S905では、CPU410は、注目ラインに含まれる複数個の画素から1個の注目画素TPを選択する。例えば、注目ラインに含まれる複数個の画素から、上から下に向かう順序で1個ずつ注目画素TPが選択される。
S910では、CPU410は、注目画素TPの周囲領域RAを設定する。周囲領域RAは、図19(A)、(B)に示すように、補足処理にて用いられた周囲領域RA(図11)と同じ範囲である。
S915では、CPU410は、周囲領域RA内の注目画素TPを除く8個の周囲画素の中から、有効画素値を有する1個以上の有効周囲画素を選択する。有効周囲画素は、処理済スキャン画像AI1、AI2を構成する画素(上述した補足処理にて形成された補足画像の画素を含む)と、中間画素生成処理にて既に画素の値が決定済の中間画素と、のいずれかである。例えば、図19(A)の例では、注目画素TPは、ラインL1上の中間画素である。この時点で、ラインL2上の複数個の中間画素、および、注目画素TPより下方のラインL1上の中間画素の値は、未決定であるので、周囲領域RA内のハッチングされた4個の画素が有効周囲画素として選択される。図19(B)の例では、注目画素TPは、ラインL3上の中間画素である。この時点では、注目画素TPより下方のラインL3上の中間画素を除いた中間画素の値は、決定済であるので、周囲領域RA内のハッチングされた7個の画素が有効周囲画素として選択される。
S920では、図11のS415と同様に、CPU410は、選択済の1個以上の有効周囲画素のG値の中央値(メディアン)を有する画素を特定する。S925では、図11のS420と同様に、CPU410は、G値の中央値を有する画素のRGB値を、注目画素のRGB値として決定する。
S930では、CPU410は、注目ラインの全ての画素を注目画素TPとして処理したか否かを判断する。未処理の画素がある場合には(S930:NO)、CPU410は、S905に戻って、未処理の画素を注目画素TPとして選択する。全ての画素が処理された場合には(S930:YES)、CPU410は、S935にて、中間領域NA内の全てのラインを注目ラインとして処理したか否かを判断する。未処理のラインがある場合には(S935:NO)、CPU410は、S900に戻って、未処理のラインを注目ラインとして選択する。全てのラインが処理された場合には(S935:YES)、CPU410は、中間画素生成処理を終了する。
図17に戻って説明を続ける。S815では、CPU410は、生成された配置済画像OIの重心を基準にして、外縁近傍において画素の追加や削除を行い、配置済画像OIのサイズを、所定のサイズ(例えば、A3サイズ)の矩形に調整する。S820では、CPU410は、配置済画像OIを表す配置済画像データを所定の形式の画像ファイルに変換することによって、配置済画像OIを表す配置済画像ファイルを生成する。例えば、RGB画像データである配置済画像データがJPEG圧縮されることによって、JPEG形式の配置済画像ファイルが生成される。
以上説明した本実施例によれば、CPU410は、1個の対象物(具体的には、原稿10)の一部を示す第1原稿画像CI1を含む第1スキャン画像SI1を表す第1スキャンデータと、対象物の他の一部を示す第2原稿画像CI2を含む第2スキャン画像SI2を表す第2スキャンデータと、を取得する(図3のS25)。CPU410は、第1スキャンデータに対して、傾き補正処理を実行して、第1補正済スキャン画像RI1(図7(A))を表す第1補正済スキャンデータを生成する(図3のS30)。CPU410は、第1補正済スキャンデータを用いて、残存余白SA1、SA2を特定する(図3のS35〜S42)。具体的には、S35、S42の残存余白特定処理A、Bによって、余白除去後の第1補正済スキャン画像DI1内において、残存余白SA1、SA2(図7(B))が特定される。残存余白SA1、SA2は、第1補正済スキャン画像DI1内の第1原稿画像CI1の傾斜端GTL、GTRに隣接する領域である(図7(B))。傾斜端GTL、GTRは、第1原稿画像CI1の横方向の端であり、かつ、第1補正済画像の横方向の端に対して傾き補正処理による回転角度に基づく角度で傾斜した端である。
そして、CPU410は、第1補正済スキャンデータに対して補足処理を実行して、第1処理済スキャン画像AI1を表す第1処理済スキャンデータを生成する。この結果、第1処理済スキャン画像AI1は、残存余白SA1、SA2内に形成された補足画像と、第1原稿画像CI1と、を含む(図7(C))。そして、CPU410は、第1処理済スキャンデータを用いて、第1処理済スキャン画像AI1と第2原稿画像CI2とが配置された配置済画像OIを表す配置済画像データを生成する(図3のS55)。
このように、第1補正済画像の横方向の端に対して傾き補正処理による回転に基づく角度で傾斜した第1傾斜端に隣接する残存余白SA1、SA2内に補足画像が形成された第1処理済スキャンデータが生成される。そして、第1処理済スキャンデータを用いて、対象物を示す配置済画像を表す配置済画像データが生成される。したがって、配置済画像の第1原稿画像CI1と第2原稿画像CI2との間に残存余白SA1、SA2に起因するスジが発生することを抑制することができる。このようなスジは、例えば、画素間の階調値の差が存在する部分に沿って発生する。このために、残存余白に補足画像が形成されていないと対象画像と残存余白との階調差がスジとなって現れる。
そして、図13(B)の例では、残存余白SA1が位置する側、すなわち、傾斜端GTRが位置する側(第1処理済スキャン画像AI1の右端RT1側)は、配置済画像OIにおいて、第1原稿画像CI1から第2原稿画像CI2に向かう方向に位置している。すなわち、残存余白SA1は、第1原稿画像CI1と第2原稿画像CI2との境界に位置している。このように残存余白SA1や残存余白SA2が第1原稿画像CI1と第2原稿画像CI2との境界に位置している場合、残存余白SA1や残存余白SA2がスジとなって配置済画像OIに表れやすい。しかし、本実施例では、残存余白SA1や残存余白SA2内に補足画像が形成された第1処理済スキャンデータが生成される。このために、残存余白SA1や残存余白SA2に補足画像が形成されない場合と比較して、第1原稿画像CI1と第2原稿画像CI2との間に、残存余白SA1、SA2に起因するスジが発生することを抑制することができる。
さらに、本実施例では、第2スキャンデータに対しても同様の処理(図3のS20〜S45)が行われて、第2処理済スキャン画像AI2(図5(B)、図13(A))を表す第2処理済スキャンデータが生成される。したがって、第2処理済スキャン画像AI2は、第2原稿画像CI2に加えて、処理済スキャン画像AI1と同様に、残存余白内に形成された補足画像を含んでいる。そして、CPU410は、第1処理済スキャンデータと第2処理済画像データとを用いて、第1処理済スキャン画像AI1と第2処理済スキャン画像AI2とが配置された配置済画像OIを表す配置済画像データを生成する。
したがって、配置済画像OIの第1原稿画像CI1と第2原稿画像CI2との間に、残存余白に起因するスジが発生することを、さらに、抑制することができる。
さらに、CPU410は、図3のS55の配置位置決定処理において、補足画像が形成された処理済スキャン画像AI1、AI2を表す処理済スキャンデータを用いて、2個の原稿画像CI1、CI2の配置位置を決定する。この結果、補足画像が形成されていないスキャンデータを用いて相対的な配置位置を決定する場合よりも精度良く、相対的な配置位置を決定することができる。
さらに、補足画像が形成される残存余白は、傾き補正処理の回転角度だけ、第1補正済スキャン画像DI1の横方向の端(例えば、右端RT1)に対して傾斜した傾斜端GTRに接する残存余白SA1を含む。このように、傾き補正処理によって、第1スキャン画像SI1より外側の領域(換言すれば、傾き補正処理前の第1スキャン画像SI1には存在しない領域)が、残存余白として第1補正済スキャン画像DI1に現れ得る。本実施例では、このような残存余白SA1に起因して、配置済画像OI内に発生するスジを抑制することができる。
CPU410は、残存余白SA1のようなタイプの残存余白を、残存余白特定処理A(図8)にて説明したように、補正済マスク画像データを用いて、精度良く特定することができる。
さらに、補足画像が形成される残存余白は、実傾斜角度θ3と、傾き補正処理による回転角度θ1と、の差分の角度θ2だけ、第1補正済スキャン画像DI1の横方向の端(例えば、左端LT1)に対して傾斜した傾斜端GTLに接する残存余白SA2を含む。このように、傾き補正処理によって第1原稿画像CI1の傾きを正確に補正できない場合に、残存余白に起因して配置済画像OI内にスジが発生し得る。本実施例では、配置済画像OIにおける、このようなスジの発生を抑制することができる。
さらに、CPU410は、残存余白特定処理B(図10)において、第1処理済スキャン画像AI1の横方向の端(例えば、左端LT1)と、第1原稿画像CI1の横方向の端(例えば、左端)と、の間に、第1処理済スキャン画像AI1の横方向の端から離れるに従って短くなる複数本の特定色ラインを特定する。複数本の特定色ラインは、特定色画素が連続する縦方向のライン、すなわち、特定色画素が連続数Ln分連続した縦方向のラインである。そして、特定された複数本の特定色ラインを含む領域を残存余白SA2として特定する。特定色画素は、第1スキャン画像SI1の余白(元余白WB1a(図7(A)))の色を有する画素である。これによって、残存余白SA2が細長い三角形であるという特徴に基づいて、残存余白SA2を精度良く特定することができる。この結果、傾き補正処理によって第1原稿画像CI1の傾きを正確に補正できない場合に発生する残存余白SA2を、容易かつ精度良く特定することができる。
さらに、CPU410は、上述した余白除去処理(図6)において、第1補正済スキャン画像RI1の横方向の端に沿う複数本の余白ラインを特定し、第1補正済スキャン画像RI1から複数本の余白ラインを除去している。そして、余白除去処理後の第1補正済スキャン画像DI1内に、残存余白SA1、SA2を特定している(残存余白特定処理A、B)。こうすれば、全長分に亘って余白を構成すると判断される複数本の余白ラインを除去した後の画像内に、残存余白SA1、SA2が特定されるので、補足画像を形成すべき残存余白SA1、SA2を過不足なく決定することができる。
さらに、図11の補足処理では、CPU410は、残存余白SA1、SA2内の複数個の画素から注目画素TPを選択し、第1原稿画像CI1を示す複数個の画素と、残存余白SA1、SA2内の複数個の画素のうちの値が決定済の画素と、のうち、注目画素の周囲の周囲領域RA内に位置する1個以上の画素の中央値を、注目画素の値として決定する(図11のS405〜S420)。この結果、複数個の周囲画素のうちの1個の画素の値が注目画素の値として決定されるので、例えば、複数個の周囲画素の値の平均値を注目画素の値として用いる場合と比較して、補足画像のコントラストの低下を抑制できる。
さらに、上記実施例の図18の中間画素生成処理では、CPU410は、第1原稿画像CI1を示す複数個の画素と、第2原稿画像CI2を示す複数個の画素と、複数個の中間画素のうちの値が決定済の1個以上の画素と、のうち、周囲領域RA内に位置する1個以上の画素を用いて、注目画素TPの値を決定する(図18のS910〜S925)。こうすれば、第1原稿画像CI1と第2原稿画像CI2とが間隔ΔITを空けて配置された配置済画像OIにおいて、当該間隔ΔITの部分がスジとして目立つことを抑制することができる。
B.第2実施例
第2実施例では、中間画素生成処理が、第1実施例とは異なる。図20は、第2実施例の中間画素生成処理のフローチャートである。図21は、第2実施例の中間画素生成処理の説明図である。S1000では、CPU410は、図18のS900〜S935までの処理を実行する。この時点で、第1実施例と同様に、中間領域NA内の全ての中間画素の値が決定される。S1010では、CPU410は、中間領域NAに含まれるライン数は、偶数であるか否かが判断される。図19の例では、中間領域NAに含まれるライン数(5本)は、奇数である。図21の例では、中間領域NAに含まれるライン数は、偶数である。
中間領域NAに含まれるライン数が、偶数である場合には(S1010:YES)、CPU410は、S1020では、CPU410は、最後から2番目に注目ラインとして選択したラインを、注目ラインとして、再度、選択する。
S1030では、CPU410は、注目ラインに含まれる複数個の画素から1個の注目画素TPを選択する。例えば、注目ラインに含まれる複数個の画素から、上から下に向かう順序で1個ずつ注目画素TPが選択される。
S1040では、CPU410は、注目画素TPの左右の6個の画素を、使用する画素として選択する。具体的には、図21(B)にハッチングで示すように、注目画素TPの周囲領域RA内の8個の周囲画素のうち、注目画素TPの右側に位置する3個の画素と、注目画素TPの左側に位置する3個の画素と、が選択される。これらの6個の画素の値は、いずれもS1000にて、決定済である。
S1050では、CPU410は、選択済の6個の画素のG値の中央値(メディアン)を有する画素を特定する。S1060では、CPU410は、G値の中央値を有する画素のRGB値を、注目画素TPのRGB値として決定する。
S1070では、CPU410は、注目ラインの全ての画素を注目画素TPとして処理したか否かを判断する。未処理の画素がある場合には(S1070:NO)、CPU410は、S1030に戻って、未処理の画素を注目画素TPとして選択する。全ての画素が処理された場合には(S1070:YES)、CPU410は、中間画素生成処理を終了する。
なお、S1010にて、中間領域NAに含まれるライン数が、奇数である場合には(S1010:NO)、CPU410は、S1020〜S1060をスキップして、配置済画像生成処理を終了する。すなわち、中間領域NAに含まれるライン数が、奇数である場合には、中間画素生成処理は、第1実施例と同じ処理である。
中間領域NAの横方向の中心に位置するラインは、2個の処理済スキャン画像AI1、AI2からほぼ等距離に位置するから、このライン上の複数個の中間画素は、2個の処理済スキャン画像AI1、AIの両方の値を用いて決定されることが好ましい。中間領域NAに含まれるライン数が、奇数である場合には、中間領域NAの横方向の中心に位置するライン(図19(B)の例では、ラインL3)は、1本である。この場合には、図19(B)に示すように、ラインL3上の複数個の中間画素の値は、左右のラインL2、L4上の複数個の中間画素の値が決定された後に決定されるから、間接的に、2個の処理済スキャン画像AI1、AIの両方の値を用いて決定されることになる。
これに対して、中間領域NAに含まれるライン数が、偶数である場合(すなわち、2n本(nは、1以上の整数)である場合)には、中間領域NAの横方向の中心に位置するライン(図21(A)、(B)の例では、ラインL2とラインL3)は、2本である。この2本のラインは、S1000にて最後から2番目に処理されるライン(すなわち、(2n−1)番目に処理されるラインと)、最後に処理されるライン(すなわち、2n番目の処理されるライン)と、である。例えば、図21(A)、(B)の例では、(2n−1)番目に処理されるラインは、ラインL2であり、2n番目に処理されるラインは、ラインL3であるとする。ラインL3上の複数個の中間画素の値は、左右のラインL2、L4上の複数個の中間画素の値が決定された後に決定されるから、間接的に、2個の処理済スキャン画像AI1、AIの両方の値を用いて決定される。しかしながら、S1000では、ラインL2上の複数個の中間画素の値は、左側のラインL1上の複数個の中間画素の値は決定済であるが、右側のラインL3上の複数個の中間画素の値は未決定の状態で決定される。したがって、図21(A)にてハッチングで示すように、注目画素TPの周囲領域RA内の有効周囲画素は、注目画素TPの右側には存在しない。したがって、S1000では、ラインL2上の複数個の中間画素の値は、第1処理済スキャン画像AI1の値のみを用いて決定される。そうすると、ラインL2上の複数個の中間画素の値は、適切な値に決定されず、ラインL2に沿ってスジが発生する場合がある。そこで、本実施例では、(2n―1)番目に注目ラインとして選択されるラインL2上の複数個の中間画素の値は、2n本のライン分の中間画素の値が全て決定された後に、ラインL2が、再度、注目ラインとして選択される(S1020)。この結果、ラインL2上の複数個の中間画素の値は、ラインL3の中間画素の値を考慮して、再度、決定される(S1030〜S1070)。この結果、ラインL2上の複数個の中間画素の値が不適切な値に決定されることを抑制できる。
C.第3実施例
第3実施例では、中間画素生成処理が、第1実施例とは異なる。図22は、第3実施例の中間画素生成処理のフローチャートである。図23は、第3実施例の中間画素生成処理の説明図である。S1100では、CPU410は、図18のS900と同様に、中間領域NA内の1本以上のラインの中から、1本ずつ注目ラインを選択する。
S1105では、CPU410は、注目ラインに含まれる複数個の画素から1個の注目画素TPを選択する。このとき、上から下に向かう順序で1個ずつ注目画素TPが選択される。
S1110では、CPU410は、図18のS910〜S925の処理を実行して、注目画素TPの第1値(第1のRGB値)を決定する。
S1115では、CPU410は、注目ラインの全ての画素を注目画素TPとして処理したか否かを判断する。未処理の画素がある場合には(S1115:NO)、CPU410は、S1105に戻って、未処理の画素を注目画素TPとして選択する。全ての画素が処理された場合には(S1115:YES)、CPU410は、S1125に処理を進める。この時点で、注目ラインの全ての画素について、第1値が決定される。
S1125では、CPU410は、S1105とは逆に、下から上に向かう順序で1個ずつ注目画素TPが選択される。
S1130では、CPU410は、図18のS910〜S925の処理を実行して、注目画素TPの第2値(第2のRGB値)を決定する。
S1135では、CPU410は、注目ラインの全ての画素を注目画素TPとして処理したか否かを判断する。未処理の画素がある場合には(S1135:NO)、CPU410は、S1125に戻って、未処理の画素を注目画素TPとして選択する。全ての画素が処理された場合には(S1135:YES)、CPU410は、S1140に処理を進める。この時点で、注目ラインの全ての画素について、第2値が決定される。
ここで、第1値と第2値について説明する。図23(A)には、第1値を決定する際に用いられる有効周囲画素がハッチングで示されている。図23(B)には、第2値を決定する際に用いられる有効周囲画素がハッチングで示されている。図23(A)、(B)から解るように、第1値を決定する際に用いられる有効周囲画素と、第2値を決定する際に用いられる有効周囲画素と、互いに同じ画素を含むとともに、互いに異なる画素を含んでいる。このために、1個の画素の第1値と第2値とは、互いに等しい場合と、互いに異なる場合とがある。
S1140では、CPU410は、注目ライン上の複数個の画素のそれぞれについて、有効画素と無効画素とに分類する。具体的には、CPU410は、第1値と第2値とが一致する画素を有効画素に設定し、当該画素の値を当該一致する値に決定する。CPU410は、第1値と第2値とが一致しない画素を無効画素に設定する。
S1150では、CPU410は、注目ライン上の複数個の画素のうち、無効画素に設定された画素について、再度、1個ずつ注目画素TPとして選択する。
S1155では、CPU410は、図18のS910〜S925の処理を実行して、注目画素TPの値(RGB値)を、再度、決定する。この際、第1値と第2値とが一致しない無効画素は、周囲領域RA内に位置していても、注目画素TPの値を決定するための有効周囲画素としては用いない。一方、第1値と第2値とが一致する有効画素は、周囲領域RA内に位置している場合、注目画素TPの値を決定するための有効周囲画素として用いられる。
S1160では、CPU410は、注目ラインの全ての無効画素を注目画素TPとして処理したか否かを判断する。未処理の無効画素がある場合には(S1160:NO)、CPU410は、S1150に戻って、未処理の無効画素を注目画素TPとして選択する。全ての無効画素が処理された場合には(S1160:YES)、CPU410は、S1165に処理を進める。この時点で、注目ラインの全ての画素について、最終的な値が決定され、次回以降の注目ラインの処理では、現在の注目ライン上の全ての画素が有効画素として扱われる。
S1165では、CPU410は、中間領域NA内の全てのラインを注目ラインとして処理したか否かを判断する。未処理のラインがある場合には(S1165:NO)、CPU410は、S1100に戻って、未処理のラインを注目ラインとして選択する。全てのラインが処理された場合には(S1165:YES)、CPU410は、中間画素生成処理を終了する。
以上説明した本実施例によれば、CPU410は、注目ラインに沿う下方向を特定方向とすると、特定方向の上流から下流に向かう順序で、1個ずつ注目画素TPとして選択することによって、特定のライン上に並ぶ複数個の中間画素の第1値を決定する(S1105〜S1115)。CPU410は、特定方向の下流から上流に向かう順序で、1個ずつ注目画素TPとして選択することによって、特定のライン上に並ぶ複数個の中間画素の第2値を決定する(S1125〜S1135)。そして、CPU410は、特定のライン上に並ぶ複数個の中間画素のうち、第1値と第2値とが一致しない画素を注目画素TPとして再度選択し(S1150)、第1値と第2値とが一致する有効画素を含み、第1値と第2値とが一致しない無効画素を含まない1個以上の周囲画素を用いて、再度選択された注目画素TPの値を再度決定する(S1155)。この結果、特定のライン上に並ぶ複数個の中間画素の値が、注目画素TPとして選択される順序の影響で不適切な値に決定されることを抑制できる。具体的には、第1値と第2値とが一致している画素の値は、注目画素TPとして選択される順序の影響で不適切な値になっていないと考えられる。第1値と第2値とが一致していない画素の値は、注目画素TPとして選択される順序の影響で不適切な値になっている可能性があると考えられる。本実施例では、第1値と第2値とが一致していない画素については、再度、注目画素TPとして選択して、第1値と第2値とが一致している画素の値を用いて、再度、値が決定されるので、注目画素TPとして選択される順序の影響を低減できる。
以上の説明から解るように、第2実施例および第3実施例では、複数個の中間画素のうちの値が決定済の1個以上の画素を、注目画素TPとして再度選択し、注目画素TPが再度選択された時点での1個以上の周囲画素の値を用いて、再度選択された注目画素の値を再度決定している。この結果、複数個の中間画素のうちの値が決定済の1個以上の画素の値をより適切な値に決定することができる。したがって、2個の原稿画像CI1、CI2が間隔ΔITを空けて配置された配置済画像OIにおいて、当該間隔ΔITの部分がスジとして目立つことをさらに抑制し得る。
D.変形例:
(1)上記第1実施例では、2個の補正済スキャン画像DI1、DI2との両方の残存余白に、補足画像を形成して、2個の処理済スキャン画像AI1、AI2を生成している。これに代えて、第1補正済スキャン画像DI1の残存余白にのみ補足画像を形成し、第2補正済スキャン画像DI2の残存余白には、補足画像を形成しなくても良い。この場合は、例えば、第1処理済スキャン画像AI1内の補足画像を大きめに形成しても良い。そして、第1処理済スキャン画像AI1と、第2補正済スキャン画像DI2と、が配置された配置済画像OIにおいて、第1処理済スキャン画像AI1内の補足画像によって、第2補正済スキャン画像DI2の残存余白が埋められてもよい。
(2)上記第1実施例では、残存余白特定処理Aと、残存余白特定処理Bと、の両方が行われて、残存余白SA1と、残存余白SA2と、の両方が特定されている。これに代えて、残存余白特定処理Aと、残存余白特定処理Bと、の一方だけが行われて、残存余白SA1と、残存余白SA2と、の一方だけが特定されてもよい。例えば、傾き補正処理の精度が十分に高い場合には、残存余白特定処理Bは省略されても良い。また、原稿の読み取り時に、原稿が欠ける可能性が低い場合には、残存余白特定処理Aは省略されても良い。
(3)上記各実施例の中間画素生成処理は、各実施例のように補足画像が形成された2個の処理済スキャン画像AI1、AI2の間の中間画素の値を決定するために用いられることに限られない。一般的に、2個のスキャン画像を並べて1個の対象物を示す配置済画像を生成する際に、2個のスキャン画像の間の中間画素の値を決定するために用いられて良い。
(4)上記第3実施例の図22の中間画素生成処理は、中間画素によって構成される全てのラインに対して行われなくても良い。例えば、図19のラインL3や、図21のラインL2、L3のように、中間領域NAの横方向の中心近傍のラインに対して、図22の中間画素生成処理が行われ、中間領域NAのその他のラインに対しては、第1実施例の図18の中間画素生成処理が行われても良い。
(5)上記第1実施例では、補足画像の画素の値の決定、復元領域内の画素の値の決定、中間画素の値の決定、において、周囲領域RA内の有効周囲画素のG値の中間値を用いているが、これに限られない。これらの画素の値は、周囲領域RA内の有効周囲画素の平均画素値などの他の値に決定されても良い。
(6)上記第1実施例では、折れ線VLで二つ折りにされた原稿10は、スキャナ200によって両面を同時に読み取られている。これに代えて、例えば、二つ折りにされた原稿10を、フラットベッド式のスキャナを用いて、片面ずつ2回に分けて読み取ることによって、2個のスキャンデータが生成されても良い。
(7)上記第1実施例では、2個の原稿画像CI1、CI2が横方向に並んで配置される配置済画像を表す配置済画像ファイルが生成される。これに代えて、2個の原稿画像が縦方向に並んで配置される配置済画像を表す配置済画像ファイルが生成されても良い。
(8)上記第1実施例では、2個の画像ファイルを用いて、2個の原稿画像が配置された配置済画像を表す配置済像データが生成されている。これに限らず、任意の個数の画像ファイルを用いて、1個の配置済画像データが生成されても良い。例えば、4個の画像ファイルを用いて、4個の原稿画像が配置された配置済画像を表す配置済画像ファイルが生成されてもよい。
(9)上記実施例では、配置済画像データの生成に用いられる2個の画像ファイルは、スキャナ200によって原稿が読み取られることによって生成される。これに代えて、2個の画像ファイルは、デジタルカメラによって二つ折りにされた原稿10の両面をそれぞれ撮影することによって、2個の画像ファイルが生成されても良い。
(10)上記実施例においてサーバ400のCPU410によって実行される処理(例えば、図2のS25〜S60の処理)は、例えば、スキャナ200のCPU210によって実行されても良い。この場合には、サーバ400は不要であり、スキャナ200が単体で図3の処理を実行すればよい。また、サーバ400のCPU410によって実行される処理は、スキャナ200と接続されたパーソナルコンピュータ500(図1)のCPU(図示省略)によって実行されても良い。例えば、パーソナルコンピュータ500のCPUは、パーソナルコンピュータ500にインストールされたスキャナドライバプログラムを実行することによって、これらの処理を実行しても良い。また、サーバ400は、本実施例のように1つの計算機で構成されても良く、互いに通信可能な複数個の計算機を含む計算システムによって構成されていても良い。
(11)上記実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。