以下、本発明の好ましい実施形態について、添付図面を参照して説明する。まず、図1から図4を参照して、本発明の第1実施形態について説明する。図1(a)は、本発明の画像読取装置の一実施形態であるスキャナ10の電気的構成を示すブロック図である。詳細は後述するが、本実施形態のスキャナ10は、ゴミなどによる異常画像の発生、例えば、出力画像における副走査方向に延びる黒筋の発生を抑制しつつ、原稿の読み取りを早期に開始できるよう構成される。
スキャナ10には、CPU11、ROM12、RAM13、EEPROM14、操作部15、LCD16、CIS17、読取駆動部18、ADF19、フロントセンサ20、リアセンサ21、USBインターフェイス(USB_I/F)22、ネットワークインターフェイス(ネットワークI/F)23が主に設けられる。これらの各部11〜23は、バスライン24を介して互いに接続される。
CPU11は、ROM12に記憶される固定値やプログラム、RAM13に記憶されているデータに従って、スキャナ10の各部を制御する。ROM12は、読み出し専用のメモリである。
ROM12には、スキャナ10の動作を制御する制御プログラム12aや、制御プログラム12aを実行する際に参照する定数やテーブルなどが格納される。後述する図3および図4のフローチャートに示す各処理は、CPU11が制御プログラム12aに従い実行する処理である。
RAM13は、CPU11の処理に必要な情報を一時的に記憶する書換可能な揮発性のメモリである。EEPROM14は、書換可能であるとともに、電源遮断後も内容を保持可能な不揮発性のメモリである。EEPROM14には、後述するゴミ記憶領域14aが設けられる。
操作部15は、スキャナに設定値や指示など入力するためのものである。操作部15としては、LCD16に重ねて設けられるタッチパネルや、メカニカルキーなどが例示される。LCD16は、各種画面を表示する液晶表示装置である。
CIS17は、コンタクトイメージセンサ(Contact Image Sensor)で原稿を読み取る読取部である。CIS17は、主走査方向に直線状に配列された複数の受光素子を有するリニアイメージセンサ、RGB3色の発光ダイオードを有する光源、原稿で反射された反射光をイメージセンサの各受光素子に結像させるロッドレンズアレイなどを有する。
主走査方向とは、プラテンガラス44,45(図2参照)の面に平行な方向であり、かつ、読取駆動部18によるCIS17の移動方向に直交する方向である。主走査方向は、ADF19によりプラテンガラス44,45上を搬送される原稿の搬送方向に直交する向きでもある。
読取駆動部18は、CIS17を副走査方向に移動させるためのものである。読取駆動部18は、ステッピングモータであるモータ、当該モータをステップ駆動するための駆動信号を生成するモータ駆動部などを含む。副走査方向とは、ADF19によりプラテンガラス44,45上を搬送される原稿の搬送方向に沿った方向であり、矢印F方向または矢印B方向(図2参照)である。
ADF19は、原稿トレイ58(図2参照)にセットされた原稿を、搬送経路57(図2参照)に沿ってCIS17による読取位置まで搬送させるとともに、CIS17による読み取り後の原稿を排紙トレイ59まで搬送させる。
フロントセンサ20は、原稿トレイ58にセットされた原稿を検出するためのセンサである。リアセンサ21は、ADF19により搬送される原稿を検出するためのセンサである。フロントセンサ20およびリアセンサ21は、いずれも、フォトセンサ等から構成される。
フロントセンサ20およびリアセンサ21は、それぞれの位置に原稿があるか否かに応じて、出力レベルの異なる信号を出力する。スキャナ10は、フロントセンサ20またはリアセンサ21から出力される信号に基づいて、原稿トレイ58にセットされた原稿の有無と、リアセンサ21の位置における原稿の有無を検知できる。
USB_I/F23は、USBプラグを介して、例えば、USBメモリなどの記憶媒体や、パーソナルコンピュータやハードディスクなどの他の装置を通信可能に接続するための装置であり、周知の装置で構成される。ネットワーク_I/F24は、スキャナ10を、LANやインターネットなどのネットワーク(図示せず)に接続するためのインターフェイスである。
図1(b)は、EEPROM14に設けられるゴミ記憶領域14aを説明するための模式図である。ゴミ記憶領域14aは、第2プラテンガラス45上にゴミがあるなど、異常画像を発生させる可能性が検出された場合に、その位置(以下、この位置を「ゴミ検出位置」と称す)を記憶する領域である。本実施形態では、ゴミ検出位置における副走査方向の位置(以下「副走査位置」と称す)をゴミ記憶領域14aに記憶する。
ゴミ検出位置Qは、ゴミ記憶領域14aの先頭Pから順次記憶される。ゴミ記憶領域14aには、末尾指定値Rが記憶される。末尾指定値Rは、これより後方にはゴミ検出位置Qが存在しないことを示す値である。末尾指定値Rは、ゴミ検出位置Qとしては取り得ない値が設定されており、本実施形態では、65535である。末尾指定値Rは、ゴミ記憶領域14aの初期状態において先頭Pに記憶される。異常画像を発生させる可能性が検出される毎に、ゴミ検出位置Qが末尾指定値Rの位置に書き込まれ、末尾指定値Rはその後方側に記憶される。
図2は、スキャナ10の一部を簡略化して示す模式図である。スキャナ10の筐体43は、概ね箱型に形成されており、上部に第1プラテンガラス44と、第2プラテンガラス45とが並設されている。
原稿カバー46は、各プラテンガラス44,45を覆う閉姿勢と、各プラテンガラス44,45を開放する開姿勢とに回動可能に筐体43に連結されている。原稿カバー46には、ADF19、原稿トレイ58、排紙トレイ59などが設けられている。
ADF19の内部には、分離ローラ50、分離ローラ50を軸支する軸に基端側を軸支されたアーム51の先端部に回転自在に設けられている吸入ローラ52、複数の搬送ローラ53,54、排紙ローラ55、これらに圧接する複数の従動ローラ56が設けられている。原稿はこれらのローラに搬送されて搬送経路57を搬送され、CIS17によって読み取られる位置を通過して、排紙トレイ59に排紙される。
CIS17は、スキャナ10の筐体43の内部に収容されている。CIS17は、ADF19により搬送される原稿を読み取る場合、第2プラテンガラス45の直下にて停止し、その位置を読取位置として、光源の色を順次切り替えながら、第2プラテンガラス45を介して原稿を読み取る。一方、CIS17は、第1プラテンガラス44上に載置される原稿を読み取る場合、読取駆動部18を用いて、CIS17を副走査方向(矢印F方向または矢印B方向)に一定速度で移動させつつ、光源の色を順次切り替えながら原稿を読み取る。
第2プラテンガラス45を介してCIS17に対向する側には、CIS17が第2プラテンガラス45を介して読み取ることのできる白色の基準板60が設けられている。本実施形態では、原稿の読み取り後に、CIS17が基準板60を読み取ることにより、第2プラテンガラス45上にゴミがあるなど、異常画像を発生させる可能性の検出を行う。
フロントセンサ20は、原稿トレイ58にセットされた原稿の有無を検出するセンサとして機能する。一方、リアセンサ21は、CIS17による原稿の読み取り開始タイミングを計るためのセンサとして機能する。具体的に、スキャナ10は、フロントセンサ20が原稿を検出したタイミングから、所定の搬送量だけ原稿が搬送されたタイミングで、CIS17による原稿の読み取りを開始する。
また、リアセンサ21は、CIS17による原稿の読み取り終了タイミングを計るためのセンサとして機能する。具体的に、スキャナ10は、リアセンサ21が原稿を検出しなくなったタイミングから、所定の搬送量だけ原稿が搬送されたタイミングで、CIS17による原稿の読み取りを終了する。
図3(a)は、CPU11が制御プログラム12aに従って実行するADF読取処理を示すフローチャートである。本処理は、ADF19を用いて原稿を搬送しながら、当該原稿を読み取る処理である。CPU11は、ADF19を用いた原稿の読取指示の受け付けを待機する(S301:No)。
ADF19を用いた原稿の読取指示を、CPU11が受け付けた場合(S301:Yes)、CPU11は、読取位置設定処理を実行する(S302)。読取位置設定処理(S302)は、CIS17の副走査方向の読取位置を設定する処理である。詳細は図4(a)を参照して後述するが、読取位置設定処理(S302)では、異常画像を発生させる可能性がある位置を避けた位置に読取位置が設定される。
CPU11は、光量の調整やシェーディング補正などの準備処理を実行する(S303)。CPU11は、読取駆動部18を用いて、CIS17を、副走査方向に移動させ、読取位置設定処理(S302)にて設定された読取位置に配置する(S304)。CPU11は、原稿トレイ58にセットされている原稿の、ADF19による搬送を開始する(S305)。
CPU11は、リアセンサ21からオン信号が入力されることを待機する(S306:No)。リアセンサ21は、当該リアセンサ21が原稿を検出しない場合にオフ信号を出力し、原稿を検出した場合にオン信号を出力する。つまり、CPU11は、ADF19により搬送される原稿の先端が、リアセンサ21による検出位置に到達することを待機する。
リアセンサ21からオン信号が入力されたと、CPU11が判断した場合(S306:Yes)、CPU11は、読取開始カウンタであるConの設定を行う(S307)。読取開始カウンタConは、リアセンサ21により原稿が検出されてから、CIS17による原稿の読み取りを開始するまで、読取駆動部18のモータが原稿を搬送するのに要する搬送ステップ数(以下「開始待機ステップ数」と称す)をカウントするカウンタである。具体的に、S307において、CPU11は、読取開始カウンタConに対するデフォルト値から、(Ymid−Y)を差し引いた値を読取開始カウンタConに設定する。
Ymidは、図3(b)に示すように、第2プラテンガラス45の副走査方向(矢印F方向または矢印B方向)の範囲内であって、画質を損なわない範囲として予め決められている範囲Wにおける、副走査方向の中央位置である。つまり、範囲Wにおける副走査方向の始点Ysおよび終点Yeの中点がYmidである。なお、範囲Wとしては、例えば、スキャナ10のメーカが定める、MTF(Modulation Transfer Function)値の保証範囲、つまり、読取品質の保証範囲を採用できる。
Yは、読取位置設定処理(S302)にて設定された副走査方向の読取位置である。デフォルトでのCIS17の読取位置はYmidである。つまり、S307にて設定された読取開始カウンタConの値によりカウントされる開始待機ステップ数は、デフォルトの開始待機ステップ数を、読取位置設定処理(S302)にて設定された読取位置Yに応じて補正した期間である。よって、読取位置設定処理(S302)にて設定されるYの値が変動する構成において、Yの値にかかわらず、正しいタイミングで原稿の読み取りを開始できる。
CPU11は、読取開始カウンタConの値が0であるかを判断する(S308)。読取開始カウンタConの値が0でないと、CPU11が判断した場合(S308:No)、CPU11は、原稿の搬送に伴い読取開始カウンタConの値をデクリメントし(S318)、処理をS308に移行する。読取開始カウンタConの値が0であると、CPU11が判断した場合(S308:Yes)、CPU11は、CIS17による原稿の読み取りを開始する(S309)。
CPU11は、リアセンサ21からオフ信号が入力されることを待機する(S310:No)。つまり、CPU11は、ADF19により搬送される原稿の後端が、リアセンサ21による検出位置から外れるまで待機する。
リアセンサ21からオフ信号が入力されたと、CPU11が判断した場合(S310:Yes)、CPU11は、読取終了カウンタであるCoffの設定を行う(S311)。読取終了カウンタCoffは、リアセンサ21により原稿が検出されなくなってから、CIS17による原稿の読み取りを終了するまで、読取駆動部18のモータが原稿を搬送するのに要する搬送ステップ数(以下「終了待機ステップ数」と称す)をカウントするカウンタである。
具体的に、S311において、CPU11は、読取終了カウンタCoffに対するデフォルト値から、(Ymid−Y)を差し引いた値をCoffに設定する。つまり、S311にて設定された読取終了カウンタCoffの値によりカウントされる終了待機ステップ数は、デフォルトの終了待機ステップ数を、読取位置設定処理(S302)にて設定された読取位置Yに応じて補正した期間である。よって、読取位置設定処理(S302)にて設定されるYの値が変動する構成において、Yの値にかかわらず、正しいタイミングで原稿の読み取りを終了できる。
CPU11は、読取終了カウンタCoffの値が0であるかを判断する(S312)。読取終了カウンタCoffの値が0でないと、CPU11が判断した場合(S312:No)、CPU11は、原稿の搬送に伴い読取終了カウンタCoffの値をデクリメントし(S319)、処理をS312に移行する。読取終了カウンタCoffの値が0であると、CPU11が判断した場合(S312:Yes)、CPU11は、CIS17による原稿の読み取りを終了する(S313)。
CPU11は、フロントセンサ20からオン信号が入力されているかを判断する(S314)。フロントセンサ20は、当該フロントセンサ20が原稿を検出しない場合にオフ信号を出力し、原稿を検出した場合にオン信号を出力する。つまり、CPU11は、原稿トレイ58に原稿がセットされているか否かを判断する。
フロントセンサ20からオン信号が入力されたと、CPU11が判断した場合(S314:Yes)、これは原稿トレイ58に原稿がセットされていることを示す。よって、かかる場合、CPU11は、処理をS306に移行し、次の原稿について、S306〜S313,S318,S319の処理を実行する。一方、フロントセンサ20からオン信号が入力されていない、すなわち、オフ信号が入力されていると、CPU11が判断した場合(S314:No)、CPU11は、ADF19による原稿の搬送を終了する(S315)。
CPU11は、S315の処理後、ゴミ記憶処理を実行する(S316)。詳細は図4(b)を参照して後述するが、ゴミ記憶処理(S316)は、第2プラテンガラス45上にゴミがあるなど、異常画像を発生させる可能性が検出された場合に、その位置(すなわち、ゴミ検出位置)を、EEPROM14のゴミ記憶領域14aに記憶する処理である。CPU11は、ゴミ記憶処理(S316)の実行後、読取駆動部18を用いて、CIS17を所定の待機位置に移動し(S317)、本処理を終了する。
図4(a)は、上述した読取位置設定処理(S302)を示すフローチャートである。CPU11は、ランダムにYの値を決定する(S401)。ただし、Yの値は、範囲Wの範囲内の値とする。CPU11は、変数Aとして、ゴミ記憶領域14aの先頭Pに記憶されている値を設定する(S402)。なお、ゴミ記憶領域14aにゴミ検出位置が記憶されていない場合には、S402〜S405の処理をスキップする。
CPU11は、変数Aの値が、S401にて決定されたYの値に等しいかを判断する(S403)。両者が等しいとCPU11が判断した場合(S403:Yes)、CPU11は、処理をS401に移行する。つまり、S401にて決定されたYの値が、ゴミ検出位置Qとしてゴミ記憶領域14aに記憶されている場合には、CPU11は、Yの値を再度ランダムに決定する。
一方、変数Aの値とS401にて決定されたYの値とが等しくないと、CPU11が判断した場合(S403:No)、CPU11は、変数Aとして、ゴミ記憶領域14aにおける次の値を設定する(S404)。CPU11は、S404にて設定された変数Aの値が、末尾指定値Rに等しいかを判断する(S405)。両者が等しくないとCPU11が判断した場合(S405:No)、CPU11は、処理をS403に移行する。つまり、S404にて設定された変数Aの値がゴミ検出位置Qである場合には、そのゴミ検出位置Qと現在のYの値とが等しいかの判断を行う。
一方、S404にて設定された変数Aの値が末尾指定値Rに等しいと、CPU11が判断した場合(S405:Yes)、CPU11は、読取位置をYに設定し(S406)、本処理を終了する。
読取位置設定処理(S302)によれば、CIS17の読取位置を、ゴミ検出位置Qを避けた位置に設定することができる。また、CIS17の読取位置は、画質を損なわない範囲として予め決められている範囲Wの範囲内に収められるので、ゴミ検出位置Qを避けたことに伴う画質の劣化を生じない。また、ランダムにYの値を決定するので、ゴミ検出位置Qを早期に避ける確率を高めることができるので、Yの値を早期に決定できる。
図4(b)は、上述したゴミ記憶処理(S316)を示すフローチャートである。CPU11は、ゴミ検知フラグに0を設定する(S421)。「ゴミ検知フラグ」は、第2プラテンガラス45上にゴミなどの異物があるなど、異常画像を発生させる可能性が検出されたか否かを特定するフラグであり、RAM13に設けられる。ゴミ検知フラグに1が設定されている場合、ゴミが検出されたことを示す。一方、ゴミ検知フラグに0が設定されている場合、ゴミが検出されていないことを示す。
CPU11は、CIS17に、現在の読取位置で、第2プラテンガラス45を介してCIS17に対向する位置に設けられている白色の基準板60を1ライン分読み取らせる(S422)。なお、基準板60は、白色の基準板に限らず、灰色の基準板などであってもよい。CPU11は、S422の読み取りによって得られた画像データにおける先頭の画素を対象画素に設定する(S423)。
CPU11は、対象画素の画素値が閾値を超えるかを判断する(S424)。対象画素の画素値が閾値を超えないと、CPU11が判断した場合(S424:No)、CPU11は、基準板60を読み取った画像データに異常がある、すなわち、異常画像を発生させる可能性が検出されたとして、ゴミ検知フラグに1を設定し(S425)、処理をS426に移行する。一方、対象画素の画素値が閾値を越えると、CPU11が判断した場合(S424:Yes)、CPU11は、S425の処理をスキップして、処理をS426に移行する。
S426において、CPU11は、S422の読み取りによって得られた画像データを構成する全画素についてS424の判断を行ったかを判断する(S426)。CPU11がS426の判断を否定した場合(S426:No)、CPU11は、対象画素を次の画素に移動し(S429)、処理をS424に移行する。
CPU11がS426の判断を肯定した場合(S426:Yes)、CPU11は、ゴミ検知フラグに1が設定されているかを判断する(S427)。ゴミ検知フラグに1が設定されていないと、CPU11が判断した場合(S427:No)、CPU11は、本処理を終了する。
一方、ゴミ検知フラグに1が設定されていると、CPU11が判断した場合(S427:Yes)、CPU11は、異常画像を発生させる可能性が検出された位置、すなわち、画素値が閾値を超えない画素の位置について、その副走査位置を、ゴミ検出位置Qとしてゴミ記憶領域14aに記憶し(S428)、本処理を終了する。なお、画素値が閾値を超えない画素が複数ある場合、CPU11は、それらの各副走査位置をそれぞれゴミ記憶領域14aに記憶する。
上記第1実施形態によれば、原稿を読み取った後の期間に検出したゴミ検出位置Qを、次回以降の読み取りにおけるCIS17の読取位置に反映させるので、ゴミなどによる異常画像の発生を抑制しつつ、原稿の読み取りを早期に開始できる。また、CPU11が読取指示を受け付ける毎に、すなわち、1の読取ジョブ毎に、CIS17の読取位置を、異常画像を発生させる可能性がある位置を避けて設定するので、1の読取ジョブを好適に実施できる。
次に、図5を参照して、第2実施形態について説明する。第1実施形態では、1の読取ジョブ毎に、CIS17の読取位置を、異常画像を発生させる可能性がある位置を避けて設定する構成とした。これに代えて、第2実施形態では、1ページ分の原稿の読み取り毎に、異常画像を発生させる可能性がある位置を検出し、検出された位置を、次ページの原稿の読み取り時に反映させる。
第2実施形態において、上述した第1実施形態と同一の部分については、同一の符号を付し、その説明は省略する。図5は、第2実施形態のADF読取処理を示すフローチャートである。本処理は、第2実施形態の制御プログラム12aに従いCPU11により実行される。
第1実施形態のADF読取処理(図3(a))との相違点を中心に説明する。1ページ分の原稿の読み取りの完了後、フロントセンサ20からオン信号が入力されたと、CPU11が判断した場合(S314:Yes)、CPU11は、ゴミ記憶処理を実行する(S501)。ゴミ記憶処理(S501)は、上述したゴミ記憶処理(S316)と同様の処理である。
次に、CPU11は、読取位置設定処理を実行する(S502)。読取位置設定処理(S502)は、上述した読取位置設定処理(S302)と同様の処理である。CPU11は、読取駆動部18を用いて、CIS17を、副走査方向に移動させ、読取位置設定処理(S502)にて設定された読取位置に配置する(S503)。CPU11は、S503の処理後、処理をS306に移行する。
上記第2実施形態によれば、1ページ分の読み取り毎に、CIS17の読取位置を、ゴミ検出位置Qを避けた位置に配置することができる。よって、1ページを読み取った際に第2プラテンガラス45にゴミなどが付着することがあっても、その影響を避けることができる。これにより、各ページの原稿の読み取りを好適に行うことができる。
次に、図6から図8を参照して、第3実施形態について説明する。第1実施形態では、ゴミ検出位置Qとして、主走査方向の位置(以下「主走査位置」と称す)については考慮しない構成であった。第3実施形態では、ゴミ検出位置Qとして主走査位置も考慮する。第3実施形態において、上述した第1実施形態と同一の部分については、同一の符号を付し、その説明は省略する。なお、以下の図6から図8の各フローチャートに示す各処理は、第3実施形態の制御プログラム12aに従いCPU11により実行される。
図6(a)は、第3実施形態のゴミ記憶処理(S316)を示すフローチャートである。なお、本実施形態では、EEPROM14に設けられるゴミ記憶領域14aは、図6(b)に示すように、ゴミ検出位置Qの主走査位置を記憶する第1領域14a1と、ゴミ検出位置Qの副走査位置を記憶する第2領域14a2とから構成される。
本実施形態では、ゴミ検出位置Qは、その主走査方向の位置(すなわち、主走査位置)、および、副走査方向の位置(以下「副走査位置」と称す)が、それぞれ、第1領域14a1および第2領域14a2の先頭Pから順次記憶される。つまり、第1領域14a1および第2領域14a2のそれぞれにおいて、先頭Pから数えてK番目に記憶される値は、1のゴミ検出位置Qの主走査位置と副走査位置を示す値である。なお、第1領域14a1および第2領域14a2には、第1実施形態と同様に、末尾指定値Rが記憶される。
図6(a)のフローチャートについて、第1実施形態のゴミ記憶処理(図4(b))との相違点を中心に説明する。S427において、ゴミ検知フラグに1が設定されていると、CPU11が判断した場合(S427:Yes)、CPU11は、画素値が閾値を超えない画素の位置について、主走査位置BXおよび副走査位置BYをRAM13に記憶する(S601,S602)。
CPU11は、CIS素子破損判定処理を実行する(S603)。詳細は図7を参照して後述するが、CIS素子破損判定処理(S603)は、基準板60を読み取った画像データにおける異常が、CIS17を構成するイメージセンサの受光素子の異常によるものであるかを判定する処理である。
CIS素子破損判定処理(S603)にて、画像データの異常が受光素子の破損によるものでないと、CPU11が判定した場合(S604:No)、CPU11は、RAM13に記憶されている主走査位置BXを、ゴミ記憶領域14aにおける第1領域14a1に記憶する(S605)。次に、CPU11は、RAM13に記憶されている副走査位置BYを、ゴミ記憶領域14aにおける第2領域14a2に記憶し(S606)、本処理を終了する。
一方、CIS素子破損判定処理(S603)にて、画像データの異常が受光素子の破損によるものであると、CPU11が判定した場合(S604:Yes)、CPU11は、表示部16に表示するなど、所定のエラー報知を実行し(S607)、本処理を終了する。
S604〜S607の処理によれば、画像データの異常が受光素子の破損によるものであると判定された場合には、異常が検出された位置がゴミ記憶領域14aに記憶されない。画像データの異常が受光素子の破損によるものである場合、当該異常のあると検出された位置を避けるように読取位置を設定したとしても、異常画像の発生が解消されることはない。よって、かかる場合には、異常があると検出されたデータをゴミ記憶領域14aに記憶させないことにより、EEPROM14の記憶容量の消費を抑制できる。また、かかる場合にエラーを報知することにより、スキャナ10を早期に修理に出すことができ、早期に正常な状態に戻すことができる。
図7は、上述したCIS素子破損判定処理(S603)を示すフローチャートである。CPU11は、ゴミ記憶領域14aの第2領域14a2に記憶される各副走査位置の値を、GY配列としてRAM13に格納する(S701)。CPU11は、ゴミ記憶領域14aの第1領域14a1に記憶される各主走査位置の値を、GX配列としてRAM13に格納する(S702)。
CPU11は、変数iを0に設定する(S703)。CPU11は、GX配列におけるGX[i]の値が、過去のゴミ記憶処理によるS605にてRAM13に記憶された主走査位置BXの値に等しいかを判断する(S704)。両値が等しいとCPU11が判断した場合(S704:Yes)、CPU11は、−N<GY[i]−BY<Nが満たされるかを判断する(S705)。閾値Nの単位は画素である。つまり、CPU11は、GY配列におけるGY[i]とS606にてRAM13に記憶された副走査位置BYとの間の距離が、N画素未満であるかを判断する。なお、閾値Nの値としては、読取解像度の値に応じて異なる。例えば、読取解像度が300dpiである場合には、N=10(画素)である。この場合、読取解像度が600dpiになると、N=20(画素)となる。
−N<GY[i]−BY<Nが満たされないと、CPU11が判断した場合、すなわち、GY[i]と副走査位置BYとの間の距離がN画素以上離れている場合(S705:No)、CPU11は、GX[i]とGY[i]とにより特定される位置と、主走査位置BXの値と副走査位置BYの値とにより特定される位置における画像データの異常を、受光素子の破損によるものであるとみなす。よって、かかる場合、CPU11は、S706〜S709の処理を実行し、本処理を終了する。
具体的に、CPU11は、GX配列からGX[i]を削除し、GY配列からGY[i]を削除する(S706)。CPU11は、主走査位置BXの値および副走査位置BYの値をRAM13から削除する(S707)。CPU11は、ゴミ記憶領域14aの第1領域14a1および第2領域14a2から、S706にて削除したGX[i]およびGY[i]に相当する各値を削除する(S708)。CPU11は、ゴミ記憶領域14aの第1領域14a1および第2領域14a2において、各値を先頭側に詰める(S709)。
一方、GX[i]の値と主走査位置BXの値とが等しくないと、CPU11が判断した場合(S704:No)、CPU11は、処理をS710に移行する。−N<GY[i]−BY<Nが満たされると、CPU11が判断した場合(S705:Yes)、CPU11は、処理をS710に移行する。
S710において、CPU11は、変数iに1を加算する(S710)。CPU11は、GX[i]の値が、末尾指定値Rの65535であるかを判断する(S711)。GX[i]の値が65535でないと、CPU11が判断した場合(S711:No)、CPU11は、処理をS704に移行する。一方、GX[i]の値が65535であると、CPU11が判断した場合(S711:Yes)、CPU11は、本処理を終了する。
上記CIS素子破損判定処理(S603)によれば、主走査位置BXと主走査方向に同じ位置であり、かつ、副走査位置BYと閾値N以上離れた位置が、ゴミ記憶領域14aの第1領域14a1および第2領域14a2にゴミ検出位置Qとして記憶されている場合には、CPU11は、受光素子が破損したと判定する。
なお、主走査位置BXと副走査位置BYとの組が複数組存在する場合には、各組について、主走査位置が一致し、副走査方向BYの距離が閾値N以上離れているかを判断する。該当する場合には、受光素子が破損したと判定する。
図8は、第3実施形態の読取位置設定処理(S302)を示すフローチャートである。CPU11は、ゴミ記憶領域14aの第2領域14a2に記憶される各副走査位置の値を、GY配列としてRAM13に格納する(S801)。CPU11は、ゴミ記憶領域14aの第1領域14a1に記憶される各主走査位置の値を、GX配列としてRAM13に格納する(S802)。なお、第3実施形態の読取位置設定処理において、ゴミ記憶領域14aにゴミ検出位置が記憶されていない場合には、S810およびS817の処理のみが実行される。
CPU11は、GY配列を昇順に並び替える(S803)。CPU11は、GX配列をGY配列に合わせて並び変える(S804)。CPU11は、変数iおよび変数jをいずれも0に設定する(S805)。
CPU11は、N>GY[i+1]−GY[i]が満たされるかを判断する(S806)。閾値Nは、上述したCIS素子破損判定処理(図7)のS705にて用いた閾値と同じものである。よって、CPU11は、S806において、昇順に並び替えられたGY配列における隣接する位置の距離がN画素未満であるかを判断する。
N>GY[i+1]−GY[i]が満たされないと、CPU11が判断した場合(S806:No)、CPU11は、GY[i]の値を、GA配列におけるGA[j]の値として設定する(S807)。GA配列とは、ゴミ検出位置Qの間隔を考慮して再配列した、ゴミ検出位置Qの副走査位置を示す配列である。GA配列はRAM13に格納される。CPU11は、S807の処理後、変数iおよび変数jの値にそれぞれ1を加算し(S808)、処理をS809に移行する。
一方、N>GY[i+1]−GY[i]が満たされると、CPU11が判断した場合(S806:Yes)、CPU11は、M>GX[i+1]−GX[i]が満たされるかを判断する(S818)。閾値Mは、閾値Nと同じく単位は画素であり、読取解像度の値に応じて異なる。例えば、読取解像度が300dpiである場合には、M=10(画素)である。この場合、読取解像度が600dpiになると、M=20(画素)となる。
M>GX[i+1]−GX[i]が満たされないと、CPU11が判断した場合(S818:No)、CPU11は、処理をS807に移行する。一方、M>GX[i+1]−GX[i]が満たされると、CPU11が判断した場合(S818:Yes)、CPU11は、GY[i]とGX[i]とにより特定されるゴミ検出位置Qと、GY[i+1]とGX[i+1]とにより特定されるゴミ検出位置Qが、1まとまりのゴミに基づくものであるとみなす。よって、かかる場合、CPU11は、S819〜S821の処理を実行する。
具体的に、CPU11は、GA[j]として、(GY[i+1]+GY[i]−N)/2を設定する(S819)。CPU11は、GA[j+1]に65534を設定する(S820)。CPU11は、GA[j+2]として、(GY[i+1]+GY[i]+N)/2を設定する(S821)。
S820にてGA[j+1]に設定される「65534」という値は、GA[j]からGA[j+2]までの範囲が一連のゴミ領域であることを示す値(以下、この値を「連続領域指定値」と称す)である。なお、連続領域指定値としては、「65534」のように、ゴミ検出位置Qとしては取り得ない値が採用される。
よって、S819〜S821の処理によれば、GY[i]とGY[i+1]との距離がN画素より短く、かつ、GX[i]とGX[i+1]との距離がM画素より短い場合には、GY[i]とGY[i+1]との中心から、副走査方向に±(N/2)の範囲が一連のゴミ領域であることがGA配列に設定される。CPU11は、S821の処理後、変数iおよび変数jの値にそれぞれ1を加算し(S822)、処理をS809に移行する。
S809において、CPU11は、GY[i]の値が、末尾指定値Rの65535であるかを判断する(S809)。GY[i]の値が65535でないと、CPU11が判断した場合(S809:No)、CPU11は、処理をS806に移行する。一方、GY[i]の値が65535であると、CPU11が判断した場合(S809:Yes)、CPU11は、上述したS401と同様に、ランダムにYの値を決定する(S810)。
CPU11は、変数jを0に設定する(S811)。CPU11は、GA配列におけるGA[j]の値が、S810にて決定されたYの値に等しいかを判断する(S812)。両者が等しいとCPU11が判断した場合(S812:Yes)、CPU11は、処理をS810に移行する。つまり、S810にて決定されたYの値が、GA配列に記憶されている場合には、CPU11は、Yの値を再度ランダムに決定する。
一方、GA[j]の値がS810にて決定されたYの値に等しくないと、CPU11が判断した場合(S812:No)、CPU11は、GA[j]の値が連続領域指定値(本実施形態では、65534)であるかを判断する(S813)。GA[j]=65534であると、CPU11が判断した場合(S813:Yes)、CPU11は、GA[j−1]<Y<GA[j+1]が満たされるかを判断する(S814)。
GA[j−1]<Y<GA[j+1]が満たされると、CPU11が判断した場合(S814:Yes)、CPU11は、処理をS810に移行する。つまり、S810にて決定されたYの値が、連続領域指定値により指定される一連のゴミ領域の範囲内の値である場合には、CPU11は、Yの値を再度ランダムに決定する。よって、S814によれば、2つのゴミ検出位置Qについて、主走査位置間の距離が所定距離以下であり、かつ、副走査位置間の距離が所定距離以下である場合に、これら2つのゴミ検出位置Qの間は、CIS17の読取位置の候補から除外される。
一方、GA[j−1]<Y<GA[j+1]が満たされないと、CPU11が判断した場合(S814:No)、CPU11は、処理をS815に移行する。S813において、GA[j]の値が65534でないと、CPU11が判断した場合(S813:No)、CPU11は、処理をS815に移行する。
S815において、CPU11は、変数jの値に1を加算する(S815)。CPU11は、GA[j]の値が、末尾指定値Rの65535であるかを判断する(S816)。GA[j]の値が65535でないと、CPU11が判断した場合(S816:No)、CPU11は、処理をS812に移行する。つまり、GA配列における次の値について、S812〜S814の処理を実行する。一方、GA[j]の値が65535であると、CPU11が判断した場合(S816:Yes)、CPU11は、読取位置をYに設定し(S817)、本処理を終了する。
上記第3実施形態によれば、ゴミ検出位置Qの副走査位置だけでなく、主走査位置も考慮するので、異常画像の発生をより好適に抑制できる。また、主走査位置を考慮したことにより、原稿台の汚れと、CIS17の受光素子の破損とを区別して処理することができる。
また、2つのゴミ検出位置Qが近い位置にある場合には、それらのゴミ検出位置Qは共通するゴミに起因する可能性が高い。よって、2つのゴミ検出位置Qの距離が短い場合には、それらのゴミ検出位置Qの間もCIS17の読取位置の候補から除外することにより、異常画像の発生を好適に抑制し得る。
次に、図9(a)を参照して、第4実施形態について説明する。本実施形態では、スキャナ10の電源がオンに切り替えられたタイミングで、異常画像を発生させる可能性がある位置を検出する。第4実施形態において、上述した第1実施形態と同一の部分については、同一の符号を付し、その説明は省略する。
図9(a)は、電源ON時処理を示すフローチャートである。本処理は、スキャナ10の電源をオフからオンに切り替えた場合に開始される。本処理は、第4実施形態の制御プログラム12aに従いCPU11により実行される。なお、CPU11は、本処理が行われている間は、読取指示を受け付けないものとする。
CPU11は、初期化処理を実行する(S901)。初期化処理では、CIS17を初期位置に設定する処理や、ADF19に残っている原稿を排紙する処理などが実行される。CPU11は、読取位置設定処理(S902)を実行する。読取位置設定処理(S902)は、上述した読取位置設定処理(S302)と同様の処理である。CPU11は、読取駆動部18を用いて、CIS17を、読取位置設定処理(S902)にて設定された読取位置に配置する(S903)。
CPU11は、ゴミ記憶処理(S904)を実行する。ゴミ記憶処理(S904)は、上述したゴミ記憶処理(S316)と同様の処理である。CPU11は、読取駆動部18を用いて、CIS17を所定の待機位置に移動し(S905)、本処理を終了する。
上記第4実施形態によれば、スキャナ10の電源がオンに切り替えられたタイミングで、読取指示が行われる前に、異常画像を発生させる可能性がある位置を検出する。よって、スキャナ10の電源がオンに切り替えられた後、最初の読取指示に基づく原稿の読み取りを好適に行うことができる。
次に、図9(b)を参照して、第5実施形態について説明する。本実施形態では、予め決められたタイミングで、異常画像を発生させる可能性がある位置を検出する。第5実施形態において、上述した第1実施形態と同一の部分については、同一の符号を付し、その説明は省略する。
図9(b)は、定期処理を示すフローチャートである。本処理は、所定期間(例えば、1日)毎に開始される。本処理は、第5実施形態の制御プログラム12aに従いCPU11により実行される。
CPU11は、読取位置設定処理(S921)を実行する。読取位置設定処理(S921)は、上述した読取位置設定処理(S302)と同様の処理である。CPU11は、読取駆動部18を用いて、CIS17を、読取位置設定処理(S921)にて設定された読取位置に配置する(S922)。
CPU11は、ゴミ記憶処理(S923)を実行する。ゴミ記憶処理(S923)は、上述したゴミ記憶処理(S316)と同様の処理である。CPU11は、読取駆動部18を用いて、CIS17を所定の待機位置に移動し(S924)、本処理を終了する。
上記第5実施形態によれば、定期的なタイミングで、読取指示が行われる前に、異常画像を発生させる可能性がある位置を検出する。よって、定期的なタイミングで、ゴミ検出位置Qをゴミ検出領域14aに記憶することができるので、読取指示に基づく原稿の読み取りを常に良い状態で行うことができる。なお、原稿カバー46が開姿勢となった場合など、予め決められたタイミングで上記の定期処理を実行する構成としてもよい。
上記実施形態において、スキャナ10が、画像読取装置の一例である。制御プログラム12aが、画像読取プログラムの一例である。CPU11が、制御部の一例である。ADF19が、原稿搬送部の一例である。第2プラテンガラス45が、原稿台の一例である。CIS17が、読取部の一例である。読取駆動部18が、移動部の一例である。EEPROM14が、記憶部の一例である。基準板60が、基準板の一例である。範囲Wが、読取許容範囲の一例である。
S421〜S426,S429の処理を実行するCPU11が、検出手段の一例である。S428,S605,S606処理を実行するCPU11が、位置記憶手段の一例である。S301の処理を実行するCPU11が、指示受付手段の一例である。S302,S502の処理を実行するCPU11が、読取位置設定手段の一例である。S304,S503の処理を実行するCPU11が、移動手段の一例である。S306〜S313の処理を実行するCPU11が、読取手段の一例である。S401,S810の処理を実行するCPU11が、位置選択手段の一例である。S403,S812の処理を実行するCPU11が、判断手段の一例である。S307,S311の処理を実行するCPU11が、変更手段の一例である。
以上、実施形態に基づき本発明を説明したが、本発明は上述した実施形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変更が可能であることは容易に推察できるものである。
例えば、上記実施形態では、本発明の画像読取装置として、スキャナ10を例示したが、ADFを用いた原稿の読み取りを実行可能な装置であれば、多機能周辺装置など種々の装置を採用できる。
上記第3実施形態では、2つのゴミ検出位置Qについて、主走査位置間の距離が所定距離以下であり、かつ、副走査位置間の距離が所定距離以下である場合に、これら2つのゴミ検出位置Qの間が、CIS17の読取位置から除外されるよう構成した。これに代えて、2つのゴミ検出位置Qについて、主走査位置間の距離または副走査位置間の距離のいずれか一方が所定距離以下である場合に、これら2つのゴミ検出位置Qの間が、CIS17の読取位置から除外されるようにしてもよい。
上記実施形態では、CIS17の読取位置は、画質を損なわない範囲として予め決められている範囲W内で設定する構成としたが、範囲W内にゴミ検出位置Qを副走査方向に避ける領域が存在しない場合には、CIS17の読取位置を、第2プラテンガラス45の副走査方向の範囲であり、かつ、CIS17の読取位置を範囲Wの外に設定する構成としてもよい。よって、範囲W内にゴミ検出位置Qを副走査方向に避ける領域が存在しない場合であっても、原稿の読み取りが実行されないという状況を抑制できる。
上記実施形態では、CPU11が、図3(a),図4,図5,図6(a),図7〜図9に記載される各処理を実行する構成として説明したが、これら各図に記載される各処理を、複数のCPUが協同的に実行する構成としてもよい。また、ASICなどのICが、単独で、または、複数によって協働的に、上記各図に記載される各処理を実行する構成してもよい。また、CPU11とASICなどのICとが協同して、上記各図に記載される各処理を実行する構成してもよい。
図3(a),図4,図5,図6(a),図7〜図9に示す各処理のうち、一部の処理を、特許請求の範囲における独立請求項から逸脱しない範囲で、省略または変更してもよい。例えば、図3(a)におけるS307の処理を、S305の処理の前に行う構成としてもよい。また、上記実施形態により説明した各特徴や、上述した各変形例を適宜組み合わせて実施する構成としてもよい。