以下に本発明の実施例について、図面と共に説明する。
図1(a)は、本実施例のディジタル複合機1の構成を表すブロック図である。図1(a)に示すように、本実施例のディジタル複合機1は、画像読取部10、読取制御部20、印刷部30、印刷制御部40、表示操作部50、通信部60、CPU70、RAM80及びフラッシュメモリ90を備え、フラッシュメモリ90に記録されたプログラムに基づきCPU70にて各種処理を実行し、装置全体を統括制御する構成にされている。
具体的に、画像読取部10は、図1(b)(c)に示す構成にされている。図1(b)(c)は、画像読取部10の構成を示した説明図である。画像読取部10は、読取対象の原稿Pが載置される透明な板状の読取ガラス11が筐体13に支持された構成にされており、筐体13内の読取ガラス11下に、読取ガラス11に写る画像を主走査方向において光学的に読み取る読取ユニット15と、読取ユニット15を副走査方向に搬送する搬送機構16と、搬送機構16を駆動するモータ17とを備える。
この画像読取部10は、読取制御部20から入力される制御信号に従って、モータ17の回転力により搬送機構16を駆動し、これにより読取ユニット15を読取ガラス11下で副走査方向(図1(b)(c)に示す点線矢印方向)に搬送すると共に、搬送時において、読取ユニット15に読取動作を実行させる。
尚、読取ユニット15は、読取制御部20に制御されて、副走査方向への移動と共に、読取ガラス11に写る画像をライン毎に読み取り、その読取画像を表すライン画像信号を出力するコンタクトイメージセンサ(CIS)である。この読取ユニット15から出力されるライン画像信号は、図示しないA/D変換器にてディジタルデータ(ライン画像データ)に変換され、読取制御部20に入力される。
また、画像読取部10には、周知のスキャナと同様、読取ガラス11を被覆可能な蓋が開閉自在に設けられており(図示せず)、読取ユニット15による読取動作の実行時には、ユーザによる手動操作により、読取ガラス11に載置された原稿の上にかぶせられるようにして蓋が閉められる。尚、読取ガラス11と対向する蓋の内側は、原稿の読取画像に蓋の画像が写らないよう白色部材で構成されている。
一方、読取制御部20は、CPU70からの指令に従って読取制御処理を実行し、当該読取制御処理にて、読取ユニット15の副走査方向への移動を制御すると共に、読取ユニット15の読取動作を制御する。
この制御により、読取制御部20は、読取ユニット15を読取ガラス11下で副走査方向に搬送しつつ、CPU70から指定された読取ガラス11の読取領域に写る画像を、読取ユニット15に読み取らせ、読取ガラスの読取領域に写る画像を表す画像データを、RAM80に記録する。このような動作により、RAM80には、読取ガラス11の読取領域に載置された原稿Pの読取画像を表す画像データが記録される。
尚、読取制御部20は、画像読取部10から入力される各ライン画像データを、一旦内蔵のバッファに蓄積し、各ライン画像データに対してシェーディング補正等の画像処理を実行した後、各ライン画像データを、RAM80に記録する。
この他、印刷部30は、印刷制御部40から入力される制御信号に従い、トレイ(図示せず)に載置された記録紙を、記録位置に搬送し、インクジェット方式やレーザプリンタ方式等の周知の記録方式で、記録紙に、制御信号に対応した画像を形成するものである。
また、印刷制御部40は、印刷部30を制御して記録紙に画像を形成するものであり、CPU70からの指令に従って、CPU70から指定された印刷対象データに基づく画像を、印刷部30を通じて、記録紙に印刷する。
また、通信部60は、外部機器と通信するためのインタフェース群からなり、USBインタフェース、LANインタフェース、FAXモデム等から構成されている。即ち、複合機1は、通信部60が備えるFAXモデムを通じて外部のFAX装置とFAX通信可能な構成にされ、USBインタフェース又はLANインタフェースを通じて外部のパーソナルコンピュータと通信可能な構成にされている。
この他、表示操作部50は、情報表示用の液晶ディスプレイ(図示せず)と、各種操作キーとを備え、CPU70に制御されて、液晶ディスプレイに、ユーザ向けの情報を表示すると共に、操作キーを通じて入力されたユーザからの指令を、CPU70に入力する。
また、CPU70は、プログラムの実行により、操作キーを通じて入力される指令や通信部60を通じて外部のパーソナルコンピュータ等から入力される指令に従い、コピー機能、FAX機能、スキャナ機能、及び、プリンタ機能等を実現する。
例えば、CPU70は、表示操作部50に設けられた操作キーを通じてユーザからコピー指令が入力されると、複写制御処理(図3参照)を実行して装置内各部を制御し、読取ガラス11上に載置された原稿Pの読取画像を、記録紙に印刷する。詳細には、読取ユニット15による読取結果に基づいて読取ガラス11上に載置された原稿Pのサイズを推定し、推定した原稿サイズと記録紙サイズとから変倍率を設定して、原稿Pの読取画像を、記録紙サイズに適合する大きさに拡大又は縮小し、これを、印刷部30を通じて記録紙に印刷する。
以下、この複写制御処理の内容について具体的に説明するが、それに先駆けては、図2を用いて本実施例の画像読取部10の特徴について説明する。
図2は、読取ガラス11の読取可能領域R0を示した説明図である。当該複合機1においては、一面が開口された長方体状の筐体13の当該開口部において、長方形状のガラス板である読取ガラス11が当該開口部を閉塞するように設けられており、読取ガラス11の周囲が筐体13により支持された構成にされている。
この読取ガラス11は、筐体13の上面よりも若干筐体13の下側に設けられており、筐体13から露出する読取ガラス11の領域11a(以下、「原稿台」と表現する。)と筐体13との境界BDには、原稿Pを突き当て可能に段差が形成されている(以下、筐体13の読取ガラス11より上方に位置する部位(上記段差を形成する部位)13aを「フレーム」と表現する。)
また、画像読取部10においては、読取ユニット15のライン幅と、原稿台11aの大きさとの関係から、四角形状の原稿台11aの全領域よりも若干狭い四角形状の領域R0が、読取ユニット15により原稿を読取可能な読取可能領域R0に定められている。具体的に、読取可能領域R0は、図2において点線で示すように、フレーム13aと読取ガラス11との境界BDから微小量(本実施例では3mm)離れた位置に外周を有した領域となっている。
また、この画像読取部10においては、フレーム13aの左下部分に、原稿Pの角を突き当てるように指示するマークMKが記されている。尚、本実施例では、マークMKが付された原稿台11aの角を、「左下角」と定義して、この左下角より、主走査方向に離れた地点に位置する原稿台11aの角を「右下角」と定義し、左下角より、副走査方向に離れた地点に位置する原稿台11aの角を「左上角」と定義する。
即ち、複合機1においては、原稿台11aの左下角(換言すれば、フレーム13aの内側左下角)が、原稿Pの角を合わせるべき位置として定められており、複合機1は、ユーザが概ね、このマークMKに合わせて原稿Pを載置しているとの仮定の下で、原稿サイズの推定等を行い、原稿のコピー動作を実現する。
この他、本実施例の複合機1においては、このマークMKが付されたフレーム13aの内側左下角に対応する読取可能領域R0の左下角を原点、主走査方向をX軸、副走査方向をY軸としたXY座標系(図2(b)参照)が導入されており、CPU70は、このXY座標系を用いて図3に示す複写制御処理を実行する。
続いて、CPU70が実行する複写制御処理について説明する。図3は、操作キーを通じてコピー指令が入力されると、CPU70が実行する複写制御処理を表すフローチャートである。
複写制御処理を開始すると、CPU70は、操作キーを通じて入力されたコピー指令が「縁無し」コピー指令であるか否かを判断し(S110)、「縁無し」コピー指令であると判断すると(S110でYes)、S120に移行して、図4(a)に示す第一複写処理を実行する。
詳しくは後述するが、第一複写処理では、読取可能領域R0全体に渡ってプレスキャン動作を画像読取部10に実行させ、プレスキャン結果として、読取可能領域R0全体の読取結果である画像データを画像読取部10から取得し、この画像データに基づいて原稿サイズや原稿の傾き角を推定して、変倍率及び傾き補正量を設定し、その後、本スキャン動作を画像読取部10に実行させて、これにより得られる画像データを、拡大・縮小・回転処理し、印刷部30を通じて、記録紙に「縁なし」で原稿のコピー画像を印刷する。CPU70は、この第一複写処理を終了すると、複写制御処理を終了する。
一方、操作キーを通じて入力されたコピー指令が「縁無し」コピー指令ではないと判断すると(S110でNo)、CPU70は、当該コピー指令が「自動変倍/傾き補正」コピー指令であるか否かを判断し(S130)、入力されたコピー指令が「自動変倍/傾き補正」コピー指令であると判断すると(S130でYes)、図4(b)に示す第二複写処理を実行する(S140)。
詳しくは後述するが、第二複写処理では、読取可能領域R0の一部領域においてプレスキャン動作を画像読取部10に実行させ、プレスキャン結果として、当該一部領域に載置された原稿の読取結果である画像データを画像読取部10から取得し、この画像データに基づいて原稿サイズや原稿の傾き角を推定して、変倍率及び傾き補正量を設定し、その後、本スキャン動作を画像読取部10に実行させ、これにより得られる画像データを、拡大・縮小・回転処理し、印刷部30を通じて、記録紙に、傾き補正した原稿のコピー画像を、記録紙サイズに対応する大きさで印刷する。CPU70は、この第二複写処理を終了すると、複写制御処理を終了する。
また、操作キーを通じて入力されたコピー指令が「自動変倍/傾き補正」コピー指令ではないと判断すると(S130でNo)、CPU70は、入力されたコピー指令が「ノーマル」コピー指令であるか否かを判断する(S150)。そして、「ノーマル」コピー指令であると判断すると(S150でYes)、S160に移行し、「ノーマル」コピー指令ではないと判断すると(S150でNo)、入力されたコピー指令に対応した処理を実行した後(S155)、当該複写制御処理を終了する。
また、S160に移行すると、CPU70は、印刷制御部40を通じて、印刷部30に給紙動作を実行させると共に、給紙動作の対象となった記録紙のサイズを検出する(S165)。尚、記録紙のサイズは、例えば、記録紙の搬送路に設けられたセンサを用いて周知の手法で検出することができる。
また、この処理を終えると、CPU70は、S165での検出結果に基づき、読取ガラス11上において、記録紙サイズと同サイズの原稿が正しく規定の位置に載置されていると仮定して、原稿読取開始位置を読取可能領域R0の下端(Y=0)に設定し、原稿読取終了位置を、原稿の上端に対応する位置に設定する(S170)。このようにして、上記原稿読取開始位置から原稿読取終了位置までを読取領域に設定する。
その後、CPU70は、読取制御部20を通じて画像読取部10を制御し、画像読取部10に、読取ユニット15を原稿読取開始位置から原稿読取終了位置まで副走査方向に搬送させると共に、当該搬送中にはライン毎の読取動作を読取ユニット15に実行させて、読取ガラス11上の読取領域に写る画像を、読取ユニット15に読み取らせ、当該読取領域の読取結果を表す画像データが、RAM80に記録されるようにする(S180)。
また、この処理を終えると、CPU70は、RAM80に記録された上記読取結果を表す画像データを、印刷対象データに設定して、当該印刷対象データについての印刷処理を実行する(S190)。即ち、印刷制御部40を通じて、印刷部30に印刷対象データに基づく画像を、給紙した記録紙に印刷させる。このようにして、原稿のコピー画像を、拡大・縮小や傾き補正無しで記録紙に印刷する。その後、当該複写制御処理を終了する。
続いて、CPU70が、S120で実行する第一複写処理について説明する。図4(a)は、CPU70が実行する第一複写処理を表すフローチャートである。
第一複写処理を開始すると、CPU70は、原稿読取開始位置を、読取可能領域R0の下端(Y=0)に設定し、原稿読取終了位置を、読取可能領域R0の上端(Y=YMAX)に設定することにより、読取可能領域R0全域を読取領域に設定し、読取制御部20を通じて、画像読取部10に、プレスキャン動作を実行させる(S210:全体プレスキャン処理)。
尚、画像読取部10は、プレスキャン動作として、設定された読取領域の端から端まで、プレスキャン用の解像度に対応する速度で、読取ユニット15を副走査方向に搬送し、その読取領域の画像を読取ユニット15に読み取らせ、プレスキャン結果として、低解像度の画像データ(以下、「プレスキャン画像データ」という。)を、読取制御部20を通じて、RAM80に記録する動作を実行する。
S210での処理を終えると、CPU70は、RAM80に記録されたプレスキャン画像データに対してエッジ検出処理を実行し、この画像データに対応するエッジ画像データを生成する(S215)。即ち、RAM80に記録されたプレスキャン画像データを、エッジ検出用の画像フィルタ(周知の微分フィルタ)に通して、この画像データに対応するエッジ画像を表すエッジ画像データを生成する。
また、この処理を終えると、CPU70は、生成したエッジ画像データを解析して、原稿台11aに載置された原稿のサイズ(縦幅及び横幅)、及び、原稿の傾き角θ、及び、原稿台11aにおける原稿の載置領域を推定する(S220)。但し、ここでは、X軸に対して原稿の下辺がなす角度を、原稿の傾き角θ(図9参照)とする。
また、S220での処理を終えると、CPU70は、印刷制御部40を通じて、印刷部30に給紙動作を実行させると共に(S230)、給紙動作の対象となった記録紙のサイズを検出する(S235)。更に、S220で推定した原稿サイズ及びS235で検出した記録紙サイズに基づき、予め定められた計算式で(具体的には、原稿のコピー画像が記録紙の縁まで最大限広がって印刷されるように)変倍率を設定する(S240)。
この他、CPU70は、S220で推定した原稿の傾き角θから、画像データの傾き補正量を設定する(S250)。具体的には、原稿のコピー画像が、傾きのない状態でまっすぐ、記録紙に印刷されるように、傾き補正量を設定する。但し、推定した原稿の傾き角θが微小量(本実施例では−0.5度≦θ≦0.5度)である場合には、誤差も考慮して、傾き補正量をゼロに設定する。
また、S250での処理を終えると、CPU70は、S220で推定した原稿の載置領域の情報に基づいて、原稿読取開始位置及び原稿読取終了位置を設定し、原稿読取開始位置及び原稿読取終了位置で定められる読取領域を、原稿台11aにおける原稿の載置領域に対応させる(S260)。
具体的には、原稿の載置領域全体を読取ユニット15が読み取ることができるように、原稿読取開始位置を、副走査方向において最も下側に位置する原稿の端点に対応した位置に設定し、原稿読取終了位置を、副走査方向において最も上側に位置する原稿の端点に対応した位置に設定して、読取領域を原稿台11aにおける原稿の載置領域に対応させる。
また、S260での処理を終えると、CPU70は、読取制御部20を通じて画像読取部10を制御することで、画像読取部10に、読取ユニット15を原稿読取開始位置から原稿読取終了位置まで副走査方向に搬送させると共に、当該搬送中にはライン毎の読取動作を読取ユニット15に実行させて、上記設定した読取領域の画像を、読取ユニット15に読み取らせ、当該読取領域の読取結果を表す画像データが、RAM80に記録されるようにする(S270)。
また、この処理を終えると、CPU70は、RAM80に記録された上記読取結果を表す画像データを、予め設定した変倍率で拡大又は縮小処理すると共に、予め設定した傾き補正量分、回転処理して、上記読取結果を表す画像データを、印刷用の画像データに変換し、変換後の画像データを、印刷対象データに設定する(S280)。但し、傾き補正量がゼロに設定されている場合には、S280において、回転処理を、実行しないものとする。
そして、S280での処理を終えると、CPU70は、当該印刷対象データについての印刷処理を実行する(S290)。即ち、印刷制御部40を通じて、印刷部30に印刷対象データに基づく画像を、給紙した記録紙に印刷させる。その後、当該複写制御処理を終了する。
続いて、S140でCPU70が実行する第二複写処理について説明する。図4(b)は、CPU70が実行する第二複写処理を表すフローチャートである。
第二複写処理を開始すると、CPU70は、原稿読取開始位置を、読取可能領域R0の下端(Y=0)に設定し、原稿読取終了位置を、設計段階で予め定められた読取可能領域R0の下端から所定距離離れた位置(Y=YPRE)に設定することにより、読取可能領域R0の一部を読取領域に設定し、読取制御部20を通じて、画像読取部10に、当該読取領域に対するプレスキャン動作を実行させる(S310:先端部プレスキャン処理)。
図5は、第一複写処理で実行される全体プレスキャン処理の読取領域と、第二複写処理で実行される先端部プレスキャン処理の読取領域と、の相違を表した説明図である。図5に示すように、第二複写処理では、第一複写処理のように読取可能領域R0全体に対してプレスキャン動作を画像読取部10に実行させるのではなく、読取可能領域R0の下端から読取可能領域R0内側へ所定距離離れた地点まで(本実施例では、読取可能領域R0の下端から30mm離れた地点まで)に対して、プレスキャン動作を画像読取部10に実行させる。
このようにして、S310での処理を終えると、CPU70は、RAM80に記録されたプレスキャン画像データ(プレスキャン結果)に対してエッジ検出処理を実行し、この画像データに対応するエッジ画像データを生成する(S315)。即ち、RAM80に記録されたプレスキャン画像データを、エッジ検出用の画像フィルタ(周知の微分フィルタ)に通して、エッジ画像データに変換する。
また、この処理を終えると、CPU70は、S315で生成したエッジ画像データを検査対象データに設定し、S320にて、図6に示す原稿推定処理を実行する。これにより、上記エッジ画像データを解析して、原稿台11aに載置された原稿のサイズ(縦幅及び横幅)、及び、原稿の傾き角θ、及び、原稿台11aにおける原稿の載置領域を推定する。具体的には、原稿台11aに載置された原稿が四角形状で縦横比が一定の定型用紙であるとの仮定の下で、原稿台11aに載置された原稿のエッジを検出すると共に、その検出結果から原稿の左下角位置及び右下角位置を推定し、この推定結果に基づいて、原稿台11aに載置された原稿のサイズ、及び、原稿の傾き角θ、及び、原稿の載置領域を推定する(詳細後述)。
また、S320での処理を終えると、CPU70は、S230〜S290の処理と同様に、S330〜S390の処理を実行する。
但し、S340では、S320で推定した原稿サイズ及びS335で検出した記録紙サイズに基づき、変倍率を、予め定められた計算式に従って、原稿サイズと記録紙サイズとの比(例えば、記録紙短辺長さ÷原稿短辺長さ)に対応した倍率に設定し、後続の処理で、原稿のコピー画像が、原稿サイズとの記録紙サイズの比に対応した倍率で拡大(倍率が1未満の場合には縮小)されて記録紙に印刷されるようにする。
また、S350では、S320で推定した原稿の傾き角θから、原稿のコピー画像が、まっすぐ記録紙に印刷されるように、読取結果である画像データの傾き補正量を設定し、S360では、S320で推定した原稿の載置領域の情報に基づいて、原稿読取開始位置及び原稿読取終了位置を設定し、原稿読取開始位置及び原稿読取終了位置で定められる読取領域を、原稿台11aにおける原稿の載置領域に対応させる。
このようにして、第二複写処理では、読取可能領域R0における一部領域のプレスキャン結果に基づき、原稿サイズ、原稿の傾き角、及び、原稿の載置領域を推定し、その結果から、本スキャン時(S370実行時)の読取領域を決定すると共に、変倍率及び傾き補正量を決定して、原稿のコピー画像を、記録紙サイズに対応する大きさで、記録紙に印刷する。
続いて、図6を用いて、CPU70が、S320で実行する原稿推定処理について説明する。図6は、CPU70が実行する原稿推定処理を表すフローチャートである。
この原稿推定処理を開始すると、CPU70は、変数Sを上述のプレスキャン領域上端のY座標であるYPREに設定することにより(S=YPRE)、Y軸方向の検査範囲を、Y=0からY=S=YPREに設定する(S410)。また、この処理を終えると、S420に移行し、右エッジ検出処理を実行する。図7は、CPU70が実行する右エッジ検出処理を表すフローチャートである。
右エッジ検出処理を開始すると、CPU70は、まずS610にて、副走査方向検査位置Yeを、読取可能領域R0の下端Y座標に設定し(Ye=0)、S615にて、主走査方向検査位置Xeを、読取可能領域R0の右端X座標に設定する(Xe=XMAX)。また、S615では、変数Cを値ゼロに初期化する(C=0)。その後、副走査方向検査位置Yeが検査範囲を超えているか否かを判断する(S620)。具体的には、Ye>Sであるか否かを判断する。
そして、副走査方向検査位置Yeが検査範囲を超えていないと判断すると(S620でNo)、CPU70は、主走査方向検査位置Xe及び副走査方向検査位置Yeで定まる検査位置(X,Y)=(Xe,Ye)に対応する検査対象データの画素値を参照することにより、検査位置(Xe,Ye)がエッジ点であるか否かを判断する(S625)。尚、図8は、エッジ画像データの構成を抜粋して示し、更に、右エッジ検出処理により追跡するエッジ点の軌跡を表した説明図である。図8に示す例では、画素値「1」の地点がエッジ点に該当する。
そして、検査位置(Xe,Ye)がエッジ点ではないと判断すると(S625でNo)、CPU70は、S640に移行して、主走査方向検査位置Xeを、X軸マイナス方向に1画素移動した位置に更新し(Xe←Xe−1)、更新後の主走査方向検査位置Xeが読取可能領域R0の左端を、はみ出ていないかどうかを判断する。具体的には、Xe<0であるか否かを判断する(S643)。
そして、主走査方向検査位置Xeが、読取可能領域R0の左端をはみ出ていないと判断すると(S643でNo)、CPU70は、S620に移行して、副走査方向検査位置Yeが検査範囲を超えているか否か(Ye>Sであるか否か)を判断し、副走査方向検査位置Yeが検査範囲を超えていないと判断すると(S620でNo)、S625に移行し、副走査方向検査位置Yeが検査範囲を超えていると判断すると(S620でYes)、S690に移行する。
一方、S643において、主走査方向検査位置Xeが読取可能領域R0の左端をはみ出ていると判断すると(Xe<0であると判断すると)、CPU70は、S647に移行し、主走査方向検査位置Xeを、読取可能領域R0の右端(XMAX)に設定すると共に(Xe=XMAX)、副走査方向検査位置Yeを、現在値Yeに8加えた値に更新する(Ye←Ye+8)。即ち、副走査方向検査位置Yeを、Y軸方向に8画素進んだ位置に設定する。その後、S620に移行して、上述の処理を実行する。
また、検査位置(Xe,Ye)がエッジ点であると判断すると(S625でYes)、CPU70は、S630に移行し、変数(X0,Y0)に、現在の検査位置(Xe,Ye)の座標値を、設定する(X0←Xe,Y0←Ye)。また、変数Y1を、座標Y=Y0からY軸方向に8画素進んだ座標値Y1(=Y0+8)に更新する(S633)。
その後、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点の少なくとも一つが、エッジ点であるか否かを判断し(S637)、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点のいずれもがエッジ点でない場合には(S637でNo)、S640に移行して、主走査方向検査位置Xeを、X軸マイナス方向に1画素移動した位置に更新する(Xe←Xe−1)。
一方、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点の少なくとも一つがエッジ点であると判断した場合には(S637でYes)、S650に移行して、座標(X0,Y0)の地点が連続性のあるエッジ点であると判定し、この座標(X0,Y0)を、連続性のあるエッジ点の座標データとして、一時記憶する。
また、この処理を終えると、CPU70は、S660に移行し、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点の内、エッジ点である地点の一つを、予め定められた優先度に従って選択する。
具体的に、右エッジ検出処理においては、読取可能領域R0右端側に近い座標ほど高い優先度が設定されている。即ち、読取可能領域R0右端側に近い座標(X0+1,Y1)の地点が優先度「大」に設定され、座標(X0,Y1)の地点が優先度「中」に設定され、座標(X0−1,Y1)の地点が優先度「小」に設定されている。
このように優先度が設定されているのは、原稿の右端より右側においては、原稿台11aに何も存在せず、エッジ点は存在しないはずであり、読取可能領域R0右端側に近いエッジ点であるほど、そのエッジ点が原稿の右端に対応するエッジ点である可能性が高いためである。
即ち、S660では、上記優先度に従って、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点、及び、座標(X0+1,Y1)の地点の内、エッジ点である地点であって優先度の最も高い地点を選択する。そして、変数X0を、選択した地点のX座標に更新し、変数Y0を、選択した地点のY座標に更新する。その後、変数Cを1加算した値に更新する(S663)。
そして、この処理を終えると、CPU70は、更新後の変数Cの値がC=8であるか否かを判断し、C=8でないと判断すると(S667でNo)、S633に移行して、変数Y1を、座標Y=Y0からY軸方向に8画素進んだ地点のY座標に更新する(Y1=Y0+8)。その後、S637以降の処理を実行する。
CPU70は、このような処理を実行することにより、図8に示すように、Y軸方向に8画素おきに、エッジ点がY軸方向に連続するものであるか否かを検査する。そして、C=8であると判断すると(S667でYes)、8回に及ぶS650の処理で連続性のあるエッジ点として判定した計8地点の各座標データを、原稿右エッジデータとしてRAM80に記憶する(S670)。
また、この処理を終えると、CPU70は、S680に移行して、副走査方向検査位置Yeが検査範囲を超えているか否か(Ye>Sであるか否か)を判断し、副走査方向検査位置Yeが検査範囲を超えていないと判断すると(S680でNo)、副走査方向検査位置Yeを64画素進んだ位置に更新して(S685)、S615に移行する。
このようにして、CPU70は、連続するエッジ点を、8つを1組として、繰返し検出する。そして、副走査方向検出位置Yeが検査範囲を超えると(S620でYes又はS680でYes)、S690に移行し、S670で原稿右エッジデータとして記憶された座標データ群の中から、右エッジ(原稿の右端を表すエッジ点)として確度の低い座標データ群を削除して、原稿右エッジデータを確定する。
具体的には、図9に示すように、原稿右エッジデータとして記憶された座標データ群の内、連続性のある座標データ群に対して原稿内側領域に大きくずれた位置にある、明白に連続性のない座標データ群を、原稿右エッジデータから除去し、原稿右エッジデータを確定する。その後、当該右エッジ検出処理を終了する。但し、S690の処理は原稿エッジの検出精度を高めるための処理であるので、S690の処理については、実行しないように、右エッジ検出処理を構成してもよい。
このようにして、右エッジ検出処理を終えると、CPU70は、S430に移行し、直前の右エッジ検出処理で右エッジの検出に失敗したか否かを判断する。具体的には、直前の右エッジ検出処理で原稿右エッジデータとして登録された座標データがない場合、右エッジの検出に失敗したと判断し、原稿右エッジデータとして登録された座標データがある場合には、右エッジの検出に成功したと判断する。
但し、例外的に、原稿右エッジデータとして登録された座標データが読取可能領域R0の左端(Y=0)近傍にある場合には、左エッジ(原稿の左端を表すエッジ点)の座標データが間違って原稿右エッジデータとして登録されているとみなして、原稿右エッジデータとして登録された座標データがある場合でも、右エッジの検出に失敗したと判断してもよい。
尚、右エッジの検出に失敗するケースとしては、原稿サイズが原稿台11aのサイズより大きく、原稿の右端が原稿台11aからはみ出しているケースなどを挙げることができる。
そして、右エッジの検出に失敗したと判断すると(S430でYes)、CPU70は、S431に移行し、原稿台11aに載置されている原稿のサイズ(縦幅及び横幅)が、原稿台11aに載置可能な最大サイズ(読取可能領域R0に対応するサイズ)であると推定すると共に(S431)、原稿の傾き角θがゼロ(θ=0)であると推定し(S433)、読取可能領域R0全体を、原稿の載置領域と推定する(S435)。そして、この処理を終えると、当該原稿推定処理を終了する。
一方、S430において右エッジの検出に成功したと判断すると(S430でNo)、CPU70は、S437に移行し、右エッジ検出処理で確定された原稿右エッジデータが示す各点を直線近似して、原稿右エッジデータが示す点群の近似直線(以下、「右エッジ近似直線」と表現する。)を算出する。
また、この処理を終えると、CPU70は、S440に移行して、右エッジ近似直線がY軸に対し所定角度より大きく傾いているか否かを判断する。本実施例では、具体的に、右エッジ近似直線がY軸に対し0.5度より大きく傾いているか否かを判断する。
そして、右エッジ近似直線の傾きが上記所定角度以下であると判断すると(S440でNo)、CPU70は、原稿がフレーム13aの内側左下角に突き当てられて原稿台11aに正しく載置されていると見なして、図6右図に示すように、右エッジ近似直線と原稿台11a下端縁(換言すると、フレーム13aの下辺(以下、「下フレーム」と表現する。)内側)との交点を、原稿の右下角位置であると推定する(S441)。
また、この処理を終えると、CPU70は、原稿の左下角位置が原稿台11aの左下角(換言すると、フレーム13aの内側左下角)の地点であるとみなして、原稿サイズを推定する。具体的には、原稿台11aに載置されている原稿が、長方形状の定型用紙であると仮定の下で、上記原稿の左下角位置からS441で推定した原稿の右下角位置までの長さを、原稿の短辺長さ(横幅)と推定し、この短辺長さの√2倍を、原稿の長辺長さ(縦幅)と推定する(S443)。尚、ここで原稿短辺長さの√2倍を、原稿の長辺長さとして推定しているのは、定型用紙の短辺長さ:長辺長さの比が1:√2となっているためである。
そして、S443での処理を終えると、CPU70は、S445に移行し、原稿台11aに載置されている原稿の傾き角θをゼロであると推定し(換言すると、原稿が傾いていないと推定し)、上記左下角位置及び推定した右下角位置、及び、原稿サイズ、及び、傾き角θの関係から、原稿の左上角及び右上角が位置する座標を導出する。これにより、これら4つの角を結んでできる四角形の辺を原稿の外縁であると推定し、その外縁で囲まれる領域を、原稿の載置領域であると推定する(S447)。
即ち、原稿の左下角がフレーム13a内側左下角に突き当てられ、この状態で上記推定したサイズの原稿の長辺がY軸に平行に配置され、原稿の短辺がX軸に平行に配置されている場合に、原稿によって読取ガラス11が被覆される領域を、原稿の載置領域であると推定する(S447)。そして、この処理を終えると、当該原稿推定処理を終了する。
一方、右エッジ近似直線がY軸に対し所定角度より大きく傾いていると判断すると(S440でYes)、CPU70は、S450に移行し、図10に示す左エッジ検出処理を実行する。図10は、CPU70が実行する左エッジ検出処理を表すフローチャートである。
左エッジ検出処理を開始すると、CPU70は、S710にて、副走査方向検査位置Ye=0に設定し、S715にて、主走査方向検査位置Xeを、読取可能領域R0の左端X座標に設定する(Xe=0)。また、S715では、変数Cを値ゼロに初期化する(C=0)。
その後、CPU70は、副走査方向検査位置Yeが検査範囲を超えているか否か(即ち、Ye>Sであるか否か)を判断し(S720)、副走査方向検査位置Yeが検査範囲を超えていないと判断すると(S720でNo)、検査位置(X,Y)=(Xe,Ye)に対応する検査対象データの画素値を参照して、検査位置(Xe,Ye)がエッジ点であるか否かを判断する(S725)。
そして、検査位置(Xe,Ye)がエッジ点ではないと判断すると(S725でNo)、S740に移行し、主走査方向検査位置Xeを、X軸プラス方向に1画素移動した地点に更新し(Xe←Xe+1)、更新した主走査方向検査位置Xeが、読取可能領域R0の右端を、はみ出ていないかどうかを判断する。具体的には、Xe>XMAXであるか否かを判断する(S743)。そして、主走査方向検査位置Xeが、読取可能領域R0の右端をはみ出ていないと判断すると(S743でNo)、S720に移行する。
一方、S743で主走査方向検査位置Xeが読取可能領域R0の右端をはみ出ていると判断すると(Xe>XMAXであると判断すると)、CPU70は、S747に移行し、主走査方向検査位置Xeを、読取可能領域R0の左端に設定すると共に(Xe=0)、副走査方向検査位置Yeを、Y軸方向に8画素進んだ位置に設定する(Ye←Ye+8)。その後、S720に移行する。
また、検査位置(Xe,Ye)がエッジ点であると判断すると(S725でYes)、CPU70は、S730に移行して、変数(X0,Y0)に、現在の検査位置(Xe,Ye)の座標値を設定する(X0←Xe,Y0←Ye)と共に、変数Y1を、値Y1=Y0+8に更新する(S733)。
その後、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点の少なくとも一つが、エッジ点であるか否かを判断し(S737)、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点のいずれもがエッジ点でない場合には(S737でNo)、S740に移行する。
一方、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点の少なくとも一つがエッジ点であると判断した場合には(S737でYes)、S750に移行して、座標(X0,Y0)の地点が連続性のあるエッジ点であると判定し、この座標(X0,Y0)を、連続性のあるエッジ点の座標データとして、一時記憶する。
また、この処理を終えると、CPU70は、S760に移行し、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点の内、エッジ点である地点の一つを、予め定められた優先度に従って選択する。
具体的に、左エッジ検出処理においては、読取可能領域R0左端側に近い座標ほど高い優先度が設定されているものとする。即ち、読取可能領域R0左端側に近い座標(X0−1,Y1)の地点が優先度「大」に設定され、座標(X0,Y1)の地点が優先度「中」に設定され、座標(X0+1,Y1)の地点が優先度「小」に設定されている。このように優先度が設定されているのは、原稿の左端より左側においては、原稿台11aに何も存在せず、エッジ点は存在しないはずであり、読取可能領域R0左端側に近いエッジ点であるほど、そのエッジ点が原稿の左端に対応するエッジ点である可能性が高いためである。
従って、S760では、この優先度に従って、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点、及び、座標(X0+1,Y1)の地点の内、エッジ点である地点であって優先度の最も高い地点を選択する。そして、変数X0を、選択した地点のX座標に更新し、変数Y0を、選択した地点のY座標に更新する。その後、変数Cを1加算した値に更新する(S763)。
また、この処理を終えると、CPU70は、更新後の変数Cの値がC=8であるか否かを判断し、C=8でないと判断すると(S767でNo)、S733に移行して、変数Y1を、Y1=Y0+8に更新する。その後、S737以降の処理を実行する。
このような処理手順により、CPU70は、右エッジ検出処理と同様(図8参照)、Y軸方向に8画素おきに、エッジ点がY軸方向に連続するものであるか否かを検査する。そして、C=8であると判断すると(S767でYes)、S750で連続性のあるエッジ点として判定した計8地点の各座標データを、原稿左エッジデータとしてRAM80に記憶する(S770)。
また、この処理を終えると、CPU70は、S780に移行して、副走査方向検査位置Yeが検査範囲を超えているか否か(Ye>Sであるか否か)を判断し、副走査方向検査位置Yeが検査範囲を超えていないと判断すると(S780でNo)、副走査方向検査位置Yeを64画素進んだ地点に更新して(S785)、S715に移行する。
このようにして、CPU70は、連続するエッジ点を、8つずつ、繰返し検出する。そして、副走査方向検出位置Yeが検査範囲を超えると(S720でYes又はS780でYes)、S790に移行し、S770で原稿左エッジデータとして記憶された座標データ群の中から、左エッジ(原稿の左端を表すエッジ点)として確度の低い座標データ群を削除して、原稿左エッジデータを確定する。
具体的には、S690での処理と同様、原稿左エッジデータとして記憶された座標データ群の内、連続性のある座標データ群に対して原稿内側領域に大きくずれた位置にある、明白に連続性のない座標データ群を、原稿左エッジデータから除去し、原稿左エッジデータを確定する。その後、当該左エッジ検出処理を終了する。但し、S790の処理については、実行しないように、左エッジ検出処理を構成してもよい。
また、このようにして、左エッジ検出処理を終えると、CPU70は、S455に移行し、左エッジ検出処理で確定された原稿左エッジデータが示す各点を直線近似して、原稿左エッジデータが示す点群の近似直線(以下、「左エッジ近似直線」という。)を算出する。その後、S460に移行する。
但し、直前の左エッジ検出処理で原稿左エッジデータとして登録された座標データがない場合には、左エッジの検出に失敗したと判断して、左エッジ近似直線を算出することなく、S460に移行するものとする。この他、原稿左エッジデータとして登録されている座標データの全て又は一部が原稿右エッジデータにも登録されている場合には、右エッジ(原稿の右端を表すエッジ点)の座標データが間違って原稿左エッジデータとして登録されているとみなして、原稿左エッジデータとして登録された座標データがある場合でも、左エッジの検出に失敗したと判断し、左エッジ近似直線を算出することなく、S460に移行するようにしてもよい。
また、S460に移行すると、CPU70は、図11に示す下エッジ検出処理を実行する。図11は、CPU70が実行する下エッジ検出処理を表すフローチャートである。
下エッジ検出処理を開始すると、CPU70は、S810にて、主走査方向検査位置Xeを、読取可能領域R0の左端X座標に設定し(Xe=0)、S815にて、副走査方向検査位置Yeを、読取可能領域R0の下端Y座標に設定する(Ye=0)。また、S815では、変数Cを値ゼロに初期化する(C=0)。
また、この処理を終えると、CPU70は、主走査方向検査位置Xeが読取可能領域R0の右端を超えているか否か(即ち、Xe>XMAXであるか否か)を判断し(S820)、主走査方向検査位置Xeが読取可能領域R0の右端を超えていないと判断すると(S820でNo)、検査位置(X,Y)=(Xe,Ye)に対応する検査対象データの画素値を参照し、検査位置(Xe,Ye)がエッジ点であるか否かを判断する(S825)。
そして、検査位置(Xe,Ye)がエッジ点ではないと判断すると(S825でNo)、S840に移行して、副走査方向検査位置Yeを、Y軸プラス方向に1画素移動した位置に更新し(Ye←Ye+1)、更新後の副走査方向検査位置Yeが検査範囲を超えているか否か(Ye>Sであるか否か)を判断する(S843)。
そして、副走査方向検査位置Yeが検査範囲を超えていないと判断すると(S843でNo)、S820に移行する。
一方、S843で副走査方向検査位置Yeが検査範囲を超えていると判断すると(Ye>Sであると判断すると)、CPU70は、S847に移行し、副走査方向検査位置Yeを、読取可能領域R0の下端に設定すると共に(Ye=0)、主走査方向検査位置Xeを、X軸方向に8画素進んだ位置に設定する(Xe←Xe+8)。その後、S820に移行する。
この他、CPU70は、S825において、検査位置(Xe,Ye)がエッジ点であると判断すると(S825でYes)、S830に移行し、変数(X0,Y0)に、現在の検査位置(Xe,Ye)の座標値を、設定する(X0←Xe,Y0←Ye)。また、変数X1を、値X1=X0+8に更新する(S833)。
その後、CPU70は、座標(X1,Y0−1)の地点、座標(X1,Y0)の地点及び座標(X1,Y0+1)の地点の少なくとも一つが、エッジ点であるか否かを判断し(S837)、座標(X1,Y0−1)の地点、座標(X1,Y0)の地点及び座標(X1,Y0+1)の地点のいずれもがエッジ点でない場合には(S837でNo)、S840に移行する。
一方、座標(X1,Y0−1)の地点、座標(X1,Y0)の地点及び座標(X1,Y0+1)の地点の少なくとも一つがエッジ点であると判断すると(S837でYes)、CPU70は、S850に移行して、座標(X0,Y0)の地点が連続性のあるエッジ点であると判定し、この座標(X0,Y0)を、連続性のあるエッジ点の座標データとして、一時記憶する。
また、この処理を終えると、CPU70は、S860に移行し、座標(X1,Y0−1)の地点、座標(X1,Y0)の地点及び座標(X1,Y0+1)の地点の内、エッジ点である地点の一つを、予め定められた優先度に従って選択する。
具体的に、下エッジ検出処理においては、読取可能領域R0下端側に近い座標ほど高い優先度が設定されている。即ち、読取可能領域R0下端側に近い座標(X1,Y0−1)の地点が優先度「大」に設定され、座標(X1,Y0)の地点が優先度「中」に設定され、座標(X1,Y0+1)の地点が優先度「小」に設定されている。このように優先度が設定されているのは、原稿の下端より下側においては、原稿台11aに何も存在せず、エッジ点は存在しないはずであり、読取可能領域R0下端側に近いエッジ点であるほど、そのエッジ点が原稿の下端に対応するエッジ点である可能性が高いためである。
従って、S860では、この優先度に従って、座標(X1,Y0−1)の地点、座標(X1,Y0)の地点及び座標(X1,Y0+1)の地点の内、エッジ点である地点であって優先度の最も高い地点を選択する。そして、変数X0を、選択した地点のX座標に更新し、変数Y0を、選択した地点のY座標に更新する。その後、変数Cを1加算した値に更新する(S863)。
また、この処理を終えると、CPU70は、更新後の変数Cの値がC=8であるか否かを判断し(S867)、C=8でないと判断すると(S867でNo)、S833に移行して、変数X1を、X1=X0+8に更新する。その後、S837以降の処理を実行する。
このような処理を実行することにより、CPU70は、X軸方向に8画素おきに、エッジ点がX軸方向に連続するものであるか否かを検査する。そして、C=8であると判断すると(S867でYes)、S850で連続性のあるエッジ点として判定した計8地点の各座標データを、原稿下エッジデータとしてRAM80に記憶する(S870)。
また、この処理を終えると、CPU70は、S880に移行して、主走査方向検査位置Xeが読取可能領域R0右端を超えているか否か(Xe>XMAXであるか否か)を判断し、主走査方向検査位置Xeが読取可能領域R0右端を超えていないと判断すると(S880でNo)、主走査方向検査位置Xeを64画素進んだ地点に更新して(S885)、S815に移行する。
このようにして、CPU70は、連続するエッジ点を、8つずつ、繰返し検出する。そして、主走査方向検出位置Xeが読取可能領域R0右端を超えると(S820でYes又はS880でYes)、S890に移行し、S870で原稿下エッジデータとして記憶された座標データ群の中から、下エッジ(原稿の下端を表すエッジ点)として確度の低い座標データ群を削除して、原稿下エッジデータを確定する。
具体的には、S690での処理と同様、原稿下エッジデータとして記憶された座標データ群の内、連続性のある座標データ群に対して原稿内側領域に大きくずれた位置にある、明白に連続性のない座標データ群を、原稿下エッジデータから除去し、原稿下エッジデータを確定する。その後、当該下エッジ検出処理を終了する。但し、S890の処理については、実行しないように、下エッジ検出処理を構成してもよい。
また、このようにして、下エッジ検出処理を終えると、CPU70は、S465に移行し、下エッジ検出処理で確定された原稿下エッジデータが示す各点を直線近似して、原稿下エッジデータが示す点群の近似直線(以下、「下エッジ近似直線」という。)を算出する。その後、S470に移行する。但し、直前の下エッジ検出処理で原稿下エッジデータとして登録された座標データがない場合には、下エッジの検出に失敗したと判断して、下エッジ近似直線を算出することなく、S470に移行するものとする。
また、S470に移行すると、CPU70は、右エッジ近似直線Y=A・X+Bの傾きAが負(A<0)であるか否かを判断する。そして、右エッジ近似直線の傾きAが負であると判断すると(S470でYes)、図12に示す第一角位置推定処理を実行し(S480)、右エッジ近似直線の傾きAが負ではないと判断すると(S470でNo)、図15に示す第二角位置推定処理を実行する(S485)。
図12は、CPU70が実行する第一角位置推定処理を表すフローチャートである。S480において、第一角位置推定処理を開始すると、CPU70は、S420、S450及びS460において右エッジ、左エッジ及び下エッジの全てが正常に検出されたか否かを判断する(S910)。
具体的に、S910では、右エッジ、左エッジ及び下エッジのいずれか一つでも、その検出に失敗している場合、Noと判断する。また、右エッジ、左エッジ及び下エッジの全てについて検出に成功している場合でも、直交関係にあるはずの右エッジ近似直線と下エッジ近似直線とが直交関係にない場合には、右エッジ、左エッジ及び下エッジの全てが正常に検出されていないと判断する。
同様に、平行関係にあるはずの右エッジ近似直線と左エッジ近似直線とが平行関係にない場合にも、右エッジ、左エッジ及び下エッジの全てが正常に検出されていないと判断する。そして、上記以外の場合には、S910でYesと判断する。
このような判断手法にてS910の処理を実行し、S910にて、右エッジ、左エッジ及び下エッジの全てが正常に検出されていると判断すると(S910でYes)、CPU70は、原稿の左下角位置を、左エッジ近似直線と下エッジ近似直線との交点であると推定して、その座標値を算出し(S920)、更に、原稿の右下角位置を、右エッジ近似直線と下エッジ近似直線との交点であると推定して、その座標値を算出する(S930)。その後、当該第一角位置推定処理を終了する。尚、図13は、S910でYesと判断したときの原稿左下角位置Ka及び原稿右下角位置Kbの推定方法を示した説明図である。図中、白丸がエッジ点を表し、黒丸が角位置Ka,Kbを表す。
一方、S910にて、右エッジ、左エッジ及び下エッジの全てが正常に検出されていないと判断すると(S910でNo)、CPU70は、S940に移行して、右エッジ及び左エッジの全てが正常に検出されているか否かを判断する。
具体的に、S940では、右エッジ又は左エッジの検出に失敗している場合、Noと判断する。また、右エッジ及び左エッジの検出に成功している場合でも、平行関係にあるはずの右エッジ近似直線と左エッジ近似直線とが平行関係にない場合には、右エッジ及び左エッジの全てが正常に検出されていないと判断する。そして、上記以外の場合には、S940でYesと判断する。
このような判断手法にてS940の処理を実行し、S940にて、右エッジ及び左エッジの全てが正常に検出されていると判断すると(S940でYes)、CPU70は、S950に移行して、原稿の左下角位置を、左エッジ近似直線と原稿台11aの下端縁(即ち、下フレーム内側)との交点であると推定して、その座標値を算出すると共に、原稿の右下角位置を、右エッジ近似直線に垂直な直線であって推定した左下角位置を通る直線と、右エッジ近似直線との交点であると推定して、その座標値を算出する(S960)。
尚、図14(a)は、S940でYesと判断したときの原稿左下角位置Ka及び原稿右下角位置Kbの推定方法を示した説明図である。S960で、原稿の左下角位置を、左エッジ近似直線と原稿台11aの下端縁(即ち、下フレーム内側)との交点であると推定するのは、原稿が左側に傾いている場合には、原稿の左下角が、原稿台11aの下端縁と下フレームの内側との境界にある段差に、突き当たっている可能性が高いためである。このような理由から、本実施例では、下エッジを正常検出することができなかったとき、原稿の左下角が、原稿台11aの下端縁と下フレームの内側との境界にある段差に、突き当たっていると仮定して、原稿の左下角位置を推定する。
また、このようにしてS960での処理を終えると、CPU70は、当該第一角位置推定処理を終了する。
一方、S940にて、右エッジ及び左エッジの全てが正常に検出されていないと判断すると(S940でNo)、CPU70は、S970に移行して、原稿右エッジデータが示すエッジ点群の内、原稿台11a上で最も右下寄りのエッジ点に対応する右エッジ近似直線上の点を、原稿の右下角位置であると推定し、その座標値を算出する。尚、S970では、原稿右エッジデータが示すエッジ点であってエッジ点から右エッジ近似直線へ伸ばした右エッジ近似直線に直交する直線が右エッジ近似直線と交わる交点が、右エッジ近似直線上において最も右側にあるエッジ点の当該交点を、「最も右下寄りのエッジ点に対応する右エッジ近似直線上の点」と取り扱えばよい。
また、S970での処理を終えると、CPU70は、原稿の左下角位置を、上記推定した右下角位置を通る直線であって右エッジ近似直線に垂直な直線と、原稿台11a端縁(フレーム内側)との交点であると推定して、その座標値を算出する。その後、当該第一角位置推定処理を終了する。
尚、図14(b)は、S940でNoと判断したときの原稿左下角位置Ka及び原稿右下角位置Kbの推定方法を示した説明図である。S970,S980で、原稿右エッジデータを用いて原稿の左下角位置及び右下角位置を推定するのは、原稿の突き当て位置が、フレーム13aの内側左下角に設定され、原稿台11aの端縁近傍では読取不可能な領域がある関係上、右エッジ、左エッジ及び下エッジの中では、右エッジを一番正しく検出することができ、原稿右エッジデータ、原稿左エッジデータ、原稿下エッジデータの中で一番信用できる確度の高いデータが、原稿右エッジデータであるためである。本実施例では、このような理由から、原稿右エッジデータを一番信用して、この原稿右エッジデータ及び右エッジ近似直線を拠所に、原稿サイズ及び原稿の傾き角θを推定する。
続いて、CPU70が、S485で実行する第二角位置推定処理について説明する。図15は、CPU70が実行する第二角位置推定処理を表すフローチャートである。第二角位置推定処理を開始すると、CPU70は、まず、S420及びS460において右エッジ及び下エッジの全てが正常に検出されたか否かを判断する(S1010)。
具体的に、S1010では、右エッジ又は下エッジの検出に失敗している場合、Noと判断する。また、右エッジ及び下エッジの全てについて検出に成功している場合でも、直交関係にあるはずの右エッジ近似直線と下エッジ近似直線が直交関係にない場合には、右エッジ及び下エッジの全てが正常に検出されていないと判断する。そして、上記以外の場合には、S1010でYesと判断する。
尚、第二角位置推定処理では、左エッジの検出結果を使用せずに、原稿の左下角位置及び右下角位置を推定するが、このような手法で原稿の角位置を推定する理由は、原稿が右側に傾いている場合には、図16(a)に示すように原稿右端がプレスキャン領域に十分な長さ納まっている可能性が高く、原稿右エッジデータの確度が非常に高い一方で、原稿左端についてはプレスキャン領域に十分な長さ納まっていない可能性が高く、原稿左エッジデータの確度が、原稿右エッジデータや原稿下エッジデータと比較して低いためである。
このような判断手法にてS1010の処理を実行し、S1010にて、右エッジ及び下エッジの全てが正常に検出されていると判断すると(S1010でYes)、CPU70は、原稿の左下角位置を、下エッジ近似直線と原稿台11aの左端縁(左フレーム内側)との交点であると推定して、その座標値を算出し(S1020)、更に、原稿の右下角位置を、右エッジ近似直線と下エッジ近似直線との交点であると推定して、その座標値を算出する(S1030)。その後、当該第二角位置推定処理を終了する。尚、図16(a)は、S1010でYesと判断したときの原稿左下角位置Ka及び原稿右下角位置Kbの推定方法を示した説明図である。
一方、S1010にて、右エッジ及び下エッジの全てが正常に検出されていないと判断すると(S1010でNo)、CPU70は、S1040に移行して、原稿の右下角位置を、右エッジ近似直線と原稿台11aの下端縁(下フレーム内側)との交点であると推定し、その座標値を算出すると共に、原稿の左下角位置を、上記推定した右下角位置を通る直線であって右エッジ近似直線に垂直な直線と原稿台11a端縁(フレーム内側)との交点であると推定し、その座標値を算出する(S1050)。その後、当該第二角位置推定処理を終了する。
尚、図16(b)は、S1010でNoと判断したときの原稿左下角位置Ka及び原稿右下角位置Kbの推定方法を示した説明図である。原稿が右側に傾いている場合には、原稿の右下角が、原稿台11aの下端縁と下フレームの内側との境界BDにある段差に、突き当たっている可能性が高いため、本実施例では、下エッジを正常検出することができなかったとき、原稿の右下角が、原稿台11aの下端縁と下フレームの内側との境界BDにある段差に、突き当たっていると仮定して、原稿の右下角位置を推定する。
また、このようにして第一又は第二角位置推定処理(S480,S485)を終了すると、CPU70は、S490に移行して、S480又はS485で推定した角位置の情報に基づき、原稿サイズを推定する。即ち、原稿台11aに載置されている原稿が、長方形状の定型用紙であると仮定の下で、上記推定した原稿の左下角位置から原稿の右下角位置までの長さを、原稿の短辺長さ(横幅)と推定し、この短辺長さの√2倍を、原稿の長辺長さ(縦幅)と推定する。
また、この処理を終えると、右エッジ近似直線を基準にして、原稿の傾き角θを推定する。即ち、Y軸に対して右エッジ近似直線がなす角度を、原稿の傾き角θと推定する(S493)。
その後、CPU70は、S497に移行し、上記推定した角位置、原稿サイズ、原稿の傾き角θの情報に基づき、原稿の載置領域を推定する。具体的には、上記推定した左下角位置、右下角位置、原稿の傾き角θ、及び、原稿サイズの情報から、原稿の左上角位置、原稿の右上角位置を導出することにより、原稿の外縁を推定し、この原稿の外縁により囲まれる領域を、原稿の載置領域であると推定する。そして、この処理を終えると、当該原稿推定処理を終了して、S330以降の処理を実行する。
即ち、推定した原稿サイズ及び原稿の傾き角θの情報に基づき、変倍率及び傾き補正量を設定すると共に(S340,S350)、推定した原稿載置領域の情報に基づき、原稿読取開始位置及び原稿読取終了位置を設定することで、原稿の載置領域に対応する読取領域を設定し(S360)、この読取領域内で、読取ユニットを搬送して、読取ユニットに読取領域に写る画像を読み取らせ、その読取結果としてRAM80に記録された画像データを、予め設定した変倍率及び傾き補正量に合わせて、拡大/縮小及び回転処理することにより印刷用の画像データを生成し(S380)、この画像データを、印刷対象データとして、当該印刷対象データについての印刷処理を実行することで(S390)、原稿のコピー画像を記録紙に印刷する。その後、第二複写処理及び複写制御処理を終えて、外部から入力されたコピー指令に対応する処理を完了する。
以上、本実施例の複合機1の構成について説明したが、この複合機1によれば、「自動変倍/傾き補正」コピー指令が入力された場合、読取可能領域R0の一部をプレスキャンして、その読取結果に基づき、原稿の状態(原稿サイズ・原稿の傾き・原稿の載置領域)を推定する。
従って、本実施例によれば、「自動変倍/傾き補正」コピー指令が入力された場合、「縁無し」コピーのように、読取可能領域R0全体をプレスキャンする手法よりも高速にプレスキャン動作を終了することができて、効率的に原稿の状態を推定することができる。
尚、本実施例においては、「縁無し」コピー指令が入力された場合、読取可能領域R0全体をプレスキャンして、その結果に基づき、原稿の状態を推定するようにしているが、このようにしているのは、コピー指令の目的から、処理の高速性よりも「縁無し」コピーを適切に実現するために、原稿の状態を可能な限り正確に推定するのが好ましいためである。
即ち、本実施例においては、ユーザの要求に応じて動作モードを切り替え、正確な状態推定が必要な場合には、全体プレスキャン処理を実行して原稿の状態推定を行い、そうでない場合には、先端部プレスキャン処理を実行して原稿の状態推定を行うことで、処理の正確性と迅速性の調和を図るようにした。従って、このディジタル複合機1によれば、ユーザの利便性を、従来よりも高めることができる。
また、本実施例では、原稿推定処理にて原稿の状態を推定する際、原稿台11aに載置された原稿Pが定型用紙であると仮定して、原稿台11aに載置された原稿の状態を推定するようにした。従って、定型用紙が原稿台11aに載置されている場合には、読取可能領域R0の一部をプレスキャンをする程度でも、正確に原稿サイズや原稿の傾き、原稿の載置領域を推定することができ、この推定結果に基づき、適切に読取領域や変倍率、傾き補正量を設定して、記録紙に、適切なコピー画像を印刷することができる。
特に、本実施例では、先端部プレスキャン処理により得られたプレスキャン画像データを、エッジ画像データに変換して、このエッジ画像データから、右エッジ、左エッジ及び下エッジに対応するエッジ点を抽出し、これらの近似直線から原稿の角位置を推定するようにした。
具体的に、本実施例では、右エッジ近似直線が傾いており原稿が正確に載置されていないと考えられるときであって、右エッジ近似直線、左エッジ近似直線、下エッジ近似直線の確度が高いと考えられるとき、右エッジ近似直線と下エッジ近似直線との交点を右下角位置と推定し、左エッジ近似直線と下エッジ近似直線との交点を左下角位置と推定するようにした。
従って、本実施例によれば、プレスキャン画像データに原稿の全体像が現れていない場合もさることながら、原稿が正確に載置されておらず、原稿の角が折れていたり、原稿の角が読取可能領域外にある場合等のように原稿の角がプレスキャン結果には現れていない場合にも、適切に原稿の角位置を推定して、原稿の状態(サイズ等)を推定することができる。
尚、本実施例では、原稿台11aの端部が読取可能領域外となっているため、フレーム13aの内側左下角に原稿Pの左下角が正確に突き当てられると、原稿の左エッジ及び下エッジを検出することができない。従って、本実施例では、原稿の傾きが微小量である場合には、右エッジ近似直線のみで、原稿のサイズ等を推定しているが、原稿の傾きがある程度の大きさある場合でも、左エッジや下エッジを正確に検出することができない場合がある。
一方、本実施例では、マークMKで原稿の突き当てを指示しているので、原稿が傾いているとしても、原稿の載置状態が、正しい原稿の載置状態から大きくずれていることは考えにくく、原稿が左側に傾いている場合には、原稿の左下角が原稿台11aとフレーム13aとの境界BDの段差に突き当たっている可能性が高く、原稿が右側に傾いている場合には、原稿の右下角が上記段差に突き当たっている可能性が高い。
このため、本実施例では、原稿が傾いているときであって、右エッジ、左エッジ及び下エッジを正確に検出することができなかったとき、右エッジの検出結果が一番正しいと取り扱うと共に、原稿が左側に傾いている場合には、原稿の左下角が原稿台11aとフレーム13aとの境界の段差に突き当たっているとして、原稿が右側に傾いている場合には、原稿の右下角が上記段差に突き当たっているとして、原稿の左下角位置及び右下角位置を推定するようにした。
従って、本実施例によれば、右エッジ、左エッジ及び下エッジを正確に検出することができない場合においても、概ね正しく原稿のサイズや傾き・原稿の載置領域を推定することができる。
尚、本発明の一部プレスキャン手段は、CPU70が実行するS310の処理及び読取制御部20の処理により実現され、角推定手段は、CPU70が実行するS315の処理及び原稿推定処理(S320)におけるS410〜S485の処理により実現されている。この他、原稿推定手段は、S490〜S497の処理により実現され、読取領域決定手段は、CPU70が実行するS360の処理により実現されている。
また、本発明の全体プレスキャン手段は、CPU70が実行するS210の処理及び読取制御部20の処理により実現され、副原稿推定手段は、S215,S220の処理により実現され、切替手段は、S110,S130の処理により実現されている。
また、本発明は、上記実施例に限定されるものではなく、種々の態様を採ることができる。例えば、上記実施例では、コンタクトイメージセンサを読取ユニットとして備えるディジタル複合機1に、本発明を適用した例を説明したが、本発明は、コンタクトイメージセンサを読取ユニットとして備える画像読取装置に限定されるものではないことは言うまでもない。
この他、上記実施例では、右エッジ近似直線から、原稿の傾き角θを求めるようにしたが(S493)、S493では、第一又は第二角位置推定処理にて推定した原稿の左下角と右下角の位置座標に基づき、当該左下角と右下角を結ぶ線分がX軸となす角度を、原稿の傾き角θとして求めても良い。
1…ディジタル複合機、10…画像読取部、11…読取ガラス、11a…原稿台、13…筐体、13a…フレーム、15…読取ユニット、16…搬送機構、17…モータ、20…読取制御部、30…印刷部、40…印刷制御部、50…表示操作部、60…通信部、70…CPU、80…RAM、90…フラッシュメモリ、MK…マーク、P…原稿、R0…読取可能領域