[実施形態]
以下に、本発明の一実施形態に係る画像読取装置10について図面を参照して説明する。図1において、上下方向および左右方向は矢印により示される。
<画像読取装置10の機械的構成>
図1において、画像読取装置10は、筐体43の上部に原稿カバー46が設けられている。筐体43は、概ね箱型に形成されており、上部に第1プラテンガラス44と、第2プラテンガラス45とが配置されている。白色基準板61は、第2プラテンガラス45と筐体43との間に固定され、原稿GSの背景色である白色を有している。
原稿カバー46は、各プラテンガラス44,45を覆う閉姿勢と、各プラテンガラス44,45を開放する開姿勢とに回動可能に筐体43に連結されている。原稿カバー46には、ADF19、原稿トレイ58、排紙トレイ59などが設けられている。
ADF19は、原稿トレイ58にセットされた原稿を、搬送経路57に沿って読取部17による読取位置まで搬送させるとともに、読取部17による読み取り後の原稿を排紙トレイ59まで搬送させる。
ADF19の内部には、分離ローラ50、分離ローラ50を軸支する軸に基端側を軸支されたアーム51の先端部に回転自在に設けられている吸入ローラ52、複数の搬送ローラ53,54、排紙ローラ55、これらに圧接する複数の従動ローラ56が設けられている。原稿はこれらのローラに搬送されて搬送経路57を搬送され、読取部17によって読
み取られる読取位置を通過して、排紙トレイ59に排紙される。読取位置は複数の位置から構成され、読取部17が副走査方向に所定の読取領域内を移動することで変更可能となっている。
読取部17は、画像読取装置10の筐体43の内部に収容されている。読取部17は、ADF19により搬送される原稿を読み取る場合、第2プラテンガラス45を介して原稿押え板60に対向する位置にて停止し、その位置を読取位置として、光源の色を順次切り替えながら、第2プラテンガラス45を介して原稿を読み取る。一方、読取部17は、第1プラテンガラス44上に載置される原稿を読み取る場合、駆動回路18を用いて、読取部17を副走査方向(矢印F方向または矢印B方向)に一定速度で移動させつつ、光源の色を順次切り替えながら原稿を読み取る。
原稿押え板60は、読取部17が第2プラテンガラス45を介して読み取ることのできる位置に設けられている。原稿押え板60は、均一な濃度である白色を有する。本実施形態では、原稿の読み取り後に、読取部17が原稿押え板60を読み取ることにより、第2プラテンガラス45上にゴミがあるなど、異常画像を発生させる可能性の検出を行う。
フロントセンサ20は、原稿トレイ58にセットされた原稿の有無を検出するセンサとして機能する。一方、リアセンサ21は、読取部17による原稿の読み取り開始タイミングを計るためのセンサとして機能する。具体的に、画像読取装置10は、リアセンサ21が原稿を検出したタイミングから、所定の搬送量だけ原稿が搬送されたタイミングで、読取部17による原稿の読み取りを開始する。
また、リアセンサ21は、読取部17による原稿の読み取り終了タイミングを計るためのセンサとして機能する。具体的に、画像読取装置10は、リアセンサ21が原稿を検出しなくなったタイミングから、所定の搬送量だけ原稿が搬送されたタイミングで、読取部17による原稿の読み取りを終了する。
<画像読取装置10の電気的構成>
画像読取装置10の電気的構成について図2を参照して説明する。図2(a)において、画像読取装置10は、CPU11、ROM12、RAM13、フラッシュPROM14、デバイス制御部22、アナログフロントエンド(以下、AFEという。)28、画像処理部23、および駆動回路18を構成要素の一部として備える。これらの構成要素は、バス24を介して、操作部15、表示部16、フロントセンサ20およびリアセンサ21に接続される。
ROM12は、後述する読取メイン処理、読取メイン処理中のサブルーチンの処理など、画像読取装置10の各種動作を実行するためのプログラムを記憶する。CPU11は、ROM12から読み出されたプログラムに従って、各部の制御を行う。フラッシュPROM14は、読み書き可能な不揮発性メモリであり、CPU11の制御処理により生成された各種のデータ、たとえば読取メイン処理により算出された異常画素位置などを記憶する。RAM13は、CPU11の制御処理により生成された算出結果などを一時的に記憶する。
フラッシュPROM14に設けられるゴミ記憶領域14aを図2(b)の模式図を用いて説明する。ゴミ記憶領域14aは、第2プラテンガラス45上にゴミがあるなど、異常画像を発生させる可能性が検出された場合に、その位置(以下、この位置を「ゴミ検出位置」という)を記憶する領域である。本実施形態では、ゴミ検出位置における副走査方向の位置(以下「副走査位置」という)をゴミ記憶領域14a1に記憶し、主走査方向の位置(以下「主走査位置」という)をゴミ記憶領域14a2に記憶する。
ゴミ検出位置Qは、その主走査方向の位置(すなわち、主走査位置)、および、副走査方向の位置(すなわち、副走査位置)が、それぞれ、ゴミ記憶領域14a1およびゴミ記憶領域14a2の先頭Pから順次記憶される。ゴミ記憶領域14a1、およびゴミ記憶領域14a2には、末尾指定値Rが記憶される。末尾指定値Rは、これより後方にはゴミ検出位置Qが存在しないことを示す値である。末尾指定値Rは、ゴミ検出位置Qとしては取り得ない値が設定されており、本実施形態では、65535である。末尾指定値Rは、ゴミ記憶領域14aの初期状態において先頭Pに記憶される。異常画像を発生させる可能性が検出される毎に、ゴミ検出位置Qが末尾指定値Rの位置に書き込まれ、末尾指定値Rはその後方側に記憶される。
デバイス制御部22は、読取部17に接続され、CPU11からの命令に基づいて、読取部17を制御する信号を読取部17に送信する。読取部17は、デバイス制御部22から読取部17を制御する信号を受け取ると、図示しない光源を点灯させるとともに、図示しない受光部が受光した受光量に応じたアナログ信号をAFE28に送信する。
AFE28は、読取部17に接続され、CPU11からの命令に基づいて、読取部17から送信されるアナログ信号をデジタルデータに変換する。AFE28は、予め定められた入力レンジおよび分解能を有する。たとえば、分解能は、10ビットであるならば「0」から「1023」の階調である。この場合、AFE28は、読取部17から送信されたアナログ信号をデジタルデータとして10ビット(0〜1023)の階調データに変換する。AFE45によって変換されたデジタルデータは、画像処理部23に送信される。
画像処理部23は、画像処理用の専用ICであるASICから構成され、デジタル画像データに各種の画像処理を施す。画像処理は、シェーディング補正などの各種の補正処理、および解像度変換処理などである。画像処理部23は、デジタル画像データに黒データBKおよび白データWHに基づいてシェーディング補正を行い階調値に補正する。さらに、画像処理部23は、階調値を間引いて出力することにより、解像度変換処理を行う。画像処理部23は、画像処理部23に設定された設定値に従い、これらのシェーディング補正処理や解像度変換処理を実行し、デジタル画像データ若しくは階調値をRAM13に記憶する。シェーディング補正に用いられる白データWHおよび黒データBKは、画像処理部23に設定される。
駆動回路18は、ADFモータMT1およびFBモータMT2に接続され、CPU11から送信される駆動指令に基づいてADFモータMT1およびFBモータMT2を駆動する。駆動回路18は、駆動指令により指令された回転量および回転方向に従ってADFモータMT1およびFBモータMT2を回転させる。ADFモータMT1が所定量だけ回転すると、給紙ローラ50、搬送ローラ53、54、および排紙ローラ55が所定角度回転し、搬送経路57において原稿GSが所定距離だけ搬送される。FBモータMT2が所定量だけ回転すると、読取部17が副走査方向(矢印F方向または矢印B方向)に移動される。
<実施形態の動作>
次に、画像読取装置10の動作について図面を参照して説明する。画像読取装置10は、原稿GSを読み取る読取メイン処理を主に実行する。読取メイン処理中のステップR1〜R9の処理、および各サブルーチンのステップの処理は、CPU11が実行する処理である。
(読取メイン処理)
読取メイン処理はユーザにより原稿GSが原稿トレイ58に載置され、フロントセンサ20がオンした状態で、操作部15の開始ボタンが押下されることにより開始される。読取メイン処理が開始されると、CPU11は、デバイス制御部22、および画像処理部23に読取設定値を設定する(R1)。具体的には、CPU11は、ユーザが設定した読取モードに対応する読取解像度に対する読取部17の設定をフラッシュPROM14から取得し、デバイス制御部22に設定する。CPU11は、画像処理部23に各種画像処理を施さないように設定する。さらに、CPU11は、駆動回路18に指令を出力し、読取部17を白色基準板61と対向する位置に移動させる。
CPU11は、読取部17の光源の調整、並びに白データWH及び黒データBKの取得を行う(R2)。具体的には、CPU11は、白色基準板61に向けて、読取部17の図示しない光源から光を照射させ、その反射光を読み取った時のアナログ信号がAFE28の入力レンジの最大となるように、光量STを調整する。そして、CPU11は、光源を光量STで点灯させ、白色基準板61を読み取る。CPU11は、読み取った1ライン分の各色のデジタル画像データを白データWHとして取得する。そして、CPU11は、光源を消灯させ、白色基準部材61を読み取る。CPU11は、読み取った1ラインのデジタル画像データを黒データBKとして取得する。
CPU11は、ライン距離係数LDFを算出する(R3)。詳細は後述するが、CPU11は、ゴミ記憶領域14aに記憶されていない対象ラインTLについて上流側検出領域に異常画素DPが存在するか否かを判断する(RA3)。CPU11は、異常画素DPが存在しない場合は、上流側ライン距離係数L(x)に0を設定し、異常画素DPが存在する場合は、対象ラインTLと異常画素DPとの距離LVSを算出する(RA5)。CPU11は、その算出した距離LVSを用いて上流側ライン距離係数L(x)を算出する(RA6)。下流側についても同様に行い、下流側ライン距離係数R(x)を算出する(RA10)。CPU11は、ゴミ記憶領域14aに記憶されていない検出領域内の全ての対象ラインTLについて上流側ライン距離係数L(x)、下流側ライン距離係数R(x)をライン距離係数LDFとして算出する。ここで、検出領域は対象ラインTLの搬送方向上流側と下流側とにそれぞれ設けられる。上流側検出領域と下流側検出領域とは、対象ラインTLからライン数Th離れたラインまでの領域である。ライン数Thは例えば「2」である。
CPU11は、近接画素間距離係数CDFを算出する(R4)。詳細は後述するが、CPU11は、ゴミ記憶領域14aに記憶されていない対象ラインTLについて上流側検出領域および下流側検出領域共に異常画素DPが存在するか否かを判断する(RB3、RB4)。CPU11は、異常画素DPが存在する場合は、上流側領域の異常画素DPと下流側領域の異常画素DPとの距離Kを算出する(RB8)。CPU11は、算出した距離Kのうち最短距離Kminに応じて、近接画素間距離係数P(x)を設定する(RB4、RB11、RB13)。CPU11は、ゴミ記憶領域14aに記憶されていない検出領域内の全ての対象ラインTLについて近接画素間距離係数P(x)を近接画素間距離係数CDFとして算出する。
CPU11は、状態係数DSFを算出する(R5)。詳細は後述するが、CPU11は、ゴミ記憶領域14aに記憶されていない対象ラインTLについて上流側検出領域に異常画素DPが存在するか否かを判断する(RC3)。CPU11は、異常画素DPが存在しない場合は、状態係数S(x)に0を設定する(RC4)。CPU11は、異常画素DPが存在する場合は、上流側検出領域の10%以上の画素数に異常画素DPが存在したときに、状態係数S(x)に1を設定し(RC6)、存在しなかったときは状態係数S(x)に0を設定する(RC4)。CPU11は、上流側検出領域内の異常画素が主走査方向もしくは副走査方向に隣接する連続画素であった場合は、状態係数S(x)に1を加算する(RC8)。下流側についても同様に行い、状態係数S(x)を算出する。CPU11は、ゴミ記憶領域14aに記憶されていない検出領域内の全ての対象ラインTLについて状態係数S(x)を状態係数DSFとして算出する。
CPU11は、異常画素係数DDFを算出する(R6)。具体的には、CPU11は、ゴミ記憶領域14aに記憶されていない検出領域内の全ての各ラインにおいて、上流側ライン距離係数L(x)に下流側ライン距離係数R(x)と近接画素間距離係数P(x)と状態係数S(x)とを加算し、異常画素係数D(x)として算出する。CPU11は、ゴミ記憶領域14aに記憶されていない検出領域内の全てのラインについて異常画素係数D(x)を異常画素係数DDFとして算出する。
CPU11は、読取位置SPを確定する(R7)。具体的には、CPU11は、異常画素係数DDFのうち最も小さい値を示す検出領域内の副走査位置を読取位置SPとして確定する。異常画素係数DDFのうち最も小さい値が複数ある場合は、CPU11は、白色基準板61に近い副走査方向(矢印B方向)の上流側に位置する副走査位置を読取位置SPとして確定する。
CPU11は、読取処理を実行する(R8)。具体的には、CPU11は、画像処理部23に各種画像処理を施すように設定する。CPU11は、駆動回路18により原稿GSを搬送させ、読取部17を読取位置SPまで移動させる。CPU11は、搬送された原稿GSを読み取らせる。CPU11は、R2で取得した白データWHおよび黒データBKに基づきシェーディング補正処理、各種補正処理、および解像度変換処理を順に実行し、階調値を生成させる。
CPU11は、異常画素記憶処理を実行する(R9)。具体的には、後述するが、CPU11は、1ライン分の階調値を読み取る(RD1)。CPU11は、読み取った1ライン分の階調値の先頭から後尾まで対象画素TPを順次設定しながら、閾値よりも小さい階調値を示す画素がある場合(RD3:No)に、その画素の位置をゴミ記憶領域14aに記憶する(RD4)。異常画素記憶処理(R9)が終了すると、読取メイン処理は終了する。
(ライン距離係数LDF算出処理)
図4に示すライン距離係数LDF算出処理(R3)が開始されると、CPU11は、対象ラインTLを設定する(RA1)。具体的には、CPU11は、現在設定されている対象ラインTLの次のラインを対象ラインTLとして設定する。現在設定されている対象ラインTLが最終ラインELの場合は、先頭ラインFLを対象ラインTLとして設定する。
CPU11は、対象ラインTLに異常画素DPが存在するか否かを判断する(RA2)。存在する場合(RA2:Yes)は、最終ラインELか否かを判断する処理(RA11)へ進める。存在しない場合は、上流側検出領域内に異常画素DPが存在するか否かを判断する処理(RA3)へ進める。
CPU11は、上流側検出領域内に異常画素DPが存在するか否かを判断する(RA3)。存在しない場合は、上流側ライン距離係数L(x)に0を設定する(RA4)。存在する場合は、対象ラインTLと上流側の異常画素DPとの距離LVSを算出する処理(RA5)へ進める。処理RA4が終了すると、下流側検出領域内に異常画素DPが存在するか否かを判断する処理(RA7)へ進める。ここで、上流側とは、対象ラインTLを基準として原稿搬送方向である副走査方向において上流側である。それとは逆に、下流側とは、対象ラインTLを基準として副走査方向において下流側である。
CPU11は、対象ラインTLと上流側異常画素との距離LVSを算出する(RA5)。具体的には、CPU11は、上流側の異常画素DPのうち最も対象ラインTLと近い異常画素DPを検索する。検索した異常画素DPの副走査位置と対象ラインTLの副走査位置との差分を距離LVSとして算出する。
CPU11は、上流側ライン距離係数L(x)を算出する(RA6)。具体的には、CPU11は、上流側検出領域内に存在するライン数Thから処理RA5で算出した距離LVSを引算し、その引算した結果に1を加算した値を上流側ライン距離係数L(x)として算出する。ここで、最後に加算した「1」はライン数Thとの関係から定められた数であり、上流ライン距離係数の異常画素係数DDFへの影響を強めたい場合は、最後に加算する値を大きく設定する。
CPU11は、下流側検出領域に異常画素DPが存在するか否かを判断する(RA7)。存在しない場合は、下流側ライン距離係数R(x)に0を設定する(RA8)。存在する場合は、対象ラインTLと下流側の異常画素DPとの距離RVSを算出する処理(RA6)へ進める。処理RA8が終了すると、最終ラインELか否かを判断する処理(RA11)へ進める。
CPU11は、対象ラインTLと下流側異常画素との距離RVSを算出する(RA9)。具体的には、CPU11は、下流側の異常画素DPのうち最も対象ラインTLと近い異常画素DPを検索する。検索した異常画素DPの副走査位置と対象ラインTLの副走査位置との差分を距離RVSとして算出する。
CPU11は、下流側ライン距離係数R(x)を算出する(RA10)。具体的には、CPU11は、下流側検出領域内に存在するライン数Thから処理RA9で算出した距離RVSを引算し、その引算した結果に1を加算した値を下流側ライン距離係数R(x)として算出する。ここで、最後に加算した「1」はライン数Thとの関係から定められた数であり、下流側ライン距離係数の異常画素係数DDFへの影響を強めたい場合は、最後に加算する値を大きく設定する。
CPU11は、対象ラインTLが最終ラインELか否かを判断する(RA11)。最終ラインELでない場合(RA11:No)は、対象ラインTL設定処理(RA1)へ進める。最終ラインELである場合(RA11:Yes)は、ライン距離係数LDF算出処理を終了する。
(近接画素間距離係数CDF算出処理)
図5に示す近接画素間距離係数CDF算出処理(R4)が開始されると、処理RA1と同様に、CPU11は、対象ラインTLを設定する(RB1)。具体的には、CPU11は、現在設定されている対象ラインTLの次のラインを対象ラインTLとして設定する。現在設定されている対象ラインTLが最終ラインELの場合は、先頭ラインFLを対象ラインTLとして設定する。
CPU11は、対象ラインTLに異常画素DPが存在するか否かを判断する(RB2)。存在する場合(RB2:Yes)は、最終ラインELか否かを判断する処理(RB14)へ進める。存在しない場合(RB2:No)は、上流側検出領域内に異常画素DPが存在するか否かを判断する処理(RB3)へ進める。
CPU11は、上流側検出領域内に異常画素DPが存在するか否かを判断する(RB3)。存在しない場合は、近接画素間距離係数P(x)に0を設定する(RB4)。存在する場合は、下流側検出領域内に異常画素DPが存在するか否かを判断する処理(RB5)へ進める。処理RB4が終了すると、対象ラインTLが最終ラインELか否かを判断する処理(RB14)に進める。
CPU11は、下流側検出領域内に異常画素DPが存在するか否かを判断する(RB5)。存在しない場合は、近接画素間距離係数P(x)に0を設定する(RB4)。存在する場合は、上流側対象異常画素設定処理(RB6)へ進める。処理RB4が終了すると、対象ラインTLが最終ラインELか否かを判断する処理(RB14)に進める。
CPU11は、上流側検出領域内に存在する異常画素DPについて対象異常画素TDPを設定する(RB6)。具体的には、CPU11は、上流側検出領域内に存在する異常画素DPにおいて、対象ラインTLに近く、且つ先頭画素に近い画素から順に対象異常画素TDPを設定する。
CPU11は、下流側検出領域内において対象異常画素TDPと最も近接している異常画素PDPを検索する(RB7)。具体的には、CPU11は、ゴミ記憶領域14aに記憶された異常画素DPから下流側検出領域に存在する異常画素DPを検索する。CPU11は、検索した異常画素DPから対象異常画素TDPが位置する主走査位置と最も近接する主走査位置の異常画素DPを検索する。CPU11は、最も近接する主走査位置の異常画素DPが複数ある場合は、対象ラインTLと最も近接する異常画素DPを検索する。CPU11は、この様に検索した最も近接する異常画素DPを下流側近接画素DDPとしてRAM13に記憶する。
CPU11は、対象異常画素TDPと下流側近接画素DDPとの距離Kを算出する(RB8)。具体的には、CPU11は、対象異常画素TDPと下流側近接画素DDPとの主走査方向の画素位置の差分を主走査差分画素数として算出する。CPU11は、同様に対象異常画素TDPと下流側近接画素DDPとの副走査方向の差分を副走査差分画素数として算出する。CPU11は、算出した主走査差分画素数と副走査差分画素数とについて2乗平均平方根を算出することにより、対象異常画素TDPと下流側近接画素DDPとの距離Kを算出する。
CPU11は、対象異常画素TDPが上流側検出領域内に存在する異常画素DPの最終異常画素EDPか否かを判断する(RB9)。最終異常画素EDPでない場合(RB9:No)は、上流側対象異常画素設定処理(RB6)へ進める。最終異常画素EDPである場合(RB9:Yes)は、距離Kの最小値Kminが3以下か否かを判断する処理(RB10)へ進める。
CPU11は、距離Kの最小値Kminが3以下か否かを判断する(RB10)。距離Kの最小値Kminが3以下の場合(RB10:Yes)は、近接画素間距離係数P(x)に3を設定する(RB11)。距離Kの最小値Kminが3より大きい場合(RB10:No)は、距離Kの最小値Kminが3より大きく5以下であるか否かを判断する処理(RB12)に進める。処理RB11が終了すると、対象ラインTLが最終ラインELか否かを判断する処理(RB14)に進める。
CPU11は、距離Kの最小値Kminが3より大きく5以下であるか否かを判断する(RB12)。3より大きく5以下である場合(RB12:Yes)は、近接画素間距離係数P(x)に1を設定する(RB13)。5より大きい場合(RB12:No)は、近接画素間距離係数P(x)に0を設定する処理(RB4)に進める。処理RB13が終了すると、対象ラインTLが最終ラインELか否かを判断する処理(RB14)に進める。
CPU11は、対象ラインTLが最終ラインELか否かを判断する(RB14)。最終ラインELでない場合(RB14:No)は、対象ラインTL設定処理(RB1)へ進める。最終ラインELである場合(RB14:Yes)は、近接画素間距離係数CDF算出処理を終了する。
(状態係数DSF算出処理)
図6に示す状態係数DSF算出処理が開始されると、CPU11は、処理RA1および処理RB1と同様に、CPU11は、対象ラインTLを設定する(RC1)。具体的には、CPU11は、現在設定されている対象ラインTLの次のラインを対象ラインTLとして設定する。現在設定されている対象ラインTLが最終ラインELの場合は、先頭ラインFLを対象ラインTLとして設定する。
CPU11は、対象ラインTLに異常画素DPが存在するか否かを判断する(RC2)。存在する場合(RC2:Yes)は、最終ラインELか否かを判断する処理(RC14)へ進める。存在しない場合(RC2:No)は、上流側検出領域内に異常画素DPが存在するか否かを判断する処理(RC3)へ進める。
CPU11は、上流側検出領域内に異常画素DPが存在するか否かを判断する(RC3)。存在しない場合(RC3:No)は、状態係数S(x)に0を設定する(RC4)。存在する場合(RC3:Yes)は、下流側検出領域内の異常画素数UDPNが上流側検出領域全体の画素数の10%以上か否かを判断する処理(RC5)へ進める。処理RC4が終了すると、上流側検出領域内の画素が連続しているか否かを判断する処理(RC7)へ進める。
CPU11は、上流側検出領域内の異常画素数UDPNが上流側検出領域全体の画素数の10%以上か否かを判断する(RC5)。10%より小さい場合(RC5:No)は、状態係数S(x)に0を設定する。10%以上の場合(RC5:Yes)は、状態係数S(x)に1を設定する(RC6)。処理RC4または処理RC6が終了すると、上流側検出領域内の画素が連続しているか否かを判断する処理(RC7)へ進める。
CPU11は、上流側検出領域内の画素が連続しているか否かを判断する(RC7)。具体的には、CPU11は、ゴミ記憶領域14aに記憶された画素のうち上流側検出領域内において、同一の副走査位置において隣接する異常画素DPが存在するか否か、または同一の主走査位置において隣接する異常画素DPが存在するか否かを判断する。連続していると判断した場合(RC7:Yes)は、状態係数S(x)に1を加算する(RC8)。連続していないと判断した場合(RC7:No)は、下流側検出領域内に異常画素DPが存在するか否かを判断する処理(RC9)へ進める。処理RC8が終了すると、下流側検出領域内に異常画素DPが存在するか否かを判断する処理(RC9)へ進める。
CPU11は、下流側検出領域内に異常画素DPが存在するか否かを判断する(RC9)。存在しない場合(RC9:No)は、対象ラインTLが最終ラインELか否かを判断する処理(RC14)へ進める。存在する場合(RC9:Yes)は、下流側検出領域内の異常画素数DDPNが下流側検出領域全体の画素数の10%以上か否かを判断する処理(RC10)へ進める。
CPU11は、下流側検出領域内の異常画素数DDPNが下流側検出領域全体の画素数の10%以上か否かを判断する(RC10)。10%より小さい場合(RC10:No)は、下流側検出領域内の画素が連続しているか否かを判断する処理(RC12)に進める。10%以上の場合(RC10:Yes)は、状態係数S(x)に1を加算する(RC11)。処理RC11が終了すると、下流側検出領域内の画素が連続しているか否かを判断する処理(RC12)へ進める。
CPU11は、下流側検出領域内の画素が連続しているか否かを判断する(RC12)。具体的には、CPU11は、ゴミ記憶領域14aに記憶された画素のうち下流側検出領域内において、同一の副走査位置において隣接する異常画素DPが存在するか否か、または同一の主走査位置において隣接する異常画素DPが存在するか否かを判断する。連続していると判断した場合(RC12:Yes)は、状態係数S(x)に1を加算する(RC13)。連続していないと判断した場合(RC12:No)は、対象ラインTLが最終ラインELか否かを判断する処理(RC14)に進める。処理RC13が終了すると、対象ラインTLが最終ラインELか否かを判断する処理(RC14)へ進める。
CPU11は、対象ラインTLが最終ラインELか否かを判断する(RC14)。最終ラインELでない場合(RC14:No)は、対象ラインTL設定処理(RC1)へ進める。最終ラインELである場合(RC14:Yes)は、状態係数DSF算出処理を終了する。
(異常画素記憶処理)
図7に示す異常画素記憶処理が開始されると、CPU11は、光源を光量STで点灯させ、原稿押え板60を読み取らせ、1ライン分の階調値を取得する(RD1)。
CPU11は、対象画素TPを設定する(RD2)。具体的には、CPU11は、現在設定されている対象画素TPの次の画素を対象画素TPとして設定する。現在設定されている対象画素TPが最終画素の場合は、先頭画素FPを対象画素TPとして設定する。
CPU11は、階調値が閾値よりも大きいか否かを判断する(RD3)。具体的には、CPU11は、処理RD1で取得した対象画素TPの階調値が閾値よりも大きいか否かを判断する。階調値が閾値よりも大きい場合(RD3:Yes)は、対象画素TPが最終画素EPか否かを判断する処理(RD5)へ進める。階調値が閾値以下である場合(RD3:No)は、異常画素位置記憶処理(RD4)へ進める。例えば、閾値は階調値の範囲(1023)の5%である51である。
CPU11は、対象画素TPの画素位置を異常画素位置として記憶する(RD4)。具体的には、CPU11は、対象画素TPの主走査位置をゴミ記憶領域14a2に記憶する。CPU11は、読取位置SPの副走査位置をゴミ記憶領域14a1に記憶する。
CPU11は、対象画素TPが最終画素EPか否かを判断する(RD5)。最終画素EPでない場合(RD5:No)は、対象画素TP設定処理(RD2)へ進める。最終画素EPである場合(RD5:Yes)は、異常画素記憶処理を終了する。
(具体的なケース)
図8を用いて、読取位置SPが確定される具体的なケースについて説明する。本ケースでは、簡単な模式図として図8(a)を示し、ゴミ記憶領域14aとして図8(b)を示す。本ケースでは、説明のため簡略化して主走査方向に10画素および副走査方向に16ラインの領域を読取領域として説明する。先頭ラインが0ラインであり、最終ラインが15ラインである。本ケースでは、読取領域内に5画素の異常画素が存在するときに読取位置SPを確定させる過程について説明する。本ケースでは、異常画素の位置は図8(a)において斜線で示した画素位置であり、図8(b)においてゴミ検出位置Qで囲まれた数値である。ここでも、検出領域の範囲を示すライン数Thを「2」とする。
本ケースでのライン距離係数LDFを算出する過程について説明する。対象ラインTLが「0ライン」に設定された場合の処理を説明する。上流側検出領域内に異常画素DPが存在しない(RA3:No)ため、上流側ライン距離係数L(0)は0に設定される。下流側検出領域内に異常画素DPが存在する(RA7:Yes)ため、対象ラインTLである「0ライン」と異常画素DPが存在する「1ライン」との差分である1が距離RVSとして算出される。さらに、処理RA10においてライン数Thを示す2から距離RVSを示す1を引算した値に1を加算することで下流側ライン距離係数R(0)が2と算出される。対象ラインTLは「0ライン」であるため最終ラインEL「15ライン」でない(RA11:No)ため処理RA1に進む。次に、対象ラインTLが「1ライン」に設定された場合の処理を説明する。異常画素DPが存在する(RA2:Yes)ため処理RA11に進む。対象ラインTLは「1ライン」であり最終ラインEL「15ライン」でない(RA11:No)ため、処理RA1に進む。
次に、対象ラインTLが「2ライン」に設定された場合の処理を説明する。上流側検出領域である「1ライン」に異常画素DPが存在する(RA3:Yes)ため、対象ラインTLを示す「2ライン」と異常画素DPが存在する「1ライン」との差分である1が距離LVSとして算出される。上流側ライン距離係数L(2)は、ライン数Thを示す2から距離LVSを示す1を引算した値に1を加算することで2と算出される。下流側検出領域である「4ライン」に異常画素DPが存在する(RA7:Yes)ため、対象ラインTLを示す「2ライン」と異常画素DPが存在する「4ライン」との差分である2が距離RVSとして算出される。下流側ライン距離係数R(2)は、ライン数Thを示す2から距離RVSを示す2を引算した値に1を加算することで1と算出される。対象ラインTLは「2ライン」であり最終ラインEL「15ライン」でない(RA11:No)ため、処理RA1に進む。
次に、対象ラインTLが「3ライン」に設定された場合の処理を説明する。上流側検出領域である「1ライン」に異常画素DPが存在する(RA3:Yes)ため、対象ラインTLを示す「3ライン」と異常画素DPが存在する「1ライン」との差分である2が距離LVSとして算出される。上流側ライン距離係数L(3)は、ライン数Thを示す2から距離LVSを示す2を引算した値に1を加算することで1と算出される。下流側検出領域である「4ライン」に異常画素DPが存在する(RA7:Yes)ため、対象ラインTL「3ライン」と異常画素DPが存在する「4ライン」との差分である1が距離RVSとして算出される。下流側ライン距離係数R(3)は、ライン数Thを示す2から距離RVSを示す1を引算した値に1を加算することで2と算出される。対象ラインTLは「3ライン」であるため最終ラインEL「15ライン」でない(RA11:No)ため処理RA1に進む。次に、対象ラインTLが「4ライン」に設定された場合の処理を説明する。異常画素DPが存在する(RA2:Yes)ため処理RA11に進む。対象ラインTLは「4ライン」であり最終ラインEL「15ライン」でない(RA11:No)ため、処理RA1に進む。
次に、対象ラインTLが「5ライン」に設定されたときは、上流側検出領域である「4ライン」に異常画素DPが存在する(RA3:Yes)ため、対象ラインTLを示す「5ライン」と異常画素DPが存在する「4ライン」との差分である1が距離LVSとして算出される。上流側ライン距離係数L(5)は、ライン数Thを示す2から距離LVSを示す1を引算した値に1を加算することで2と算出される。下流側検出領域である「6ライン」に異常画素DPが存在する(RA7:Yes)ため、対象ラインTLを示す「5ライン」と異常画素DPが存在する「6ライン」との差分である1が距離RVSとして算出される。下流側ライン距離係数R(5)は、ライン数Thを示す2から距離RVSを示す1を引算した値に1を加算することで2と算出される。対象ラインTLは「5ライン」であるため最終ラインEL「15ライン」でない(RA11:No)ため処理RA1に進む。次に、対象ラインTLが「6ライン」に設定された場合の処理を説明する。異常画素DPが存在する(RA2:Yes)ため処理RA11に進む。対象ラインTLは「6ライン」であり最終ラインEL「15ライン」でない(RA11:No)ため、処理RA1に進む。
次に、対象ラインTLが「7ライン」に設定された場合の処理を説明する。上流側検出領域である「6ライン」に異常画素DPが存在する(RA3:Yes)ため、対象ラインTLを示す「7ライン」と異常画素DPが存在する「6ライン」との差分である1が距離LVSとして算出される。上流側ライン距離係数L(7)は、ライン数Thを示す2から距離LVSを示す1を引算した値に1を加算することで2と算出される。下流側検出領域に異常画素DPが存在しない(RA7:No)ため、下流側ライン距離係数R(7)は0に設定される。対象ラインTLは「7ライン」であり最終ラインEL「15ライン」でない(RA11:No)ため、処理RA1に進む。
次に、対象ラインTLが「8ライン」に設定された場合の処理を説明する。上流側検出領域である「6ライン」に異常画素DPが存在する(RA3:Yes)ため、対象ラインTLを示す「8ライン」と異常画素DPが存在する「6ライン」との差分である2が距離LVSとして算出される。上流側ライン距離係数L(8)は、ライン数Thを示す2から距離LVSを示す2を引算した値に1を加算することで1と算出される。下流側検出領域である「10ライン」に異常画素DPが存在する(RA7:Yes)ため、対象ラインTLを示す「8ライン」と異常画素DPが存在する「10ライン」との差分である2が距離RVSとして算出される。下流側ライン距離係数R(8)は、ライン数Thを示す2から距離RVSを示す2を引算した値に1を加算することで1と算出される。対象ラインTLは「8ライン」であり最終ラインEL「15ライン」でない(RA11:No)ため、処理RA1に進む。
次に、対象ラインTLが「9ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素が存在しない(RA3:No)ため、上流側ライン距離係数L(9)は0に設定される。下流側検出領域である「10ライン」に異常画素DPが存在する(RA7:Yes)ため、対象ラインTLを示す「9ライン」と異常画素DPが存在する「10ライン」との差分である1が距離RVSとして算出される。下流側ライン距離係数R(9)は、ライン数Thを示す2から距離RVSを示す1を引算した値に1を加算することで2と算出される。対象ラインTLは「9ライン」であるため最終ラインEL「15ライン」でない(RA11:No)ため処理RA1に進む。次に、対象ラインTLが「10ライン」に設定された場合の処理を説明する。異常画素DPが存在する(RA2:Yes)ため処理RA11に進む。対象ラインTLは「10ライン」であり最終ラインEL「15ライン」でない(RA11:No)ため、処理RA1に進む。
次に、対象ラインTLが「11ライン」に設定された場合の処理を説明する。上流側検出領域である「10ライン」に異常画素DPが存在する(RA3:Yes)ため、対象ラインTLを示す「11ライン」と異常画素DPが存在する「10ライン」との差分である1が距離LVSとして算出される。上流側ライン距離係数L(11)は、ライン数Thを示す2から距離LVSを示す1を引算した値に1を加算することで2と算出される。下流側検出領域に異常画素DPが存在しない(RA7:No)ため、下流側ライン距離係数R(11)は0に設定される。対象ラインTLは「11ライン」であり最終ラインEL「15ライン」でない(RA11:No)ため、処理RA1に進む。
次に、対象ラインTLが「12ライン」に設定された場合の処理を説明する。上流側検出領域である「10ライン」に異常画素DPが存在する(RA3:Yes)ため、対象ラインTLを示す「12ライン」と異常画素DPが存在する「10ライン」との差分である2が距離LVSとして算出される。上流側ライン距離係数L(12)は、ライン数Thを示す2から距離LVSを示す2を引算した値に1を加算することで1と算出される。下流側検出領域に異常画素DPが存在しない(RA7:No)ため、下流側ライン距離係数R(12)は0に設定される。対象ラインTLは「12ライン」であり最終ラインEL「15ライン」でない(RA11:No)ため、処理RA1に進む。
次に、対象ラインTLが「13ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在しない(RA3:No)ため、上流側ライン距離係数L(13)は0に設定される。下流側ライン距離係数R(13)は、下流側検出領域に異常画素DPが存在しない(RA7:No)ため、下流側ライン距離係数R(13)は0に設定される。対象ラインTLは「13ライン」であり最終ラインEL「15ライン」でない(RA11:No)ため、処理RA1に進む。14ラインおよび15ラインも検出領域内に異常画素DPが存在しないため、上流側ライン距離係数L(14,15)および下流側ライン距離係数R(14、15)は0に設定される。
本ケースでの近接画素間距離係数CDFを算出する過程について説明する。対象ラインTLが「0ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在しない(RB3:No)ため、近接画素間距離係数P(0)が0に設定される。対象ラインTLは「0ライン」であるため最終ラインEL「15ライン」でない(RB14:No)ため処理RB1に進む。次に、対象ラインTLが「1ライン」に設定された場合の処理を説明する。異常画素DPが存在する(RB2:Yes)ため処理RB14に進む。対象ラインTLは「1ライン」であり最終ラインEL「15ライン」でない(RB14:No)ため、処理RB1に進む。
次に、対象ラインTLが「2ライン」に設定された場合の処理を説明する。上流側検出領域および下流側検出領域に異常画素DPが存在するため(RB3:Yes、RB5:Yes)、上流側対象異常画素DDPとして画素位置(1、2)の画素が設定される。ここで、画素位置(1、2)は副走査方向の「1ライン」、主走査方向の「2画素」の位置を示す。下流側検出領域において画素位置(1、2)の画素に最も近接する異常画素DPとして画素位置(4、4)の画素が検索される。画素位置(1、2)と画素位置(4、4)とから距離Kが3.2として算出される。画素位置(1、2)の画素は最終異常画素のため(RB9:Yes)、距離Kの最小値Kminは3.2となる。距離Kの最小値Kminは3以上5未満であるため(RB12:Yes)、P(2)は1に設定される。
次に、対象ラインTLが「3ライン」に設定された場合の処理を説明する。上流側検出領域および下流側検出領域に異常画素DPが存在するため(RB3:Yes、RB5:Yes)、上流側対象異常画素DDPとして画素位置(1、2)の画素が設定される。下流側検出領域において画素位置(1、2)の画素に最も近接する異常画素DPとして画素位置(4、4)の画素が検索される。画素位置(1、2)と画素位置(4、4)とから距離Kが3.2として算出される。画素位置(1、2)の画素は最終異常画素のため(RB9:Yes)、距離Kの最小値Kminは3.2となる。距離Kの最小値Kminは3以上5未満であるため(RB12:Yes)、P(3)は1に設定される。次に、対象ラインTLが「4ライン」に設定されたときは、異常画素DPが存在する(RB2:Yes)ため処理RB14に進む。対象ラインTLは「4ライン」であり最終ラインEL「15ライン」でない(RB14:No)ため、処理RB1に進む。
次に、対象ラインTLが「5ライン」に設定された場合の処理を説明する。上流側検出領域および下流側検出領域に異常画素DPが存在するため(RB3:Yes、RB5:Yes)、上流側対象異常画素DDPとして画素位置(4、4)の画素が設定される。下流側検出領域において画素位置(4、4)の画素に最も近接する異常画素DPとして画素位置(6、5)の画素が検索される(RB7)。画素位置(4、4)と画素位置(6、5)とから距離Kが2.2として算出される。画素位置(4、4)の画素は最終異常画素でないため(RB9:No)、次の上流側対象異常画素として画素位置(4、5)の画素が設定される。下流側検出領域において画素位置(4、5)に最も近接する異常画素DPとして画素位置(6、5)が検索される。画素位置(4、5)と画素位置(6、5)とから距離Kが2として算出される。画素位置(4、5)の画素は最終異常画素のため(RB9:Yes)、距離Kの最小値Kminは2となる。距離Kの最小値Kminは3以下(RB10:Yes)のため、P(5)は3に設定される。次に、対象ラインTLが「6ライン」に設定された場合の処理を説明する。異常画素DPが存在する(RB2:Yes)ため処理RB14に進む。対象ラインTLは「6ライン」であり最終ラインEL「15ライン」でない(RB14:No)ため、処理RB1に進む。
次に、対象ラインTLが「7ライン」に設定された場合の処理を説明する。下流側検出領域に異常画素DPが存在しない(RB5:No)ため、近接画素間距離係数P(7)が0に設定される。対象ラインTLは「7ライン」であり最終ラインEL「15ライン」でない(RB14:No)ため処理RB1に進む。
次に、対象ラインTLが「8ライン」に設定された場合の処理を説明する。上流側検出領域および下流側検出領域に異常画素DPが存在するため(RB3:Yes、RB5:Yes)、上流側対象異常画素として画素位置(6、5)の画素が設定される。下流側検出領域において画素位置(6、5)に最も近接する異常画素DPとして画素位置(10、7)が検索される。画素位置(6、5)と画素位置(10、7)とから距離Kが4.5として算出される。画素位置(6、5)の画素は最終異常画素のため(RB9:Yes)、距離Kの最小値Kminは4.5となる。距離Kの最小値Kminは3以上5未満であるため(RB12:Yes)、P(8)は1に設定される。
次に、対象ラインTLが「9ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在しない(RB5:No)ため、近接画素間距離係数P(9)が0に設定される。対象ラインTLは「9ライン」であるため最終ラインEL「15ライン」でない(RB14:No)ため処理RB1に進む。次に、対象ラインTLが「10ライン」に設定された場合の処理は、異常画素DPが存在する(RB2:Yes)ため処理RB14に進む。対象ラインTLは「10ライン」であり最終ラインEL「15ライン」でない(RB14:No)ため処理RB1に進む。
次に、対象ラインTLが「11ライン」に設定された場合の処理を説明する。下流側検出領域に異常画素DPが存在しない(RB5:No)ため、近接画素間距離係数P(11)が0に設定される。対象ラインTLは「11ライン」であり最終ラインEL「15ライン」でない(RB14:No)ため、処理RB1に進む。12ライン、13ライン、14ラインおよび15ラインも下流側検出領域内に異常画素DPが存在しないため、近接画素間距離係数P(12、13、14、15)は0に設定される。
本ケースでの状態係数DSFを算出する過程について説明する。対象ラインTLが「0ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在しない(RC3:No、RC7:No)ため、状態係数S(0)が0に設定される。下流側検出領域に異常画素DPが存在する(RC9:Yes)ため、処理RC10に進む。下流側検出領域内の異常画素数DDPNは1であり、下流側検出領域全体の画素数である20の10%に満たない(RC10:No)。下流側検出領域内の画素も連続していない(RC12:No)。よって、状態係数S(0)は0のままである。次に、対象ラインTLが「1ライン」に設定された場合の処理を説明する。異常画素DPが存在する(RC2:Yes)ため処理RC14に進む。対象ラインTLは「1ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。
次に、対象ラインTLが「2ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在する(RC3:Yes)ため、処理RC5に進む。上流側検出領域内の異常画素数UDPNは1であり、上流側検出領域全体の画素数である20の10%に満たない(RC5:No)。上流側検出領域内の画素も連続していない(RC7:No)。よって、状態係数S(2)は0に設定される。下流側検出領域に異常画素DPが存在する(RC9:Yes)ため、処理RC10に進む。下流側検出領域内の異常画素数DDPNは2であり、下流側検出領域全体の画素数である20の10%以上である(RC10:Yes)ため、状態係数S(2)は1が加算されて、1となる。下流側検出領域内の画素が連続しているため(RC12:Yes)、状態係数S(2)は1が加算されて、2となる。対象ラインTLは「2ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。
次に、対象ラインTLが「3ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在する(RC3:Yes)ため、処理RC5に進む。上流側検出領域内の異常画素数UDPNは1であり、上流側検出領域全体の画素数である20の10%に満たない(RC5:No)。上流側検出領域内の画素も連続していない(RC7:No)。よって、状態係数S(3)は0に設定される。下流側検出領域に異常画素DPが存在する(RC9:Yes)ため、処理RC10に進む。下流側検出領域内の異常画素数DDPNは2であり、下流側検出領域全体の画素数である20の10%以上である(RC10:Yes)ため、状態係数S(3)は1が加算されて、1となる。下流側検出領域内の画素が連続しているため(RC12:Yes)、状態係数S(3)は1が加算されて、2となる。対象ラインTLは「3ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。次に、対象ラインTLが「4ライン」に設定された場合の処理を説明する。異常画素DPが存在する(RC2:Yes)ため処理RC14に進む。対象ラインTLは「4ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。
次に、対象ラインTLが「5ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在する(RC3:Yes)ため、処理RC5に進む。上流側検出領域内の異常画素数UDPNは2であり、上流側検出領域全体の画素数である20の10%以上である(RC5:Yes)ため、状態係数S(5)は1に設定される。上流側検出領域内の画素が連続している(RC7:Yes)ため、状態係数S(5)は1が加算されて、2となる。下流側検出領域に異常画素DPが存在する(RC9:Yes)ため、処理RC10に進む。下流側検出領域内の異常画素数DDPNは1であり、下流側検出領域全体の画素数である20の10%に満たない。下流側検出領域内の画素も連続していない(RC12:No)。よって、状態係数S(5)は2のままである。対象ラインTLは「5ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。次に、対象ラインTLが「6ライン」に設定された場合の処理を説明する。異常画素DPが存在する(RC2:Yes)ため処理RC14に進む。対象ラインTLは「6ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。
次に、対象ラインTLが「7ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在する(RC3:Yes)ため、処理RC5に進む。上流側検出領域内の異常画素数UDPNは1であり、上流側検出領域全体の画素数である20の10%に満たない(RC5:No)。上流側検出領域内の画素も連続していない(RC7:No)。よって、状態係数S(7)は0に設定される。下流側検出領域に異常画素DPが存在しない(RC9:No)ため、処理RC14に進む。対象ラインTLは「7ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。
次に、対象ラインTLが「8ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在する(RC3:No)ため、処理RC5に進む。上流側検出領域内の異常画素数UDPNは1であり、上流側検出領域全体の画素数である20の10%に満たない(RC5:No)。上流側検出領域内の画素も連続していない(RC7:No)。よって、状態係数S(8)は1に設定される。下流側検出領域に異常画素DPが存在する(RC9:Yes)ため、処理RC10に進む。下流側検出領域内の異常画素数DDPNは1であり、下流側検出領域全体の画素数である20の10%に満たない(RC10:No)。下流側検出領域内の画素が連続していないため(RC12:No)、状態係数S(8)は1のままである。対象ラインTLは「8ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。
次に、対象ラインTLが「9ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在しない(RC3:Yes)ため、状態係数S(9)は0に設定される。下流側検出領域に異常画素DPが存在しない(RC9:No)ため、処理RC14に進む。対象ラインTLは「9ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。次に、対象ラインTLが「10ライン」に設定されたときを説明する。異常画素DPが存在する(RC2:Yes)ため処理RC14に進む。対象ラインTLは「10ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。
次に、対象ラインTLが「11ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在する(RC3:Yes)ため、処理RC5に進む。上流側検出領域内の異常画素数UDPNは1であり、上流側検出領域全体の画素数20の10%に満たない(RC5:No)。上流側検出領域内の画素も連続していない(RC7:No)。よって、状態係数S(11)は0に設定される。下流側検出領域に異常画素DPが存在しない(RC9:No)ため、処理RC14に進む。対象ラインTLは「11ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。
次に、対象ラインTLが「12ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在する(RC3:Yes)ため、処理RC5に進む。上流側検出領域内の異常画素数UDPNは1であり、上流側検出領域全体の画素数20の10%に満たない(RC5:No)。上流側検出領域内の画素も連続していない(RC7:No)。よって、状態係数S(12)は0に設定される。下流側検出領域に異常画素DPが存在しない(RC9:No)ため、処理RC14に進む。対象ラインTLは「11ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。
次に、対象ラインTLが「13ライン」に設定された場合の処理を説明する。上流側検出領域に異常画素DPが存在しない(RC3:No)ため、状態係数S(13)が0に設定される。下流側検出領域に異常画素DPが存在しない(RC9:No)ため、処理RC14に進む。対象ラインTLは「13ライン」であり最終ラインEL「15ライン」でない(RC14:No)ため、処理RC1に進む。「14ライン」および「15ライン」も「13ライン」と同様に検出領域内に異常画素DPが存在しないため、状態係数S(14、15)は0に設定される。
本ケースでの異常画素係数DDFを算出する過程について説明する。ゴミ記憶領域14aに記憶されていない「0ライン」、「2ライン」、「3ライン」、「5ライン」、「7ライン」、「8ライン」、「9ライン」、「11ライン」、「12ライン」、「13ライン」、「14ライン」、および「15ライン」について各異常画素係数D(x)を算出する。
異常画素係数D(0)は、上流側ライン距離係数L(0)である0に下流側ライン距離係数R(0)である2と近接画素間距離係数P(0)である0と状態係数S(0)である0とを加算し、2となる。
異常画素係数D(2)は、上流側ライン距離係数L(2)である2に下流側ライン距離係数R(2)である1と近接画素間距離係数P(2)である1と状態係数S(2)である2とを加算し、4となる。
異常画素係数D(3)は、上流側ライン距離係数L(3)である1に下流側ライン距離係数R(3)である2と近接画素間距離係数P(3)である1と状態係数S(3)である2とを加算し、6となる。
異常画素係数D(5)は、上流側ライン距離係数L(5)である2に下流側ライン距離係数R(5)である2と近接画素間距離係数P(5)である3と状態係数S(5)である2とを加算し、9となる。
異常画素係数D(7)は、上流側ライン距離係数L(7)である2に下流側ライン距離係数R(7)である0と近接画素間距離係数P(7)である0と状態係数S(7)である0とを加算し、2となる。
異常画素係数D(8)は、上流側ライン距離係数L(8)である1に下流側ライン距離係数R(8)である1と近接画素間距離係数P(8)である1と状態係数S(8)である1とを加算し、4となる。
異常画素係数D(9)は、上流側ライン距離係数L(9)である0に下流側ライン距離係数R(9)である2と近接画素間距離係数P(9)である0と状態係数S(9)である0とを加算し、2となる。
異常画素係数D(11)は、上流側ライン距離係数L(11)である2に下流側ライン距離係数R(11)である0と近接画素間距離係数P(11)である0と状態係数S(11)である0とを加算し、2となる。
異常画素係数D(12)は、上流側ライン距離係数L(12)である1に下流側ライン距離係数R(12)である0と近接画素間距離係数P(12)である0と状態係数S(12)である0とを加算し、1となる。
異常画素係数D(13)は、上流側ライン距離係数L(13)である0に下流側ライン距離係数R(13)である0と近接画素間距離係数P(13)である0と状態係数S(13)である0とを加算し、0となる。異常画素係数D(14、15)も「13ライン」と同様に、0となる。
本ケースでは、読取位置SPは異常画素係数DDFの最も小さい「13ライン」、「14ライン」、「15ライン」のうち白色基準板61に近い副走査方向の上流側の副走査位置である「13ライン」で確定する。
<実施形態の効果>
本実施形態では、ライン距離係数LDF算出処理(R3)において、対象ラインTLと検出領域内に存在する異常画素DPとの距離LVS、RVSを算出し、距離が近いほどライン距離係数LDFが大きくなるように算出している。異常画素係数DDF算出処理(R6)において、異常画素係数DDFは、ライン距離係数LDFに他の係数を加算して算出されている。読取位置SP確定処理(R7)において、異常画素係数DDFが小さいラインを読取位置SPとして確定している。よって、異常画素DPから離れた位置を読取位置SPとして確定することができ、読取結果に筋が発生し難くなる。
本実施形態では、近接画素間距離係数CDF算出処理(R4)において、対象ラインTLの上流側に存在する異常画素DPと下流側に存在する異常画素DPとの距離が5以下である場合に、近接画素間距離係数CDFを設定している。異常画素係数DDF算出処理(R6)において、異常画素係数DDFは、近接画素間距離係数CDFを加算して算出されている。読取位置SP確定処理(R7)において、異常画素係数DDFが小さいラインを読取位置SPとして確定している。よって、上流側と下流側との異常画素DPの距離が5より大きい位置を読取位置SPとして確定することができ、対象ラインTLの上下両側にある異常画素DPの影響を受け難い読取結果を得ることができる。
本実施形態では、状態係数DSF算出処理(R5)において、対象ラインTLの検出領域に存在する異常画素の画素数が検出領域における画素数の10%以上の場合に、状態係数DSFを設定している。異常画素係数DDF算出処理(R6)において、異常画素係数DDFは、状態係数DSFを加算して算出されている。読取位置SP確定処理(R7)において、異常画素係数DDFが小さいラインを読取位置SPとして確定している。よって、周辺に存在する異常画素の画素数が周辺領域の画素数の10%未満である位置を読取位置SPとして確定することができ、対象ラインTLの周辺に存在する異常画素DPの影響を受け難い読取結果を得ることができる。
本実施形態では、状態係数DSF算出処理(R5)において、対象ラインTLの検出領域に存在する異常画素が連続して存在している場合に、状態係数DSFを設定している。異常画素係数DDF算出処理(R6)において、異常画素係数DDFは、状態係数DSFを加算して算出されている。読取位置SP確定処理(R7)において、異常画素係数DDFが小さいラインを読取位置SPとして確定している。よって、周辺に大きな異物がない位置を読取位置SPとして確定することができ、対象ラインTLの周辺に存在する異常画素DPの影響を一層受け難い読取結果を得ることができる。
[実施形態と発明との対応関係]
画像読取装置10および読取部17が、本発明の画像読取装置および読取部の一例である。FBモータMT2および駆動回路18が、本発明の移動ユニットの一例である。ADF19が、本発明の原稿搬送部の一例である。CPU11、およびフラッシュPROM14が、本発明の制御部、および記憶部の一例である。1ライン読取処理(RD1)、および階調値が閾値よりも大きいか否かを判断する処理(RD3)が、本発明の検出処理の一例である。対象画素位置を異常画素位置として記憶する処理(RD4)が、本発明の位置記憶処理の一例である。ライン距離係数LDF算出処理(R3)、および異常画素係数DDF算出処理(R6)が、本発明の係数算出処理の一例である。読取位置SP確定処理(R7)が、本発明の確定処理の一例である。
対象画素位置を異常画素位置として記憶する処理(RD4)が、本発明の画素位置記憶処理の一例である。近接画素間距離係数CDF算出処理が、本発明の距離係数設定処理の一例である。状態係数DSF算出処理(R5)が、本発明の画素数係数設定処理の一例である。状態係数DSF算出処理(R5)が、本発明の画素連続係数設定処理の一例である。
[変形例]
本発明は、本実施形態に限定されることなく、その趣旨を逸脱しない範囲において種々の変形が可能である。以下にその変形の一例を述べる。
(1)本実施形態の画像読取装置10は、ADFを用いた原稿の読み取りを実行可能な装置であれば、プリンタ部を備えた複合機に適用されてもよい。
(2)本実施形態では、読取処理が終了後に、異常画素を検出して検出位置をフラッシュPROMに記憶する説明をしたが、読取前に異常画素を検出しても良いし、ユーザからの指示に従って異常画素を検出しても良い。
(3)本実施形態では、読取処理において読み取った読取位置に対して異常画素の検出を行ったが、読取領域全体を一度に検出する構成にしても良い。
(4)本実施形態では、ライン距離係数LDFを算出するときに、ライン数Thから距離LVS、RVSを引算した値に1を加算した値を上流側ライン距離係数および下流側ライン距離係数として算出し、上流側ライン距離係数に下流側ライン距離係数を加算して異常画素係数DDFとして算出したが、下流側ライン距離係数を加算せず、上流側ライン距離係数のみから算出しても良い。上流側から原稿により移動させられる異物による筋をなくすことができる。
(5)本実施形態では、ライン距離係数LDFを算出するときに、ライン数Thから距離LVS、RVSを引算した値に1を加算した値を上流側ライン距離係数および下流側ライン距離係数として算出し、上流側ライン距離係数に下流側ライン距離係数を加算して異常画素係数DDFとして算出したが、実際に読取を行う主走査範囲と異常画素との距離を算出し、算出した距離に基づいて異常画素係数を算出しても良い。