以下に本発明の実施例について、図面と共に説明する。
図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と対向する蓋の内側には、読取ユニット15の読取結果である画像データにおいて、原稿外側領域に、黒い影が写らないように、白色部材が設けられている(詳細後述)。
一方、読取制御部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は、画像読取部10の読取ガラス11周辺の構成を表す説明図であり、特に、図2(a)は、読取ガラス11周辺の平面図、図2(b)は、図2(a)に示すA−A’一点鎖線に沿った読取ガラス11周辺のA−A’断面図である。
当該複合機1においては、一面が開口された長方体状の筐体13の当該開口部において、長方形状のガラス板である読取ガラス11が当該開口部を閉塞するように設けられており、読取ガラス11の周囲が筐体13により支持された構成にされている。
この読取ガラス11は、筐体13の上面よりも若干筐体13の下側に設けられており、筐体13から露出する読取ガラス11の領域11a(以下、「原稿台」と表現する。)と筐体13との境界BDには、原稿Pを突き当て可能に段差が形成されている(以下、筐体13の読取ガラス11より上方に位置する部位(上記段差を形成する部位)13aを「フレーム」と表現する。)。
即ち、本実施例においては、原稿台11aの周縁に、原稿台11aの周縁を包囲するフレーム13aが設けられており、フレーム13aにより、原稿台11aとフレーム13aとの境界BDには、フレーム13aを高位とし原稿台11aを低位とする段差が形成されている。
また、この画像読取部10においては、フレーム13aの左下部分に、原稿Pの角を突き当てるように指示するマークMKが記されている。尚、本実施例では、マークMKが付された原稿台11aの角を、「左下角」と定義して、この左下角より、主走査方向に離れた地点に位置する原稿台11aの角を「右下角」と定義し、左下角より、副走査方向に離れた地点に位置する原稿台11aの角を「左上角」と定義する。
即ち、複合機1においては、原稿台11aの左下角(換言すれば、フレーム13aの内側左下角)が、原稿Pの角を合わせるべき位置として定められている。換言すると、原稿台11aの左下角から延びる原稿台11aの左端縁及び下端縁が、原稿を合わせるべき端縁として定められている。
複合機1は、ユーザが概ね、このマークMKに合わせて、原稿台11aの左端縁及び下端縁の段差に原稿を突き当てるように原稿Pを載置しているとの仮定の下で、原稿サイズの推定等を行う。
この他、本実施例においては、原稿台11aの右端縁に接するフレーム13aの右辺13a(R)の原稿台11a表面からの高さh’が、原稿が突き当てられる原稿台11aの左端縁に接するフレーム13aの左辺13a(L)及び原稿台11aの下端縁に接するフレーム13aの下辺13a(D)の原稿台11a表面からの高さhに対し、異なる値に設定されている。以下、フレーム13aの右辺13a(R)を、右フレーム13a(R)、フレーム13aの左辺13a(L)を、左フレーム13a(L)、フレーム13aの上辺13a(U)を、上フレーム13a(U)、フレーム13aの下辺13a(D)を、下フレーム13a(D)と称する。
詳述すると、図2(b)に示すように、右フレーム13a(R)が形成する段差の原稿台11a表面からの高さh’は、原稿台11aを挟んで、それとは対称的に位置する左フレーム13a(L)及び下フレーム13a(D)が形成する段差の原稿台11a表面からの高さhよりも高い値に設定されている(h’>h)。
このように、原稿が突き当てられる左フレーム13a(L)とは原稿台11aを挟んで反対側に位置する右フレーム13a(R)の段差が高く設定されているのは、原稿台11aに対して、原稿台11aよりも大きなサイズの原稿が載置されたことを、原稿突当位置とは反対側のフレーム13aへの原稿の乗り上げ有無を判定して、検知するように、本実施例の複合機1が構成されているためである。
原稿がフレーム13aへ乗り上げると、原稿が、乗り上げた地点周辺で原稿台11aから浮き上がるため、その地点の読取画像は、黒くなる。本実施例では、このような現象を、読取ユニット15の読取結果である画像データを解析することにより検知して原稿の右フレーム13a(R)への乗り上げ有無を判定するのであるが(詳細後述)、このような現象は、右フレーム13a(R)を高くする程、顕著に現れる。本実施例では、このような理由から、右フレーム13a(R)を、左フレーム13a(L)や下フレーム13a(D)よりも高く設定している。
また、本実施例の画像読取部10においては、読取ユニット15のライン幅と、原稿台11aの大きさとの関係から、四角形状の原稿台11aの全領域よりも若干狭い四角形状の領域R0が、読取ユニット15により原稿を読取可能な読取可能領域R0に定められている。具体的に、読取可能領域R0は、図2(a)(c)において点線で示すように、フレーム13aと読取ガラス11との境界BDから微小量(本実施例では3mm)離れた位置に外周を有した領域となっている。
この他、本実施例の複合機1においては、このマークMKが付されたフレーム13aの内側左下角に対応する読取可能領域R0の左下角を原点、主走査方向をX軸、副走査方向をY軸としたXY座標系(図2(c)参照)が導入されており、CPU70は、このXY座標系を用いて図3に示す複写制御処理を実行する。
続いて、CPU70が実行する複写制御処理について説明する。図3は、操作キーを通じてコピー指令が入力されると、CPU70が実行する複写制御処理を表すフローチャートである。
複写制御処理を開始すると、CPU70は、操作キーを通じて入力されたコピー指令が「自動変倍/傾き補正」コピー指令であるか否かを判断し(S110)、「自動変倍/傾き補正」コピー指令であると判断すると(S110でYes)、S120にて、図4に示す自動変倍複写処理を実行する。その後、当該複写制御処理を終了する。
一方、操作キーを通じて入力されたコピー指令が、「自動変倍/傾き補正」コピー指令以外のコピー指令であると判断すると(例えば、自動変倍や傾き補正の指示のないノーマルなコピー指令であると判断すると)、CPU70は、S130にて、入力されたコピー指令に対応した処理を実行した後、当該複写制御処理を終了する。
続いて、CPU70がS120にて実行する自動変倍複写処理について説明する。図4は、CPU70が実行する自動変倍複写処理を表すフローチャートである。
CPU70は、S120にて自動変倍複写処理を開始すると、まず、原稿読取開始位置を、読取可能領域R0の下端(Y=0)に設定し、原稿読取終了位置を、設計段階で予め定められた読取可能領域R0の下端から所定距離離れた位置(Y=YPRE)に設定することにより、上記原稿読取開始位置から原稿読取終了位置までの領域に該当する読取可能領域R0の一部を、読取領域(換言すればプレスキャン領域)に設定し、読取制御部20を通じて、画像読取部10に、当該読取領域に対するプレスキャン動作を実行させる(S210:先端部プレスキャン処理)。
即ち、S210では、読取可能領域R0全体に対してプレスキャン動作を画像読取部10に実行させるのではなく、読取可能領域R0の下端から読取可能領域R0内側へ所定距離離れた地点まで(本実施例では、読取可能領域R0の下端から30mm離れた地点まで)に対し、プレスキャン動作を画像読取部10に実行させる。これにより、CPU70は、プレスキャン結果として、読取可能領域R0の一部領域の読取結果を表す画像データを画像読取部10から取得する。
尚、画像読取部10は、プレスキャン動作として、設定された読取領域の端から端まで、プレスキャン用の解像度に対応する速度で、読取ユニット15を副走査方向に搬送し、その読取領域の画像を読取ユニット15に読み取らせ、プレスキャン結果として、低解像度の画像データ(以下、「プレスキャン画像データ」という。)を、読取制御部20を通じて、RAM80に記録する動作を実行する。
このようにしてS210での処理を終えると、次に、CPU70は、RAM80に記録されたプレスキャン画像データが示す各画素のRGB値を、所定の計算式に従って、輝度値Zに変換することにより、プレスキャン画像データを、各画素の輝度値を表す輝度データに変換する(S215)。周知のように、RGB値から輝度値Zへの変換は、係数α,β,γを用いて、計算式Z=α・R+β・G+γ・Bに従い、行うことができる。
また、この処理を終えると、CPU70は、S220に移行し、上記生成した輝度データに基づいて、図5に示す乗り上げ判定処理を実行する。図5は、CPU70が実行する乗り上げ判定処理を表すフローチャートである。
乗り上げ判定処理を開始すると、CPU70は、まずS310にて、副走査方向検査位置Yeを、設計段階で予め定められた検査開始位置YINIに、設定する(Ye=YINI)。尚、検査開始位置YINIは、Y=0からY=YPREまでの領域においてプレスキャンを実行する関係上、0以上YPRE未満の値に、予め定められている。
また、S310での処理を終えると、CPU70は、S321に移行して、主走査方向検査位置Xeを、読取可能領域R0右端(換言すれば、プレスキャン領域右端)のX座標に、設定する(Xe=XMAX)。
また、この処理を終えると、CPU70は、輝度データを参照することにより、主走査方向検査位置Xe及び副走査方向検査位置Yeで定まる検査位置(X,Y)=(Xe,Ye)に対応する画素の輝度値Zを得て、この検査位置(Xe,Ye)に対応する画素の輝度値Zが、予め定められた閾値Zthを超えているか否かを判断する(S323)。即ち、Z>Zthであるか否かを判断する。
そして、輝度値Zが閾値Zth以下である(即ち、Z≦Zthである)と判断すると(S323でNo)、CPU70は、S325に移行し、主走査方向検査位置Xeを、1画素分マイナス方向にずらした値に更新した後に(即ち、Xe←Xe−1に更新した後に)、S327に移行する。
また、S327では、更新後の主走査方向検査位置Xeが読取可能領域R0の左端(換言すれば、プレスキャン領域の左端)であるか否かを判断する。即ち、Xe=0であるか否かを判断する。そして、更新後の主走査方向検査位置Xeが読取可能領域R0の左端であると判断すると(S327でYes)、S329に移行する。
一方、Xe>0であり、更新後の主走査方向検査位置Xeが読取可能領域R0の左端ではないと判断すると(327でNo)、CPU70は、S323に移行し、更新後の検査位置(X,Y)=(Xe,Ye)について、この検査位置に対応する画素の輝度値Zが、閾値Zthを超えているか否かを判断する。
そして、検査位置に対応する画素の輝度値Zが閾値Zth以下であると判断すると(S323でNo)、S325に移行し、検査位置に対応する画素の輝度値Zが閾値Zthを超えていると判断すると(S323でYes)、S329に移行する。
また、S329では、読取可能領域R0右端から、現在設定されている主走査方向検査位置XeまでのX軸方向長さLを、座標Y=Yeの地点における黒領域長L(Y=Ye)として算出する。
即ち、式L=XMAX−Xeに従って、座標Y=Yeの地点における黒領域長L(Y=Ye)を算出する。
また、S329での処理を終えると、CPU70は、S330に移行し、副走査方向検査位置Yeを、Y軸プラス方向に1画素分移動した位置に更新する(Ye←Ye+1)。その後、副走査方向検査位置Yeが、設計段階で予め定められた検査終了位置YFINを超えているか否かを判断する(S340)。尚、検査終了位置YFINは、検査開始位置YINIと同様、設計段階で、設計者により、0以上YPRE以下の値に、定められる。但し、当然のことながら、検査終了位置YFINは、検査開始位置YINIよりもY軸プラス方向にずれた地点に、定められる(YFIN>YINI)。
そして、副走査方向検査位置Yeが検査終了位置YFINを超えていないと判断すると(即ち、Ye≦YFINであると判断すると)、CPU70は、S321に移行し、後続の処理を実行する。このような動作の繰返しによって、CPU70は、検査開始位置YINIから検査終了位置YFINまでの各座標Yにおいて、上述の手法により、読取可能領域R0右端を基点とした黒領域長L(Y)を算出する。
そして、副走査方向検査位置Yeが検査終了位置YFINを超えていると判断すると(S340でYes)、CPU70は、S350に移行し、S329で算出した、YINI≦Y≦YFINの範囲における各座標Yでの黒領域長L(Y)の値を用いて、それら黒領域長L(Y)の平均値AVE(L)を算出する。
また、S350での処理を終えると、CPU70は、この平均値AVE(L)が、予め定められた閾値Lth以上であるか否かを判断する(S360)。そして、平均値AVE(L)が閾値Lth以上であると判断すると(S360でYes)、原稿が右フレーム13a(R)に乗り上げられているとして、「乗り上げ有」判定を下す(S370)。一方、平均値AVE(L)が閾値Lth未満であると判断すると(S360でNo)、原稿が右フレーム13a(R)に乗り上げられていないとして、「乗り上げ無」判定を下す(SS380)。
このようにして、S370又はS380の処理を終えると、CPU70は、当該乗り上げ判定処理を終了して、S225に移行する。
尚、図6(a)は、フレーム13aに原稿が乗り上げていない場合の原稿台11a端部における輝度の分布を表した説明図であり、図6(b)は、フレーム13aに原稿が乗り上げている場合の原稿台11a端部における輝度の分布を表した説明図である。
本実施例では、画像読取部10に設けられた開閉自在な上記蓋の内側に設けられた白色部材が、用紙より柔軟な部材で構成され容易に変形可能な構成にされているため、蓋が閉められた状態でプレスキャン動作が行われた場合であって、フレーム13aに原稿が乗り上げていない場合には、白色部材が、原稿に代わり、原稿台11aにおける原稿が載置されていない領域の略全域において、原稿台11aの表面に接触し、原稿台11a表面を被覆する。尚、図6(a)上図に示す点線は、このときの白色部材(蓋内面)の配置を示す。
このため、フレーム13aに原稿が乗り上げていない場合には、読取可能領域R0の端部まで輝度値Zが上述の閾値Zthよりも高くなる。
これに対し、フレーム13aに原稿が乗り上げている場合には、フレーム13aと原稿台11aとの間に段差が設けられ、且つ、白色部材が用紙よりも柔軟な部材で構成されている関係上、読取可能領域R0の端部を挟むフレーム13aと原稿台11aとの間の領域において、原稿は、原稿台11aから浮き上がった状態となり、その領域において、原稿台11aの表面が、原稿及び白色部材のいずれにも被覆されない状態となる。
尚、図6(b)上図には、原稿のフレーム13aへの乗り上げにより、蓋内面を構成する白色部材と共に、原稿が原稿台11aから浮き上がった状態となった原稿台11a表面の様子を示す。この図6(b)上図において、点線は、白色部材(蓋内面)の配置を示す。
周知のように、コンタクトイメージセンサを使った読み取りでは、原稿台11aの表面に原稿等が接触せず、原稿台11a表面が被覆されていない場合、その領域の読取画像が、その他の領域に比べて黒くなる。換言すると、原稿が原稿台11aから浮き上がった領域においては、輝度値Zが閾値Zthよりも低い画素領域が広がった状態になる。
本実施例では、このような理由から、Y=YINIからY=YFINの領域において、右フレーム13a(R)からの黒領域L(Y)の長さを計算し、この平均値AVE(L)が閾値Lth以上である場合には、原稿が右フレーム13a(R)に乗り上げていると判定するようにしている。
このような原理にて乗り上げ判定処理を終了し、S225に移行すると、CPU70は、直前のS220で実行した乗り上げ判定処理において、「乗り上げ有」判定が下されたか否かを判断する。そして、「乗り上げ有」判定が下されておらず、「乗り上げ無」判定が下されたと判断すると(S225でNo)、S230に移行する。
また、S230では、RAM80に記録されたプレスキャン画像データに対応する上記輝度データに対してエッジ検出処理を実行し、この画像データに対応するエッジ画像データを生成する。即ち、S230では、上記輝度データを、エッジ検出用の画像フィルタ(周知の微分フィルタ)に通して、この画像データに対応するエッジ画像を表すエッジ画像データを生成する。
また、S230での処理を終えると、CPU70は、S235に移行し、上記生成したエッジ画像データを、検査対象データに設定して、図7に示す原稿推定処理を実行する。詳細は後述するが、この原稿推定処理では、検査対象データ(S230で得られたエッジ画像データ)を解析して、原稿台11aに載置された原稿のサイズ(縦幅及び横幅)、及び、原稿の傾き角θ、及び、原稿台11aにおける原稿の載置領域を推定する。
具体的には、原稿台11aに載置された原稿が四角形状であるとの仮定の下で、原稿台11aに載置された原稿のエッジを検査対象データにおいて検出すると共に、その検出結果から原稿の左下角位置及び右下角位置を推定し、推定した角位置の情報から、原稿台11aに載置された原稿が定型用紙であるとの仮定の下で、当該原稿台11aに載置された原稿のサイズ、及び、原稿の傾き角θ、及び、原稿台11aにおける原稿の載置領域を推定する。但し、ここでは、X軸に対して原稿の下辺がなす角度を、原稿の傾き角θ(図10参照)とする。
そして、S235での処理を終えると、CPU70は、印刷制御部40を通じて、印刷部30に給紙動作を実行させると共に(S250)、給紙動作の対象となった記録紙のサイズを検出する(S255)。尚、記録紙のサイズは、例えば、記録紙の搬送路に設けられたセンサを用いて周知の手法で検出することができる。
また、この処理を終えると、CPU70は、S261に移行し、S235で推定された原稿サイズ及びS255で検出された記録紙サイズに基づき、予め定められた計算式に従って変倍率を設定する。具体的には、変倍率を、原稿サイズと記録紙サイズとの比(例えば、記録紙短辺長さ÷原稿短辺長さ)に対応した倍率に設定し、後続の処理で、原稿のコピー画像が、原稿サイズとの記録紙サイズの比に対応した倍率で拡大(倍率が1未満の場合には縮小)されて記録紙に印刷されるようにする。
また、この処理を終えると、CPU70は、S235で推定された原稿の傾き角θから、画像データの傾き補正量を設定する(S263)。具体的には、原稿のコピー画像が、傾きのない状態でまっすぐ、記録紙に印刷されるように、傾き補正量を設定する。但し、推定された原稿の傾き角θが微小量(本実施例では−0.5度≦θ≦0.5度)である場合には、誤差も考慮して、傾き補正量をゼロに設定する。
また、S263での処理を終えると、CPU70は、S235で推定された原稿の載置領域の情報に基づいて、原稿読取開始位置及び原稿読取終了位置を設定し、原稿読取開始位置及び原稿読取終了位置で定められる読取領域を、原稿台11aにおける原稿の載置領域に対応させる(S265)。
具体的には、原稿の載置領域全体を読取ユニット15が読み取ることができるように、原稿読取開始位置を、副走査方向において最も下側に位置する原稿の端点に対応した位置に設定し、原稿読取終了位置を、副走査方向において最も上側に位置する原稿の端点に対応した位置に設定して、読取領域を原稿台11aにおける原稿の載置領域に対応させる。また、この処理を終えると、S270に移行する。
一方、S225において「乗り上げ有」判定が下されたと判断すると、CPU70は、S241に移行し、原稿がフレーム13aに乗った状態にある旨のメッセージを、表示操作部50に設けられたディスプレイに表示して、原稿の乗り上げをユーザに向けて報知する。また、この際には、後続処理の継続要否を問合せるメッセージを、表示操作部50に設けられたディスプレイに表示することにより、上記問合せに対する回答の操作キーを通じた入力を、ユーザに促す。
また、この処理を終えると、CPU70は、S243に移行し、操作キーを通じて、上記問合せに対する回答が入力されるまで待機する。そして、回答が入力されると、当該入力された回答の種類に基づいて、ユーザから処理継続指示が入力されたか否かを判断する。具体的にS243では、上記回答として後続処理の「継続要」との回答が入力されると、ユーザから処理継続指示が入力されたと判断する(S243でYes)。一方、上記回答として後続処理の「継続不要」との回答が入力されると、ユーザから処理継続指示が入力されなかったと判断する(S243でNo)。
そして、ユーザから処理継続指示が入力されなかったと判断すると(S243でNo)、CPU70は、当該自動変倍複写処理を終了することで、S243の処理を実行するに至ったコピー指令を無効化する。
一方、ユーザから処理継続指示が入力されたと判断すると(S243でYes)、CPU70は、S245に移行し、原稿台11aに載置された原稿のサイズ(縦幅及び横幅)を、本実施例の複合機1において原稿台11aに載置可能な原稿の最大サイズであると推定する。即ち、原稿サイズが、読取可能領域R0と同サイズであると推定する。この他、CPU70は、原稿台11aに載置された原稿の当該載置領域が、読取可能領域R0の全域であると推定すると共に、原稿の傾き角θがゼロ(θ=0)であると推定する(S247)。
また、S247での処理を終えると、CPU70は、S250に移行し、印刷制御部40を通じて、印刷部30に給紙動作を実行させると共に、給紙動作の対象となった記録紙のサイズを検出する(S255)。そして、この処理後、S261に移行し、S245で推定された原稿サイズ及びS255で検出された記録紙サイズに基づき、上述の手法で、変倍率を設定する。
また、この処理を終えると、CPU70は、S247で推定された原稿の傾き角θから、画像データの傾き補正量を設定し(S263)、更に、S245で推定された原稿の載置領域の情報に基づいて、本スキャン時(S270実行時)の読取領域を、原稿台11aにおける原稿の載置領域に対応させる(S265)。具体的に、S225でYesと判断した後のS265では、原稿読取開始位置を、読取可能領域R0の下端(Y=0)に設定し、原稿読取終了位置を、読取可能領域R0の上端(Y=YMAX)に設定して、読取可能領域R0全域を、読取領域に設定する。また、この処理を終えると、S270に移行する。
また、S270に移行すると、CPU70は、読取制御部20を通じて画像読取部10を制御することで、画像読取部10に、読取ユニット15を原稿読取開始位置から原稿読取終了位置まで副走査方向に搬送させると共に、当該搬送中にはライン毎の読取動作を読取ユニット15に実行させて、上記設定した読取領域の画像を、読取ユニット15に読み取らせ、当該読取領域の読取結果を表す画像データが、RAM80に記録されるようにする(S270)。
また、この処理を終えると、CPU70は、RAM80に記録された上記読取結果を表す画像データを、予め設定された変倍率で拡大又は縮小処理すると共に、予め設定された傾き補正量分、回転処理して、上記読取結果を表す画像データを、印刷用の画像データに変換し、変換後の画像データを、印刷対象データに設定する(S280)。但し、傾き補正量がゼロに設定されている場合には、S280において、回転処理を、実行しないものとする。
また、S280での処理を終えると、CPU70は、当該印刷対象データについての印刷処理を実行する(S290)。即ち、印刷制御部40を通じて、印刷部30に印刷対象データに基づく画像を、給紙した記録紙に印刷させる。その後、当該複写制御処理を終了する。
このようにして、自動変倍複写処理では、読取可能領域R0における一部領域のプレスキャン結果に基づき、原稿サイズ等を推定し、その結果から、本スキャン時(S270実行時)の読取領域を決定すると共に、変倍率及び傾き補正量を決定する。但し、本実施例では、原稿のフレーム13aへの乗り上げを検知した場合、プレスキャン結果に基づかず、原稿サイズを最大サイズと推定して、原稿載置領域を読取可能領域R0全域と推定し、本スキャン時の読取領域を読取可能領域R0全域に決定する。
尚、原稿のフレーム13aへの乗り上げを検知した場合に、プレスキャン結果を利用せずに、原稿サイズを最大サイズと推定している理由は、本実施例では、S235における原稿推定処理にて、プレスキャン結果から原稿のエッジを検出し、この検出結果に基づいて、原稿台11aに載置されている原稿サイズ等を推定しているためである。
即ち、原稿台11aに載置可能な最大サイズを超える大きさの原稿が当該原稿台11aに載置されている場合に、S235の処理を実行して、原稿サイズ等を求めようとすると、原稿に描写された罫線等の影響を受けて、原稿のエッジが誤って検出され、原稿サイズ等が誤って推定される可能性がある。このような理由から、本実施例では、原稿のフレーム13aの乗り上げを検知した場合、原稿推定に係る処理の切替を行うようにしている。
以下では、図7を用いて、CPU70がS235で実行する、この原稿推定処理について説明する。図7は、CPU70が実行する原稿推定処理を表すフローチャートである。
この原稿推定処理を開始すると、CPU70は、まず、変数Sを上述のプレスキャン領域上端のY座標であるYPREに設定することにより(S=YPRE)、Y軸方向の検査範囲を、Y=0からY=S=YPREに設定する(S410)。また、この処理を終えると、S420に移行し、右エッジ検出処理を実行する。図8は、CPU70が実行する右エッジ検出処理を表すフローチャートである。
右エッジ検出処理を開始すると、CPU70は、まずS510にて、副走査方向検査位置Yeを、読取可能領域R0の下端Y座標に設定し(Ye=0)、S515にて、主走査方向検査位置Xeを、読取可能領域R0の右端X座標に設定する(Xe=XMAX)。また、S515では、変数Cを値ゼロに初期化する(C=0)。その後、副走査方向検査位置Yeが検査範囲を超えているか否かを判断する(S520)。具体的には、Ye>Sであるか否かを判断する。
そして、副走査方向検査位置Yeが検査範囲を超えていないと判断すると(S520でNo)、CPU70は、主走査方向検査位置Xe及び副走査方向検査位置Yeで定まる検査位置(X,Y)=(Xe,Ye)に対応する検査対象データの画素値を参照することにより、検査位置(Xe,Ye)がエッジ点であるか否かを判断する(S525)。尚、図9は、エッジ画像データの構成を抜粋して示し、更に、右エッジ検出処理により追跡するエッジ点の軌跡を表した説明図である。図9に示す例では、画素値「1」の地点がエッジ点に該当する。
そして、検査位置(Xe,Ye)がエッジ点ではないと判断すると(S525でNo)、CPU70は、S540に移行して、主走査方向検査位置Xeを、X軸マイナス方向に1画素移動した位置に更新し(Xe←Xe−1)、更新後の主走査方向検査位置Xeが読取可能領域R0の左端を、はみ出ていないかどうかを判断する。具体的には、Xe<0であるか否かを判断する(S543)。
そして、主走査方向検査位置Xeが、読取可能領域R0の左端をはみ出ていないと判断すると(S543でNo)、CPU70は、S520に移行して、副走査方向検査位置Yeが検査範囲を超えているか否か(Ye>Sであるか否か)を判断し、副走査方向検査位置Yeが検査範囲を超えていないと判断すると(S520でNo)、S525に移行し、副走査方向検査位置Yeが検査範囲を超えていると判断すると(S520でYes)、S590に移行する。
一方、S543において、主走査方向検査位置Xeが読取可能領域R0の左端をはみ出ていると判断すると(Xe<0であると判断すると)、CPU70は、S547に移行し、主走査方向検査位置Xeを、読取可能領域R0の右端(XMAX)に設定すると共に(Xe=XMAX)、副走査方向検査位置Yeを、現在値Yeに8加えた値に更新する(Ye←Ye+8)。即ち、副走査方向検査位置Yeを、Y軸方向に8画素進んだ位置に設定する。その後、S520に移行して、上述の処理を実行する。
また、検査位置(Xe,Ye)がエッジ点であると判断すると(S525でYes)、CPU70は、S530に移行し、変数(X0,Y0)に、現在の検査位置(Xe,Ye)の座標値を、設定する(X0←Xe,Y0←Ye)。また、変数Y1を、座標Y=Y0からY軸方向に8画素進んだ座標値Y1(=Y0+8)に更新する(S533)。
その後、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点の少なくとも一つが、エッジ点であるか否かを判断し(S537)、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点のいずれもがエッジ点でない場合には(S537でNo)、S540に移行して、主走査方向検査位置Xeを、X軸マイナス方向に1画素移動した位置に更新する(Xe←Xe−1)。
一方、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点の少なくとも一つがエッジ点であると判断した場合には(S537でYes)、S550に移行して、座標(X0,Y0)の地点が連続性のあるエッジ点であると判定し、この座標(X0,Y0)を、連続性のあるエッジ点の座標データとして、一時記憶する。
また、この処理を終えると、CPU70は、S560に移行し、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点及び座標(X0+1,Y1)の地点の内、エッジ点である地点の一つを、予め定められた優先度に従って選択する。
具体的に、右エッジ検出処理においては、読取可能領域R0右端側に近い座標ほど高い優先度が設定されている。即ち、読取可能領域R0右端側に近い座標(X0+1,Y1)の地点が優先度「大」に設定され、座標(X0,Y1)の地点が優先度「中」に設定され、座標(X0−1,Y1)の地点が優先度「小」に設定されている。
このように優先度が設定されているのは、原稿の右端より右側においては、原稿台11aに何も存在せず、エッジ点は存在しないはずであり、読取可能領域R0右端側に近いエッジ点であるほど、そのエッジ点が原稿の右端に対応するエッジ点である可能性が高いためである。
即ち、S560では、上記優先度に従って、座標(X0−1,Y1)の地点、座標(X0,Y1)の地点、及び、座標(X0+1,Y1)の地点の内、エッジ点である地点であって優先度の最も高い地点を選択する。そして、変数X0を、選択した地点のX座標に更新し、変数Y0を、選択した地点のY座標に更新する。その後、変数Cを1加算した値に更新する(S563)。
そして、この処理を終えると、CPU70は、更新後の変数Cの値がC=8であるか否かを判断し、C=8でないと判断すると(S567でNo)、S533に移行して、変数Y1を、座標Y=Y0からY軸方向に8画素進んだ地点のY座標に更新する(Y1=Y0+8)。その後、S537以降の処理を実行する。
CPU70は、このような処理を実行することにより、図9に示すように、Y軸方向に8画素おきに、エッジ点がY軸方向に連続するものであるか否かを検査する。そして、C=8であると判断すると(S567でYes)、8回に及ぶS550の処理で連続性のあるエッジ点として判定した計8地点の各座標データを、原稿右エッジデータとしてRAM80に記憶する(S570)。
また、この処理を終えると、CPU70は、S580に移行して、副走査方向検査位置Yeが検査範囲を超えているか否か(Ye>Sであるか否か)を判断し、副走査方向検査位置Yeが検査範囲を超えていないと判断すると(S580でNo)、副走査方向検査位置Yeを64画素進んだ位置に更新して(S585)、S515に移行する。
このようにして、CPU70は、連続するエッジ点を、8つを1組として、繰返し検出する。そして、副走査方向検出位置Yeが検査範囲を超えると(S520でYes又はS580でYes)、S590に移行し、S570で原稿右エッジデータとして記憶された座標データ群の中から、右エッジ(原稿の右端を表すエッジ点)として確度の低い座標データ群を削除して、原稿右エッジデータを確定する。
具体的には、図10に示すように、原稿右エッジデータとして記憶された座標データ群の内、連続性のある座標データ群に対して原稿内側領域に大きくずれた位置にある、明白に連続性のない座標データ群を、原稿右エッジデータから除去し、原稿右エッジデータを確定する。その後、当該右エッジ検出処理を終了する。但し、S590の処理は原稿エッジの検出精度を高めるための処理であるので、S590の処理については、実行しないように、右エッジ検出処理を構成してもよい。
このようにして、右エッジ検出処理を終えると、CPU70は、S430に移行し、直前の右エッジ検出処理で右エッジの検出に失敗したか否かを判断する。具体的には、直前の右エッジ検出処理で原稿右エッジデータとして登録された座標データがない場合、右エッジの検出に失敗したと判断し、原稿右エッジデータとして登録された座標データがある場合には、右エッジの検出に成功したと判断する。
但し、例外的に、原稿右エッジデータとして登録された座標データが読取可能領域R0の左端(Y=0)近傍にある場合には、左エッジ(原稿の左端を表すエッジ点)の座標データが間違って原稿右エッジデータとして登録されているとみなして、原稿右エッジデータとして登録された座標データがある場合でも、右エッジの検出に失敗したと判断してもよい。
尚、右エッジの検出に失敗するケースとしては、原稿サイズが原稿台11aのサイズより大きく、原稿の右端が原稿台11aからはみ出しているケースなどを挙げることができる。
そして、右エッジの検出に失敗したと判断すると(S430でYes)、CPU70は、S431に移行し、エラー処理を実行する。例えば、複合機1は、S431におけるエラー処理として、『原稿を正しく載置するか、自動変倍複写機能は使用できないので他のコピー指令を入力するように促すメッセージを表示操作部50のディスプレイに表示した後、S431を実行するに至ったコピー指令に対応する当該複写制御処理を強制終了して、当該コピー指令を無効にする』処理を実行する構成にすることができる。
この他、複合機1は、S431におけるエラー処理として、『原稿台11aに載置された原稿のサイズを、予め定められた固定サイズであると形式的に推定すると共に、原稿の傾き角θをゼロと推定し、更に、原稿の載置領域を、上記推定したサイズの原稿の左下角が原稿台11aの左下角に正しく突き当てられていると仮定したときに原稿が載置される領域に推定する』処理を実行し、その後、当該原稿推定処理を終了して、S250に移行する構成にされてもよい。
一方、S430において右エッジの検出に成功したと判断すると(S430でNo)、CPU70は、S433に移行し、右エッジ検出処理で確定された原稿右エッジデータが示す各点を直線近似して、原稿右エッジデータが示す点群の近似直線(以下、「右エッジ近似直線」と表現する。)を算出する。
また、この処理を終えると、CPU70は、S440に移行して、右エッジ近似直線がY軸に対し所定角度より大きく傾いているか否かを判断する。本実施例では、具体的に、右エッジ近似直線がY軸に対し0.5度より大きく傾いているか否かを判断する。
そして、右エッジ近似直線の傾きが上記所定角度以下であると判断すると(S440でNo)、CPU70は、原稿がフレーム13aの内側左下角に突き当てられて原稿台11aに正しく載置されていると推定して、図7右図に示すように、右エッジ近似直線と原稿台11a下端縁との交点を、原稿の右下角位置であると推定する(S441)。
また、この処理を終えると、CPU70は、原稿の左下角位置が原稿台11aの左下角の地点であると推定し(S443)、S441及びS443で推定した角位置の位置座標に基づき、原稿台11aに載置されている原稿が定型用紙であるとの仮定の下で、原稿台11aに載置された原稿のサイズ及び原稿台11aにおける原稿の載置領域を推定すると共に、原稿の傾き角θを推定する(S445)。
具体的には、S441及びS443で推定した原稿の左下角位置から右下角位置までの長さを、原稿の短辺長さ(横幅)と推定し、この短辺長さの√2倍を、原稿の長辺長さ(縦幅)と推定して、原稿サイズを推定すると共に、上記推定した左下角位置及び右下角位置を基点に上記原稿サイズの原稿が原稿台11aに載置されているものとして、原稿の左上角及び右上角が位置する座標を導出し、これら4つの角を結んでできる四角形内の領域を、原稿の載置領域であると推定する。尚、ここで原稿短辺長さの√2倍を、原稿の長辺長さとして推定しているのは、定型用紙の短辺長さ:長辺長さの比が1:√2となっているためである。
また、S441,S443では、原稿が原稿台11aの左下角に正確に突き当てられて原稿台11aに載置されていると仮定して角位置を求めているので、S445では、原稿の傾き角θがゼロである(傾きがない)と推定する。
このようにして、S445での処理を終えると、CPU70は、当該原稿推定処理(S235)を終えて、S250に移行し、上述したようにして、後続の処理を実行する。即ち、原稿推定処理で推定した原稿サイズ、原稿の傾き角、原稿の載置領域の情報を基に、変倍率及び傾き補正量を設定し(S261,S263)、更に読取領域を設定する(S265)。その後、本スキャンに移行して(S270)、コピー動作を実現する。
話を原稿推定処理のS440(図7参照)に戻すと、CPU70は、ここで、右エッジ近似直線がY軸に対し所定角度より大きく傾いていると判断した場合(S440でYes)、S450に移行して、図11に示す左エッジ検出処理を実行する。図11は、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の右端を、はみ出ていないかどうかを判断する(S743)。具体的には、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は、右エッジ検出処理と同様(図9参照)、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で原稿左エッジデータとして記憶された座標データ群の中から、左エッジ(原稿の左端を表すエッジ点)として確度の低い座標データ群を削除して、原稿左エッジデータを確定する。
具体的には、S590での処理と同様、原稿左エッジデータとして記憶された座標データ群の内、連続性のある座標データ群に対して原稿内側領域に大きくずれた位置にある、明白に連続性のない座標データ群を、原稿左エッジデータから除去し、原稿左エッジデータを確定する。その後、当該左エッジ検出処理を終了する。但し、S790の処理については、実行しないように、左エッジ検出処理を構成してもよい。
また、このようにして、左エッジ検出処理を終えると、CPU70は、S455に移行し、左エッジ検出処理で確定された原稿左エッジデータが示す各点を直線近似して、原稿左エッジデータが示す点群の近似直線(以下、「左エッジ近似直線」という。)を算出する。その後、S460に移行する。
但し、直前の左エッジ検出処理で原稿左エッジデータとして登録された座標データがない場合には、左エッジの検出に失敗したと判断して、左エッジ近似直線を算出することなく、S460に移行するものとする。この他、原稿左エッジデータとして登録されている座標データの全て又は一部が原稿右エッジデータにも登録されている場合には、右エッジ(原稿の右端を表すエッジ点)の座標データが間違って原稿左エッジデータとして登録されているとみなして、原稿左エッジデータとして登録された座標データがある場合でも、左エッジの検出に失敗したと判断し、左エッジ近似直線を算出することなく、S460に移行するようにしてもよい。
また、S460に移行すると、CPU70は、図12に示す下エッジ検出処理を実行する。図12は、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で原稿下エッジデータとして記憶された座標データ群の中から、下エッジ(原稿の下端を表すエッジ点)として確度の低い座標データ群を削除して、原稿下エッジデータを確定する。
具体的には、S590での処理と同様、原稿下エッジデータとして記憶された座標データ群の内、連続性のある座標データ群に対して原稿内側領域に大きくずれた位置にある、明白に連続性のない座標データ群を、原稿下エッジデータから除去し、原稿下エッジデータを確定する。その後、当該下エッジ検出処理を終了する。但し、S890の処理については、実行しないように、下エッジ検出処理を構成してもよい。
また、このようにして、下エッジ検出処理を終えると、CPU70は、S465に移行し、下エッジ検出処理で確定された原稿下エッジデータが示す各点を直線近似して、原稿下エッジデータが示す点群の近似直線(以下、「下エッジ近似直線」という。)を算出する。その後、S470に移行する。但し、直前の下エッジ検出処理で原稿下エッジデータとして登録された座標データがない場合には、下エッジの検出に失敗したと判断して、下エッジ近似直線を算出することなく、S470に移行するものとする。
また、S470に移行すると、CPU70は、右エッジ近似直線、左エッジ近似直線、及び下エッジ近似直線の相互関係から、右エッジ検出処理(S420)、左エッジ検出処理(S450)及び下エッジ検出処理(S460)にて正しく原稿エッジが検出されたか否かを判断する。即ち、右エッジ、左エッジ及び下エッジの全てが正常に検出されたか否かを判断する。
具体的には、右エッジ近似直線と左エッジ近似直線とが平行な関係にあり、右エッジ近似直線と下エッジ近似直線とが直交関係にあり、左エッジ近似直線と下エッジ近似直線とが直交関係にある場合には、正しく原稿エッジが検出されたとして、S470でYesと判断する。
一方、右エッジ、左エッジ及び下エッジのいずれか一つの検出にでも失敗している場合や、右エッジ、左エッジ及び下エッジの関係が正しい関係にない場合には、S470でNoと判断する。即ち、右エッジ近似直線と左エッジ近似直線とが平行な関係にあり、右エッジ近似直線と下エッジ近似直線とが直交関係にあり、且つ、左エッジ近似直線と下エッジ近似直線とが直交関係にある場合を除いては、原稿エッジが正しく検出されていないとして、S470でNoと判断する。但し、ここでの相互関係の判定は、誤差を考慮して実行すべきである。
そして、原稿エッジが正しく検出されていないと判断すると(S470でNo)、CPU70は、S471に移行して、S431での処理と同様のエラー処理を実行する。
一方、S470で原稿エッジが正しく検出されていると判断すると(S470でYes)、CPU70は、S480に移行して、原稿の左下角位置を、左エッジ近似直線と下エッジ近似直線との交点であると推定して、その座標値を算出し、更に、原稿の右下角位置を、右エッジ近似直線と下エッジ近似直線との交点であると推定して、その座標値を算出する(S485)。尚、図13は、S480及びS485での原稿左下角位置Ka及び原稿右下角位置Kbの推定方法を示した説明図である。図中、白丸がエッジ点を表し、黒丸が角位置Ka,Kbを表す。
また、S485での処理を終えると、CPU70は、S480及びS485で推定した角位置の位置座標に基づき、原稿台11aに載置されている原稿が定型用紙であるとの仮定の下で、原稿台11aに載置された原稿のサイズ及び原稿台11aにおける原稿の載置領域を推定すると共に、右エッジ近似直線に基づき、原稿台11aに載置されている原稿の傾き角θを推定する(S490)。
即ち、S480及びS485で推定した原稿の左下角位置から右下角位置までの長さを、原稿の短辺長さ(横幅)と推定し、この短辺長さの√2倍を、原稿の長辺長さ(縦幅)と推定して、原稿サイズを推定すると共に、上記推定した左下角位置及び右下角位置を基点に上記原稿サイズの原稿が原稿台11aに載置されているものとして、原稿の左上角及び右上角が位置する座標を導出し、これら4つの角を結んでできる四角形内の領域を、原稿の載置領域であると推定する。
この他、S490では、Y軸に対して右エッジ近似直線がなす角度を、原稿の傾き角θと推定する。そして、この処理を終えると、CPU70は、S235での原稿推定処理を終了して、S250に移行し、後続の処理を実行する。
このような動作により、CPU70は、原稿のフレーム13aへの乗り上げが検知されなかった場合、プレスキャンにより得られたエッジ画像データ(検査対象データ)から原稿エッジを検出して、その検出結果に基づき、原稿が定型用紙であるとの仮定の下、原稿台11aに載置された原稿のサイズ・原稿の載置領域・原稿の傾き角を推定する(S490)。そして、この推定結果に基づき、変倍率及び傾き補正量を設定し(S261,S263)、更に読取領域を設定する(S265)。その後、本スキャンに移行する(S270)。
そして、本スキャン(S270)では、上記設定した読取領域下において読取ユニット15を搬送し、その領域に写る画像を読取ユニット15に読み取らせる。そして、その読取結果を、上記設定した変倍率に合わせて拡大/縮小処理すると共に、上記設定した傾き補正量に合わせて回転処理して、印刷用の画像データを生成する。また、これを印刷対象データとして印刷処理することで、原稿のコピー画像であって、自動変倍され、更に傾き補正された画像を、印刷部30を通じて、記録紙に印刷する。
以上、本実施例のディジタル複合機1の構成について説明したが、本実施例の複合機1では、プレスキャンでの読取結果から、原稿エッジを検出して、原稿の状態(原稿サイズ・原稿の傾き・原稿の載置領域)を推定するようにしている。このため、原稿台11aに新聞等の許容サイズ以上の大きな原稿が載置された場合に、プレスキャンでの読取結果から、原稿エッジを検出して原稿状態を推定すると、原稿サイズ等を誤って推定する可能性がある。このような理由から、本実施例では、原稿の乗り上げを、原稿台11a端の輝度分布から検知して、原稿がフレーム13aに乗り上げている場合には、プレスキャン結果から原稿エッジを検出して原稿サイズ等を求めず、原稿サイズが原稿台11aに載置可能な最大サイズであると推定するようにした。
従って、本実施例によれば、原稿台11aに新聞等の許容サイズ以上の大きな原稿が載置された場合にも、適切に原稿サイズを推定して、後続の処理を実行することができ、原稿サイズ等が誤って推定されることにより、後続処理(変倍率や読取領域の設定動作)に影響が及ぶのを極力抑えることができる。例えば、原稿台11aに新聞等の大きな原稿が載置されているにも拘わらず、原稿内の罫線に惑わされ、原稿サイズを小さく誤推定してしまうことで、ユーザが原稿台11aに面する原稿の全領域のコピーを所望しているにも拘わらず、一部領域のみのコピー動作を実行してしまうのを回避することができる。
また、本実施例では、原稿が突き当てられる左フレーム13a(L)とは原稿台11aを挟んで反対側に位置する右フレーム13a(R)の原稿台11a表面からの高さh’を、左フレーム13a(L)の原稿台11a表面からの高さhより高く設定することにより、フレーム13aに乗り上がってしまった原稿の読取画像が歪んでしまうのを極力抑えつつ、原稿台11aに最大サイズ以上の原稿が載置されたことを、黒領域長Lの長さから感度よく検知できるようにしているので、利便性の高い複合機1をユーザに提供することができる。
即ち、原稿がフレーム13aに乗り上がっていることを感度よく検知するには、フレーム13aの原稿台11a表面からの高さを大きくするのが良いが、フレーム13aの高さを大きくすると、乗り上げにより原稿台11aの端部で原稿が大きく歪むため、読取可能領域R0端部の読取画像の画質が劣化する。このため、原稿台11aに最大サイズ以上の原稿が載置されたといった例外的なケースを感度よく検知するだけのために、フレーム13a全体の高さを大きくするのは、決して好ましいものではない。
このような理由から、本実施例では、上述のように、原稿の乗り上げを検知する領域である右フレーム13a(R)の原稿台11a表面からの高さh’のみを大きく設定し、他のフレーム13a(L),13a(U),13a(D)の原稿台11a表面からの高さhを、一律に同一の高さh(<h’)としているのである。
本実施例では、原稿台11aの左下角に原稿の左下角を突き当てるように指示している関係上、原稿台11aに載置される原稿が読取可能領域R0を超えるサイズのものであったとしても、左フレーム13a(L)や下フレーム13a(D)に原稿が乗り上げるケースは少ない。これに対し、原稿台11aに、読取可能領域R0を超えるサイズの原稿が載置された場合には、高い確率で右フレーム13a(R)において原稿が乗り上がる。
従って、原稿が突き当てられる左フレーム13a(L)とは原稿台11aを挟んで反対側に位置する右フレーム13a(R)の原稿台11a表面からの高さh’を、左フレーム13a(L)の原稿台11a表面からの高さhより高く設定すれば、読取画像の画質の劣化を極力抑えて、原稿台11aに最大サイズ以上の原稿が載置されたことを、黒領域長Lの長さから感度よく検知できるのである。
この他、本実施例の複合機1では、読取可能領域R0の一部領域をプレスキャンして、その読取結果に基づき、原稿の状態(原稿サイズ・原稿の傾き・原稿の載置領域)を推定するようにしているので、本実施例によれば、従来のように、読取可能領域R0全体をプレスキャンする手法よりも高速にプレスキャン動作を終了することができ、効率的に原稿の状態を推定することができる。
また、以上では、プレスキャンを、読取可能領域R0全体ではなく、一部領域のみに対して実行するように、複合機1を設計している関係上、原稿の乗り上げ検知を、右フレーム13a(R)を通じて行うようにしたが、プレスキャンを、読取可能領域R0全体に対して行うように複合機1を構成する場合には、原稿の乗り上げ検知を、上フレーム13a(U)を通じて行うようにしてもよい。
[変形例]
図14は、変形例における画像読取部10の原稿台11a周辺の構成を表した説明図であり、図14上図は、その平面図、図14下図は、B−B’断面図である。
図14に示すように、変形例では、原稿台11aの上端縁に接する上フレーム13a(U)の原稿台11a表面からの高さh’が、原稿台11aの下端縁に接する下フレーム13a(D)の原稿台11a表面からの高さhよりも高い値に設定されている(h’>h)。
また、変形例においては、CPU70が実行する自動変倍複写処理のS210及びS235の処理が夫々、以下に説明するS211及びS236の処理に置き換えられ、更に、S220で実行する乗り上げ判定処理が、図16に示す内容に置き換えられている。
尚、図15は、変形例においてCPU70が実行する自動変倍複写処理の一部を抜粋して表したフローチャートであり、図16は、変形例においてCPU70が実行する乗り上げ判定処理を表すフローチャートである。
図15に示すように、変形例のCPU70は、自動変倍複写処理を開始すると、まず、原稿読取開始位置を、読取可能領域R0の下端(Y=0)に設定し、原稿読取終了位置を、読取可能領域R0の上端(Y=YMAX)に設定することにより、読取可能領域R0全域を読取領域(換言すればプレスキャン領域)に設定し、読取制御部20を通じて、画像読取部10に、読取可能領域R0全域に対するプレスキャン動作を実行させる(S211:全体プレスキャン処理)。
また、この処理を終えると、CPU70は、RAM80に記録されたプレスキャン画像データが示す各画素のRGB値を、所定の計算式に従って、輝度値Zに変換することにより、プレスキャン画像データを、各画素の輝度値を表す輝度データに変換し(S215)、上記生成した輝度データに基づいて、乗り上げ判定処理を実行する(S220)。但し、ここでは、図16に示す乗り上げ判定処理を実行する。
図16に示す乗り上げ判定処理を開始すると、CPU70は、まずS910にて、主走査方向検査位置Xeを、設計段階で予め定められた検査開始位置XINIに、設定する(Xe=XINI)。また、S910での処理を終えると、CPU70は、S921に移行して、副走査方向検査位置Yeを、読取可能領域R0上端のY座標に設定する(Ye=YMAX)。
また、この処理を終えると、CPU70は、輝度データを参照することにより、検査位置(X,Y)=(Xe,Ye)に対応する画素の輝度値Zを得て、この検査位置(Xe,Ye)に対応する画素の輝度値Zが、予め定められた閾値Zthを超えているか否かを判断する(S923)。
そして、輝度値Zが閾値Zth以下である(即ち、Z≦Zthである)と判断すると(S923でNo)、CPU70は、S925に移行し、副走査方向検査位置Yeを、1画素分マイナス方向にずらした値に更新した後に(即ち、Ye←Ye−1に更新した後に)、S927に移行する。
また、S927では、更新後の副走査方向検査位置Yeが読取可能領域R0の下端であるか否かを判断する。即ち、Ye=0であるか否かを判断する。そして、更新後の副走査方向検査位置Yeが読取可能領域R0の下端であると判断すると(S927でYes)、S929に移行する。
一方、Ye>0であり、更新後の副走査方向検査位置Yeが読取可能領域R0の下端でないと判断すると(S927でNo)、CPU70は、S923に移行し、更新後の検査位置(X,Y)=(Xe,Ye)について、この検査位置に対応する画素の輝度値Zが、閾値Zthを超えているか否かを判断する。
そして、検査位置に対応する画素の輝度値Zが閾値Zthを超えていると判断すると(S923でYes)、S929に移行する。
また、S929では、読取可能領域R0の上端から、現在設定されている副走査方向検査位置YeまでのY軸方向長さLを、座標X=Xeの地点における黒領域長L(X=Xe)として算出する。即ち、式L=YMAX−Yeに従って、座標X=Xeの地点における黒領域長L(X=Xe)を算出する。
また、S929での処理を終えると、CPU70は、S930に移行し、主走査方向検査位置Xeを、X軸プラス方向に1画素分移動した位置に更新する(Xe←Xe+1)。その後、主走査方向検査位置Xeが、設計段階で予め定められた検査終了位置XFINを超えているか否かを判断する(S940)。尚、検査終了位置XFINは、検査開始位置XINIと同様、設計段階で、設計者により、0以上XMAX以下の値に、定められる。但し、当然のことながら、検査終了位置XFINは、検査開始位置XINIよりもX軸プラス方向に大きな値として、定められる(XFIN>XINI)。
そして、主走査方向検査位置Xeが検査終了位置XFINを超えていないと判断すると(即ち、Xe≦XFINであると判断すると)、CPU70は、S921に移行し、後続の処理を実行する。このような動作の繰返しによって、CPU70は、検査開始位置XINIから検査終了位置XFINまでの各座標Xにおいて、上述の手法により、読取可能領域R0領域上端を基点とした黒領域長L(X)を算出する。
そして、主走査方向検査位置Xeが検査終了位置XFINを超えていると判断すると(S940でYes)、CPU70は、S950に移行し、S929で算出した、XINI≦X≦XMAXの範囲における各座標Xでの黒領域長L(X)の値を用いて、それら黒領域長L(X)の平均値AVE(L)を算出する。
また、S950での処理を終えると、CPU70は、この平均値AVE(L)が、予め定められた閾値Lth以上であるか否かを判断する(S960)。そして、平均値AVE(L)が閾値Lth以上であると判断すると(S960でYes)、原稿が上フレーム13a(U)に乗り上げられているとして、「乗り上げ有」判定を下す(S970)。一方、平均値AVE(L)が閾値Lth未満であると判断すると(S960でNo)、原稿が上フレーム13a(U)に乗り上げられていないとして、「乗り上げ無」判定を下す(SS980)。
このようにして、S970又はS980の処理を終えると、CPU70は、当該乗り上げ判定処理を終了して、S225に移行する。
また、S225に移行すると、CPU70は、直前のS220で実行した乗り上げ判定処理において、「乗り上げ有」判定が下されたか否かを判断し、「乗り上げ有」判定が下されておらず、「乗り上げ無」判定が下されたと判断すると(S225でNo)、S230に移行する。
そして、S230では、RAM80に記録されたプレスキャン画像データに対応する上記輝度データに対してエッジ検出処理を実行し、この画像データに対応するエッジ画像データを生成する。また、S230での処理を終えると、CPU70は、S236に移行し、上記生成したエッジ画像データから原稿エッジを検出し、この検出結果に基づいて、原稿台11aに載置された原稿のサイズ(縦幅及び横幅)、及び、原稿の傾き角θ、及び、原稿台11aにおける原稿の載置領域を推定する。尚、S236では、S235と同様に、図7に示す原稿推定処理を実行してもよいし、原稿エッジとして左エッジ・右エッジ・下エッジの他、上エッジをも検出して、これらの近似直線から、原稿サイズ等を推定するようにしてもよい。
このようにして、S236での処理を終えると、CPU70は、S250に移行し、後続の処理を、上記実施例と同様に実行する。この他、「乗り上げ有」判定が下されたと判断すると(S225でYes)、CPU70は、S241に移行し、後続の処理を、上記実施例と同様に実行する。
以上、変形例の複合機1の構成を説明したが、本変形例においても、上述の実施例と同様の効果を得ることができる。
また、以上には、変形例を含む本発明の実施例について説明したが、本発明の状態判定手段は、CPU70が実行するS215,S220の処理により実現され、報知手段は、S241の処理により実現され、原稿推定手段は、CPU70が実行するS225〜S247の処理により実現されている。
また、本発明は、上記実施例に限定されるものではなく、種々の態様を採ることができる。例えば、複合機1は、読取可能領域R0全体をプレスキャンして、そのプレスキャン結果に基づき、右フレーム13a(R)及び上フレーム13a(U)のいずれか一方に、原稿が乗り上げている場合、「乗り上げ有」判定し、右フレーム13a(R)及び上フレーム13a(U)のいずれにも、原稿が乗り上げていない場合に限って、「乗り上げ無」判定するように、構成されてもよい。
1…ディジタル複合機、10…画像読取部、11…読取ガラス、11a…原稿台、13…筐体、13a…フレーム、15…読取ユニット、16…搬送機構、17…モータ、20…読取制御部、30…印刷部、40…印刷制御部、50…表示操作部、60…通信部、70…CPU、80…RAM、90…フラッシュメモリ、MK…マーク、P…原稿、R0…読取可能領域