以下、本発明を実施するための形態について図面を用いて説明する。なお、以下の実施例において示す構成は一例であり本発明は図示された構成に限定されるものではない。
<スキャナの構成>
図1はスキャナ100の断面図の一例を示す図である。原稿読取装置であるスキャナ100は、原稿の画像を読み取るリーダユニット101、原稿を搬送する自動原稿搬送装置102(以下、ADFとする)から構成される。
原稿束103は、原稿トレイ104に載置され、幅規制板105によって原稿に当接され、原稿の斜行搬送を抑制する。
原稿束103はピックアップローラー106により分離部へ配送される。分離部では、分離パッド107と分離ローラー108により、原稿束103の最上紙から1枚ずつ分離を行う。
分離された1枚の原稿は、第1レジストローラー109により、原稿の斜め搬送を修正し、第2レジストローラー110、第1搬送ローラー111、第2搬送ローラー112、第3搬送ローラー113の順に搬送される。
原稿が第2搬送ローラー112、第3搬送ローラー113を通過する際に、原稿は第一読取位置上を通過し、原稿の表面の画像が得られる。
第3搬送ローラー113を通過後、原稿は第4搬送ローラー114、第5搬送ローラー115によって搬送される。この際、原稿が第二読取位置上を通過し、原稿の裏面の画像情報を得る。
その後、原稿は第6搬送ローラー116、排紙ローラー117によって搬送され、原稿排紙トレイ118に排紙される。
次に、原稿の表面の画像を読み取る動作について説明する。
第一読取位置に存在する白色対向部材119と読取ガラス120の間を原稿が通過中、光源121、122が原稿を照射し、その反射光を反射ミラー123、124、125が結像レンズ126へ導く。
結像レンズ126で収束された光はCMOSなどの撮像素子をライン上に配置したラインセンサ127に結像される。結像された光信号は、ラインセンサ127により電気信号に変換され、信号処理基板128によってデジタル信号に変換されたあと、画像処理が行われる。
続いて、原稿の裏面の画像を読み取る読取動作について説明する。
第二読取位置に存在する白色対向部材129と裏面読取ガラス130の間を原稿が通過中、光源131、132が原稿を照射し、その反射光を反射ミラー133、134、135が結像レンズ136へ導く。
結像レンズ136で収束された光は、表面同様、撮像素子をライン上に配置したラインセンサ137に結像される。結像された光信号は、ラインセンサ137により電気信号に変換され、信号処理基板138によってデジタル信号に変換されたあと、画像処理が行われる。
原稿を搬送しながら画像を読み取る流し読み動作で原稿の表面を読み取る場合と、原稿を読取ガラス120の上に載置して読み取る圧板読み動作の場合とで共通の読取ユニットを用いる構成が一般的である。圧板読みの際には、光源121、122と反射ミラー123を図の左から右方向に移動させることで、読取ガラス120上に載置された原稿を読み取ることができる構成になっている。
一方、流し読みで原稿の裏面を読み取るユニットは、移動する必要がないことから、ADF102の筐体に固定して取り付けられている。
<スキャナの制御部の構成>
図2はスキャナ100の読取制御基板200及び信号処理基板128の構成の一例を示す図である。
信号処理基板128には、ラインセンサ127、アナログ処理回路208、ADコンバータ209などが搭載される。
原稿に光源を照射した反射散乱光が図1に示した光学系を通してラインセンサ127で光電変換され、光電変換されたアナログ信号に対して、アナログ処理回路208でオフセットやゲインの調整がされる。その後段のADコンバータ209はアナログ処理回路で調整されたアナログ信号をデジタル信号へと変換し、変換されたデジタル画像信号は画像処理ASIC202へと入力される。
読取制御基板200には、CPU201、画像処理ASIC202、モータドライバ203、SDRAM204、フラッシュメモリ205などが搭載される。図1では図示しないスキャナ内の各種センサ207の入力信号、及び、各種モータ206の制御出力信号は画像処理ASIC202、あるいは、CPU201にて制御される。
CPU201は、画像処理ASIC202の各種動作などを設定し、その設定を基づいて画像処理ASIC202は、ADコンバータ209から入力されたデジタル画像信号入力に対して、各種の画像処理を実行する。その画像処理の際には、画像処理ASIC202画像信号を一時保管するためにSDRAM204とも各種制御信号や画像信号の受け渡しを行う。また、画像処理ASIC202の各種設定値や画像処理パラメータの一部は、フラッシュメモリ205へと格納され、必要に応じて読み出して使用される。
CPU201からの指示、あるいは、画像処理ASIC202へのセンサ信号入力をトリガにして、画像処理が開始されたり、モータドライバ203へと各種モータの制御パルス出力を行ったりすることで、一連の画像読取動作を実施する。
なお、画像処理ASIC202で各種画像処理が行われた後の画像データは、不図示のメイン制御基板へと受け渡される。
操作部210は、ディスプレイ表示やコピー開始指示入力、各種設定などユーザによって操作されるUI(ユーザインターフェース)である。
<画像処理回路の構成>
図3は、スキャナの動作を制御するコントローラの構成の一例を示す図である。
コントローラ300は、図2の画像処理ASIC202の一部であり、CPU(Central Processing Unit)301によりスキャナによる原稿の画像の読取処理を制御する。
コントローラ300は、原稿の画像の斜行補正を行うために、シェーディング補正部304、エッジ情報取得部305、エッジ判断部306、メモリ307、傾き式算出部308、基準位置算出部309、及び斜行補正部310を備える。また、各種モータ206及び信号処理基板128(図示しないLED光源及びラインセンサ127)に接続され、各種モータ206の一部である原稿搬送モータによる原稿束103の搬送制御及び信号処理基板128による画像読取制御を行う。
コントローラ300は、ラインセンサ127からアナログ処理回路208、A/Dコンバータ209を介して原稿の画像を表すアナログ画像データを取得し、斜行補正等の画像処理を行って画像データを生成する。生成された画像データは、複写機のプリンタ部やファクシミリ送信、パーソナルコンピュータ等への送信に用いられる。
操作部210は、コントローラ300に接続される入力装置であり、ユーザからの画像読取処理の開始指示、原稿サイズ指定等の指示を受け付けて、コントローラ300に送信する。また、操作部210は、ディスプレイ等の出力装置を備え、コントローラ300の制御によりメッセージの表示等を行う。
CPU301は、画像読取装置の各部の動作を制御することで画像読取処理を行う。画像読取処理では、LED光源の発光制御、原稿搬送モータによる原稿103の搬送制御、ラインセンサ127による受光した反射光の光電変換等の制御をCPU301が行う。さらに、操作部210から入力されるユーザの指示に基づいて、CPU301は、画像読取処理を行う。
A/D変換部209は、ラインセンサ127から入力されるアナログ画像データをデジタル画像データに変換する。シェーディング補正部304は、デジタル画像データを処理して、LED光源の光量の不均一性やラインセンサ127の画素感度の影響などを平坦化する補正、いわゆるシェーディング補正を行う。
エッジ情報取得部305は、シェーディング補正部304により補正されたデジタル画像データに基づいて、信号処理基板128による読み取りのばらつきによるランダムノイズ除去を行う。また、エッジ情報取得部305は、シェーディング補正部304により補正されたデジタル画像データに基づいて、原稿画像の主走査方向(幅方向)に対する斜行量(傾き)を検知する。
エッジ情報取得部305は、検知した斜行量をCPU301に入力する。また、エッジ情報取得部305は、シェーディング補正部304により補正されたデジタル画像データに基づいて、原稿画像のエッジ部分を表すエッジ情報を特定して、メモリ307に格納する。
なお、エッジ情報取得部305は、デジタル画像データをシェーディング補正部304から直接取得する他に、メモリ307から取得してもよい。エッジ情報取得部305の詳細については後述する。
エッジ判断部306は、原稿画像の主走査方向(幅方向)の2つのエッジ部分を左主走査エッジ位置及び右主走査エッジ位置として特定し、CPU301に入力する。エッジ判断部306は、エッジ情報取得部305で生成されるエッジ情報をメモリ307から取得し、CPU301から指示される原稿画像のエッジ部分を判断するための閾値である原稿エッジ判断値に基づいて、原稿画像のエッジ部分を判断する。
傾き式算出部308は、エッジ判断部306で判断された左主走査エッジ位置及び右主走査エッジ位置に基づいて、原稿画像の傾きを表す一次式を算出するための範囲を判断する。傾き式算出部308は、メモリ307から取得するエッジ情報により一次式を算出するための範囲のデータを取得して、斜行量、傾き方向、切片、切片向きを表す一次式を算出する。傾き式算出部308は、算出した一次式をCPU301に入力する。
基準位置算出部309は、原稿103の搬送方向前側の画像の二つの角部の位置(角位置)のいずれか一方を、斜行補正時の基準位置としてCPU301に入力する。基準位置算出部309は、原稿103の各辺の状態劣化及び原稿103の斜行量に関わらず、原稿103の正確な角位置を算出する。そのために基準位置算出部309は、エッジ情報と一次式に基づいて、原稿103の搬送方向前側の二つの角位置のいずれか一方を、左主走査エッジ位置又は右主走査エッジ位置に応じて主走査方向に微調整する。
基準位置算出部309は、傾き式算出部308で算出された一次式と、微調整した角位置とから、斜行補正時の基準位置となる原稿103の搬送方向前部の角位置を推定する。
斜行補正部310は、斜行量、傾き方向、及び斜行補正時の基準位置に基づいてデジタル画像データの斜行補正及び位置補正を行って、画像データを生成する。斜行補正部310は、生成した画像データを出力する。また、斜行補正部310は、シェーディング補正されたデジタル画像データをメモリ307に格納する。
以下にエッジ情報取得部305、エッジ判断部306、傾き式算出部308、基準位置算出部309、及び斜行補正部310の詳細について説明する。
図4は、エッジ情報取得部305の構成の一例を示す図である。エッジ情報取得部305は、入力データ選択部401、ノイズ除去部402、エッジ検出部403、主走査カウンタ404、及び副走査カウンタ405を備える。
入力データ選択部401は、CPU301からの入力データ選択指示に基づいて、シェーディング補正部304及びメモリ307の少なくとも一方から取得するデジタル画像データを、ノイズ除去部402に送信する。
ノイズ除去部402は、入力データ選択部401から取得したデジタル画像データに対して信号処理基板128に起因するランダムノイズ成分の除去処理を行う。ランダムノイズ成分は、エッジ検出処理時に画像のエッジ部分であると誤検知される可能性がある。そのためにノイズ除去部402は、エッジ検出前にノイズ成分の除去を行う。
なお、ノイズ除去部402には、一般的な移動平均フィルタや、エッジ画像を保存しつつノイズ成分の除去が可能なバイラテラルフィルタ等が採用される。
ノイズ除去部402は、ノイズ除去後のデジタル画像データをエッジ検出部403に送信する。
エッジ検出部403は、ノイズ除去後のデジタル画像データに対してエッジ検出処理を行い、画像のエッジを特定する。一般的なエッジ抽出フィルタである、1次微分あるいは2次微分フィルタ等が採用される。
主走査カウンタ404は、CPU301から受信した主走査方向(幅方向)のエッジ検出範囲に基づき、エッジ検出部403がエッジを検出する主走査方向における範囲を制御する。
副走査カウンタ405は、CPU301から受信した副走査方向(搬送方向)のエッジ検出範囲に基づき、エッジ検出部403がエッジを検出する副走査方向における範囲を制御する。
エッジ検出部403は、主走査カウンタ404及び副走査カウンタ405により設定されたエッジ検出範囲内で、画像のエッジを検出する。エッジ検出部403は、検出したエッジ及びエッジから生成される後述のエッジ情報をメモリ307に格納する。
特許文献1のように、画像のデータの傾きを補正するために原稿の先端のエッジを検出する場合、特許文献2のようにフィルタリング処理された画像データに2値化処理が行われた画像データからエッジを検出することで、検出精度を向上させることが考えられる。
フィルタリング処理された画像データに2値化処理を行うことで、フィルタリング処理された画像データに含まれるノイズを除去することができる。しかし、原稿の画像の読み取られ方によっては、原稿の先端のエッジが強く現れず、2値化処理によってノイズとともに原稿の先端のエッジも除去され、画像データの傾きを補正する処理の精度が低くなる可能性がある。
この課題に対して以下の処理を実行することで、画像データの傾きを補正するためのエッジ検出処理の精度を向上させることができる。
図5はエッジを検出、判断する処理の一例を示す図である。図5(a)は、主走査カウンタ404及び副走査カウンタ405により設定される原稿画像のエッジ検出範囲の説明図であり、図5(b)は、エッジ判断部306が行う左右の主走査エッジ位置の検出処理の説明図である。説明を簡易にするために、図5(b)では左端画素を1画素目、右端画素を36画素目としている。
また、主走査カウンタ404に設定される主走査方向のエッジ検出範囲をH、副走査カウンタ405に設定される副走査方向のエッジ検出範囲をVとする。エッジ検出範囲Vは、原稿103の搬送方向先端より前の位置から所定画素分(所定ライン分)の範囲に設定される。
エッジ検出部403は、例えば背景色から色が変化する画素をエッジ部分として検出する。エッジ検出部403は、エッジ部分として検出した画素を「1」、エッジ部分として検出しなかった画素を「0」として、2値化して表す。エッジ検出部403での詳細な処理については、図16~18を用いて説明する。
図16はエッジ検出部の構成の一例を示す図である。本実施例のエッジ検出部403は、図16に示すようにフィルタ処理部1601、細線化処理部1602、二段閾値判定部1603及び1604、画像合成部及びエッジ追跡処理部1605により構成される。
フィルタ処理部1601には、1次微分あるいは2次微分フィルタが適用されることが多い。1次微分フィルタとして知られるSobel(ソーベル)やPrewitt(プレヴィット)はともに、XとY方向について畳み込み演算処理を行い、別々にエッジ抽出を行う。その両方の結果を合成するエッジ抽出する処理である。そして、3×3の中心画素を、9画素それぞれに所定の係数をかけた後、合算した濃度値に置き換える。Sobel(ソーベル)は中央部の画素に「2」がかかるので、Prewitt(プレヴィット)と比較してコントラストの少ないエッジを強調する効果がある。
Sobel(ソーベル)フィルタのオペレータ(式(1)、(2))及びエッジ強さ(式(3))、エッジ角度(式(4))を式に示す。
2次微分フィルタの例であるLaplacian(ラプラシアン)は、エッジの方向に依存しない特徴があるが、エッジとして抽出するための閾値の設定にエッジ抽出結果の依存性が強いため、外乱の影響を受けやすい。
各種フィルタの特徴から、本発明の目的である、外乱の影響を受けにくく、かつ、影の薄い原稿の先端に見えられるコントラストの少ない画像を的確に判断するため、本実施例では、Sobel(ソーベル)フィルタを適用した例で説明する。
細線化処理部1602は、フィルタ処理部1601でエッジが抽出された画像データに対し、副走査方向に対する連続するエッジ中で強さが最大となる箇所を抽出する処理である。
エッジ抽出によって得られたエッジの幅は、元の画像の変化が比較的緩やかで広範囲な場合に広くなる。エッジ抽出の閾値を高くするとエッジ幅は狭くなるが、緩やかな変化を見逃してしまうことになる。そこで、閾値を比較的低めに設定しておき、幅広くエッジ部分を抽出させ、その後に細線化処理を行うことで、エッジ抽出を効果的に行うことができる。
背景部と原稿との境界エッジは、原稿の搬送方向(Y)に対して直角となる方向(X)に出現するため、エッジの法線方向(Y)の3画素のエッジの強さを計算する。そして3画素の中央のエッジの強さが前後2つのエッジの強さよりも大きければ、その中央部を極大点エッジとし、中央のエッジの強さが最大とならない部分を除去する処理を行う。
なお、エッジの細線化方法については、モルフォロジー変換における収縮(Erosion)でも同様の効果があるが、上記の通り、エッジの出現する方向が限定的であるため、煩雑な演算による回路規模増大を防ぐために、上記のように処理する方法を適用する。
二段閾値判定部1603及び1604は、細線化処理部1602で細線化された画像データに対し、それぞれ異なる2つの閾値により2値化処理を行い、2値化された画像データである2値画像データを生成する。
二段閾値判定部(その1)1603には、強いエッジを抽出するための閾値が設定され、二段閾値判定部(その2)1604には、弱いエッジを抽出するための閾値が設定されている。
図17は、2つの閾値を設定した画像処理の一例を示す図である。入力画像データに対し、Sobel(ソーベル)によるエッジ抽出した結果では、背景部と原稿先端部との境界エッジの他に、背景部や原稿内部におけるノイズ成分も含まれたエッジが抽出される。ノイズ成分としては、背景部そのものの汚れ、光源のちらつきやラインセンサ127に起因するノイズなどがあり、このままの状態では原稿エッジ部分とノイズ成分が局所的に連続しているように観測され、正確に境界エッジを判別することは困難となる。
さらに、細線化処理部1602により細線化処理を行ったとしても、センサ起因のノイズ成分や、搬送中にラインセンサ等に付着する異物の影響で画像に表出するスジなどは、副走査方向に連続する特徴を有する。よって、この細線化処理によっては、周囲と連続しない孤立点をノイズ成分として除去できるが、周囲と連続するようなノイズ成分は除去しきれない。
そこで、細線化処理後の画像データに対して、二段閾値判定部1603及び1604に設定されている強いエッジ判定閾値及び弱いエッジ判定閾値に基づいて、2値化処理を行う。強いエッジ判定閾値による2値化では、ノイズ成分を除去する効果は強いが、原稿の先端部のエッジが不連続になりやすい。一方で、弱いエッジ判定閾値による2値化では、ノイズ成分を除去する効果は弱いが、原稿の先端部のエッジが残り、連続性を確保しやすいという特徴がある。上記の二つの閾値は、例えばスキャンして生成された画像データを2値化するための閾値であり、生成された画像データの輝度値に基づいて黒画素とするか白画素とするかを判定するための閾値である。一例をあげると、弱いエッジを判定するための閾値は、輝度値が低い画素も白画素(エッジ)としたいため、0~255の範囲で表すと128程度に設定される。また、強いエッジを判定するための閾値は、輝度値が高い画素のみを白画素(エッジ)としたいため、0~255の範囲で表すと192程度に設定される。一般的には、背景部や原稿の下地付近は輝度値が低く、影部や原稿の端部に近づくにつれて輝度値が高くなる。なおここで、説明した輝度値はフィルタリングされた後の画像データの輝度値を参照している。そのため、フィルタリングされる前の画像データにおいて、隣接する画素との輝度差が大きい画素は白に近い色で表現され、輝度差が小さい画素は黒に近い色で表現されている。ここで説明した閾値は一例であり、弱いエッジを判定するための閾値が強いエッジを判定するための閾値より低ければ、他の値でもよい。
画像合成部1605は、二段閾値判定部1603及び1604で2値化処理された2つの画像データに対し以下の処理を行う。その処理は弱いエッジを判定するための閾値で2値化処理された画像データの中から、強いエッジを判定するための閾値で2値化処理された画像データと接続する部分のみを正式なエッジ部分とし、接続しない部分を除去する処理である。
強いエッジ判定閾値による2値化の結果では、ノイズの影響を除去する効果は強い反面、エッジの連続性が犠牲になることを補うために、弱いエッジ判定閾値による2値化の結果がノイズ成分を拾いやすいがエッジの連続性が残されるという特徴が利用される。つまり、原稿の先端のエッジ部以外でのノイズ成分は、強いエッジ判定閾値による2値化の結果では出現しにくく、弱いエッジ判定閾値による2値化の結果では出現しやすいため、その合成を取ることで、ノイズ成分が除去できる。一方で、原稿の先端のエッジ部は、強いエッジ判定閾値による2値化の結果では不連続になりやすいこと、弱いエッジ判定閾値による2値化の結果では連続しやすいこと、その合成を取ることで連続するエッジとなるため、エッジ部分の連続性を残すことができる。
図18は2つの閾値で2値化された画像データから共通するエッジを抽出する処理の一例を示す図である。
図18(a)は弱いエッジを判定するための閾値で2値化処理された画像データを示す。図18(b)は強いエッジを判定するための閾値で2値化処理された画像データを示す。図18(c)は図18(a)の画像データと図18(b)の画像データを同一の座標で合成した画像データを示す。図18(d)は合成した画像データからエッジ追跡処理を行った例を示す。説明を簡易にするため、主走査方向に36画素幅、副走査方向に10画素幅でエッジ抽出した結果を示している。また、図18(a)で抽出されているエッジを薄いグレーで、図18(b)で抽出されているエッジを濃いグレーで示している。
図18(a)に示すように、弱いエッジを判定するための閾値で2値化された画像データでは、副走査方向の6画素目の位置を中心にエッジ部分が抽出できているが、それ以外の位置でもノイズ成分としてエッジとして認識されている箇所がある。図18(b)に示すように、強いエッジを判定するための閾値で2値化された画像データでは、副走査方向6画素目の位置を中心にエッジ部分が抽出できているが、その連続性は分断されやすい。また、ノイズ成分としてエッジとして認識されている箇所は少ない。よって、弱いエッジを判定するための閾値で抽出されたエッジを示す画素の数より強いエッジを判定するための閾値で抽出されたエッジを示す画素の数の方が少なくなる。
これらの合成した画像データである図18(c)において、(主走査画素位置、副走査画素位置)=(主、副)と表すと、(主、副)=(1,6)、(2,5)の位置においては強いエッジと及び弱いエッジともに抽出されるため合成後もエッジとして記憶される。
また、(主、副)=(3,6)の位置においては、強いエッジとしては抽出されないが、弱いエッジとして抽出され、隣接画素である(主、副)=(2,5)及び(4、6)と接続するため、エッジとして記憶される。
一方で、(主、副)=(4,10)の位置においては、強いエッジとしては抽出されないが、弱いエッジとして抽出され、隣接画素とも接続されないため、ノイズ成分と見なされ、除去される。つまり、画素値が0になる。このようなエッジ追跡処理を継続することで、図18(d)の画像を得る。
また、どの画素とも隣接せずに孤立している画素をエッジとして特定するために、エッジとして特定されている画素群から直線で示し、その直線上にある画素をエッジとして特定してもいい。
図18の処理はCPU301が不図示のROMに記憶されたプログラムをメモリ307に読み出すことで実行されてもよい。
以上のような処理を実行することで、画像データの傾きを補正するためのエッジ検出処理の精度を向上させることができる。
エッジ検出範囲(H、V)で検出されたエッジは図5(b)のように示される。エッジ検出部403の画像合成部1605は、さらにエッジ検出範囲において得られた情報に基づいて、主走査方向の位置毎に副走査方向に論理和演算を行う。そして主走査方向の画素毎に、一度でもエッジ画像が検出された画素を「1」、一度もエッジが検出されない画素を「0」とする演算結果を算出する。論理和演算の結果は、主走査方向の位置毎のエッジの有無を表す。論理和演算の結果を図5(c)に示す。エッジ検出部403は、エッジ情報として、この論理和演算の結果をメモリ307に格納する。
エッジ判断部306は、エッジ検出部403で生成されたエッジ情報をメモリ307から取得し、このエッジ情報に基づいて、左右の主走査エッジ位置の検出処理を行う。
エッジ判断部306は、エッジ情報を主走査方向の両方向から1画素ずつ順に確認して、エッジ画像の主走査方向の両端部を検出する。エッジ判断部306は、エッジ情報において、値が「1」に設定された画素が所定数連続した場合に、その先頭の画素を主走査エッジ位置と判断する。
連続する所定数は、CPU301により原稿エッジ判断値としてエッジ判断部306に設定される。エッジ判断部306は、左端部のエッジカウンタ及び右端部のエッジカウンタ(いずれも不図示)を備え、値が「1」の画素が連続する数をカウントする。
エッジ判断部306は、値が「1」である画素を主走査エッジ位置として記憶しておき、値が「0」の画素を検出すると、カウント値を「0」にクリアし、且つ主走査エッジ位置もクリアする。
背景部の汚れや画像に重畳されるノイズ成分により、本来のエッジ以外の部分をエッジと判定した場合、カウンタ値の不連続が生じるため、エッジ判断部306は、記憶した左主走査エッジ位置をクリアして、左端部のエッジカウンタのカウント値を「0」にする。左主走査エッジ位置とは、原稿の主走査方向における左側から探索したエッジの位置である。また、右主走査エッジ位置とは、原稿の主走査方向における右側から探索したエッジの位置である。
そして、エッジ判断部306は、カウント値を「0」にした後に検知したエッジ位置にラッチして、左端部のエッジカウンタのカウント値を「1」に設定する。値が「1」の画素は、エッジ画像の右端位置まで連続する。
具体的には図5(d)のようにカウントする。図5(b)の例では、左端部から3画素目が値「1」であるために、エッジ判断部306は、3画素目を左主走査エッジ位置として記憶して、左端部原稿エッジカウンタのカウント値を「1」に設定する。しかしながら、4画素目の値が「0」であるために、エッジ判断部306は、記憶した左主走査エッジ位置をクリアして、左端部のエッジカウンタのカウント値を「0」にする。
次に左端部から10画素目が値「1」であるために、エッジ判断部306は、10画素目を左主走査エッジ位置として記憶して、左端部原稿エッジカウンタのカウント値を「1」に設定する。値が「1」の画素は、27画素目まで連続する。
図5(b)の例では、原稿エッジ判断値が「5」であるために、エッジ判断部306は、15画素目の値を確認した段階で記憶している左主走査エッジ位置の画素を画像の左端部のエッジ位置と判断する。
次に、右端部のエッジ位置の判断フローを説明する。図5(b)の例では左端部から34画素目が値「1」であるために、エッジ判断部306は、34画素目を右主走査エッジ位置として記憶して、右端部原稿エッジカウンタのカウント値を「1」に設定する。しかしながら、左端部から33画素目の値が「0」であるために、エッジ判断部306は記憶した右主走査エッジ位置をクリアして、右端部原稿エッジカウンタのカウント値を「0」にする。左端部から27画素目が値「1」であるために、エッジ判断部306は、27画素目を右主走査エッジ位置として記憶し、右端部原稿エッジカウンタのカウント値を「1」に設定する。値が「1」の画素は、左端部から10画素目まで連続する。
図5(b)の例では、原稿エッジ判断値が「5」であるために、エッジ判断部306は、左端部から23画素目の値を確認した段階で記憶している右主走査エッジ位置の画素を画像の右端部のエッジ位置と判断する。
以上のようにエッジ判断部306は、CPU301から指示された所定数だけ値「1」に設定された画素が連続する場合に、その先頭の画素が背景部の汚れやノイズ成分による擬似的なエッジではなく、読み取った原稿画像のエッジ部分であると判断する。
エッジ判断部306は、左端部の原稿開始位置及び右端部の原稿終了位置を判定し、CPU301へ左右両端部の主走査エッジ位置の判断結果を送信する。
図6は、画像の左右の主走査エッジ位置を判断する処理を表すフローチャートである。図6のフローは、ユーザによる操作部210からの画像読取処理の開始指示に応じて実行される。CPU301が各ハードウェアを制御することにより図6のフローチャートの処理は実行される。なお、CPU301が不図示のROMに記憶されたプログラムをメモリ307に読み出し、実行することでの図6のフローチャートの処理が実行されてもよい。
S601において、CPU301は、操作部210から画像読取処理の開始指示を受信すると、各種モータ206に含まれる原稿搬送モータを制御し、原稿103の搬送を開始させる。
S602において、CPU301は信号処理基板128を制御し、搬送されたに原稿の画像を読み取ってデジタル画像データを取得する。
S603において、CPU301はエッジ情報取得部305を制御し、エッジ検出部403により、S603で取得されたデジタル画像データからエッジ検出を行う。
また、S603でCPU301がエッジ検出できたと判定した場合、S604へ進み、CPU301がエッジ検出できなかったと判定した場合S610に進む。
S604において、CPU301はエッジ検出部403を制御し、エッジ情報を生成してメモリ307に格納する。
S610において、CPU301はスキャナ100にエラーが発生していると判断して、操作部210のエラー通知を行い、操作部210はエラーを示す情報を表示する。
S605において、CPU301はエッジ判断部306を制御し、メモリ307からエッジ情報を取得して、画像の左主走査エッジ位置及び右主走査エッジ位置を検索する。そのためにエッジ判断部306は、エッジ情報から、値が「1」の画素を確認する。
S605でCPU301がエッジ判断部306を制御し、値が「1」の画素を確認した場合S606へ進み、値が「1」の画素を確認できなかった場合、S605に戻る。
S606において、CPU301はエッジ判断部306を制御し、値が「1」であると確認した画素を原稿の開始位置として記憶する。ここで、原稿の開始位置はメモリ307に記憶されてもいいし、ラッチ回路等で記憶されてもいい。
S607において、CPU301はエッジ判断部306を制御し、値が「1」の画素が所定数連続するか否かを判定する。本実施例では、CPU301は値が「1」の画素が5回連続するか否かを判定する。所定数連続すると判定された場合、S608に進む。そうでない場合、S605に戻る。
S608において、CPU301はエッジ判断部306を制御し、S606で記憶した画素を主走査エッジ位置に確定する。
S609において、CPU301は次の原稿が載置されているか否かを判定する。次の原稿があると判定した場合、S601に戻る。そうでない場合、処理を終了する。なお原稿トレイ104は、例えば載置された原稿103を検知するセンサを備える。CPU301は、このセンサの検知結果により、次の原稿103が原稿トレイ104に載置されているか否かを判断することができる。
なお、CPU301はエッジ判断部306を制御し、S605~S608の処理を、主走査方向の左側及び右側のそれぞれから行うことで、左右の主走査エッジ位置を確定する。
原稿画像の副走査方向のエッジは、CPU301がエッジ情報取得部305を制御し、エッジ検出部403により検出される。エッジ検出部403による原稿の副走査方向のエッジ画像の検出、つまり搬送方向先端のエッジ検出処理について説明する。
搬送方向における原稿103の先端部には、光源からの光と搬送されている原稿103との位置関係から、影が生じる。この影は、搬送方向にある程度の幅をもっている。
原稿103の搬送方向先端の斜行補正を精度よく行うためには、原稿画像から副走査方向のエッジ画像を正確に検出する必要がある。
図7は、原稿の影と原稿の搬送方向先端のエッジとの関係の一例を示す図である。エッジ検出部403は、影により生じるエッジを影部エッジ701として検出し、影部から原稿部に変化する部分を原稿部エッジ702として検出する。このように、影部エッジ701と原稿部エッジ702は、エッジ検出部403により二重に検出される。
これは、エッジ検出時の検出局所領域(フィルタサイズ)にもよるが、影幅が広く出た場合には影部の輝度が安定する傾向にあり、検出局所領域(フィルタサイズ)内でのエッジ変化が無いと判定されてしまうことにより発生する。
原稿の画像からエッジを正確に検出するために、エッジ検出部403は、エッジ検出結果を副走査方向に確認して、2回目のエッジ変化(「0」から「1」へ値の変化)位置(画素)を原稿部エッジ702として検出する。
また、影部エッジ画像701が検出されない場合がある。この場合、エッジ画像が一重になって出現する。エッジ検出部403は、1回目のエッジ変化(「0」から「1」の変化)位置(画素)を記憶しておき、この記憶された位置から副走査方向に所定画素数だけエッジ変化の有無を確認する。エッジ検出部403は、エッジ変化がなければ記憶した位置を原稿部エッジ702として検出する。原稿部エッジ702が原稿画像の副走査方向のエッジ位置(副走査エッジ位置)となる。
図8は、副走査方向のエッジ位置の検出処理の一例を示すフローチャートである。図8のフローはS603で、エッジ検出部403がデジタル画像データからエッジ検出を行って生成するエッジ検出結果を用いて実行される。CPU301が各ハードウェアを制御することにより図8のフローチャートの処理は実行される。なお、CPU301が不図示のROMに記憶されたプログラムをメモリ307に読み出し、実行することでの図8のフローチャートの処理が実行されてもよい。
S801において、CPU301はエッジ検出部403を制御し、副走査方向にエッジを検出する。そして、CPU301は画素毎の値を確認し、値に変化(「0」から「1」への変化)がある場合、S802に進む。そうでない場合、S801に戻り、次の副走査方向の次の画素の値を確認する。
S802において、CPU301はエッジ検出部403を制御し、値が変化した画素を副走査方向の原稿開始位置として記憶する。
S803において、CPU301はエッジ検出部403を制御し、原稿開始位置として記憶された画素の次の画素から引き続き、副走査方向に画素毎の値を確認する。そして、CPU301は値に変化(「0」から「1」への変化)があるか否かを判定する。変化があると判定された場合、S804に進み、そうでない場合はS807に進む。
S804において、CPU301はエッジ検出部403を制御し、副走査方向の原稿開始位置を、S803で変化を検出した画素に更新する。
S807において、CPU301はエッジ検出部403を制御し、副走査方向に所定数の画素において、値の変化が無いことを確認する。所定数確認した場合は、S805に進む。所定数確認していない場合はS803に戻る。
S805において、CPU301はエッジ検出部403を制御し、記憶している画素を、原稿の画像の副走査エッジ位置として確定する。
S806において、CPU301はエッジ検出部403を制御し、S805で確定した副走査エッジ位置をメモリ307に格納する。以上の処理により、原稿画像の副走査エッジ位置が検出される。
<従来の副走査方向のエッジ検出方法における課題>
原稿の画像と背景部の境界に出現する影は、原稿が薄紙であったり、原稿の搬送性による原稿と背景部との距離のばらつきや、装置の耐久により読み取った画像のS/N比が小さくなったりすることなどの要因により変化する。
図13は、原稿の画像と背景部の境界に出現する影が非常に薄く出現した場合の元画像とエッジ検出画像の比較の一例を示す図である。エッジ検出画像においては、エッジとして認識した箇所を「白」、エッジではないと認識した箇所を「黒」として表示している。
影が適当な幅で出現する場合、背景部から影への変化点はエッジとして認識された後に影領域の輝度変化が小さいことからエッジ非検出(黒)となる。その後に影と原稿の画像のエッジ検出(白)となり、原稿エッジ検出後にはエッジ非検知(黒)となることが想定される。
これと比較して、図13に示したように影が非常に薄く出現した場合、背景部から影への変化点はエッジとして認識されるところまでは同様だが、影領域が非常に短区間でしか出現しないため、影と原稿とのエッジ検出(白)が連続する。つまり、背景部から影、原稿先端までの一連をエッジとして認識する箇所があり、影と原稿との境界エッジを正確に認識することができない場合がある。
さらに、影の出現の仕方も原稿との境界において均一ではないため、とある箇所では影領域の輝度変化が小さいエッジ非検出(黒)が検出され、ある主走査方向の位置においては影と原稿とのエッジ検出(白)が連続するという現象が見られることがある。
このような場合には、上記の図8の処理フローに示した方法で2回目のエッジ変化位置を原稿部エッジ画像として検出すると、とある箇所では原稿の先端部を2回目のエッジとして認識する。しかし他の箇所では原稿先端部を超えて原稿内部で2回目のエッジとして認識することがあり、原稿先端のエッジ検出精度が低下する要因となる。
原稿先端のエッジ検出精度は、後記する斜行補正部310でのアフィン変換時に過補正や逆補正などの要因ともなる。上記の課題を解決するために以下の処理を実行する。
<本発明に係る副走査方向のエッジ検出方法>
そこで、本発明では、図8のフローチャートの一部処理を変更することにより、上記のような場合であっても、より精度が高い原稿先端部のエッジを検出する方法を提示する。
図14は副走査方向のエッジ位置の検出処理の一例を示すフローチャートである。図14のフローはS603で、エッジ検出部403がデジタル画像データからエッジ検出を行って生成するエッジ検出結果を用いて実行される。CPU301が各ハードウェアを制御することにより図14のフローチャートの処理は実行される。なお、CPU301が不図示のROMに記憶されたプログラムをメモリ307に読み出し、実行することでの図14のフローチャートの処理が実行されてもよい。
S1401において、CPU301はS801と同様にエッジ検出部403を制御し、副走査方向にエッジを検出する。そして、CPU301は画素毎の値を確認し、値に変化(「0」から「1」への変化)がある場合、S1402に進む。そうでない場合、S1401に戻り、次の副走査方向の次の画素の値を確認する。
S1402において、CPU301はS802と同様にエッジ検出部403を制御し、値が変化した画素を副走査方向の原稿開始位置として記憶する。
S1403において、CPU301はS803と同様にエッジ検出部403を制御し、引き続き、副走査方向の画素毎の値を確認する。そしてCPU301は値に変化(「0」から「1」への変化)があるか否かを判定する。変化があると判定された場合、S1404に進む。そうでない場合、S1407に進む。
S1404において、CPU301はエッジ検出部403を制御し、S1402の処理で副走査方向の原稿開始位置として記憶した画素とは別に、S1403で値が変化した画素の位置と、S1402で記憶された位置との差分値をオフセット値として記憶する。
S1407において、CPU301はS1407と同様にエッジ検出部403を制御し、副走査方向に所定数の画素において、値の変化が無いことを確認する。所定数確認した場合は、S1405に進む。所定数確認していない場合はS1403に戻る。
S1405において、CPU301はエッジ検出部403を制御し、S1402で記憶された画素位置及びS1404で記憶されたオフセット値から、副走査方向のエッジ位置を確定する。この副走査方向のエッジ位置の確定する方法の詳細については後述する。
S1406で、CPU301はエッジ検出部403を制御し、S1405で確定した副走査方向のエッジ位置をメモリ307に格納する。以上の処理により、副走査方向のエッジ位置が検出される。
ここで、S1404での副走査方向のエッジ位置を確定する方法について説明する。前述の通り、影が薄く出現した場合には、S1402で検出したエッジ位置からエッジが継続し、ある主走査方向の位置においては2回目のエッジ変化が検出できないことがある。そこで、図15に示すように、エッジ検出範囲Hに対して、S1404で記憶されたオフセット値が「0」あるいは、副走査検索範囲の上限値「V」以外の画素数とエッジ検出範囲Hの画素数の割合を算出し、その結果を元に下記の表に従いオフセット値を決定する。図15はエッジ検出範囲とオフセット値の関係の一例を示す図である。
上記表1において、エッジ検出範囲Hの画素数に対するオフセット値が「0」あるいは、副走査検索範囲の上限値「V」以外の画素数の割合が25%未満の場合、S1404での検出結果は信頼度が低いと判断される。その場合、事前の影幅の観測結果から判明しているオフセット値を予め定めた値として採用する。このオフセット値は事前に観測した結果を用いてもいいし、工場出荷時に手入力されて登録されてもよい。
次に、エッジ検出範囲Hの画素数に対するオフセット値が「0」あるいは、副走査検索範囲の上限値「V」以外の画素数の割合が25%以上~50%未満の場合、S1404の検出結果(オフセット値)のうち最頻出値近傍から中央値を算出する。そして上記の予め定めた値に対し、当該中央値が大きく離れる場合には、予め定めた値を採用する。これは上記の判断と同様に、検出結果の信頼度が低いことを考慮している。一方で算出した中央値と予め定めた値が大きく離れない場合には、予め定めた値と当該中央値の平均値をオフセット値として更新する。これは検出結果の信頼度がそこまで低くないことから、予め定めた値に対して実測値による補正を行うことで、より精度を上げることとの考慮している。
エッジ検出範囲Hの画素数に対するオフセット値が「0」あるいは、副走査検索範囲の上限値「V」以外の画素数の割合が50%以上~75%未満の場合、S1404における検出結果の信頼度が比較的高いが全て採用するほど信頼度がある訳ではない。そのため、S1404で得られたオフセット値の最頻出値近傍の中央値を新しいオフセット値として更新する。中央値を採用することにより、例外的な値を除去し、検出結果の精度を上げる効果が期待できる。
最後に、エッジ検出範囲Hの画素数に対するオフセット値が「0」あるいは、副走査検索範囲の上限値「V」以外の画素数の割合が75%以上の場合、S1404における検出結果の信頼度が高いため、各位置における検出結果を全て採用する。なお、上記の割合は、例示であり、25%や50%といった判断を切り替える閾値の割合をユーザ等が任意に変更することができる。また、全ての割合において、予め定めた値を使う、最頻出値近傍の中央値を採用してもよい。
この表を用いて求められたオフセット値をS1402で記憶された原稿開始位置から引くことで、おおよその原稿開始位置(影部でなく原稿部)を求めることができる。
<傾き式算出部>
傾き式算出部308による一次式の算出処理について説明する。傾き式算出部308は、エッジ判断部306で判断された左右の主走査エッジ位置及びエッジ検出部403で検出された副走査方向のエッジ位置に基づいて、一次式の算出に用いるエッジ検出結果の有効データ範囲を判断する。
傾き式算出部308は、有効データ範囲で主走査方向に対する斜行量を表す一次式を算出する。一次式の算出は、例えば一般的な最小二乗法やハフ変換により行われる。
原稿103の端部、特に角部は、破れ、自然劣化、角折れ等により劣化する可能性がある。そのために傾き式算出部308は、一次式の算出を有効データ範囲内のエッジ検出結果により行う。
傾き式算出部308は、エッジ判断部306で判断した左右の主走査エッジ位置から、原稿の画像の中央位置((左主走査エッジ位置)+(右主走査エッジ位置)/2)及び原稿の画像の長さ((右主走査エッジ位置)-(左主走査エッジ位置))を算出する。
傾き式算出部308は、エッジ検出結果から、原稿の画像の長さの範囲内(右主走査エッジ位置と左主走査エッジ位置との間)で、原稿画像中央位置を中心にして主走査方向に所定数の画素の値を取得する。原稿の画像の中央位置を中心にして主走査方向に所定数の画素が、有効データ範囲となる。
図9は、有効データ範囲の一例を示す図である。ここでは、主走査方向の画素数が7200画素であり、図の最も左側の画素が1画素目、最も右側の画素が7200画素目である。エッジ判断部306は、左主走査エッジ位置を100画素目、右主走査エッジ位置を5060画素目と判断する。
この場合、原稿の画像の中央位置は2580画素目となり、原稿の画像の長さは4960画素となる。図9では、原稿画像中央位置を中心にして、主走査方向に2048画素の範囲(1557画素目~2604画素目)を有効データ範囲とする。
傾き式算出部308は、有効データ範囲内の副走査エッジ位置に基づいて、斜行量を示す一次式(y=ax+b)を算出する。具体的には、斜行量及び切片の傾き方向(符号)が、プラスであるかマイナスであるか、斜行量(a)、傾き方向、切片(b)、切片方向が算出される。なお、本処理により算出された原稿の画像の長さをCPU301へ出力し、読取原稿の主走査サイズを確定する目的で使用することも可能である。
<基準位置算出部>
基準位置算出部309による基準位置算出処理について説明する。ここでは、原稿の画像の副走査方向端部の左端部角位置を基準位置として算出する例を説明する。なお、基準位置算出部309は、CPU301の指示により、左端部角位置及び右端部角位置のいずれか一方を基準位置として算出する。
原稿103の端部が劣化している場合、エッジ検出結果から正確に原稿画像の角位置を判断することができないため、角位置を推定する必要がある。角位置の正確な推定には、エッジ判断部306で判断された左主走査エッジ位置と、エッジ検出部403で検出された副走査方向のエッジ位置、傾き式算出部308で算出された一次式を用いる。
図10は基準位置を算出する処理の一例を示す図である。図10は、左主走査エッジ位置x0が「100」、左主走査エッジ位置のエッジ110の副走査方向の位置y0が「350」、一次式が(y=0.2x+150)の場合の例であり、基準位置は(x2,y2)である。
この場合、左主走査エッジ位置を通る副走査方向(y方向)に伸びる直線と、一次式と、の交点(仮想基準位置)の副走査方向の位置y1は、(y1=0.2×100+150=170)となる。左主走査エッジ位置y0と位置y1との副走査方向の差分Δyは、(Δy=350-170=180)となる。差分Δyと斜行量aとの乗算値である36画素が、主走査方向の調整量となる。
主走査方向の調整量の算出は、従来は複雑で精密な計算により行われるが、本実施形態では、このように簡素化して行われる。この算出方法では、原稿画像の傾きが大きくなるにつれて調整量の精度が低下する。しかし、斜行補正部310で補正可能な傾きの範囲では、1画素未満(例えば600dpiで42um未満)での調整が可能なようにCPU301で制御される。
基準位置算出部309は、算出した調整量により仮想基準位置を調整することで基準位置を算出する。基準位置算出部309は、算出した主走査方向の調整量を、左主走査エッジ位置に対してプラス方向(0)、マイナス方向(1)のいずれに調整すればよいかを判断する。
傾き式算出部308で算出された一次式の傾き方向がプラス(0)の場合、原稿は、右下に傾いている状態であり、左主走査エッジ位置に対してプラス方向に補正される。傾き式算出部308で算出された一次式の傾き方向がマイナス(1)の場合、原稿画像は、右上に傾いている状態であり、左主走査エッジ位置に対してマイナス方向に補正される。
例えば、図10のように原稿画像が右下に傾いて(傾き方向:プラス(0))おり、左主走査エッジ位置x0が100画素目であり、調整量が36画素である場合、基準位置算出部309は、プラス方向(0)の調整と判断する。また基準位置算出部309は、(100+36=136)画素目を原稿画像の左端部の推定主走査エッジ位置x2と推定する。推定副走査エッジ位置y2は、調整された左端部の推定主走査エッジ位置x2を一次式に代入することで算出される。
図10の例では、一次式に左端部の推定主走査エッジ位置x2を代入することで左端部の推定副走査位置(y2=0.2*136+150=177)が算出される。なお、この例では小数点以下を四捨五入しているが、切り捨ててもよい。これらの処理により、基準位置算出部309は、斜行補正部310が斜行補正に用いる斜行補正時の基準位置(x2,y2)を推定する。
図11は斜行補正時の基準位置の算出処理の一例を示すフローチャートである。図11の処理は図14の処理が終了することによって開始される。CPU301が各ハードウェアを制御することにより図11のフローチャートの処理は実行される。なお、CPU301が不図示のROMに記憶されたプログラムをメモリ307に読み出し、実行することでの図11のフローチャートの処理が実行されてもよい。
以下の説明では、左端部の角を基準位置として推定する場合を説明するが、右端部の角を基準位置として推定する場合も同様の処理となる。
S1101において、CPU301は基準位置算出部309を制御し、エッジ判断部306で判断された左主走査エッジ位置x0に対応する副走査方向の位置y0を取得する。
S1102において、CPU301は基準位置算出部309を制御し、傾き式算出部308で算出された一次式にエッジ判断部306で判断された左主走査エッジ位置x0を代入して、仮想基準位置の副走査方向の位置y1を算出する。
S1103において、CPU301は基準位置算出部309を制御し、仮想基準位置の副走査方向の位置y1から、左主走査エッジ位置の副走査位置y0を減算して差分Δyを算出する。
S1104において、CPU301は基準位置算出部309を制御し、差分Δyと傾き式算出部308で算出された一次式の斜行量aとを乗算して、調整量Δxを算出する。
S1105において、CPU301は基準位置算出部309を制御し、傾き式算出部308で算出された一次式の傾き方向がプラス(0)かどうかを判定する。プラス(0)であると判定された場合、S1106に進む。そうでない場合、つまりマイナス(1)であると判定された場合、S1107に進む。
S1106において、CPU301は基準位置算出部309を制御し、左主走査エッジ位置x0に調整量Δxを加算して推定主走査エッジ位置x2を算出する。
S1107において、CPU301は基準位置算出部309を制御し、左主走査エッジ位置x0から調整量Δxを減算することで推定主走査エッジ位置x2を算出する。
S1108において、CPU301は基準位置算出部309を制御し、傾き式算出部308で算出された一次式に、算出した推定主走査エッジ位置x2を代入することで、斜行補正時の基準位置となる推定副走査エッジ位置y2を算出する。
S1109において、CPU301は基準位置算出部309を制御し、算出した推定主走査エッジ位置x2及び推定副走査エッジ位置y2を、斜行補正の基準位置として出力する。以上の処理により、斜行補正時の基準位置が算出される。
<斜行補正部>
斜行補正部310は、傾き式算出部308で算出された一次式に含まれる斜行量、傾き方向、及び基準位置算出部309で推定された基準位置に基づいて、画像の斜行補正及び位置補正を行う。斜行補正部310は、例えば一般的なアフィン変換等により、斜行補正を行う。
斜行補正部310は、下記に示すアフィン変換の式(式(5)、(6))によって、斜行量に応じた角度θの補正を行った原稿の画像の各画素の位置(主走査方向(X),副走査方向(Y))を算出する。斜行補正部310は、メモリ307に格納されたデジタル画像データをアフィン変換することで、斜行補正した画像を表す画像データを出力する。
基準位置(x2,y2)は、斜行補正されたデジタル画像データを平行移動させるための移動量となる。この移動量によって、原稿画像の先端部及び端部の出力位置を合わせることができる。アフィン変換による一連の処理を図12に示す。図12は斜行補正処理の一例を示す図である。斜行補正部310は、画像を回転処理及び平行移動することで斜行補正を行う。
X = xcosθ - ysinθ + x2 式(5)
Y = xsinθ + ycosθ + y2 式(6)
ここで、
X:主走査方向の補正後の画素位置,Y:副走査方向の補正後の画素位置
x:補正前の主走査方向の画素位置,y:補正前の副走査方向の画素位置
x2:主走査方向の平行移動量(主走査方向の基準位置)
y2:副走査方向の平行移動量(副走査方向の基準位置)
θ:原稿先端から算出された傾きに基づく角度
である。
以上のように、実施例1のスキャナ100は、読み取った画像に重畳されて現れる外乱の影響を低減し、斜行量の誤差を軽減した画像を示す画像データを生成することができる。
なお、本実施例では斜行補正部により生成された画像データはメモリ307に格納されるが、メモリ307に格納された後、どのような処理に使用されてもよい。例えば、操作部210にプレビュー画像として表示してもいいし、スキャナ100が備える不図示のネットワークインターフェースを介して、メールやFAX等で外部の装置に送信されてもよい。また、コピー処理に使用されてもよい。
<その他の実施の形態>
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給する。そして、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。