(57)【特許請求の範囲】
【請求項１】
読取対象の原稿が載置される原稿台と、
前記原稿台に載置された原稿を読み取るための読取ユニットと、
前記読取ユニットに、前記原稿台に載置された原稿を読み取らせることにより、前記原稿台に載置された原稿の読取画像を表す画像データを生成する読取制御手段と、
前記読取制御手段により生成された画像データを、エッジ画像を表す画像データに変換する変換手段と、
特定方向に延びる原稿の端縁、を表すエッジ点の候補を、所定の規則に従って、前記変換手段による変換後の画像データから選択する手段であって、前記変換後の画像データの端点を、参照開始位置に設定して、この画像データを構成する各画素の画素値を、前記設定した参照開始位置から、予め定められた第一の方向に沿って、前記画像データの内側へと参照することにより、前記第一の方向とは垂直な第二の方向へ連続するエッジ点を探索する際の起点とするエッジ点を検出すると共に、検出したエッジ点を起点として、前記第二の方向に、前記変換後の画像データを構成する各画素の画素値を参照して、前記第二の方向へ連続するエッジ点を、その連続性が途切れるまで探索することにより、前記起点としたエッジ点から前記第二の方向に連続するエッジ点のグループを検出し、当該検出した前記第二の方向に連続するエッジ点のグループを、前記特定方向に延びる原稿の端縁を表すエッジ点の候補に選択する動作を、前記連続性が途切れる度、前記参照開始位置を、前記第二の方向に更新しながら、繰返し実行することにより、前記特定方向に延びる原稿の端縁を表すエッジ点の候補を選択する選択手段と、
前記選択手段により前記候補として選択されたエッジ点の分布に基づき、前記選択手段により選択された前記候補の一群の中から、前記原稿の端縁を表すエッジ点としての確度が低いエッジ点を破棄することで、当該破棄後に残る前記候補を、前記変換後の画像データにおいて前記特定方向に延びる原稿の端縁を表すエッジ点として検出する検出手段と、
を備え、
前記読取制御手段は、前記第二の方向に垂直な前記原稿台の一辺から前記第二の方向に延びる中央までの領域よりも短い領域を、前記読取ユニットに読み取らせる機能を有し、
前記選択手段は、前記機能により前記読取制御手段が生成した画像データについての前記変換手段による変換後の画像データから、前記エッジ点の候補を選択すること
を特徴とする画像読取装置。
【請求項２】
前記検出手段は、
前記選択手段により前記候補に選択された各グループを、順次、検査対象のグループに設定する手段であって、前記検査対象のグループを、前記第二の方向において前記最も原稿台の中央寄りのグループから端寄りのグループへ、順次切り替えるようにして設定する検査対象切替設定手段と、
前記検査対象切替設定手段により前記検査対象のグループが設定される度、前記検査対象切替設定手段により現在設定されている検査対象のグループに、前記検査対象切替設定手段により検査対象のグループが切り替えられる方向において、隣接するグループが存在するか否かを、前記第二の方向に平行な一次元空間上で評価して判定する第一判定手段と、
前記第一判定手段により前記隣接するグループが存在すると判定されると、前記検査対象のグループに属するエッジ点であって最も前記隣接するグループ寄りのエッジ点と、前記隣接するグループに属するエッジ点であって最も前記検査対象のグループ寄りのエッジ点と、の前記第一の方向の乖離度を算出する乖離度算出手段と、
前記乖離度算出手段により算出された乖離度が閾値未満であるか否かを判定する第二判定手段と、
を備え、前記第一判定手段により前記隣接するグループが存在しないと判定されるか、前記第二判定手段により前記乖離度が閾値以上であると判定されると、その時点までに検査対象のグループに設定されなかった前記第二の方向において原稿台の端側に位置するグループを、前記原稿の端縁を表すエッジ点としての確度が低いエッジ点の集合であるとみなして、当該エッジ点の集合を破棄する構成にされていること
を特徴とする請求項１記載の画像読取装置。
【請求項３】
前記検出手段は、前記選択手段により前記候補に選択された各グループの内、最も長く連続するグループを、前記確度が高いエッジ点の集合とみなし、当該最も長く連続するグループ以外のグループを、前記確度が低いエッジ点の集合とみなして、当該確度が低いエッジ点を破棄することで、前記特定方向に延びる原稿の端縁を表すエッジ点を検出することを特徴とする請求項１記載の画像読取装置。
【請求項４】
前記検出手段は、
前記選択手段により前記候補に選択された各グループを更に細分化してなる小グループ毎に、当該小グループを構成するエッジ点の近似直線を算出する近似直線算出手段と、
前記近似直線算出手段により算出された各小グループの近似直線の傾き及び切片の情報に基づき、近似直線についてのヒストグラムデータを生成するヒストグラムデータ生成手段と、
を備え、前記ヒストグラムデータ生成手段により生成された前記ヒストグラムデータに基づき、度数の最も高い近似直線が算出された小グループの集合を、前記確度が高いエッジ点の集合とみなし、当該度数の最も高い近似直線が算出された小グループの集合に属さないエッジ点の集合を、前記確度が低いエッジ点の集合とみなして、当該確度が低いエッジ点を破棄することで、前記特定方向に延びる原稿の端縁を表すエッジ点を検出することを特徴とする請求項１記載の画像読取装置。
【請求項５】
読取対象の原稿が載置される原稿台と、
前記原稿台に載置された原稿を読み取るための読取ユニットと、
前記読取ユニットに、前記原稿台に載置された原稿を読み取らせることにより、前記原稿台に載置された原稿の読取画像を表す画像データを生成する読取制御手段と、
前記読取制御手段により生成された画像データを、エッジ画像を表す画像データに変換する変換手段と、
特定方向に延びる原稿の端縁、を表すエッジ点の候補を、所定の規則に従って、前記変換手段による変換後の画像データから選択する選択手段と、
前記選択手段により前記候補として選択されたエッジ点の分布に基づき、前記選択手段により選択された前記候補の一群の中から、前記原稿の端縁を表すエッジ点としての確度が低いエッジ点を破棄することで、当該破棄後に残る前記候補を、前記変換後の画像データにおいて前記特定方向に延びる原稿の端縁を表すエッジ点として検出する検出手段と、
を備え、
前記選択手段は、前記変換後の画像データの端点を、参照開始位置に設定して、この画像データを構成する各画素の画素値を、前記設定した参照開始位置から、予め定められた第一の方向に沿って、前記画像データの内側へと参照することにより、前記第一の方向とは垂直な第二の方向へ連続するエッジ点を探索する際の起点とするエッジ点を検出すると共に、検出したエッジ点を起点として、前記第二の方向に、前記変換後の画像データを構成する各画素の画素値を参照して、前記第二の方向へ連続するエッジ点を、その連続性が途切れるまで探索することにより、前記起点としたエッジ点から前記第二の方向に連続するエッジ点のグループを検出し、当該検出した前記第二の方向に連続するエッジ点のグループを、前記特定方向に延びる原稿の端縁を表すエッジ点の候補に選択する動作を、前記連続性が途切れる度、前記参照開始位置を、前記第二の方向に更新しながら、繰返し実行することにより、前記特定方向に延びる原稿の端縁を表すエッジ点の候補を選択する構成にされ、
前記検出手段は、
前記選択手段により前記候補に選択された各グループを更に細分化してなる小グループ毎に、当該小グループを構成するエッジ点の近似直線を算出する近似直線算出手段と、
前記近似直線算出手段により算出された各小グループの近似直線の傾き及び切片の情報に基づき、近似直線についてのヒストグラムデータを生成するヒストグラムデータ生成手段と、
を備え、前記ヒストグラムデータ生成手段により生成された前記ヒストグラムデータに基づき、度数の最も高い近似直線が算出された小グループの集合を、前記確度が高いエッジ点の集合とみなし、当該度数の最も高い近似直線が算出された小グループの集合に属さないエッジ点の集合を、前記確度が低いエッジ点の集合とみなして、当該確度が低いエッジ点を破棄することで、前記特定方向に延びる原稿の端縁を表すエッジ点を検出すること
を特徴とする画像読取装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、原稿の読取画像を表す画像データを解析する機能を備えた画像読取装置に関する。
【背景技術】
【０００２】
従来、画像読取装置としては、読取ガラス下に読取ユニットを備え、読取ガラス上に載置された原稿を、読取ガラス下で読取ユニットを通じて読み取るフラットベッド型の画像読取装置が知られている。この種の画像読取装置では、読取ガラス下で読取ユニットを搬送しつつ、その搬送時に読取ユニットに読取動作を実行させることにより、読取ガラス上に配置された原稿を読み取り、原稿の読取画像を表す画像データを生成する。
【０００３】
この他、画像読取装置としては、コピー機能を有するものが知られており、コピー機能を有する画像読取装置としては、コピー機能の他、プリンタ機能やファックス（ＦＡＸ）機能などを有したディジタル複合機が知られている。
【０００４】
また、画像読取装置としては、読取対象の原稿を、読取ユニットを通じて読み取って、その読取結果から原稿エッジ（原稿の端縁）を検出するものが知られている（例えば、特許文献１〜特許文献３参照）。また、コピー機能を有する画像読取装置としては、プレスキャンにより得られた読取結果から読取対象の原稿のサイズや傾きを検出し（例えば、特許文献４参照）、検出した原稿サイズや傾きの情報に基づいて、変倍率や傾き補正量等を設定する画像読取装置が知られている。
【特許文献１】特開２００４−２０１２４０号公報
【特許文献２】特開２００５−２８５０１０号公報
【特許文献３】特開２００５−０３９６２０号公報
【特許文献４】特開２０００−０２２８９８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、読取ユニットによる原稿の読取結果から、原稿の端縁である原稿エッジを検出する方法では、原稿内に描写された罫線等を、原稿エッジであると誤検出する可能性がある。即ち、原稿の読取画像を表す画像データにおいては、原稿内の罫線がある地点でも、原稿の端縁に似た画像パターンが現れる。一方で、読取対象の原稿については、原稿が傾いていたり、原稿サイズが不定であるため、読取結果としての上記画像データから、原稿の端縁に対応する画像パターンを見つけて原稿エッジを検出しようとしても、誤って、原稿内部の罫線等の画像パターンを見つけて原稿エッジを誤検出してしまう可能性があるのである。
【０００６】
また、フラットベッド型の画像読取装置では、読取ガラス上に原稿を載置した状態で、読取ガラスに写る画像を読取ガラス下で読み取るため、読取ガラス上に、埃（髪の毛等）が載っていると、その埃についても読み取ってしまい、読取結果としての画像データに、原稿以外の像が現れることになる。従って、このような埃の像が現れた画像データを解析して、原稿エッジを検出する場合にも、埃の像に惑わされて原稿エッジを誤検出してしまう可能性がある。
【０００７】
このように、読取ユニットによる原稿の読取結果から、原稿エッジを検出する方法では、様々な要因により、原稿エッジを誤検出する可能性がある。勿論、このような原稿エッジの誤検出は、画像データを詳細に解析することで、ある程度抑えることができるが、画像データを詳細に解析する場合には、原稿エッジの検出に長い時間がかかるため、原稿エッジの検出を高速に実行することができなくなる。
【０００８】
本発明は、こうした問題に鑑みなされたものであり、読取ユニットによる読取結果としての画像データから、原稿エッジ（原稿の端縁）を検出する装置において、原稿内部の罫線や埃等の影響を抑えて、原稿エッジを適切に検出可能で且つ高速に原稿エッジを検出可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
かかる目的を達成するためになされた発明は、読取対象の原稿が載置される原稿台と、原稿台に載置された原稿を読み取るための読取ユニットと、読取ユニットに、原稿台に載置された原稿を読み取らせることにより、原稿台に載置された原稿の読取画像を表す画像データを生成する読取制御手段と、を備える画像読取装置であって、更に、変換手段と、選択手段と、検出手段と、を備えるものである。
【００１０】
この画像読取装置における変換手段は、読取制御手段により生成された画像データを、エッジ画像を表す画像データに変換する。また、選択手段は、原稿台において、特定方向に延びる原稿の端縁、を表すエッジ点の候補を、所定の規則に従って、上記変換手段による変換後の画像データから選択する。
【００１１】
この他、検出手段は、上記選択手段により候補として選択されたエッジ点の分布に基づき、選択手段により選択された候補の一群の中から、原稿の端縁を表すエッジ点としての確度が低いエッジ点を破棄することにより、当該破棄後に残る候補を、上記特定方向に延びる原稿の端縁を表すエッジ点として検出する。
【００１２】
また、選択手段は、具体的に、上記変換後の画像データの端点を、参照開始位置に設定して、当該参照開始位置から、予め定められた第一の方向に沿って、画像データの内側へと、この画像データを構成する各画素の画素値を参照することにより、第一の方向とは垂直な第二の方向へ連続するエッジ点を探索する際の起点とするエッジ点を検出すると共に、検出したエッジ点を起点として、第二の方向へ連続するエッジ点を、その連続性が途切れるまで探索することにより、上記起点としたエッジ点から第二の方向に連続するエッジ点のグループを検出し、当該検出した第二の方向に連続するエッジ点のグループを、上記特定方向に延びる原稿の端縁を表すエッジ点の候補に選択する。
【００１３】
選択手段は、このような動作を、連続性が途切れる度、上記参照開始位置を、第二の方向に更新しながら、繰返し実行することにより、上記特定方向に延びる原稿の端縁を表すエッジ点の候補を選択する。
【００１４】
即ち、本発明の画像読取装置では、上述した選択手段の動作により、原稿の端縁を表すエッジ点を、高速に画像データ内から抽出できるようにしつつ、高速性のため犠牲にした精度については、検出手段により、選択手段が選択したエッジ点の中から、原稿の端縁を表すエッジ点として確度の低いエッジ点を破棄することにより、補完するようにした。
【００１５】
換言すると、本発明の画像読取装置では、複数段階に分けて、画像データ内から原稿の端縁を表すエッジ点として最もらしいエッジ点を抽出することにより、従来よりも、高速且つ正確に、原稿の端縁を表すエッジ点（原稿エッジ）を正確に検出することができるようにした。
【００１６】
また、本発明の画像読取装置によれば、検出手段の動作により、原稿台に載置された埃や原稿内部に描写された罫線等の影響を受けて誤選択したエッジ点を破棄できる。従って、この発明によれば、原稿内部の罫線や埃等の影響を抑えて、原稿エッジを適切に検出できると共に、高速に原稿エッジを検出することができる。
また、本発明の画像読取装置によれば、読取制御手段が、第二の方向に垂直な原稿台の一辺から第二の方向に延びる中央までの領域よりも短い領域を、読取ユニットに読み取らせる機能を有し、選択手段は、この機能により読取制御手段が生成した画像データについての変換手段による変換後の画像データから、エッジ点の候補を選択する。従って、本発明によれば、高速に原稿エッジを検出することができる。
【００１７】
ところで、この画像読取装置が備える検出手段は、検査対象切替設定手段と、第一判定手段と、乖離度算出手段と、第二判定手段と、を備えることができる。
【００１８】
検査対象切替設定手段は、選択手段により上記候補に選択された各グループを、順次、検査対象のグループに設定する手段であり、検査対象のグループを、第二の方向において最も原稿台の中央寄りのグループから端寄りのグループへ、順次切り替えるようにして設定する。
【００１９】
一方、第一判定手段は、検査対象切替設定手段により検査対象のグループが設定される度、検査対象切替設定手段により現在設定されている検査対象のグループに、検査対象切替設定手段により検査対象のグループが切り替えられる方向において隣接するグループが存在するか否かを、第二の方向に平行な一次元空間上で評価して判定する。即ち、第一判定手段は、検査対象のグループに隣接するグループが、検査対象切替設定手段により検査対象のグループが切り替えられる方向に存在するか否かを、その方向（第二の方向）において評価して判定する。この際、第一の方向については評価しない。
【００２０】
そして、乖離度算出手段は、第一判定手段により上記隣接するグループが存在すると判定されると、検査対象のグループに属するエッジ点であって最も上記隣接するグループ寄りのエッジ点と、上記隣接するグループに属するエッジ点であって最も検査対象のグループ寄りのエッジ点と、の第一の方向の乖離度を算出する（図９参照）。また、第二判定手段は、乖離度算出手段により算出された乖離度が閾値未満であるか否かを判定する。
【００２１】
そして、検出手段は、第一判定手段により隣接するグループが存在しないと判定されるか、第二判定手段により乖離度が閾値以上であると判定されると、その時点までに検査対象のグループに設定されなかったグループ（第二の方向において原稿台の端側に位置するグループ）の全てを、原稿の端縁を表すエッジ点としての確度が低いエッジ点の集合であるとみなして、当該エッジ点の集合を破棄する。
【００２２】
上述の画像読取装置においては、原稿台に原稿が正しく載置されたときに検出対象の原稿の端縁が延びる方向を、第二の方向に定め、それとは垂直な方向を第一の方向に定めることで、目的の原稿エッジを検出することができるが、このように第一及び第二の方向を定めた場合には、原稿台に原稿が正しく載置されておらず、傾いて載置されている場合、検出対象の原稿の端縁とは違う原稿の端縁に対応するエッジ点を、連続性を検査する対象のエッジ点として検出してしまう可能性があり、当該端縁から原稿の内部に描写された罫線等を、原稿の端縁を表すエッジ点の候補として誤選択してしまう可能性がある（図９参照）。
【００２３】
従って、このように誤選択されたエッジ点については、検出手段により破棄できるのが好ましいが、原稿が傾いていることが原因で発生する誤選択動作は、原稿台の端側で発生する可能性が高く原稿台の中央側で発生する可能性は低い。
【００２４】
このような理由により、上述の検出手段では、選択手段により候補として選択されたエッジ点の内、原稿台の中央寄りに位置するエッジ点を、原稿の端縁を表すエッジ点である確度の高いエッジ点であると取り扱い、第二の方向において最も原稿台の中央寄りのグループとは乖離したグループに属するエッジ点の全てを、確度が低い候補として破棄するようにしているのである。
【００２５】
従って、この検出手段を備える画像読取装置の発明によれば、原稿が傾いていることによる選択手段の誤選択動作を、検出手段で修正して、正しく原稿エッジを検出することができて、原稿の罫線等の影響を受けずに、適切に原稿エッジを検出することができる。
【００２６】
また、検出手段は、選択手段により候補に選択された各グループの内、最も長く連続するグループを、確度が高いエッジ点の集合とみなし、当該最も長く連続するグループ以外のグループを、確度が低いエッジ点の集合とみなして、当該確度が低いエッジ点を破棄する構成にされてもよい。
【００２７】
第二の方向へ長く連続するエッジ点の集合ほど、当該エッジ点の集合が真に検出対象の原稿の端縁を表すエッジ点である可能性が高く、短く連続するエッジ点については、それが原稿台に載置された埃等によって生じたエッジ点である可能性が高い。
【００２８】
したがって、このように検出手段を構成して、第二の方向に最も長くエッジ点の集合を、原稿の端縁を表すエッジ点として検出するようにすれば、原稿台に載置された埃等の影響により選択手段で誤選択したエッジ点の集合を、検出手段で破棄して、正しく原稿エッジを検出することができ、埃等の影響を抑えて、適切に原稿エッジを検出することができる。
【００２９】
この他、検出手段は、近似直線算出手段と、ヒストグラムデータ生成手段と、を備えることができる。近似直線算出手段は、選択手段により候補に選択された各グループを更に細分化してなる小グループ毎に、当該小グループを構成するエッジ点の近似直線を算出する。一方、ヒストグラムデータ生成手段は、近似直線算出手段により算出された各小グループの近似直線の傾き及び切片の情報に基づき、近似直線についてのヒストグラムデータを生成する。
【００３０】
そして、検出手段は、ヒストグラムデータ生成手段により生成されたヒストグラムデータに基づき、度数の最も高い近似直線が算出された小グループの集合を、確度が高いエッジ点の集合とみなし、当該度数の最も高い近似直線が算出された小グループの集合に属さないエッジ点の集合を、確度が低いエッジ点の集合とみなして、当該確度が低いエッジ点を破棄することにより、上記特定方向に延びる原稿の端縁を表すエッジ点を検出する。
【００３１】
即ち、検出手段は、各小グループの近似直線の内、度数の最も高い近似直線に対応する小グループの集合を、原稿の端縁を表すエッジ点の集合として、検出する。
選択手段により選択されたエッジ点の集合が、真に原稿の端縁を表すエッジ点の集合である場合には、当然のことながら各小グループの近似直線の傾き及び切片は一致するはずである。換言すれば、各小グループの近似直線の傾き及び切片の類似性をヒストグラムにより評価して、度数の最も高い近似直線に対応するエッジ点の集合を、原稿の端縁を表すエッジ点として検出するようにすれば、高精度に原稿エッジを検出することができる。
【００３２】
従って、この画像読取装置によれば、選択手段で候補とするエッジ点を高速に選択しても、検出手段にて誤選択を正しく修正することができて、原稿台に載置された埃や原稿内部の罫線等による影響を極力抑え、原稿エッジを正しく検出することができる。
【００３３】
また、当該画像読取装置にて検出した原稿の端縁を表すエッジ点の情報（原稿エッジの情報）は、例えば、ＯＣＲ処理や、変倍率・傾き補正量の設定動作等に利用することができる。
【発明を実施するための最良の形態】
【００３５】
以下に本発明の実施例について、図面と共に説明する。
図１（ａ）は、本実施例のディジタル複合機１の構成を表すブロック図である。図１（ａ）に示すように、本実施例のディジタル複合機１は、画像読取部１０、読取制御部２０、印刷部３０、印刷制御部４０、表示操作部５０、通信部６０、ＣＰＵ７０、ＲＡＭ８０及びフラッシュメモリ９０を備え、フラッシュメモリ９０に記録されたプログラムに基づきＣＰＵ７０にて各種処理を実行し、装置全体を統括制御する構成にされている。
【００３６】
具体的に、画像読取部１０は、図１（ｂ）（ｃ）に示す構成にされている。図１（ｂ）（ｃ）は、画像読取部１０の構成を示した説明図である。画像読取部１０は、読取対象の原稿Ｐが載置される透明な板状の読取ガラス１１が筐体１３に支持された構成にされており、筐体１３内の読取ガラス１１下に、読取ガラス１１に写る画像を主走査方向において光学的に読み取る読取ユニット１５と、読取ユニット１５を副走査方向に搬送する搬送機構１６と、搬送機構１６を駆動するモータ１７とを備える。
【００３７】
この画像読取部１０は、読取制御部２０から入力される制御信号に従って、モータ１７の回転力により搬送機構１６を駆動し、これにより読取ユニット１５を読取ガラス１１下で副走査方向（図１（ｂ）（ｃ）に示す点線矢印方向）に搬送すると共に、搬送時において、読取ユニット１５に読取動作を実行させる。
【００３８】
尚、読取ユニット１５は、読取制御部２０に制御され、副走査方向への移動と共に、読取ガラス１１に写る画像を、ライン毎に読み取り、その読取画像を表すライン画像信号を出力するコンタクトイメージセンサ（ＣＩＳ）である。この読取ユニット１５から出力されるライン画像信号は、図示しないＡ／Ｄ変換器にてディジタルデータ（ライン画像データ）に変換され、読取制御部２０に入力される。
【００３９】
また、画像読取部１０には、周知のスキャナと同様、読取ガラス１１を被覆可能な蓋が開閉自在に設けられており（図示せず）、読取ユニット１５による読取動作の実行時には、ユーザによる手動操作により、読取ガラス１１に載置された原稿の上にかぶせられるようにして蓋が閉められる。尚、読取ガラス１１と対向する蓋の内側には、読取ユニット１５の読取結果である画像データにおいて、原稿外側領域に、黒い影が写らないように、白色部材が設けられている。
【００４０】
一方、読取制御部２０は、ＣＰＵ７０からの指令に従って読取制御処理を実行し、当該読取制御処理にて、読取ユニット１５の副走査方向への移動を制御すると共に、読取ユニット１５の読取動作を制御する。
【００４１】
この制御により、読取制御部２０は、読取ユニット１５を読取ガラス１１下で副走査方向に搬送しつつ、ＣＰＵ７０から指定された読取ガラス１１の読取領域に写る画像を、読取ユニット１５に読み取らせ、読取ガラスの読取領域に写る画像を表す画像データを、ＲＡＭ８０に記録する。このような動作により、ＲＡＭ８０には、読取ガラス１１の読取領域に載置された原稿Ｐの読取画像を表す画像データ（主走査方向及び副走査方向に画素が配列された二次元画像データ）が記録される。
【００４２】
尚、読取制御部２０は、画像読取部１０から入力される各ライン画像データを、一旦内蔵のバッファに蓄積し、各ライン画像データに対してシェーディング補正等の画像処理を実行した後、各ライン画像データを、ＲＡＭ８０に記録する。
【００４３】
この他、印刷部３０は、印刷制御部４０から入力される制御信号に従い、トレイ（図示せず）に載置された記録紙を、記録位置に搬送し、インクジェット方式やレーザプリンタ方式等の周知の記録方式で、記録紙に、制御信号に対応した画像を形成するものである。
【００４４】
また、印刷制御部４０は、印刷部３０を制御して記録紙に画像を形成するものであり、ＣＰＵ７０からの指令に従って、ＣＰＵ７０から指定された印刷対象データに基づく画像を、印刷部３０を通じて、記録紙に印刷する。
【００４５】
また、通信部６０は、外部機器と通信するためのインタフェース群からなり、ＵＳＢインタフェース、ＬＡＮインタフェース、ＦＡＸモデム等から構成されている。即ち、複合機１は、通信部６０が備えるＦＡＸモデムを通じて外部のＦＡＸ装置とＦＡＸ通信可能な構成にされ、ＵＳＢインタフェース又はＬＡＮインタフェースを通じて外部のパーソナルコンピュータと通信可能な構成にされている。
【００４６】
この他、表示操作部５０は、情報表示用の液晶ディスプレイ（図示せず）と、各種操作キーとを備え、ＣＰＵ７０に制御されて、液晶ディスプレイに、ユーザ向けの情報を表示すると共に、操作キーを通じて入力されたユーザからの指令を、ＣＰＵ７０に入力する。
【００４７】
また、ＣＰＵ７０は、プログラムの実行により、操作キーを通じて入力される指令や通信部６０を通じて外部のパーソナルコンピュータ等から入力される指令に従い、コピー機能、ＦＡＸ機能、スキャナ機能、及び、プリンタ機能等を実現する。
【００４８】
例えば、ＣＰＵ７０は、表示操作部５０に設けられた操作キーを通じてユーザからコピー指令が入力されると、複写制御処理（図３参照）を実行して装置内各部を制御し、読取ガラス１１上に載置された原稿Ｐの読取画像を、記録紙に印刷する。詳細には、読取ユニット１５による読取結果に基づいて読取ガラス１１上に載置された原稿Ｐのサイズを推定し、推定した原稿サイズと記録紙サイズとから変倍率を設定して、原稿Ｐの読取画像を、記録紙サイズに適合する大きさに拡大又は縮小し、これを、印刷部３０を通じて記録紙に印刷する（自動変倍複写処理）。
【００４９】
以下、この複写制御処理の内容について具体的に説明するが、それに先駆けては、図２を用いて本実施例の画像読取部１０の特徴について説明する。
図２は、読取ガラス１１の読取可能領域Ｒ０を示した説明図である。当該複合機１においては、一面が開口された長方体状の筐体１３の当該開口部において、長方形状のガラス板である読取ガラス１１が当該開口部を閉塞するように設けられており、読取ガラス１１の周囲が筐体１３により支持された構成にされている。
【００５０】
この読取ガラス１１は、筐体１３の上面よりも若干筐体１３の下側に設けられており、筐体１３から露出する読取ガラス１１の領域１１ａ（以下、「原稿台」と表現する。）と筐体１３との境界ＢＤには、原稿Ｐを突き当て可能に段差が形成されている（以下、筐体１３の読取ガラス１１より上方に位置する部位（上記段差を形成する部位）１３ａを「フレーム」と表現する。）。
【００５１】
また、画像読取部１０においては、読取ユニット１５のライン幅と、原稿台１１ａの大きさとの関係から、四角形状の原稿台１１ａの全領域よりも若干狭い四角形状の領域Ｒ０が、読取ユニット１５により原稿を読取可能な読取可能領域Ｒ０に定められている。具体的に、読取可能領域Ｒ０は、図２において点線で示すように、フレーム１３ａと読取ガラス１１との境界ＢＤから微小量（本実施例では３ｍｍ）離れた位置に外周を有した領域となっている。
【００５２】
また、この画像読取部１０においては、フレーム１３ａの左下部分に、原稿Ｐの角を突き当てるように指示するマークＭＫが記されている。尚、本実施例では、マークＭＫが付された原稿台１１ａの角を、「左下角」と定義して、この左下角より、主走査方向に離れた地点に位置する原稿台１１ａの角を「右下角」と定義し、左下角より、副走査方向に離れた地点に位置する原稿台１１ａの角を「左上角」と定義する。
【００５３】
即ち、複合機１においては、原稿台１１ａの左下角（換言すれば、フレーム１３ａの内側左下角）が、原稿Ｐの角を合わせるべき位置として定められ、原稿台１１ａの当該左下角から延びる左端縁及び下端縁が、原稿Ｐの辺（端縁）を合わせるべき端縁として定められており、複合機１は、ユーザが概ね、このマークＭＫに合わせて原稿Ｐを載置しているとの仮定の下で、原稿サイズの推定等を行い、原稿のコピー動作を実現する。
【００５４】
この他、本実施例の複合機１においては、このマークＭＫが付されたフレーム１３ａの内側左下角に対応する読取可能領域Ｒ０の左下角を原点、主走査方向をＸ軸、副走査方向をＹ軸としたＸＹ座標系（図２（ｂ）参照）が導入されており、ＣＰＵ７０は、このＸＹ座標系を用いて図３に示す複写制御処理を実行する。
【００５５】
続いて、ＣＰＵ７０が実行する複写制御処理について説明する。図３は、操作キーを通じてコピー指令が入力されると、ＣＰＵ７０が実行する複写制御処理を表すフローチャートである。
【００５６】
複写制御処理を開始すると、ＣＰＵ７０は、操作キーを通じて入力されたコピー指令が「自動変倍／傾き補正」コピー指令であるか否かを判断し（Ｓ１１０）、「自動変倍／傾き補正」コピー指令であると判断すると（Ｓ１１０でＹｅｓ）、Ｓ１２０にて、図４に示す自動変倍複写処理を実行する。その後、当該複写制御処理を終了する。
【００５７】
一方、操作キーを通じて入力されたコピー指令が、「自動変倍／傾き補正」コピー指令以外のコピー指令であると判断すると（例えば、自動変倍や傾き補正の指示のないノーマルなコピー指令であると判断すると）、ＣＰＵ７０は、Ｓ１３０にて、入力されたコピー指令に対応した処理を実行した後、当該複写制御処理を終了する。
【００５８】
続いて、ＣＰＵ７０がＳ１２０にて実行する自動変倍複写処理について説明する。図４は、ＣＰＵ７０が実行する自動変倍複写処理を表すフローチャートである。
ＣＰＵ７０は、Ｓ１２０にて自動変倍複写処理を開始すると、まず、原稿読取開始位置を、読取可能領域Ｒ０の下端（Ｙ＝０）に設定し、原稿読取終了位置を、設計段階で予め定められた読取可能領域Ｒ０の下端から所定距離離れた位置（Ｙ＝ＹＰＲＥ）に設定することにより、上記原稿読取開始位置から原稿読取終了位置までの領域に該当する読取可能領域Ｒ０の一部を、読取領域（換言すればプレスキャン領域）に設定し、読取制御部２０を通じて、画像読取部１０に、当該読取領域に対するプレスキャン動作を実行させる（Ｓ２１０：先端部プレスキャン処理）。
【００５９】
即ち、Ｓ２１０では、読取可能領域Ｒ０全体に対してプレスキャン動作を画像読取部１０に実行させるのではなく、読取可能領域Ｒ０の下端から読取可能領域Ｒ０内側へ所定距離離れた地点まで（本実施例では、読取可能領域Ｒ０の下端から３０ｍｍ離れた地点まで）に対し、プレスキャン動作を画像読取部１０に実行させる。これにより、ＣＰＵ７０は、プレスキャン結果として、読取可能領域Ｒ０の一部領域の読取結果を表す画像データを画像読取部１０から取得する。
【００６０】
尚、画像読取部１０は、プレスキャン動作として、設定された読取領域の端から端まで、プレスキャン用の解像度に対応する速度で、読取ユニット１５を副走査方向に搬送し、その読取領域の画像を読取ユニット１５に読み取らせ、プレスキャン結果として、低解像度の画像データ（以下、「プレスキャン画像データ」という。）を、読取制御部２０を通じて、ＲＡＭ８０に記録する動作を実行する。
【００６１】
このようにしてＳ２１０での処理を終えると、次に、ＣＰＵ７０は、ＲＡＭ８０に記録されたプレスキャン画像データに対してエッジ検出処理を実行し、この画像データに対応するエッジ画像データを生成する（Ｓ２１５）。即ち、ＲＡＭ８０に記録されたプレスキャン画像データを、エッジ検出用の画像フィルタ（周知の微分フィルタ）に通して、この画像データに対応するエッジ画像を表すエッジ画像データを生成する。
【００６２】
また、Ｓ２１５での処理を終えると、ＣＰＵ７０は、上記生成したエッジ画像データを、検査対象データに設定して、図５に示す原稿推定処理を実行する（Ｓ２２０）。詳細は後述するが、この原稿推定処理では、検査対象データ（Ｓ２１５で得られたエッジ画像データ）を解析して、原稿エッジを検出し、この検出結果から、原稿台１１ａに載置された原稿のサイズ（縦幅及び横幅）、及び、原稿の傾き角θ、及び、原稿台１１ａにおける原稿の載置領域を推定する。
【００６３】
そして、Ｓ２２０での処理を終えると、ＣＰＵ７０は、印刷制御部４０を通じて、印刷部３０に給紙動作を実行させると共に（Ｓ２３０）、給紙動作の対象となった記録紙のサイズを検出する（Ｓ２４０）。その後、Ｓ２５１に移行する。尚、記録紙のサイズは、例えば、記録紙の搬送路に設けられたセンサを用いて周知の手法で検出することができる。
【００６４】
また、Ｓ２５１に移行すると、ＣＰＵ７０は、Ｓ２２０で推定された原稿サイズ及びＳ２４０で検出された記録紙サイズに基づき、予め定められた計算式に従って変倍率を設定する。具体的には、変倍率を、原稿サイズと記録紙サイズとの比（例えば、記録紙短辺長さ÷原稿短辺長さ）に対応した倍率に設定し、後続の処理で、原稿のコピー画像が、原稿サイズとの記録紙サイズの比に対応した倍率で拡大（倍率が１未満の場合には縮小）されて記録紙に印刷されるようにする。
【００６５】
また、この処理を終えると、ＣＰＵ７０は、Ｓ２２０で推定された原稿の傾き角θから、画像データの傾き補正量を設定する（Ｓ２５３）。具体的には、原稿のコピー画像が、傾きのない状態でまっすぐ、記録紙に印刷されるように、傾き補正量を設定する。但し、推定された原稿の傾き角θが微小量（本実施例では−０．５度≦θ≦０．５度）である場合には、誤差も考慮して、傾き補正量をゼロに設定する。
【００６６】
Ｓ２５３での処理を終えると、ＣＰＵ７０は、Ｓ２２０で推定された原稿の載置領域の情報に基づいて、原稿読取開始位置及び原稿読取終了位置を設定し、原稿読取開始位置及び原稿読取終了位置で定められる読取領域を、原稿台１１ａにおける原稿の載置領域に対応させる（Ｓ２５５）。
【００６７】
具体的には、原稿の載置領域全体を読取ユニット１５が読み取ることができるように、原稿読取開始位置を、副走査方向において最も下側に位置する原稿の端点に対応した位置に設定し、原稿読取終了位置を、副走査方向において最も上側に位置する原稿の端点に対応した位置に設定して、読取領域を原稿台１１ａにおける原稿の載置領域に対応させる。また、この処理を終えると、Ｓ２７０に移行する。
【００６８】
また、Ｓ２７０に移行すると、ＣＰＵ７０は、読取制御部２０を通じて画像読取部１０を制御することで、画像読取部１０に、読取ユニット１５を原稿読取開始位置から原稿読取終了位置まで副走査方向に搬送させると共に、当該搬送中にはライン毎の読取動作を読取ユニット１５に実行させて、上記設定した読取領域の画像を、読取ユニット１５に読み取らせ、当該読取領域の読取結果を表す画像データが、ＲＡＭ８０に記録されるようにする（Ｓ２７０）。
【００６９】
また、この処理を終えると、ＣＰＵ７０は、ＲＡＭ８０に記録された上記読取結果を表す画像データを、予め設定された変倍率で拡大又は縮小処理すると共に、予め設定された傾き補正量分、回転処理して、上記読取結果を表す画像データを、印刷用の画像データに変換し、変換後の画像データを、印刷対象データに設定する（Ｓ２８０）。但し、傾き補正量がゼロに設定されている場合には、Ｓ２８０において、回転処理を、実行しないものとする。
【００７０】
また、Ｓ２８０での処理を終えると、ＣＰＵ７０は、当該印刷対象データについての印刷処理を実行する（Ｓ２９０）。即ち、印刷制御部４０を通じて、印刷部３０に印刷対象データに基づく画像を、給紙した記録紙に印刷させる。その後、当該複写制御処理を終了する。
【００７１】
このようにして、自動変倍複写処理では、読取可能領域Ｒ０における一部領域のプレスキャン結果から、原稿エッジを検出して、原稿サイズ等を推定し、その結果から、本スキャン時（Ｓ２７０実行時）の読取領域を決定すると共に、変倍率及び傾き補正量を決定する。そして、原稿のコピー画像を、原稿サイズと記録紙サイズとの比に対応する大きさに、拡大又は縮小すると共に、傾き補正して、記録紙に印刷する。
【００７２】
続いて、図５を用いて、ＣＰＵ７０が、Ｓ２２０で実行する原稿推定処理について説明する。図５は、ＣＰＵ７０が実行する原稿推定処理を表すフローチャートである。
この原稿推定処理を開始すると、ＣＰＵ７０は、まず、変数Ｓを上述のプレスキャン領域上端のＹ座標であるＹＰＲＥに設定することにより（Ｓ＝ＹＰＲＥ）、Ｙ軸方向の検査範囲を、Ｙ＝０からＹ＝Ｓ＝ＹＰＲＥに設定する（Ｓ４１０）。また、この処理を終えると、Ｓ４２０に移行し、右エッジ検出処理を実行する。図６は、ＣＰＵ７０が実行する右エッジ検出処理を表すフローチャートである。
【００７３】
右エッジ検出処理を開始すると、ＣＰＵ７０は、まずＳ５１０にて、副走査方向検査位置Ｙｅを、読取可能領域Ｒ０の下端Ｙ座標に設定し（Ｙｅ＝０）、Ｓ５１５にて、主走査方向検査位置Ｘｅを、読取可能領域Ｒ０の右端Ｘ座標に設定する（Ｘｅ＝ＸＭＡＸ）。また、Ｓ５１５では、変数Ｃを値ゼロに初期化する（Ｃ＝０）。その後、副走査方向検査位置Ｙｅから副走査（Ｙ軸）方向に８画素進んだ地点（Ｙｅ＋８）が検査範囲を超えているか否かを判断する（Ｓ５２０）。具体的には、Ｙｅ＋８＞Ｓであるか否かを判断する。
【００７４】
そして、Ｙｅ＋８＞Ｓではないと判断すると（Ｓ５２０でＮｏ）、ＣＰＵ７０は、主走査方向検査位置Ｘｅ及び副走査方向検査位置Ｙｅで定まる検査位置（Ｘ，Ｙ）＝（Ｘｅ，Ｙｅ）に対応する検査対象データの画素値を参照することにより、検査位置（Ｘｅ，Ｙｅ）がエッジ点であるか否かを判断する（Ｓ５２５）。尚、図７は、エッジ画像データの構成を抜粋して示し、更に、右エッジ検出処理により追跡するエッジ点の軌跡を表した説明図である。図７に示す例では、画素値「１」の地点がエッジ点に該当する。
【００７５】
そして、検査位置（Ｘｅ，Ｙｅ）がエッジ点ではないと判断すると（Ｓ５２５でＮｏ）、ＣＰＵ７０は、Ｓ５４１に移行して、主走査方向検査位置Ｘｅを、Ｘ軸マイナス方向に１画素移動した位置に更新し（Ｘｅ←Ｘｅ−１）、更新後の主走査方向検査位置Ｘｅが読取可能領域Ｒ０の左端を、はみ出ていないかどうかを判断する。具体的には、Ｘｅ＜０であるか否かを判断する（Ｓ５４３）。
【００７６】
そして、主走査方向検査位置Ｘｅが、読取可能領域Ｒ０の左端をはみ出ていないと判断すると（Ｓ５４３でＮｏ）、ＣＰＵ７０は、Ｓ５２０に移行する。
一方、Ｓ５４３において、主走査方向検査位置Ｘｅが読取可能領域Ｒ０の左端をはみ出ていると判断すると（Ｘｅ＜０であると判断すると）、ＣＰＵ７０は、Ｓ５４５に移行し、主走査方向検査位置Ｘｅを、読取可能領域Ｒ０の右端（ＸＭＡＸ）に設定すると共に（Ｘｅ＝ＸＭＡＸ）、副走査方向検査位置Ｙｅを、現在値Ｙｅに８加えた値に更新する（Ｙｅ←Ｙｅ＋８）。即ち、副走査方向検査位置Ｙｅを、Ｙ軸方向に８画素進んだ位置に設定する。その後、Ｓ５２０に移行して、上述の処理を実行する。
【００７７】
また、検査位置（Ｘｅ，Ｙｅ）がエッジ点であると判断すると（Ｓ５２５でＹｅｓ）、ＣＰＵ７０は、Ｓ５３０に移行し、変数（Ｘ０，Ｙ０）に、現在の検査位置（Ｘｅ，Ｙｅ）の座標値を、設定する（Ｘ０←Ｘｅ，Ｙ０←Ｙｅ）。また、変数Ｙ１を、座標Ｙ＝Ｙ０からＹ軸方向に８画素進んだ座標値Ｙ１（＝Ｙ０＋８）に更新する（Ｓ５３３）。
【００７８】
その後、座標（Ｘ０−１，Ｙ１）の地点、座標（Ｘ０，Ｙ１）の地点及び座標（Ｘ０＋１，Ｙ１）の地点の少なくとも一つが、エッジ点であるか否かを判断し（Ｓ５３７）、座標（Ｘ０−１，Ｙ１）の地点、座標（Ｘ０，Ｙ１）の地点及び座標（Ｘ０＋１，Ｙ１）の地点のいずれもがエッジ点でない場合には（Ｓ５３７でＮｏ）、Ｓ５３９に移行して、変数Ｃが値８以上であるか否かを判断する。そして、変数Ｃが値８未満であると判断すると（Ｓ５３９でＮｏ）、Ｓ５４１に移行して、主走査方向検査位置Ｘｅを、Ｘ軸マイナス方向に１画素移動した位置に更新する（Ｘｅ←Ｘｅ−１）。
【００７９】
一方、座標（Ｘ０−１，Ｙ１）の地点、座標（Ｘ０，Ｙ１）の地点及び座標（Ｘ０＋１，Ｙ１）の地点の少なくとも一つがエッジ点であると判断した場合には（Ｓ５３７でＹｅｓ）、Ｓ５５０に移行して、座標（Ｘ０，Ｙ０）の地点が連続性のあるエッジ点であると判定し、この座標（Ｘ０，Ｙ０）を、連続性のあるエッジ点の座標データとして、一時記憶する。
【００８０】
また、この処理を終えると、ＣＰＵ７０は、Ｓ５６０に移行し、座標（Ｘ０−１，Ｙ１）の地点、座標（Ｘ０，Ｙ１）の地点及び座標（Ｘ０＋１，Ｙ１）の地点の内、エッジ点である地点の一つを、予め定められた優先度に従って選択する。
【００８１】
具体的に、右エッジ検出処理においては、読取可能領域Ｒ０右端側に近い座標ほど高い優先度が設定されている。即ち、読取可能領域Ｒ０右端側に近い座標（Ｘ０＋１，Ｙ１）の地点が優先度「大」に設定され、座標（Ｘ０，Ｙ１）の地点が優先度「中」に設定され、座標（Ｘ０−１，Ｙ１）の地点が優先度「小」に設定されている。
【００８２】
このように優先度が設定されているのは、原稿の右端より右側においては、原稿台１１ａに何も存在せず、エッジ点は存在しないはずであり、読取可能領域Ｒ０右端側に近いエッジ点であるほど、そのエッジ点が原稿の右端に対応するエッジ点である可能性が高いためである。
【００８３】
即ち、Ｓ５６０では、上記優先度に従って、座標（Ｘ０−１，Ｙ１）の地点、座標（Ｘ０，Ｙ１）の地点、及び、座標（Ｘ０＋１，Ｙ１）の地点の内、エッジ点である地点であって優先度の最も高い地点を選択する。そして、変数Ｘ０を、選択した地点のＸ座標に更新し、変数Ｙ０を、選択した地点のＹ座標に更新する。その後、変数Ｃを１加算した値に更新する（Ｓ５６３）。
【００８４】
また、この処理を終えると、ＣＰＵ７０は、更新後の変数Ｃが値８以上であるか否かを判断し（Ｓ５６７）、Ｃ≧８ではないと判断すると（Ｓ５６７でＮｏ）、Ｓ５８０に移行して、座標Ｙ＝Ｙ０からＹ軸方向に８画素進んだ地点（Ｙ０＋８）が検査範囲を超えているか否かを判断する。具体的には、Ｙ０＋８＞Ｓであるか否かを判断する。
【００８５】
そして、Ｙ０＋８＞Ｓではないと判断すると（Ｓ５８０でＮｏ）、Ｓ５３３に移行して、変数Ｙ１を、座標Ｙ＝Ｙ０からＹ軸方向に８画素進んだ地点のＹ座標に更新する（Ｙ１＝Ｙ０＋８）。その後、Ｓ５３７以降の処理を実行する。
【００８６】
ＣＰＵ７０は、このような処理を繰返し実行することにより、図７に示すように、Ｙ軸方向に８画素おきに、エッジ点がＹ軸方向に連続するものであるか否かを検査する。そして、変数Ｃが８以上となると、Ｓ５６７でＹｅｓと判断して、連続性のあるエッジ点として判定した座標データを、原稿右エッジデータとしてＲＡＭ８０に記憶する（Ｓ５７０，Ｓ５７５）。
【００８７】
具体的に、Ｃ＝８である場合には、Ｓ５６９でＹｅｓと判断して、Ｃ＝８となるまでにＳ５５０の処理で連続性のあるエッジ点として判定した計８地点の各座標データを、原稿右エッジデータとしてＲＡＭ８０に記憶する（Ｓ５７０）。一方、Ｃ＞８である場合には、Ｓ５６９でＮｏと判断して、Ｓ５７５に移行し、直前のＳ５５０の処理で連続性のあるエッジ点として判定した地点の座標データを、原稿右エッジデータとしてＲＡＭ８０に記憶する。その後、Ｓ５８０に移行する。
【００８８】
このようにして、ＣＰＵ７０は、検査位置（Ｘｅ，Ｙｅ）からＹ軸方向に８点以上連続するエッジ点については、その連続性が途切れるか（Ｓ５３７でＮｏ）、Ｙ軸方向末端まで画素値を参照するまで（Ｓ５８０でＹｅｓ）、Ｙ軸方向に画素値を参照して、連続するエッジ点を順次ＲＡＭ８０に記録する。
【００８９】
そして、連続性が途切れることで、Ｓ５３７でＮｏと判断した場合には、Ｓ５３９に移行し、Ｃ≧８であると判断して（Ｓ５３９でＹｅｓ）、Ｓ５４７で、副走査方向検査位置Ｙｅを、変数Ｙ０の値に設定する（Ｙｅ＝Ｙ０）。即ち、副走査方向検査位置Ｙｅを、エッジ点の連続性が途切れた地点に対応するＹ座標値に設定する。
【００９０】
また、Ｓ５４７での処理を終えると、ＣＰＵ７０は、連続性が途切れた地点をマーキングするために、特定のコード（以下、「区分けコード）と称する。）を、原稿右エッジデータに追加する（Ｓ５４９）。具体的には、最後に記録した連続性が途切れる直前のエッジ点の座標データに続けるようにして、区分けコードを追加する。このような区分けコードを用いて、本実施例では、Ｙ軸方向に連続するエッジ点の集合を、グループ化して、原稿右エッジデータに登録する。即ち、当該右エッジ検出処理においては、Ｙ軸方向に連続するエッジ点の座標データを、Ｙ座標値最小の座標データから、連続性が途切れる地点で区分けコードを挟んで、順に配列することで、連続するエッジ点の集合を区分けコードで区分けして、原稿右エッジデータを構築する。
【００９１】
また、Ｓ５４９での処理を終えると、ＣＰＵ７０は、Ｓ５１５に移行し、主走査方向検査位置Ｘｅを、読取可能領域Ｒ０の右端（ＸＭＡＸ）に設定することで、検査位置（Ｘｅ，Ｙｅ）を、連続性が途切れた地点に対応する画像データの右端に、再設定する。また、同時に、変数Ｃを、Ｃ＝０に初期化する。その後、Ｓ５２０以降の処理を実行する。
【００９２】
一方、連続性が途切れずに、Ｙ０＋８＞Ｓとなると（Ｓ５８０でＹｅｓ）、ＣＰＵ７０は、Ｓ５９０に移行し、Ｓ５７０，Ｓ５７５で原稿右エッジデータとして記録した座標データ群の中から、右エッジ（原稿の右端を表すエッジ点）として確度の低い座標データを削除して、原稿右エッジデータを確定する。尚、Ｙｅ＋８＞Ｓとなった場合にも（Ｓ５２０でＹｅｓ）、Ｓ５９０に移行して、同様に原稿右エッジデータを確定する。
【００９３】
具体的に、Ｓ５９０では、原稿右エッジデータを処理対象データに設定して、図８に示す第一エッジ確定処理を実行することで、右エッジとして確度の低い座標データ群を原稿右エッジデータから削除し、原稿右エッジデータを確定する。図８は、ＣＰＵ７０が実行する第一エッジ確定処理を表すフローチャートである。
【００９４】
第一エッジ確定処理を開始すると、ＣＰＵ７０は、予め設定された処理対象データが、少なくとも８つ以上のエッジ点の座標データを含むものであるか否かを判断し（Ｓ６１０）、処理対象データが８つ以上のエッジ点の座標データを含むものであると判断すると（Ｓ６１０でＹｅｓ）、Ｓ６２０に移行し、処理対象データが８つ以上のエッジ点の座標データを含むものではない（換言すれば処理対象データが空データである）と判断すると（Ｓ６１０でＮｏ）、Ｓ６２０〜Ｓ６９０の処理を実行することなく、当該第一エッジ確定処理を終了する。
【００９５】
一方、Ｓ６２０に移行すると、ＣＰＵ７０は、処理対象データを構成するエッジ点の座標データに基づき、処理対象データに登録されたエッジ点であって、Ｙ座標値が最大のエッジ点を、検査開始点に設定する。
【００９６】
また、Ｓ６２０での処理を終えると、ＣＰＵ７０は、Ｓ６３０に移行し、検査開始点からＹ軸マイナス方向に、処理対象データに登録されたエッジ点を辿り、連続するエッジ点の当該連続性が途切れる地点を探索する。上述したように、処理対象データに設定される原稿右エッジデータ及び原稿左エッジデータにおいては、エッジ点の座標データが、Ｙ座標値最小のエッジ点の座標データから、途中区分けコードを挟んで、順に配列される。従って、Ｓ６３０では、処理対象データを、検査開始点に対応するエッジ点の座標データから、Ｙ軸マイナス方向に遡るようにして参照して、最初に現れる区分けコードを検出する。
【００９７】
そして、区分けコードを検出できた場合には、連続性が途切れる地点があると判断して（Ｓ６４０でＹｅｓ）、Ｓ６５０に移行する。
一方、区分けコードを検出できなかった場合には、連続性が途切れる地点がないと判断して（Ｓ６４０でＮｏ）、Ｓ６５０〜Ｓ６９０の処理を実行することなく、当該第一エッジ確定処理を終了する。このようにして、Ｓ６４０でＮｏと判断した場合には、処理対象データに登録されているエッジ点の全てが、原稿の端縁を表すエッジ点として確度の高いエッジ点であると取扱って、処理対象データに登録されたエッジ点を削除することなく、原稿エッジを確定し、第一エッジ確定処理を終了する。
【００９８】
これに対し、Ｓ６５０に移行すると、ＣＰＵ７０は、連続性が途切れる地点直前のエッジ点（換言すると、連続性が途切れる地点よりＹ軸プラス方向に位置するエッジ点であってＹ座標値最小のエッジ点）に対し、Ｙ軸マイナス方向側で隣接するエッジ点の座標データが、処理対象データに含まれているか否かを判断する。
【００９９】
ここでは、連続性が途切れる地点直前のエッジ点の画素位置（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）に対して、Ｙ座標値がＹ＝Ｙ０−８を採るエッジ点の当該座標データが、処理対象データに含まれている場合には、Ｙ軸マイナス方向側で隣接するエッジ点の座標データが、処理対象データに含まれていると判断し、Ｙ座標値がＹ＝Ｙ０−８を採るエッジ点の当該座標データが、処理対象データに含まれていない場合には、Ｙ軸マイナス方向側で隣接するエッジ点の座標データが、処理対象データに含まれていないと判断する。これにより、Ｙ軸のみの一次元空間上で、連続性が途切れる地点を挟んで、隣接するエッジ点の有無を判断する。
【０１００】
そして、連続性が途切れる地点直前のエッジ点に対し、Ｙ軸マイナス方向側で隣接するエッジ点の座標データが、処理対象データに含まれていると判断すると（Ｓ６５０でＹｅｓ）、ＣＰＵ７０は、Ｓ６６０に移行する。一方、Ｙ軸マイナス方向側で隣接するエッジ点の座標データが、処理対象データに含まれていないと判断すると（Ｓ６５０でＮｏ）、Ｓ６９０に移行する。
【０１０１】
また、Ｓ６６０に移行すると、ＣＰＵ７０は、連続性が途切れる地点を挟んで、隣接するエッジ点のＸ軸方向の乖離度を算出する。具体的には、連続性が途切れる地点直前のエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）であり、このエッジ点に隣接するエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ１，Ｙ０−８）であるとすると、上記乖離度として、これら２つのエッジ点のＸ座標値の差δＸ＝｜Ｘ０−Ｘ１｜を算出する。
【０１０２】
また、この処理を終えると、ＣＰＵ７０は、差δＸが、予め設計段階で定められた閾値未満であるか否かを判断し（Ｓ６７０）、閾値未満であると判断すると（Ｓ６７０でＹｅｓ）、検査開始点を、上記連続性が途切れる地点直前のエッジ点に隣接するエッジ点（Ｘ１，Ｙ０−８）に更新する（Ｓ６８０）。その後、Ｓ６３０に移行する。
【０１０３】
一方、差δＸが、閾値以上であると判断すると（Ｓ６７０でＮｏ）、ＣＰＵ７０は、上記連続性が途切れる地点よりＹ軸マイナス方向に位置するエッジ点については、原稿エッジ（原稿の端縁を表すエッジ点）としての確度が低いと判断して、Ｓ６９０に移行し、上記連続性が途切れる地点よりＹ軸マイナス方向に位置するエッジ点の座標データを、全て処理対象データから削除して、処理対象データを更新する。
【０１０４】
例えば、直前のＳ６３０で検出した連続性が途切れる地点直前のエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）である場合には、Ｙ座標値がＹ０未満のエッジ点の座標データを全て処理対象データから削除して、処理対象データを更新する。その後、当該第一エッジ確定処理を終了する。第一エッジ確定処理では、このようにして、処理対象データを構成するエッジ点の座標データの内、原稿エッジとして確度の低い座標データを削除する。
【０１０５】
即ち、右エッジ検出処理のＳ５９０では、このようにして、原稿右エッジデータから右エッジとして確度の低いエッジ点の座標データを削除し、原稿右エッジデータを確定する。尚、図９は、Ｓ５９０における原稿右エッジデータの確定手法を示した説明図であり、δＸの算出手法を視覚的に表した説明図である。
【０１０６】
Ｓ５９０で、上述のようにして、Ｙ座標値が大きいエッジ点程、エッジ点が原稿の右端を表すエッジ点（右エッジ）である確度が高いと取り扱い、Ｙ座標値が大きいエッジ点群からＸ軸方向に大きくずれた位置に存在するＹ座標値が小さいエッジ点群を、原稿右エッジデータから削除する理由は、右エッジ検出処理にて、Ｙｅ＝０から順に検査位置（Ｘｅ，Ｙｅ）をずらして原稿の右端を表すエッジ点を検索すると、原稿が左側に傾いている場合には、原稿の右端ではなく、図９に示すように、原稿内部に描写された罫線等に対応するエッジ点を、原稿の右端を表すエッジ点として誤検出してしまう可能性があるためである。
【０１０７】
このような誤検出は、原稿台１１ａの下端寄りに位置するＹ座標値が小さいエッジ点群において発生している可能性が高く、原稿台１１ａの中央寄りに位置するＹ座標値が大きいエッジ点群において発生している可能性は、小さい。このような理由から、Ｓ５９０では、Ｙ座標値が大きいエッジ点程、エッジ点が原稿の右端を表すエッジ点（右エッジ）である確度が高いと取り扱って、Ｙ座標値が大きいエッジ点を基準に、これから大きく乖離したエッジ点を確度の低いエッジ点とみなして原稿右エッジデータから削除し、原稿右エッジデータを確定するようにしている。
【０１０８】
また、このようにしてＳ５９０での処理を終えると、ＣＰＵ７０は、Ｓ４２０での右エッジ検出処理を終了して、Ｓ４３０に移行し、Ｓ４３０では、直前の右エッジ検出処理で右エッジの検出に失敗したか否かを判断する。具体的には、直前の右エッジ検出処理で原稿右エッジデータとして登録された座標データがない場合、右エッジの検出に失敗したと判断し、原稿右エッジデータとして登録された座標データがある場合には、右エッジの検出に成功したと判断する。
【０１０９】
但し、例外的に、原稿右エッジデータとして登録された座標データが読取可能領域Ｒ０の左端（Ｙ＝０）近傍にある場合には、左エッジ（原稿の左端を表すエッジ点）の座標データが間違って原稿右エッジデータとして登録されているとみなして、原稿右エッジデータとして登録された座標データがある場合でも、右エッジの検出に失敗したと判断してもよい。
【０１１０】
尚、右エッジの検出に失敗するケースとしては、原稿サイズが原稿台１１ａのサイズより大きく、原稿の右端が原稿台１１ａからはみ出しているケースなどを挙げることができる。
【０１１１】
そして、右エッジの検出に失敗したと判断すると（Ｓ４３０でＹｅｓ）、ＣＰＵ７０は、Ｓ４３１に移行し、エラー処理を実行する。例えば、複合機１は、Ｓ４３１におけるエラー処理として、『原稿を正しく載置するか、自動変倍複写機能は使用できないので他のコピー指令を入力するように促すメッセージを表示操作部５０のディスプレイに表示した後、Ｓ４３１を実行するに至ったコピー指令に対応する当該複写制御処理を強制終了して、当該コピー指令を無効にする』処理を実行する構成にすることができる。
【０１１２】
この他、複合機１は、Ｓ４３１におけるエラー処理として、『原稿台１１ａに載置された原稿のサイズを、予め定められた固定サイズであると形式的に推定すると共に、原稿の傾き角θをゼロと推定し、更に、原稿の載置領域を、上記推定したサイズの原稿の左下角が原稿台１１ａの左下角に正しく突き当てられていると仮定したときに原稿が載置される領域に推定する』処理を実行し、その後、当該原稿推定処理を終了して、Ｓ２３０に移行する構成にされてもよい。
【０１１３】
一方、Ｓ４３０において右エッジの検出に成功したと判断すると（Ｓ４３０でＮｏ）、ＣＰＵ７０は、Ｓ４３３に移行し、右エッジ検出処理で確定された原稿右エッジデータが示す各点を直線近似して、原稿右エッジデータが示す点群の近似直線（以下、「右エッジ近似直線」と表現する。）を算出する。
【０１１４】
また、この処理を終えると、ＣＰＵ７０は、Ｓ４４０に移行して、右エッジ近似直線がＹ軸に対し所定角度より大きく傾いているか否かを判断する。本実施例では、具体的に、右エッジ近似直線がＹ軸に対し０．５度より大きく傾いているか否かを判断する。
【０１１５】
そして、右エッジ近似直線の傾きが上記所定角度以下であると判断すると（Ｓ４４０でＮｏ）、ＣＰＵ７０は、原稿がフレーム１３ａの内側左下角に突き当てられて原稿台１１ａに正しく載置されていると推定して、図５右図に示すように、右エッジ近似直線と原稿台１１ａ下端縁との交点を、原稿の右下角位置であると推定する（Ｓ４４１）。
【０１１６】
また、この処理を終えると、ＣＰＵ７０は、原稿の左下角位置が原稿台１１ａの左下角の地点であると推定し（Ｓ４４３）、Ｓ４４１及びＳ４４３で推定した角位置の位置座標に基づき、原稿台１１ａに載置されている原稿が四角形状の定型用紙であるとの仮定の下で、原稿台１１ａに載置された原稿のサイズ及び原稿台１１ａにおける原稿の載置領域を推定すると共に、原稿の傾き角θを推定する（Ｓ４４５）。
【０１１７】
具体的には、Ｓ４４１及びＳ４４３で推定した原稿の左下角位置から右下角位置までの長さを、原稿の短辺長さ（横幅）と推定し、この短辺長さの√２倍を、原稿の長辺長さ（縦幅）と推定して、原稿サイズを推定すると共に、上記推定した左下角位置及び右下角位置を起点に上記原稿サイズの原稿が原稿台１１ａに載置されているものとして、原稿の左上角及び右上角が位置する座標を導出し、これら４つの角を結んでできる四角形内の領域を、原稿の載置領域であると推定する。尚、ここで原稿短辺長さの√２倍を、原稿の長辺長さとして推定しているのは、定型用紙の短辺長さ：長辺長さの比が１：√２となっているためである。
【０１１８】
また、Ｓ４４１，Ｓ４４３では、原稿が原稿台１１ａの左下角に正確に突き当てられて原稿台１１ａに載置されていると仮定して角位置を求めているので、Ｓ４４５では、原稿の傾き角θがゼロである（傾きがない）と推定する。
【０１１９】
このようにして、Ｓ４４５での処理を終えると、ＣＰＵ７０は、当該原稿推定処理（Ｓ２２０）を終えて、Ｓ２３０に移行し、上述したようにして、後続の処理を実行する。即ち、原稿推定処理で推定した原稿サイズ、原稿の傾き角、原稿の載置領域の情報を基に、変倍率及び傾き補正量を設定し（Ｓ２５１，Ｓ２５３）、更に読取領域を設定する（Ｓ２５５）。その後、本スキャンに移行して（Ｓ２７０）、コピー動作を実現する。但し、ここでは、原稿の傾き角θがゼロと推定されるので、傾き補正は実質実行されない。
【０１２０】
話を原稿推定処理のＳ４４０（図５参照）に戻すと、ＣＰＵ７０は、ここで、右エッジ近似直線がＹ軸に対し所定角度より大きく傾いていると判断した場合（Ｓ４４０でＹｅｓ）、Ｓ４５０に移行して、図１０に示す左エッジ検出処理を実行する。図１０は、ＣＰＵ７０が実行する左エッジ検出処理を表すフローチャートである。
【０１２１】
左エッジ検出処理を開始すると、ＣＰＵ７０は、Ｓ７１０にて、副走査方向検査位置Ｙｅ＝０に設定し、Ｓ７１５にて、主走査方向検査位置Ｘｅを、読取可能領域Ｒ０の左端Ｘ座標に設定する（Ｘｅ＝０）。また、Ｓ７１５では、変数Ｃを値ゼロに初期化する（Ｃ＝０）。
【０１２２】
その後、副走査方向検査位置ＹｅからＹ軸方向に８画素進んだ地点（Ｙｅ＋８）が検査範囲を超えているか否かを判断し（Ｓ７２０）、検査範囲を超えていないと判断すると（Ｓ７２０でＮｏ）、検査位置（Ｘ，Ｙ）＝（Ｘｅ，Ｙｅ）に対応する検査対象データの画素値を参照して、検査位置（Ｘｅ，Ｙｅ）がエッジ点であるか否かを判断する（Ｓ７２５）。
【０１２３】
そして、検査位置（Ｘｅ，Ｙｅ）がエッジ点ではないと判断すると（Ｓ７２５でＮｏ）、Ｓ７４１に移行し、主走査方向検査位置Ｘｅを、Ｘ軸プラス方向に１画素移動した地点に更新し（Ｘｅ←Ｘｅ＋１）、更新した主走査方向検査位置Ｘｅが、読取可能領域Ｒ０の右端を、はみ出ていないかどうかを判断する（Ｓ７４３）。具体的には、Ｘｅ＞ＸＭＡＸであるか否かを判断する（Ｓ７４３）。そして、主走査方向検査位置Ｘｅが、読取可能領域Ｒ０の右端をはみ出ていないと判断すると（Ｓ７４３でＮｏ）、Ｓ７２０に移行する。
【０１２４】
一方、Ｓ７４３で主走査方向検査位置Ｘｅが読取可能領域Ｒ０の右端をはみ出ていると判断すると（Ｘｅ＞ＸＭＡＸであると判断すると）、ＣＰＵ７０は、Ｓ７４５に移行し、主走査方向検査位置Ｘｅを、読取可能領域Ｒ０の左端に設定すると共に（Ｘｅ＝０）、副走査方向検査位置Ｙｅを、Ｙ軸方向に８画素進んだ位置に設定する（Ｙｅ←Ｙｅ＋８）。その後、Ｓ７２０に移行する。
【０１２５】
また、検査位置（Ｘｅ，Ｙｅ）がエッジ点であると判断すると（Ｓ７２５でＹｅｓ）、ＣＰＵ７０は、Ｓ７３０に移行して、変数（Ｘ０，Ｙ０）に、現在の検査位置（Ｘｅ，Ｙｅ）の座標値を設定する（Ｘ０←Ｘｅ，Ｙ０←Ｙｅ）と共に、変数Ｙ１を、値Ｙ１＝Ｙ０＋８に更新する（Ｓ７３３）。
【０１２６】
その後、座標（Ｘ０−１，Ｙ１）の地点、座標（Ｘ０，Ｙ１）の地点及び座標（Ｘ０＋１，Ｙ１）の地点の少なくとも一つが、エッジ点であるか否かを判断し（Ｓ７３７）、座標（Ｘ０−１，Ｙ１）の地点、座標（Ｘ０，Ｙ１）の地点及び座標（Ｘ０＋１，Ｙ１）の地点のいずれもがエッジ点でない場合には（Ｓ７３７でＮｏ）、Ｓ７３９に移行して、変数Ｃが値８以上であるか否かを判断し、変数Ｃが値８未満であると判断すると（Ｓ７３９でＮｏ）、Ｓ７４１に移行する。
【０１２７】
一方、座標（Ｘ０−１，Ｙ１）の地点、座標（Ｘ０，Ｙ１）の地点及び座標（Ｘ０＋１，Ｙ１）の地点の少なくとも一つがエッジ点であると判断した場合には（Ｓ７３７でＹｅｓ）、Ｓ７５０に移行して、座標（Ｘ０，Ｙ０）の地点が連続性のあるエッジ点であると判定し、この座標（Ｘ０，Ｙ０）を、連続性のあるエッジ点の座標データとして、一時記憶する。
【０１２８】
また、この処理を終えると、ＣＰＵ７０は、Ｓ７６０に移行し、座標（Ｘ０−１，Ｙ１）の地点、座標（Ｘ０，Ｙ１）の地点及び座標（Ｘ０＋１，Ｙ１）の地点の内、エッジ点である地点の一つを、予め定められた優先度に従って選択する。
【０１２９】
具体的に、左エッジ検出処理においては、読取可能領域Ｒ０左端側に近い座標ほど高い優先度が設定されている。即ち、読取可能領域Ｒ０左端側に近い座標（Ｘ０−１，Ｙ１）の地点が優先度「大」に設定され、座標（Ｘ０，Ｙ１）の地点が優先度「中」に設定され、座標（Ｘ０＋１，Ｙ１）の地点が優先度「小」に設定されている。このように優先度が設定されているのは、原稿の左端より左側においては、原稿台１１ａに何も存在せず、エッジ点は存在しないはずであり、読取可能領域Ｒ０左端側に近いエッジ点であるほど、そのエッジ点が原稿の左端に対応するエッジ点である可能性が高いためである。
【０１３０】
従って、Ｓ７６０では、この優先度に従って、座標（Ｘ０−１，Ｙ１）の地点、座標（Ｘ０，Ｙ１）の地点、及び、座標（Ｘ０＋１，Ｙ１）の地点の内、エッジ点である地点であって優先度の最も高い地点を選択する。そして、変数Ｘ０を、選択した地点のＸ座標に更新し、変数Ｙ０を、選択した地点のＹ座標に更新する。その後、変数Ｃを１加算した値に更新する（Ｓ７６３）。
【０１３１】
また、この処理を終えると、ＣＰＵ７０は、更新後の変数Ｃが値８以上であるか否かを判断し（Ｓ７６７）、Ｃ≧８でないと判断すると（Ｓ７６７でＮｏ）、Ｓ７８０に移行して、座標Ｙ＝Ｙ０からＹ軸方向に８画素進んだ地点（Ｙ０＋８）が検査範囲を超えているか否かを判断する。具体的には、Ｙ０＋８＞Ｓであるか否かを判断する。
【０１３２】
そして、Ｙ０＋８＞Ｓではないと判断すると（Ｓ７８０でＮｏ）、Ｓ７３３に移行して、変数Ｙ１を、Ｙ１＝Ｙ０＋８に更新する。その後、Ｓ７３７以降の処理を実行する。
このような処理手順により、ＣＰＵ７０は、右エッジ検出処理と同様（図７参照）、Ｙ軸方向に８画素おきに、エッジ点がＹ軸方向に連続するものであるか否かを検査する。そして、変数Ｃが８以上となると、Ｓ７６７でＹｅｓと判断して、連続性のあるエッジ点として判定した座標データを、原稿左エッジデータとしてＲＡＭ８０に記憶する（Ｓ７７０，Ｓ７７５）。
【０１３３】
具体的に、Ｃ＝８である場合には、Ｓ７６９でＹｅｓと判断して、Ｃ＝８となるまでにＳ７５０の処理で連続性のあるエッジ点として判定した計８地点の各座標データを、原稿左エッジデータとしてＲＡＭ８０に記憶する（Ｓ７７０）。一方、Ｃ＞８である場合には、Ｓ７６９でＮｏと判断して、Ｓ７７５に移行し、直前のＳ７５０の処理で連続性のあるエッジ点として判定した地点の座標データを、原稿左エッジデータとしてＲＡＭ８０に記憶する。その後、Ｓ７８０に移行する。
【０１３４】
このようにして、ＣＰＵ７０は、検査位置（Ｘｅ，Ｙｅ）からＹ軸方向に８点以上連続するエッジ点については、その連続性が途切れるか（Ｓ７３７でＮｏ）、Ｙ軸方向末端まで画素値を参照するまで（Ｓ７８０でＹｅｓ）、Ｙ軸方向に画素値を参照して、連続するエッジ点を順次ＲＡＭ８０に記録する。
【０１３５】
そして、連続性が途切れることで、Ｓ７３７でＮｏと判断した場合には、Ｓ７３９に移行し、Ｃ≧８であると判断して（Ｓ７３９でＹｅｓ）、Ｓ７４７で、副走査方向検査位置Ｙｅを、変数Ｙ０の値に設定する（Ｙｅ＝Ｙ０）。
【０１３６】
また、Ｓ７４７での処理を終えると、ＣＰＵ７０は、連続性が途切れた地点をマーキングするために、Ｓ５４９での処理と同様にして、区分けコードを、原稿左エッジデータに追加する（Ｓ７４９）。このような動作により、当該左エッジ検出処理においては、Ｙ軸方向に連続するエッジ点の座標データを、Ｙ座標値最小の座標データから、連続性が途切れる地点で区分けコードを挟んで、順に配列し、連続するエッジ点の集合を区分けコードで区分けして、原稿左エッジデータを構築する。
【０１３７】
また、Ｓ７４９での処理を終えると、ＣＰＵ７０は、Ｓ７１５に移行し、主走査方向検査位置Ｘｅを、読取可能領域Ｒ０の左端に設定することで（Ｘｅ＝０）、検査位置（Ｘｅ，Ｙｅ）を、連続性が途切れた地点に対応する画像データの左端に、再設定する。また、同時に、変数Ｃを、Ｃ＝０に初期化する。その後、Ｓ７２０以降の処理を実行する。
【０１３８】
一方、連続性が途切れずに、Ｙ０＋８＞Ｓとなると（Ｓ７８０でＹｅｓ）、ＣＰＵ７０は、Ｓ７９０に移行し、Ｓ７７０，Ｓ７７５で原稿左エッジデータとして記録した座標データ群の中から、左エッジ（原稿の左端を表すエッジ点）として確度の低い座標データを削除して、原稿左エッジデータを確定する。尚、Ｙｅ＋８＞Ｓとなった場合にも（Ｓ７２０でＹｅｓ）、Ｓ７９０に移行し、同様に原稿左エッジデータを確定する。
【０１３９】
具体的に、Ｓ７９０では、Ｓ５９０での処理と同様、原稿左エッジデータを処理対象データに設定して、図８に示す第一エッジ確定処理を実行することで、左エッジとして確度の低い座標データ群を原稿左エッジデータから削除し、原稿左エッジデータを確定する。
【０１４０】
また、このようにして、左エッジ検出処理を終えると、ＣＰＵ７０は、Ｓ４５５に移行し、左エッジ検出処理で確定された原稿左エッジデータが示す各点を直線近似して、原稿左エッジデータが示す点群の近似直線（以下、「左エッジ近似直線」という。）を算出する。その後、Ｓ４６０に移行する。
【０１４１】
但し、直前の左エッジ検出処理で原稿左エッジデータとして登録された座標データがない場合には、左エッジの検出に失敗したと判断して、左エッジ近似直線を算出することなく、Ｓ４６０に移行するものとする。この他、原稿左エッジデータとして登録されている座標データの全て又は一部が原稿右エッジデータにも登録されている場合には、右エッジ（原稿の右端を表すエッジ点）の座標データが間違って原稿左エッジデータとして登録されているとみなして、原稿左エッジデータとして登録された座標データがある場合でも、左エッジの検出に失敗したと判断し、左エッジ近似直線を算出することなく、Ｓ４６０に移行するようにしてもよい。
【０１４２】
また、Ｓ４６０に移行すると、ＣＰＵ７０は、図１１に示す下エッジ検出処理を実行する。図１１は、ＣＰＵ７０が実行する下エッジ検出処理を表すフローチャートである。
下エッジ検出処理を開始すると、ＣＰＵ７０は、Ｓ８１０にて、主走査方向検査位置Ｘｅを、読取可能領域Ｒ０の左端Ｘ座標に設定し（Ｘｅ＝０）、Ｓ８１５にて、副走査方向検査位置Ｙｅを、読取可能領域Ｒ０の下端Ｙ座標に設定する（Ｙｅ＝０）。また、Ｓ８１５では、変数Ｃを値ゼロに初期化する（Ｃ＝０）。
【０１４３】
また、この処理を終えると、ＣＰＵ７０は、主走査方向検査位置ＸｅからＸ軸方向に８画素進んだ地点（Ｘｅ＋８）が読取可能領域Ｒ０の右端を超えているか否か（即ち、Ｘｅ＋８＞ＸＭＡＸであるか否か）を判断し（Ｓ８２０）、読取可能領域Ｒ０の右端を超えていないと判断すると（Ｓ８２０でＮｏ）、検査位置（Ｘ，Ｙ）＝（Ｘｅ，Ｙｅ）に対応する検査対象データの画素値を参照して、検査位置（Ｘｅ，Ｙｅ）がエッジ点であるか否かを判断する（Ｓ８２５）。
【０１４４】
そして、検査位置（Ｘｅ，Ｙｅ）がエッジ点ではないと判断すると（Ｓ８２５でＮｏ）、Ｓ８４１に移行して、副走査方向検査位置Ｙｅを、Ｙ軸プラス方向に１画素移動した位置に更新し（Ｙｅ←Ｙｅ＋１）、更新後の副走査方向検査位置Ｙｅが検査範囲を超えているか否か（Ｙｅ＞Ｓであるか否か）を判断する（Ｓ８４３）。
【０１４５】
そして、副走査方向検査位置Ｙｅが検査範囲を超えていないと判断すると（Ｓ８４３でＮｏ）、Ｓ８２０に移行する。
一方、Ｓ８４３で副走査方向検査位置Ｙｅが検査範囲を超えていると判断すると（Ｙｅ＞Ｓであると判断すると）、ＣＰＵ７０は、Ｓ８４５に移行し、副走査方向検査位置Ｙｅを、読取可能領域Ｒ０の下端に設定すると共に（Ｙｅ＝０）、主走査方向検査位置Ｘｅを、Ｘ軸方向に８画素進んだ位置に設定する（Ｘｅ←Ｘｅ＋８）。その後、Ｓ８２０に移行する。
【０１４６】
この他、ＣＰＵ７０は、Ｓ８２５において、検査位置（Ｘｅ，Ｙｅ）がエッジ点であると判断すると（Ｓ８２５でＹｅｓ）、Ｓ８３０に移行し、変数（Ｘ０，Ｙ０）に、現在の検査位置（Ｘｅ，Ｙｅ）の座標値を、設定する（Ｘ０←Ｘｅ，Ｙ０←Ｙｅ）。また、変数Ｘ１を、値Ｘ１＝Ｘ０＋８に更新する（Ｓ８３３）。
【０１４７】
その後、ＣＰＵ７０は、座標（Ｘ１，Ｙ０−１）の地点、座標（Ｘ１，Ｙ０）の地点及び座標（Ｘ１，Ｙ０＋１）の地点の少なくとも一つが、エッジ点であるか否かを判断し（Ｓ８３７）、座標（Ｘ１，Ｙ０−１）の地点、座標（Ｘ１，Ｙ０）の地点及び座標（Ｘ１，Ｙ０＋１）の地点のいずれもがエッジ点でない場合には（Ｓ８３７でＮｏ）、Ｓ８３９に移行して、変数Ｃが値８以上であるか否かを判断し、変数Ｃが値８未満であると判断すると（Ｓ８３９でＮｏ）、Ｓ８４１に移行する。
【０１４８】
一方、座標（Ｘ１，Ｙ０−１）の地点、座標（Ｘ１，Ｙ０）の地点及び座標（Ｘ１，Ｙ０＋１）の地点の少なくとも一つがエッジ点であると判断すると（Ｓ８３７でＹｅｓ）、ＣＰＵ７０は、Ｓ８５０に移行して、座標（Ｘ０，Ｙ０）の地点が連続性のあるエッジ点であると判定し、この座標（Ｘ０，Ｙ０）を、連続性のあるエッジ点の座標データとして、一時記憶する。
【０１４９】
また、この処理を終えると、ＣＰＵ７０は、Ｓ８６０に移行し、座標（Ｘ１，Ｙ０−１）の地点、座標（Ｘ１，Ｙ０）の地点及び座標（Ｘ１，Ｙ０＋１）の地点の内、エッジ点である地点の一つを、予め定められた優先度に従って選択する。
【０１５０】
具体的に、下エッジ検出処理においては、読取可能領域Ｒ０下端側に近い座標ほど高い優先度が設定されている。即ち、読取可能領域Ｒ０下端側に近い座標（Ｘ１，Ｙ０−１）の地点が優先度「大」に設定され、座標（Ｘ１，Ｙ０）の地点が優先度「中」に設定され、座標（Ｘ１，Ｙ０＋１）の地点が優先度「小」に設定されている。このように優先度が設定されているのは、原稿の下端より下側においては、原稿台１１ａに何も存在せず、エッジ点は存在しないはずであり、読取可能領域Ｒ０下端側に近いエッジ点であるほど、そのエッジ点が原稿の下端に対応するエッジ点である可能性が高いためである。
【０１５１】
従って、Ｓ８６０では、この優先度に従って、座標（Ｘ１，Ｙ０−１）の地点、座標（Ｘ１，Ｙ０）の地点及び座標（Ｘ１，Ｙ０＋１）の地点の内、エッジ点である地点であって優先度の最も高い地点を選択する。そして、変数Ｘ０を、選択した地点のＸ座標に更新し、変数Ｙ０を、選択した地点のＹ座標に更新する。その後、変数Ｃを１加算した値に更新する（Ｓ８６３）。
【０１５２】
また、この処理を終えると、ＣＰＵ７０は、更新後の変数Ｃが値８以上であるか否かを判断し（Ｓ８６７）、Ｃ≧８でないと判断すると（Ｓ８６７でＮｏ）、Ｓ８８０に移行して、座標Ｘ＝Ｘ０からＸ軸方向に８画素進んだ地点（Ｘ０＋８）が読取可能領域Ｒ０の右端を超えているか否かを判断する。具体的には、Ｘ０＋８＞ＸＭＡＸであるか否かを判断する。
【０１５３】
そして、Ｘ０＋８＞ＸＭＡＸではないと判断すると（Ｓ８８０でＮｏ）、Ｓ８３３に移行して、変数Ｘ１を、Ｘ１＝Ｘ０＋８に更新する。その後、Ｓ８３７以降の処理を実行する。
【０１５４】
このような処理を実行することにより、ＣＰＵ７０は、Ｘ軸方向に８画素おきに、エッジ点がＸ軸方向に連続するものであるか否かを検査する。そして、変数Ｃが８以上となると、Ｓ８６７でＹｅｓと判断して、連続性のあるエッジ点として判定した座標データを、原稿下エッジデータとしてＲＡＭ８０に記憶する（Ｓ８７０，Ｓ８７５）。
【０１５５】
具体的に、Ｃ＝８である場合には、Ｓ８６９でＹｅｓと判断して、Ｃ＝８となるまでにＳ８５０の処理で連続性のあるエッジ点として判定した計８地点の各座標データを、原稿下エッジデータとしてＲＡＭ８０に記憶する（Ｓ８７０）。一方、Ｃ＞８である場合には、Ｓ８６９でＮｏと判断して、Ｓ８７５に移行し、直前のＳ８５０の処理で連続性のあるエッジ点として判定した地点の座標データを、原稿下エッジデータとしてＲＡＭ８０に記憶する。その後、Ｓ８８０に移行する。
【０１５６】
このようにして、ＣＰＵ７０は、検査位置（Ｘｅ，Ｙｅ）からＸ軸方向に８点以上連続するエッジ点については、その連続性が途切れるか（Ｓ８３７でＮｏ）、Ｘ軸方向末端まで画素値を参照するまで（Ｓ８８０でＹｅｓ）、Ｘ軸方向に画素値を参照して、連続するエッジ点を順次ＲＡＭ８０に記録する。
【０１５７】
そして、連続性が途切れることで、Ｓ８３７でＮｏと判断した場合には、Ｓ８３９に移行し、Ｃ≧８であると判断して（Ｓ８３９でＹｅｓ）、Ｓ８４７で、主走査方向検査位置Ｘｅを、変数Ｘ０の値に設定する（Ｘｅ＝Ｘ０）。
【０１５８】
また、Ｓ８４７での処理を終えると、ＣＰＵ７０は、連続性が途切れた地点をマーキングするために、Ｓ５４９での処理と同様にして、区分けコードを、原稿下エッジデータに追加する（Ｓ８４９）。このような動作により、当該下エッジ検出処理においては、Ｘ軸方向に連続するエッジ点の座標データを、Ｘ座標値最小の座標データから、連続性が途切れる地点で区分けコードを挟んで、順に配列し、連続するエッジ点の集合を区分けコードで区分けして、原稿下エッジデータを構築する。
【０１５９】
また、Ｓ８４９での処理を終えると、ＣＰＵ７０は、Ｓ８１５に移行し、副走査方向検査位置Ｙｅを、読取可能領域Ｒ０の下端に設定することで（Ｙｅ＝０）、検査位置（Ｘｅ，Ｙｅ）を、連続性が途切れた地点に対応する画像データの下端に、再設定する。また、同時に、変数Ｃを、Ｃ＝０に初期化する。その後、Ｓ８２０以降の処理を実行する。
【０１６０】
一方、連続性が途切れずに、Ｘ０＋８＞ＸＭＡＸとなると（Ｓ８８０でＹｅｓ）、ＣＰＵ７０は、Ｓ８９０に移行し、Ｓ８７０，Ｓ８７５で原稿下エッジデータとして記録した座標データ群の中から、下エッジ（原稿の下端を表すエッジ点）として確度の低い座標データを削除して、原稿下エッジデータを確定する。尚、Ｘｅ＋８＞ＸＭＡＸとなった場合にも（Ｓ８２０でＹｅｓ）、Ｓ８９０に移行して、同様に原稿下エッジデータを確定する。
【０１６１】
具体的に、Ｓ８９０では、原稿下エッジデータを処理対象データに設定して、図１２に示す第二エッジ確定処理を実行することで、下エッジとして確度の低い座標データ群を原稿下エッジデータから削除し、原稿下エッジデータを確定する。図１２は、ＣＰＵ７０が実行する第二エッジ確定処理を表すフローチャートである。
【０１６２】
第二エッジ確定処理を開始すると、ＣＰＵ７０は、予め設定された処理対象データが、少なくとも８つ以上のエッジ点の座標データを含むものであるか否かを判断し（Ｓ９１０）、処理対象データが８つ以上のエッジ点の座標データを含むものであると判断すると（Ｓ９１０でＹｅｓ）、Ｓ９２０に移行し、処理対象データが８つ以上のエッジ点の座標データを含むものではない（換言すれば処理対象データが空データである）と判断すると（Ｓ９１０でＮｏ）、Ｓ９２０〜Ｓ９９０の処理を実行することなく、当該第二エッジ確定処理を終了する。
【０１６３】
一方、Ｓ９２０に移行すると、ＣＰＵ７０は、処理対象データを構成するエッジ点の座標データに基づき、処理対象データに登録されたエッジ点であって、Ｘ座標値が最大のエッジ点を、検査開始点に設定する。
【０１６４】
また、Ｓ９２０での処理を終えると、ＣＰＵ７０は、Ｓ９３０に移行し、検査開始点からＸ軸マイナス方向に、処理対象データに登録されたエッジ点を辿り、連続するエッジ点の当該連続性が途切れる地点を探索する。上述したように、処理対象データに設定される原稿下エッジデータにおいては、エッジ点の座標データが、Ｘ座標値最小のエッジ点の座標データから、途中区分けコードを挟んで、順に配列される。従って、Ｓ９３０では、処理対象データを、検査開始点に対応するエッジ点の座標データから、Ｘ軸マイナス方向に遡るようにして参照して、最初に現れる区分けコードを検出する。
【０１６５】
そして、区分けコードを検出できた場合には、連続性が途切れる地点があると判断して（Ｓ９４０でＹｅｓ）、Ｓ９５０に移行する。
一方、区分けコードを検出できなかった場合には、連続性が途切れる地点がないと判断して（Ｓ９４０でＮｏ）、Ｓ９５０〜Ｓ９９０の処理を実行することなく、当該第二エッジ確定処理を終了する。このようにして、Ｓ９４０でＮｏと判断した場合には、処理対象データに登録されているエッジ点の全てが、原稿の端縁を表すエッジ点として確度の高いエッジ点であると取扱って、処理対象データに登録されたエッジ点を削除することなく、原稿エッジを確定し、第二エッジ確定処理を終了する。
【０１６６】
これに対し、Ｓ９５０に移行すると、ＣＰＵ７０は、連続性が途切れる地点直前のエッジ点（換言すると、連続性が途切れる地点よりＸ軸プラス方向に位置するエッジ点であってＸ座標値最小のエッジ点）に対し、Ｘ軸マイナス方向側で隣接するエッジ点の座標データが、処理対象データに含まれているか否かを判断する。
【０１６７】
ここでは、連続性が途切れる地点直前のエッジ点の画素位置（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）に対して、Ｘ座標値がＸ＝Ｘ０−８を採るエッジ点の座標データが、処理対象データに含まれている場合には、Ｘ軸マイナス方向側で隣接するエッジ点の座標データが、処理対象データに含まれていると判断し、Ｘ座標値がＸ＝Ｘ０−８を採るエッジ点の当該座標データが、処理対象データに含まれていない場合には、Ｘ軸マイナス方向側で隣接するエッジ点の座標データが、処理対象データに含まれていないと判断する。これにより、Ｘ軸のみの一次元空間上で、連続性が途切れる地点を挟んで、隣接するエッジ点の有無を判断する。
【０１６８】
そして、連続性が途切れる地点直前のエッジ点に対し、Ｘ軸マイナス方向側で隣接するエッジ点の座標データが、処理対象データに含まれていると判断すると（Ｓ９５０でＹｅｓ）、ＣＰＵ７０は、Ｓ９６０に移行する。一方、Ｘ軸マイナス方向側で隣接するエッジ点の座標データが、処理対象データに含まれていないと判断すると（Ｓ９５０でＮｏ）、Ｓ９９０に移行する。
【０１６９】
また、Ｓ９６０に移行すると、ＣＰＵ７０は、連続性が途切れる地点を挟んで、隣接するエッジ点のＹ軸方向の乖離度を算出する。具体的には、連続性が途切れる地点直前のエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）であり、このエッジ点に隣接するエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ０−８，Ｙ１）であるとすると、上記乖離度として、これら２つのエッジ点のＹ座標値の差δＹ＝｜Ｙ０−Ｙ１｜を算出する。
【０１７０】
また、この処理を終えると、ＣＰＵ７０は、差δＹが、予め設計段階で定められた閾値未満であるか否かを判断し（Ｓ９７０）、閾値未満であると判断すると（Ｓ９７０でＹｅｓ）、検査開始点を、上記連続性が途切れる地点直前のエッジ点に隣接するエッジ点（Ｘ０−８，Ｙ１）に更新する（Ｓ９８０）。その後、Ｓ９３０に移行する。
【０１７１】
一方、差δＹが、閾値以上であると判断すると（Ｓ９７０でＮｏ）、ＣＰＵ７０は、上記連続性が途切れる地点よりＸ軸マイナス方向に位置するエッジ点については、原稿エッジ（原稿の端縁を表すエッジ点）としての確度が低いと判断して、Ｓ９９０に移行し、上記連続性が途切れる地点よりＸ軸マイナス方向に位置するエッジ点の座標データを、全て処理対象データから削除して、処理対象データを更新する。
【０１７２】
例えば、直前のＳ９３０で検出した連続性が途切れる地点直前のエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）である場合には、Ｘ座標値がＸ０未満のエッジ点の座標データを全て処理対象データから削除して、処理対象データを更新する。その後、当該第二エッジ確定処理を終了する。第二エッジ確定処理では、このようにして、処理対象データを構成するエッジ点の座標データの内、原稿エッジとして確度の低い座標データを削除する。
【０１７３】
即ち、下エッジ検出処理のＳ８９０では、このようにして、原稿下エッジデータから下エッジとして確度の低いエッジ点の座標データを削除し、原稿下エッジデータを確定する。尚、Ｓ８９０で、上述のようにして、Ｘ座標値が大きいエッジ点程、エッジ点が原稿の下端を表すエッジ点（下エッジ）である確度が高いと取り扱い、Ｘ座標値が大きいエッジ点群からＹ軸方向に大きくずれた位置に存在するＸ座標値が小さいエッジ点群を、原稿下エッジデータから削除する理由は、下エッジ検出処理にて、Ｘｅ＝０から順に検査位置（Ｘｅ，Ｙｅ）をずらして原稿の下端を表すエッジ点を検索すると、原稿が左側に傾いている場合には、原稿の下端ではなく、原稿内部に描写された罫線等に対応するエッジ点を、原稿の下端を表すエッジ点として誤検出してしまう可能性があるためである。
【０１７４】
このような誤検出は、Ｘ座標値が小さいエッジ点群において発生している可能性が高く、Ｘ座標値が大きいエッジ点群において発生している可能性は、小さい。このような理由から、Ｓ８９０では、Ｘ座標値が大きいエッジ点程、エッジ点が原稿の下端を表すエッジ点（下エッジ）である確度が高いと取り扱って、確度の低いエッジ点を原稿下エッジデータから削除し、原稿下エッジデータを確定するようにしている。
【０１７５】
また、このようにしてＳ８９０での処理を終えると、ＣＰＵ７０は、Ｓ４６０での下エッジ検出処理を終了して、Ｓ４６５に移行し、Ｓ４６５では、下エッジ検出処理で確定された原稿下エッジデータが示す各点を直線近似して、原稿下エッジデータが示す点群の近似直線（以下、「下エッジ近似直線」という。）を算出する。その後、Ｓ４７０に移行する。但し、直前の下エッジ検出処理で原稿下エッジデータとして登録された座標データがない場合には、下エッジの検出に失敗したと判断して、下エッジ近似直線を算出することなく、Ｓ４７０に移行するものとする。
【０１７６】
また、Ｓ４７０に移行すると、ＣＰＵ７０は、右エッジ近似直線、左エッジ近似直線、及び下エッジ近似直線の相互関係から、右エッジ検出処理（Ｓ４２０）、左エッジ検出処理（Ｓ４５０）及び下エッジ検出処理（Ｓ４６０）にて正しく原稿エッジが検出されたか否かを判断する。即ち、右エッジ、左エッジ及び下エッジの全てが正常に検出されたか否かを判断する。
【０１７７】
具体的には、右エッジ近似直線と左エッジ近似直線とが平行な関係にあり、右エッジ近似直線と下エッジ近似直線とが直交関係にあり、左エッジ近似直線と下エッジ近似直線とが直交関係にある場合には、正しく原稿エッジが検出されたとして、Ｓ４７０でＹｅｓと判断する。
【０１７８】
一方、右エッジ、左エッジ及び下エッジのいずれか一つの検出にでも失敗している場合や、右エッジ、左エッジ及び下エッジの関係が正しい関係にない場合には、Ｓ４７０でＮｏと判断する。即ち、右エッジ近似直線と左エッジ近似直線とが平行な関係にあり、右エッジ近似直線と下エッジ近似直線とが直交関係にあり、且つ、左エッジ近似直線と下エッジ近似直線とが直交関係にある場合を除いては、原稿エッジが正しく検出されていないとして、Ｓ４７０でＮｏと判断する。但し、ここでの相互関係の判定は、誤差を考慮して実行すべきである。
【０１７９】
そして、原稿エッジが正しく検出されていないと判断すると（Ｓ４７０でＮｏ）、ＣＰＵ７０は、Ｓ４７１に移行して、Ｓ４３１での処理と同様のエラー処理を実行する。
一方、Ｓ４７０で原稿エッジが正しく検出されていると判断すると（Ｓ４７０でＹｅｓ）、ＣＰＵ７０は、Ｓ４８０に移行して、原稿の左下角位置を、左エッジ近似直線と下エッジ近似直線との交点であると推定して、その座標値を算出し、更に、原稿の右下角位置を、右エッジ近似直線と下エッジ近似直線との交点であると推定して、その座標値を算出する（Ｓ４８５）。尚、図１３は、Ｓ４８０及びＳ４８５での原稿左下角位置Ｋａ及び原稿右下角位置Ｋｂの推定方法を示した説明図である。図中、白丸がエッジ点を表し、黒丸が角位置Ｋａ，Ｋｂを表す。
【０１８０】
また、Ｓ４８５での処理を終えると、ＣＰＵ７０は、Ｓ４８０及びＳ４８５で推定した角位置の位置座標に基づき、原稿台１１ａに載置されている原稿が定型用紙であるとの仮定の下で、原稿台１１ａに載置された原稿のサイズ及び原稿台１１ａにおける原稿の載置領域を推定すると共に、右エッジ近似直線に基づき、原稿台１１ａに載置されている原稿の傾き角θを推定する（Ｓ４９０）。
【０１８１】
即ち、Ｓ４８０及びＳ４８５で推定した原稿の左下角位置から右下角位置までの長さを、原稿の短辺長さ（横幅）と推定し、この短辺長さの√２倍を、原稿の長辺長さ（縦幅）と推定して、原稿サイズを推定すると共に、上記推定した左下角位置及び右下角位置を起点に上記原稿サイズの原稿が原稿台１１ａに載置されているものとして、原稿の左上角及び右上角が位置する座標を導出し、これら４つの角を結んでできる四角形内の領域を、原稿の載置領域であると推定する。
【０１８２】
この他、Ｓ４９０では、Ｙ軸に対して右エッジ近似直線がなす角度を、原稿の傾き角θと推定する。そして、この処理を終えると、ＣＰＵ７０は、Ｓ２２０での原稿推定処理を終了して、Ｓ２３０に移行し、後続の処理を実行する。即ち、原稿推定処理での推定結果に基づき、変倍率及び傾き補正量を設定し（Ｓ２５１，Ｓ２５３）、更に読取領域を設定する（Ｓ２５５）。その後、本スキャンに移行する（Ｓ２７０）。
【０１８３】
そして、本スキャン（Ｓ２７０）では、上記設定した読取領域下において読取ユニット１５を搬送し、その領域に写る画像を読取ユニット１５に読み取らせる。そして、その読取結果を、上記設定した変倍率に合わせて拡大／縮小処理すると共に、上記設定した傾き補正量に合わせて回転処理して、印刷用の画像データを生成する。また、これを印刷対象データとして印刷処理することで、原稿のコピー画像であって、自動変倍され、更に傾き補正された画像を、印刷部３０を通じて、記録紙に印刷する。
【０１８４】
以上、本実施例のディジタル複合機１の構成について説明したが、本実施例の複合機１によれば、読取可能領域Ｒ０の一部領域をプレスキャンして、その読取結果に基づき、原稿エッジを検出し、原稿の状態（原稿サイズ・原稿の傾き・原稿の載置領域）を推定するようにしているので、従来のように、読取可能領域Ｒ０全体をプレスキャンする手法よりも高速にプレスキャン動作を終了することができ、効率的に原稿の状態を推定することができる。
【０１８５】
また、本実施例では、Ｓ５１０〜Ｓ５８０，Ｓ７１０〜Ｓ７８０，Ｓ８１０〜Ｓ８８０での処理により、原稿の端縁を表すエッジ点の候補を、高速に画像データ内から抽出し、その後、Ｓ５９０，Ｓ７９０，Ｓ８９０で、上記選択したエッジ点の候補の中から、原稿の端縁を表すエッジ点として確度の低いエッジ点を破棄することによって、原稿の端縁を表すエッジ点を高速且つ正確に検出するようにした。
【０１８６】
即ち、Ｓ５１０〜Ｓ５８０，Ｓ７１０〜Ｓ７８０，Ｓ８１０〜Ｓ８８０では、単純な手順で原稿の端縁を表すエッジ点の候補を選ぶことにより、高速に原稿の端縁を表すエッジ点を、画像データ内から抽出するが、上記高速性のため犠牲にした精度については、第一及び第二エッジ確定処理にて、原稿の端縁を表すエッジ点として確度の低いエッジ点を破棄することにより、補完するようにした。
【０１８７】
このように、本実施例では、複数段階に分けて、画像データ内から原稿の端縁を表すエッジ点として最もらしいエッジ点を抽出する。従って、本実施例によれば、従来よりも、高速且つ正確に、原稿の端縁を表すエッジ点（原稿エッジ）を検出することができる。
【０１８８】
この他、本実施例によれば、第一及び第二エッジ確定処理により、埃や原稿内部に描写された罫線等のエッジ点を破棄できるので、原稿内部の罫線や埃等の影響を抑えて、原稿エッジを適切に検出できる。
【０１８９】
また特に、本実施例では、右エッジ及び左エッジを検出する際、原稿台１１ａの中央側にある原稿エッジの候補点ほど、それが原稿エッジである確度が高いと取り扱って、原稿台１１ａの中央寄りにあるエッジ点（Ｙ座標値が大きいエッジ点）を基準に、原稿右エッジデータ及び原稿左エッジデータを確定し、これらのデータに基づいて右エッジ近似直線及び左エッジ近似直線を求めるようにした。
【０１９０】
従って、本実施例によれば、原稿が傾いていることが原因で原稿内部に描写された罫線等を原稿エッジ（右エッジ又は左エッジ）として誤検出してしまい、結果として、近似直線に誤差が大きく現れるのを抑えることができる。よって、本実施例によれば、一部領域のプレスキャン程度で、高精度に、原稿サイズや原稿の傾き角、原稿の載置領域を推定することができる。
【０１９１】
また、本実施例では、下エッジ近似直線を求める際に、原稿台１１ａの右側にある下エッジの候補点（エッジ点）程、それが真に下エッジである確度が高いと取り扱って、原稿台１１ａの右側寄りにあるエッジ点を基準に、原稿下エッジデータを確定し、これらのデータに基づいて下エッジ近似直線を求めるようにした。従って、本実施例によれば、原稿が左側に傾いて載置されている場合の下エッジの誤検出を極力抑えることができて、高精度に、原稿サイズや原稿の傾き角、原稿の載置領域を推定することができる。
［第一変形例］
続いて、第一変形例について説明する。但し、第一変形例の複合機は、Ｓ５９０，Ｓ７９０で実行する第一エッジ確定処理及びＳ８９０で実行する第二エッジ確定処理の内容が一部変更された程度のものであり、他の構成は、上記実施例の複合機１と同一であるので、以下では、上記実施例と同一構成の部位についての説明を適宜省略する。
【０１９２】
図１４は、第一変形例において、ＣＰＵ７０が実行する第一エッジ確定処理を表すフローチャートである。
ＣＰＵ７０は、Ｓ５９０又はＳ７９０で図１４に示す第一エッジ確定処理を開始すると、まず、変数ＬＭＡＸを値ゼロに初期化する（Ｓ１０１０）。その後、Ｓ１０１５に移行して、予め設定された処理対象データが、少なくとも８つ以上のエッジ点の座標データを含むものであるか否かを判断する。
【０１９３】
そして、処理対象データが８つ以上のエッジ点の座標データを含むものであると判断すると（Ｓ１０１５でＹｅｓ）、Ｓ１０２０に移行し、処理対象データが８つ以上のエッジ点の座標データを含むものではないと判断すると（Ｓ１０１５でＮｏ）、Ｓ１０２０〜Ｓ１０９０の処理を実行することなく、当該第一エッジ確定処理を終了する。
【０１９４】
一方、Ｓ１０２０に移行すると、ＣＰＵ７０は、Ｓ６２０での処理と同様に、処理対象データに登録されたエッジ点であって、Ｙ座標値が最大のエッジ点を、検査開始点に設定する。その後、Ｓ１０２５に移行する。
【０１９５】
また、Ｓ１０２５に移行すると、ＣＰＵ７０は、Ｓ６３０での処理と同様に、検査開始点からＹ軸マイナス方向に、処理対象データに登録されたエッジ点を辿り、連続するエッジ点の当該連続性が途切れる地点を探索する。即ち、Ｓ１０２５では、検査開始点に対応するエッジ点の座標データから、処理対象データを、Ｙ軸マイナス方向に遡るようにして参照して、最初に現れる区分けコードを検出する。
【０１９６】
そして、区分けコードを検出できた場合には、連続性が途切れる地点があると判断して（Ｓ１０３０でＹｅｓ）、Ｓ１０４０に移行し、区分けコードを検出できなかった場合には、検査開始点からＹ軸マイナス方向に連続性が途切れる地点がないと判断して（Ｓ１０３０でＮｏ）、Ｓ１０７０に移行する。
【０１９７】
また、Ｓ１０４０に移行すると、ＣＰＵ７０は、検査開始点から、連続性が途切れる直前のエッジ点までのＹ軸方向長さＬを算出する。ここでは、検査開始点が座標（Ｘ，Ｙ）＝（Ｘｓ，Ｙｓ）の地点であり、連続性が途切れる地点直前のエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）であるとすると、検査開始点から、連続性が途切れる直前のエッジ点までのＹ軸方向長さＬとして、Ｌ＝｜Ｙｓ−Ｙ０｜を算出する。
【０１９８】
また、この処理を終えると、ＣＰＵ７０は、Ｓ１０５０に移行して、変数Ｌの現在値が、変数ＬＭＡＸより大きいか否かを判断し、変数Ｌの現在値が、変数ＬＭＡＸより大きいと判断すると（Ｓ１０５０でＹｅｓ）、処理対象データに登録されたエッジ点であって検査開始点から連続性が途切れる直前までの区間に位置するエッジ点を、最も長く連続するエッジ点の集合であると判断し、この集合に属するエッジ点の各座標データを、最終候補データとして、ＲＡＭ８０に記録する（Ｓ１０５５）。尚、ここでは、前回記録した最終候補データに上書きするようにして、ＲＡＭ８０に、最新の最終候補データを記録することで、最終候補データの前回値を破棄する。
【０１９９】
また、Ｓ１０５５での処理を終えると、ＣＰＵ７０は、Ｓ１０５７に移行し、変数ＬＭＡＸの値を、変数Ｌの現在値に更新する（ＬＭＡＸ←Ｌ）。その後、Ｓ１０６０に移行する。
【０２００】
一方、変数Ｌの現在値が、変数ＬＭＡＸ以下であると判断すると（Ｓ１０５０でＮｏ）、ＣＰＵ７０は、Ｓ１０５５，Ｓ１０５７の処理を実行することなく、Ｓ１０６０に移行する。
【０２０１】
また、Ｓ１０６０に移行すると、ＣＰＵ７０は、連続性が途切れる地点よりＹ軸マイナス方向に位置するエッジ点の座標データが、処理対象データに含まれているか否かを判断する。具体的には、連続性が途切れる地点直前のエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）であるとすると、Ｙ座標値が値Ｙ０未満であるエッジ点の座標データが、処理対象データに含まれているか否かを判断する。
【０２０２】
そして、Ｙ軸マイナス方向に位置するエッジ点の座標データが処理対象データに含まれていると判断すると（Ｓ１０６０でＹｅｓ）、Ｓ１０６５に移行し、Ｙ軸マイナス方向に位置するエッジ点の座標データが処理対象データに含まれていないと判断すると（Ｓ１０６０でＮｏ）、Ｓ１０９０に移行する。
【０２０３】
また、Ｓ１０６５に移行すると、ＣＰＵ７０は、検査開始点を、処理対象データに登録されたエッジ点であって、上記連続性が途切れる地点よりＹ軸マイナス方向に位置するＹ座標値が最大のエッジ点、換言すれば、上記連続性が途切れる地点に最も近いエッジ点に更新する。その後、Ｓ１０２５に移行し、新たな検査開始点を起点として、当該検査開始点よりＹ軸マイナス方向で、エッジ点の連続性が途切れる地点を探索する。
【０２０４】
そして、連続性が途切れる地点がない場合には（Ｓ１０３０でＮｏ）、Ｓ１０７０に移行し、検査開始点から、処理対象データに登録されたエッジ点であってＹ座標値が最小のエッジ点（以下、「Ｙ値最小エッジ点」と称する。）までのＹ軸方向長さＬを算出する。ここでは、検査開始点が座標（Ｘ，Ｙ）＝（Ｘｓ，Ｙｓ）であり、Ｙ値最小エッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘｍ，Ｙｍ）であるとすると、Ｙ軸方向長さＬとして、Ｌ＝｜Ｙｓ−Ｙｍ｜を算出する。
【０２０５】
また、この処理を終えると、ＣＰＵ７０は、Ｓ１０８０に移行して、変数Ｌの現在値が、変数ＬＭＡＸより大きいか否かを判断し、変数Ｌの現在値が、変数ＬＭＡＸより大きいと判断すると（Ｓ１０８０でＹｅｓ）、処理対象データに登録されたエッジ点であって検査開始点からＹ値最小エッジ点までの区間に位置するエッジ点の集合を、最も長く連続するエッジ点の集合であると判断し、この集合に属するエッジ点の各座標データを、最終候補データとして、Ｓ１０５５での処理と同様に、ＲＡＭ８０に記録する（Ｓ１０８５）。そして、この処理を終えると、Ｓ１０９０に移行する。
【０２０６】
また、Ｓ１０９０に移行すると、ＣＰＵ７０は、その時点で最終候補データとしてＲＡＭ８０に登録されているエッジ点以外の各エッジ点の座標データを、処理対象データから削除して、処理対象データを更新する。その後、当該第一エッジ確定処理を終了する。
【０２０７】
第一エッジ確定処理では、このようにして、Ｙ軸方向に最も長く連続するエッジ点の集合を、原稿エッジとして確度の高いエッジ点であると取り扱い、この集合に属するエッジ点以外のエッジ点の座標データを処理対象データから削除することで、処理対象データから、原稿エッジとして確度の低い座標データを削除する。
【０２０８】
尚、図１５は、第一変形例での原稿右エッジデータの確定手法を示した説明図である。
図１５に示す例では、変数Ｌの値として計測された連続するエッジ点の集合の長さが夫々、Ｌ［０］，Ｌ［１］，Ｌ［２］であり、その大小関係がＬ［１］＞Ｌ［２］＞Ｌ［０］であるので、長さＬ［１］のエッジ点の集合が、右エッジとして確度の高いエッジ点の集合であると取り扱って、この集合に属するエッジ点の座標データのみを原稿右エッジデータに残して、原稿右エッジデータを確定する。そして、最終的に、このエッジ点の集合から、右エッジ近似直線を求める。
【０２０９】
このような手順により、第一変形例では、Ｓ５９０において原稿右エッジデータを確定し、Ｓ７９０において原稿左エッジデータを確定する。
一方、Ｓ８９０においては、原稿下エッジデータを処理対象データに設定して、図１６に示す第二エッジ確定処理を実行することにより、当該原稿下エッジデータを確定する。尚、図１６は、第一変形例において、ＣＰＵ７０が実行する第二エッジ確定処理を表すフローチャートである。
【０２１０】
図１６に示す第二エッジ確定処理を開始すると、ＣＰＵ７０は、まず、変数ＬＭＡＸを値ゼロに初期化する（Ｓ１１１０）。その後、Ｓ１１１５に移行して、予め設定された処理対象データが、少なくとも８つ以上のエッジ点の座標データを含むものであるか否かを判断する。
【０２１１】
そして、処理対象データが８つ以上のエッジ点の座標データを含むものであると判断すると（Ｓ１１１５でＹｅｓ）、Ｓ１１２０に移行し、処理対象データが８つ以上のエッジ点の座標データを含むものではないと判断すると（Ｓ１１１５でＮｏ）、Ｓ１１２０〜Ｓ１１９０の処理を実行することなく、当該第二エッジ確定処理を終了する。
【０２１２】
一方、Ｓ１１２０に移行すると、ＣＰＵ７０は、Ｓ９２０での処理と同様に、処理対象データに登録されたエッジ点であって、Ｘ座標値が最大のエッジ点を、検査開始点に設定する。その後、Ｓ１１２５に移行する。
【０２１３】
また、Ｓ１１２５に移行すると、ＣＰＵ７０は、Ｓ９３０での処理と同様に、検査開始点からＸ軸マイナス方向に、処理対象データに登録されたエッジ点を辿り、連続するエッジ点の当該連続性が途切れる地点を探索する。即ち、Ｓ１１２５では、検査開始点に対応するエッジ点の座標データから、処理対象データを、Ｘ軸マイナス方向に遡るようにして参照して、最初に現れる区分けコードを検出する。
【０２１４】
そして、区分けコードを検出できた場合には、連続性が途切れる地点があると判断して（Ｓ１１３０でＹｅｓ）、Ｓ１１４０に移行し、区分けコードを検出できなかった場合には、連続性が途切れる地点がないと判断して（Ｓ１１３０でＮｏ）、Ｓ１１７０に移行する。
【０２１５】
また、Ｓ１１４０に移行すると、ＣＰＵ７０は、検査開始点から、連続性が途切れる直前のエッジ点までのＸ軸方向長さＬを算出する。ここでは、検査開始点が座標（Ｘ，Ｙ）＝（Ｘｓ，Ｙｓ）であり、連続性が途切れる地点直前のエッジ点、換言すれば、「連続性が途切れる地点よりもＸ軸プラス方向に位置するエッジ点であってＸ座標値が最小のエッジ点」の画素位置が（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）であるとすると、検査開始点から連続性が途切れる直前のエッジ点までのＸ軸方向長さＬとして、Ｌ＝｜Ｘｓ−Ｘ０｜を算出する。
【０２１６】
また、この処理を終えると、ＣＰＵ７０は、Ｓ１１５０に移行して、変数Ｌの現在値が、変数ＬＭＡＸより大きいか否かを判断し、変数Ｌの現在値が、変数ＬＭＡＸより大きいと判断すると（Ｓ１１５０でＹｅｓ）、処理対象データに登録されたエッジ点であって検査開始点から連続性が途切れる直前までの区間に位置するエッジ点の集合を、最も長く連続するエッジ点の集合であると判断し、この集合に属するエッジ点の各座標データを、最終候補データとして、Ｓ１０５５での処理と同様に、ＲＡＭ８０に記録する（Ｓ１１５５）。
【０２１７】
また、Ｓ１１５５での処理を終えると、ＣＰＵ７０は、Ｓ１１５７に移行し、変数ＬＭＡＸの値を、変数Ｌの現在値に更新する（ＬＭＡＸ←Ｌ）。その後、Ｓ１１６０に移行する。
【０２１８】
一方、変数Ｌの現在値が、変数ＬＭＡＸ以下であると判断すると（Ｓ１１５０でＮｏ）、ＣＰＵ７０は、Ｓ１１５５，Ｓ１１５７の処理を実行することなく、Ｓ１１６０に移行する。
【０２１９】
また、Ｓ１１６０に移行すると、ＣＰＵ７０は、上記連続性が途切れる地点よりＸ軸マイナス方向に、位置するエッジ点の座標データが、処理対象データに含まれているか否かを判断する。具体的には、連続性が途切れる地点直前のエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）であるとすると、Ｘ座標値が値Ｘ０未満であるエッジ点の座標データが、処理対象データに含まれているか否かを判断する。
【０２２０】
そして、上記エッジ点の座標データが処理対象データに含まれていると判断すると（Ｓ１１６０でＹｅｓ）、Ｓ１１６５に移行し、上記エッジ点の座標データが処理対象データに含まれていないと判断すると（Ｓ１１６０でＮｏ）、Ｓ１１９０に移行する。
【０２２１】
また、Ｓ１１６５に移行すると、ＣＰＵ７０は、検査開始点を、上記連続性が途切れる地点よりＸ軸マイナス方向に位置する上記処理対象データに登録されたエッジ点であって、Ｘ座標値が最大のエッジ点に更新する。その後、Ｓ１１２５に移行し、新たな検査開始点を起点として、当該検査開始点よりＸ軸マイナス方向で、エッジ点の連続性が途切れる地点を探索する。
【０２２２】
そして、連続性が途切れる地点がない場合には（Ｓ１１３０でＮｏ）、Ｓ１１７０に移行して、検査開始点から、処理対象データに登録されたエッジ点であってＸ座標値が最小のエッジ点（以下、「Ｘ値最小エッジ点」と称する。）までのＸ軸方向長さＬを算出する。ここでは、検査開始点が座標（Ｘ，Ｙ）＝（Ｘｓ，Ｙｓ）の地点であり、Ｘ値最小エッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘｍ，Ｙｍ）であるとすると、Ｘ軸方向長さＬとして、Ｌ＝｜Ｘｓ−Ｘｍ｜を算出する。
【０２２３】
また、この処理を終えると、ＣＰＵ７０は、Ｓ１１８０に移行して、変数Ｌの現在値が、変数ＬＭＡＸより大きいか否かを判断し、変数Ｌの現在値が、変数ＬＭＡＸより大きいと判断すると（Ｓ１１８０でＹｅｓ）、処理対象データに登録されたエッジ点であって検査開始点からＸ値最小エッジ点までの区間に位置するエッジ点の集合を、最も長く連続するエッジ点の集合であると判断し、この集合に属するエッジ点の各座標データを、最終候補データとして、Ｓ１０８５での処理と同様に、ＲＡＭ８０に記録する（Ｓ１１８５）。そして、この処理を終えると、Ｓ１１９０に移行する。
【０２２４】
また、Ｓ１１９０に移行すると、ＣＰＵ７０は、その時点で最終候補データとしてＲＡＭ８０に登録されているエッジ点以外の各エッジ点の座標データを、処理対象データから削除して、処理対象データを更新する。その後、当該第二エッジ確定処理を終了する。
【０２２５】
第二エッジ確定処理では、このようにして、Ｘ軸方向に最も長く連続するエッジ点の集合を、原稿エッジとして確度の高いエッジ点であると取り扱い、この集合に属するエッジ点以外のエッジ点の座標データを処理対象データから削除することで、処理対象データから、原稿エッジとして確度の低い座標データを削除する。
【０２２６】
このようにして、第一変形例では、Ｘ軸方向に最も長く連続するエッジ点の集合に属するエッジ点の座標データのみを原稿下エッジデータに残して、原稿下エッジデータを確定する。そして、最終的に、このエッジ点の集合から、下エッジ近似直線を求める。
【０２２７】
以上、第一変形例について説明したが、第一変形例では、最も長く連続するエッジ点の集合を最も原稿エッジとして確度の高いエッジ点の集合として取り扱って、右エッジ近似直線、左エッジ近似直線、及び、下エッジ近似直線を求めるようにした。
【０２２８】
従って、第一変形例によれば、原稿内部の罫線や埃等に惑わされて、原稿エッジの近似直線として誤った近似直線を求めてしまうのを、極力防止することができて、一部領域のプレスキャン程度で、高精度に、原稿サイズや原稿の傾き角、原稿の載置領域を推定することができる。
【０２２９】
［第二変形例］
続いて、第二変形例について説明する。但し、第二変形例の複合機は、Ｓ５９０，Ｓ７９０で実行する第一エッジ確定処理及びＳ８９０で実行する第二エッジ確定処理の内容が一部変更された程度のものであり、他の構成は、上述した実施例の複合機１と同一であるので、以下では、上記実施例と同一構成の部位についての説明を適宜省略する。
【０２３０】
図１７は、第二変形例において、ＣＰＵ７０が実行する第一エッジ確定処理を表すフローチャートである。
ＣＰＵ７０は、Ｓ５９０又はＳ７９０で、図１７に示す第一エッジ確定処理を開始すると、まず、Ｓ１２１０にて、予め設定された処理対象データが、少なくとも８つ以上のエッジ点の座標データを含むものであるか否かを判断する。
【０２３１】
そして、処理対象データが８つ以上のエッジ点の座標データを含むものであると判断すると（Ｓ１２１０でＹｅｓ）、Ｓ１２２０に移行し、処理対象データが８つ以上のエッジ点の座標データを含むものではないと判断すると（Ｓ１２１０でＮｏ）、Ｓ１２２０〜Ｓ１２９０の処理を実行することなく、当該第一エッジ確定処理を終了する。
【０２３２】
一方、Ｓ１２２０に移行すると、ＣＰＵ７０は、Ｓ６２０での処理と同様に、処理対象データに登録されたエッジ点であって、Ｙ座標値が最大のエッジ点を、検査開始点に設定する。その後、Ｓ１２３０に移行する。
【０２３３】
また、Ｓ１２３０に移行すると、ＣＰＵ７０は、検査開始点を１つ目のエッジ点として、処理対象データから、Ｙ軸マイナス方向に続く計８個のエッジ点の座標データを抽出する。但し、検査開始点から８つ目のエッジ点までの区間において連続性が途切れる地点がある場合、即ち、区分けコードが挿入されている場合には（以下、「ケースＡ」と称する。）、８個のエッジ点の座標データを抽出せずに、検査開始点からその連続性が途切れる地点の直前までのエッジ点を抽出する。同様に、検査開始点からＹ軸マイナス方向に位置するエッジ点が８個未満である場合には（以下、「ケースＢ」と称する。）、検査開始点から終端のエッジ点（即ちＹ値最小エッジ点）までのエッジ点を抽出する。
【０２３４】
また、Ｓ１２３０での処理を終えると、ＣＰＵ７０は、Ｓ１２３５に移行し、Ｓ１２３０での抽出過程でケースＡ及びケースＢのいずれか一方の事象が発生したか否かを判断し、ケースＡ及びケースＢのいずれか一方の事象が発生したと判断した場合には（Ｓ１２３５でＹｅｓ）、Ｓ１２６０に移行し、ケースＡ及びケースＢのいずれの事象も発生しなかったと判断した場合には（Ｓ１２３５でＮｏ）、Ｓ１２４０に移行する。
【０２３５】
また、Ｓ１２４０に移行すると、ＣＰＵ７０は、直前のＳ１２３０で抽出した計８個のエッジ点の座標データを用いて、これらエッジ点の近似直線を算出し、この後には、算出した近似直線の傾き及び切片の値を、当該近似直線の算出に用いたエッジ点の座標データと関連付けて、ＲＡＭ８０に記憶する（Ｓ１２４５）。その後、Ｓ１２５０に移行する。
【０２３６】
また、Ｓ１２５０に移行すると、ＣＰＵ７０は、Ｓ１２３０で抽出したエッジ点の内、Ｙ座標値が最小のエッジ点を基準にして、当該Ｙ座標値が最小のエッジ点よりＹ軸マイナス方向に位置するエッジ点が、処理対象データに登録されているか否かを判断する。即ち、上記基準とするエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）である場合、Ｙ座標値がＹ０未満のエッジ点が処理対象データに登録されているか否かを判断する。
【０２３７】
そして、上記基準とするエッジ点よりＹ軸マイナス方向に位置するエッジ点が、処理対象データに登録されていると判断すると（Ｓ１２５０でＹｅｓ）、検査開始点を、上記基準とするエッジ点よりＹ軸マイナス方向に位置するエッジ点であって、Ｙ座標値が最大のエッジ点に更新する（Ｓ１２５５）。その後、Ｓ１２３０に移行する。
【０２３８】
このようにして、ＣＰＵ７０は、Ｓ１２３０〜Ｓ１２５５の処理を繰返し実行し、処理対象データに登録されたエッジ点の近似直線を、８個のエッジ点からなる小グループ毎に求めて、各小グループの近似直線の傾き及び切片の値を、その近似直線の算出に用いたエッジ点の座標データと関連付け、ＲＡＭ８０に蓄積する。
【０２３９】
そして、Ｙ軸マイナス方向に位置するエッジ点が、処理対象データ内でなくなると（Ｓ１２５０でＮｏ）、ＣＰＵ７０は、Ｓ１２７０に移行する。この他、Ｓ１２３０〜Ｓ１２５５の処理を繰返し実行する過程で、上記ケースＡ及びケースＢのいずれか一方の事象が発生し（Ｓ１２３５でＹｅｓ）、Ｓ１２６０に移行した場合には、発生した事象がケースＢであるか否かを判断し、発生した事象がケースＡである場合には（Ｓ１２６０でＮｏ）、Ｓ１２５０に移行して、後続のエッジ点について、Ｓ１２３０〜Ｓ１２５５の処理を実行するが、発生した事象がケースＢである場合には、近似直線の算出を止めて、Ｓ１２７０に移行する。
【０２４０】
また、Ｓ１２７０に移行すると、ＣＰＵ７０は、それまでに算出しＲＡＭ８０に記録した各小グループの近似直線の傾きから、傾きについてのヒストグラムデータを生成する（Ｓ１２７０）。尚、図１８は、Ｓ１２７０で生成する傾きのヒストグラムデータを、グラフ化して示した説明図である。
【０２４１】
本変形例では、近似直線が採りうる傾きの範囲を複数のクラスに区分することで、傾きに対して複数のクラスを設定している。Ｓ１２７０では、各小グループの傾きを、その値に応じたクラスに分類し、各クラスの度数を算出することで、傾きのヒストグラムデータを生成する。
【０２４２】
そして、傾きのヒストグラムデータから、傾きについて度数が最大のクラスを特定し、処理対象データの中から、度数が最大のクラスに属する傾きの近似直線を算出するに至った小グループ（エッジ点の集合）の全てを選択する（Ｓ１２７５）。
【０２４３】
また、Ｓ１２７５での処理を終えると、ＣＰＵ７０は、ＲＡＭ８０に蓄積された各小グループの近似直線の切片の情報に基づき、Ｓ１２７５で選択した各小グループの近似直線の切片についてのヒストグラムデータを生成する（Ｓ１２８０）。
【０２４４】
即ち、ＲＡＭ８０に蓄積された各小グループの近似直線の切片の情報の中から、Ｓ１２７５で選択した小グループについての切片の情報を選択的に用いて、切片についてのヒストグラムデータを生成する。
【０２４５】
尚、本変形例では、近似直線が採りうる切片の範囲を複数のクラスに区分することで、切片に対して複数のクラスを設定している。Ｓ１２８０では、Ｓ１２７５で選択した各小グループの切片を、その値に応じたクラスに分類して、各クラスの度数を算出することで、切片のヒストグラムデータを生成する。
【０２４６】
そして、切片のヒストグラムデータから、切片について度数が最大のクラスを特定し、Ｓ１２７５で選択した小グループ群の中から、当該特定したクラスに属する切片の近似直線を算出するに至った小グループの全てを選択する（Ｓ１２８５）。
【０２４７】
そして、Ｓ１２８５での処理を終えると、ＣＰＵ７０は、Ｓ１２９０に移行し、Ｓ１２８５で選択した小グループに属するエッジ点以外のエッジ点の座標データを、処理対象データから削除して、処理対象データ内に、Ｓ１２８５で選択した小グループに属するエッジ点の座標データのみが残るように、処理対象データを更新する。その後、当該第一エッジ確定処理を終了する。
【０２４８】
このようにして、第二変形例の第一エッジ確定処理では、度数の最も高い近似直線が算出された小グループの集合を、原稿エッジである確度の高いエッジ点の集合であると取り扱って、これらのエッジ点の座標データのみが残るように、処理対象データを更新する。
【０２４９】
このような手順により、第二変形例では、Ｓ５９０において原稿右エッジデータを確定し、Ｓ７９０において原稿左エッジデータを確定する。
一方、Ｓ８９０においては、原稿下エッジデータを処理対象データに設定して、図１９に示す第二エッジ確定処理を実行することにより、当該原稿下エッジデータを確定する。尚、図１９は、第二変形例において、ＣＰＵ７０が実行する第二エッジ確定処理を表すフローチャートである。
【０２５０】
図１９に示す第二エッジ確定処理を開始すると、ＣＰＵ７０は、まず、Ｓ１３１０にて、予め設定された処理対象データが、少なくとも８つ以上のエッジ点の座標データを含むものであるか否かを判断する。
【０２５１】
そして、処理対象データが８つ以上のエッジ点の座標データを含むものであると判断すると（Ｓ１３１０でＹｅｓ）、Ｓ１３２０に移行し、処理対象データが８つ以上のエッジ点の座標データを含むものではないと判断すると（Ｓ１３１０でＮｏ）、Ｓ１３２０〜Ｓ１３９０の処理を実行することなく、当該第二エッジ確定処理を終了する。
【０２５２】
一方、Ｓ１３２０に移行すると、ＣＰＵ７０は、Ｓ９２０での処理と同様に、処理対象データに登録されたエッジ点であって、Ｘ座標値が最大のエッジ点を、検査開始点に設定する。その後、Ｓ１３３０に移行する。
【０２５３】
また、Ｓ１３３０に移行すると、ＣＰＵ７０は、検査開始点を１つ目のエッジ点として、処理対象データから、Ｘ軸マイナス方向に続く計８個のエッジ点の座標データを抽出する。但し、検査開始点から８つ目のエッジ点までの区間において連続性が途切れる地点がある場合、即ち、区分けコードが挿入されている地点がある場合には（ケースＡ）、８個のエッジ点の座標データを抽出せずに、検査開始点からその連続性が途切れる地点の直前までのエッジ点を抽出する。同様に、検査開始点からＸ軸マイナス方向に続くエッジ点が８個未満である場合には（以下、「ケースＣ」と称する。）、検査開始点から終端のエッジ点（即ちＸ値最小エッジ点）までのエッジ点を抽出する。
【０２５４】
また、Ｓ１３３０での処理を終えると、ＣＰＵ７０は、Ｓ１３３５に移行し、Ｓ１３３０での抽出過程でケースＡ及びケースＣのいずれか一方の事象が発生したか否かを判断し、ケースＡ及びケースＣのいずれか一方の事象が発生したと判断した場合には（Ｓ１３３５でＹｅｓ）、Ｓ１３６０に移行し、ケースＡ及びケースＣのいずれの事象も発生しなかったと判断した場合には（Ｓ１３３５でＮｏ）、Ｓ１３４０に移行する。
【０２５５】
また、Ｓ１３４０に移行すると、ＣＰＵ７０は、直前のＳ１３３０で抽出した計８個のエッジ点の座標データを用いて、これらエッジ点の近似直線を算出し、この後には、上記算出した近似直線の傾き及び切片の値を、当該近似直線の算出に用いたエッジ点の座標データと関連付けて、ＲＡＭ８０に記憶する（Ｓ１３４５）。その後、Ｓ１３５０に移行する。
【０２５６】
また、Ｓ１３５０に移行すると、ＣＰＵ７０は、Ｓ１３３０で抽出したエッジ点の内、Ｘ座標値が最小のエッジ点を基準にして、当該Ｘ座標値が最小のエッジ点よりＸ軸マイナス方向に位置するエッジ点が、処理対象データに登録されているか否かを判断する。即ち、上記基準とするＸ座標値が最小のエッジ点の画素位置が（Ｘ，Ｙ）＝（Ｘ０，Ｙ０）である場合、Ｘ座標値がＸ０未満のエッジ点が処理対象データに登録されているか否かを判断する。
【０２５７】
そして、上記基準のエッジ点よりＸ軸マイナス方向に位置するエッジ点が、処理対象データに登録されていると判断すると（Ｓ１３５０でＹｅｓ）、検査開始点を、上記基準のエッジ点よりＸ軸マイナス方向に位置するエッジ点であって、Ｘ座標値が最大のエッジ点に更新する（Ｓ１３５５）。その後、Ｓ１３３０に移行する。
【０２５８】
このようにして、ＣＰＵ７０は、Ｓ１３３０〜Ｓ１３５５の処理を繰返し実行し、処理対象データに登録されたエッジ点の近似直線を、８個のエッジ点からなる小グループ毎に求め、各小グループの近似直線の傾き及び切片の値を、その近似直線の算出に用いたエッジ点の座標データと関連付けて、ＲＡＭ８０に蓄積する。
【０２５９】
そして、Ｘ軸マイナス方向に位置するエッジ点が、処理対象データ内でなくなると（Ｓ１３５０でＮｏ）、ＣＰＵ７０は、Ｓ１３７０に移行する。この他、Ｓ１３３０〜Ｓ１３５５の処理を繰返し実行する過程で、上記ケースＡ及びケースＣのいずれか一方の事象が発生し（Ｓ１３３５でＹｅｓ）、Ｓ１３６０に移行した場合には、発生した事象がケースＣであるか否かを判断し、発生した事象がケースＡである場合には（Ｓ１３６０でＮｏ）、Ｓ１３５０に移行して、後続のエッジ点について、Ｓ１３３０〜Ｓ１３５５の処理を実行するが、発生した事象がケースＣである場合には、近似直線の算出を止めて、Ｓ１３７０に移行する。
【０２６０】
また、Ｓ１３７０に移行すると、ＣＰＵ７０は、それまでに算出しＲＡＭ８０に記録した各小グループの近似直線の傾きから、Ｓ１２７０での処理と同様に、傾きのヒストグラムデータを生成する。
【０２６１】
そして、傾きのヒストグラムデータから、傾きについて度数が最大のクラスを特定し、処理対象データの中から、度数が最大のクラスに属する傾きの近似直線を算出するに至った小グループの全てを選択する（Ｓ１３７５）。
【０２６２】
また、Ｓ１３７５での処理を終えると、ＣＰＵ７０は、ＲＡＭ８０に蓄積された各小グループの近似直線の切片の情報に基づき、Ｓ１３７５で選択した各小グループの近似直線の切片についてのヒストグラムデータを生成する（Ｓ１３８０）。即ち、ＲＡＭ８０に蓄積された各小グループの近似直線の切片の情報の中から、Ｓ１３７５で選択した小グループについての切片の情報を選択的に用いて、切片についてのヒストグラムデータを生成する。具体的には、Ｓ１２８０での処理と同様、Ｓ１３７５で選択した各小グループの切片を、その値に応じたクラスに分類して、各クラスの度数を算出することで、切片のヒストグラムデータを生成する。
【０２６３】
その後、ＣＰＵ７０は、切片のヒストグラムデータから、切片について度数が最大のクラスを特定し、Ｓ１３７５で選択した小グループ群の中から、当該特定したクラスに属する切片の近似直線を算出するに至った小グループの全てを選択する（Ｓ１３８５）。
【０２６４】
そして、Ｓ１３８５での処理を終えると、ＣＰＵ７０は、Ｓ１３９０に移行し、Ｓ１３８５で選択した小グループに属するエッジ点以外のエッジ点の座標データを、処理対象データから削除して、処理対象データ内に、Ｓ１３８５で選択した小グループに属するエッジ点の座標データのみが残るように、処理対象データを更新する。その後、当該第二エッジ確定処理を終了する。
【０２６５】
このようにして、第二変形例の第二エッジ確定処理では、度数の最も高い近似直線が算出された小グループの集合を、原稿エッジ（下エッジ）である確度の高いエッジ点の集合であると取り扱って、これらのエッジ点の座標データのみが残るように、処理対象データを更新する。このような手順により、第二変形例では、Ｓ８９０において原稿下エッジデータを確定する。
【０２６６】
以上、第二変形例について説明したが、第二変形例では、度数の最も高い近似直線が算出された小グループの集合を、原稿エッジとしての確度の高いエッジ点の集合として取り扱い、右エッジ近似直線、左エッジ近似直線、及び、下エッジ近似直線を求める。
【０２６７】
従って、第二変形例によれば、原稿内部の罫線や埃等に惑わされて、原稿エッジの近似直線として誤った近似直線を求めてしまうのを、極力防止することができ、一部領域のプレスキャン程度で、高精度に、原稿サイズや原稿の傾き角、原稿の載置領域を推定することができる。
［特許請求の範囲との対応関係］
以上、本発明の実施例について説明したが、本発明の画像読取装置が有する画像解析機能は、ＣＰＵ７０によりソフトウェア的に実現されている。また、読取制御手段は、読取制御部２０により実現されている。
【０２６８】
また、変換手段は、ＣＰＵ７０が実行するＳ２１５の処理により実現され、選択手段は、ＣＰＵ７０が実行するＳ５１０〜Ｓ５８０，Ｓ７１０〜Ｓ７８０，Ｓ８１０〜Ｓ８８０の処理により実現されている。特に、「第一の方向とは垂直な第二の方向へ連続するエッジ点を探索する際の起点とするエッジ点を検出する」動作は、Ｓ５２５，Ｓ７２５，Ｓ８２５等の処理により実現されている。
【０２６９】
この他、検出手段は、ＣＰＵ７０が実行するＳ５９０，Ｓ７９０，Ｓ８９０の処理により実現されている。特に、検査対象切替設定手段は、ＣＰＵ７０が実行するＳ６２０，Ｓ６８０の処理により実現されている。尚、上述した実施例では、一部領域のプレスキャンにより得られた画像データを検査対象データに設定して原稿エッジを検出しており、プレスキャン領域は、原稿台の中央より端側に位置しているので、Ｙ座標値が最大のエッジ点を検査開始点に設定することで、最も原稿台の中央寄りのグループを検査対象のグループに設定する動作を実現している。
【０２７０】
また、第一判定手段は、Ｓ６５０の処理により実現され、乖離度算出手段は、Ｓ６６０の処理により実現され、第二判定手段は、Ｓ６７０の処理により実現されている。
この他、近似直線算出手段は、Ｓ１２４０，Ｓ１３４０の処理により実現され、ヒストグラムデータ生成手段は、Ｓ１２７０，Ｓ１２８０，Ｓ１３７０，Ｓ１３８０の処理により実現されている。
［その他］
また、本発明は、上記実施例に限定されるものではなく、種々の態様を採ることができる。例えば、上記実施例では、コンタクトイメージセンサを読取ユニットとして備えるディジタル複合機１に、本発明を適用した例を説明したが、本発明は、コンタクトイメージセンサを読取ユニットとして備える画像読取装置に限定されるものではないことは言うまでもない。
【図面の簡単な説明】
【０２７１】
【図１】ディジタル複合機１の構成を表すブロック図である。
【図２】読取ガラス１１の読取可能領域Ｒ０を示した説明図である。
【図３】ＣＰＵ７０が実行する複写制御処理を表すフローチャートである。
【図４】ＣＰＵ７０が実行する自動変倍複写処理を表すフローチャートである。
【図５】ＣＰＵ７０が実行する原稿推定処理を表すフローチャートである。
【図６】ＣＰＵ７０が実行する右エッジ検出処理を表すフローチャートである。
【図７】エッジ画像データの構成を示した説明図である。
【図８】ＣＰＵ７０が実行する第一エッジ確定処理を表すフローチャートである。
【図９】原稿右エッジデータの確定手法を説明した説明図である。
【図１０】ＣＰＵ７０が実行する左エッジ検出処理を表すフローチャートである。
【図１１】ＣＰＵ７０が実行する下エッジ検出処理を表すフローチャートである。
【図１２】ＣＰＵ７０が実行する第二エッジ確定処理を表すフローチャートである。
【図１３】原稿左下角位置及び原稿右下角位置の推定方法を示した説明図である。
【図１４】第一変形例の第一エッジ確定処理を表すフローチャートである。
【図１５】第一変形例における原稿右エッジデータの確定手法を表す説明図である。
【図１６】第一変形例の第二エッジ確定処理を表すフローチャートである。
【図１７】第二変形例の第一エッジ確定処理を表すフローチャートである。
【図１８】ヒストグラムデータを表す説明図である。
【図１９】第二変形例の第二エッジ確定処理を表すフローチャートである。
【符号の説明】
【０２７２】
１…ディジタル複合機、１０…画像読取部、１１…読取ガラス、１１ａ…原稿台、１３…筐体、１３ａ…フレーム、１５…読取ユニット、１６…搬送機構、１７…モータ、２０…読取制御部、３０…印刷部、４０…印刷制御部、５０…表示操作部、６０…通信部、７０…ＣＰＵ、８０…ＲＡＭ、９０…フラッシュメモリ、ＭＫ…マーク、Ｐ…原稿、Ｒ０…読取可能領域
【図１】
0004941317.tif 000002
【図２】
0004941317.tif 000003
【図３】
0004941317.tif 000004
【図５】
0004941317.tif 000005
【図６】
0004941317.tif 000006
【図８】
0004941317.tif 000007
【図９】
0004941317.tif 000008
【図１０】
0004941317.tif 000009
【図１１】
0004941317.tif 000010
【図１２】
0004941317.tif 000011
【図１３】
0004941317.tif 000012
【図１４】
0004941317.tif 000013
【図１５】
0004941317.tif 000014
【図１６】
0004941317.tif 000015
【図１７】
0004941317.tif 000016
【図１８】
0004941317.tif 000017
【図１９】
0004941317.tif 000018
【図４】
0004941317.tif 000019
【図７】
0004941317.tif 000020