以下,本発明にかかる読取装置を具体化した実施の形態について,添付図面を参照しつつ詳細に説明する。本形態は,画像読取機能を備えたスキャナに本発明を適用したものである。
本形態のスキャナ100は,その断面を図1に示すように,読取ヘッド21を有し,原稿と読取ヘッド21とを相対的に移動させつつ,原稿の画像を読み取る。読取ヘッド21は,対向する箇所に光を照射し,受光量に基づく信号を出力する。スキャナ100は,読取ヘッド21の出力信号に基づいて,例えば,1ライン分の画像データを連続して取得する。なお,本形態のスキャナ100の読取方式は,CIS方式でもよいし,CCD方式でもよい。
原稿を面として読み取るために,本形態のスキャナ100は,原稿を搬送する原稿搬送部22を有している。原稿搬送部22は,複数の搬送ローラ26等を含み,図1中に一点鎖線で示す搬送路25に沿って原稿を搬送する。そして,原稿搬送部22は,原稿を1枚ずつ所定の速度で搬送し,読取ヘッド21に対向する箇所を通過させる。そして,スキャナ100は,原稿搬送部22にて搬送中の原稿を,読取ヘッド21にて読み取る。
また,原稿搬送部22には,読み取り前の原稿が収容される原稿トレイ28と,読み取り後の原稿が収容される原稿排出トレイ29とが設けられている。そして,スキャナ100は,読み取り実行の指示入力を受け付けると,原稿トレイ28にセットされた原稿の1枚を搬送路25に引き込んで搬送し,読み取りが終了した原稿を原稿排出トレイ29に排出する。
本形態のスキャナ100は,読取ヘッド21にて,主走査方向の画像データを連続して取得する。スキャナ100は,主走査方向について,原稿の配置に関わらず,読取ヘッド21の長さに対応する範囲である読取範囲の画像データを取得する。図1に示すように,原稿の搬送路25を挟んで読取ヘッド21に対向する位置には,白板23が配置されている。そのため,スキャナ100は,読取ヘッド21の対向位置に原稿がない場合には,白板23を読み取る。
そして,本形態のスキャナ100は,原稿の搬送に伴って,副走査方向に画像データを取得する。つまり,画像データは,主走査方向に連続して取得され,原稿の搬送と読み取りとの進行につれて副走査方向に増えていく。本形態では,読取ヘッド21が,読取部の一例であり,読取ヘッド21の長さが,読取範囲の限界の一例である。
続いて,スキャナ100の電気的構成について説明する。スキャナ100は,図2に示すように,CPU31と,ROM32と,RAM33と,NVRAM(不揮発性RAM)34と,ASIC35とを含むコントローラ30を備えている。また,スキャナ100は,読取ヘッド21と,原稿搬送部22と,ネットワークインターフェース37と,USBインターフェース38と,操作パネル40とを備え,これらがコントローラ30に電気的に接続されている。
ROM32には,スキャナ100を制御するための各種制御プログラムや各種設定,初期値等が記憶されている。RAM33は,各種制御プログラムが読み出される作業領域として,あるいは,データを一時的に記憶する記憶領域として利用される。CPU31は,ROM32から読み出した制御プログラムに従って,その処理結果をRAM33またはNVRAM34に記憶させながら,スキャナ100の各構成要素を制御する。
CPU31は,制御部の一例である。なお,コントローラ30が制御部であってもよいし,ASIC35が制御部であってもよい。なお,図2中のコントローラ30は,CPU31等,スキャナ100の制御に利用されるハードウェアを纏めた総称であって,実際にスキャナ100に存在する単一のハードウェアを表すとは限らない。
ネットワークインターフェース37は,LANケーブル等を用いてネットワークを介して接続された装置と通信を行うためのハードウェアである。USBインターフェース38は,USBケーブル等を介して接続された装置と通信を行うためのハードウェアである。操作パネル40は,ディスプレイと入力ボタン等を有し,ユーザへの告知を表示し,ユーザによる入力操作を受け付ける。
続いて,本形態のスキャナ100における原稿の読み取り動作について説明する。本形態のスキャナ100は,前述したように,原稿を搬送しつつ読み進める。そして,読み取り終わった部分の画像データを利用して,その範囲内に含まれる画像のエッジを検出し,検出したエッジの位置情報をエッジデータとして取得する。
エッジとは,画像データの中で,画像データのデータ値が所定の閾値を超えて変化する位置である。スキャナ100は,例えば,画像データ中の各点の輝度値を所定の閾値で二値化し,二値化データの値が0から1へ変化した箇所をエッジであると判断して,エッジの位置をエッジデータとして取得する。
本形態のスキャナ100にてシート状の原稿を読み取った場合,シートの縁辺と白板23との境界に影が生じる。そのため,画像データ51は,図3に示すように,シートの縁辺に対応する部分に,原稿の内容部分より濃い色の影画像52が含まれることが多い。この図3では,取得した画像データ51の全体を破線で囲い,その内部に原稿の画像が含まれていることを示している。例えば,長方形の原稿を読み取った画像データ51には,原稿の四辺による影画像52が含まれ,前述したエッジ検出動作を実行すると影画像52によるエッジが検出される。
ここで,原稿の各辺を,図3に示すように定義する。原稿のうち,読取ヘッド21の位置に最初に到達する箇所を,「上辺」とする。原稿が読取ヘッド21に対して平行に配置されていれば,上辺によってできる影画像52は,読み取った画像データ51では主走査方向に整列して現れる。また,原稿のうち,最後に読取ヘッド21の位置に到達する箇所を,「下辺」とする。さらに,原稿の読み取り面に向かって,上辺を上,下辺を下に配置した場合に,右側に配置される箇所を「右辺」,左側に配置される箇所を「左辺」とする。なお,左辺と右辺とを区別しない場合には,まとめて「側辺」とする。
本形態のスキャナ100にて原稿を読み取って取得された画像データ51について,各点の位置を,図3に示すように,X−Y平面内の座標を用いて説明する。画像データ51の生成開始位置を原点として,読取ヘッド21の長手方向(主走査方向)をX軸,読み取りの進行方向(副走査方向)をY軸とする。X軸方向の画像データ51の幅Wxは,読取ヘッド21の長さに基づく固定長である。そして,Wxは,画像データ51のX座標の最大値である。また,画像データ51は,読み取りの進行とともに,1ピクセル分ずつY軸方向へ増えていく。
本形態のスキャナ100は,読取開始の指示入力を受け付けると,原稿の搬送を開始し,その後,所定のタイミングにて読取動作を開始する。読み取りを開始するタイミングは,図3に示すように,原稿の上辺が読取ヘッド21に対向する位置に到達すると予測されるタイミングより,少し前である。なお,原稿の先端が読取ヘッド21に対向する位置に到達すると予測されるタイミングは,原稿の搬送開始からの経過時間と原稿の搬送速度とに基づいて決定できる。
スキャナ100は,読み取りの進行に伴って,生成中の画像データ51に対して,エッジ検出動作を実行する。まず,スキャナ100は,読み取り開始から所定のライン数の画像データ51を取得した後,原稿の上辺によって生じた影画像52のエッジを検出する。例えば,Y=0の点から副走査方向に所定の範囲の画像データ51から,エッジを検出する。そして,取得されたエッジの位置であるエッジデータに基づいて,原稿の上辺の位置を推定する。なお,X軸方向についての全ての点についてエッジ検出動作を実行すると,処理に時間が掛かりすぎる。そのため,本形態のスキャナ100では,所定の間隔のX位置についてエッジ検出動作を実行する。また,ノイズを上辺と誤判断することを抑制するために,所定の個数以上の点で連続して輝度値が閾値を超えている場合に限って,上辺と判断する。
スキャナ100は,さらに読み取りが進行したら,原稿の側辺によって生じた影画像52のエッジを検出する。この場合には,読み取りの進行とともに,原稿の上辺側から副走査方向に順に検出することになる。そして,スキャナ100は,Y軸方向に所定の頻度でサンプリングして,X軸方向にエッジデータを取得する。つまり,画像データ51のうち,Y軸方向に所定の間隔を置いた位置ごとにエッジを検出し,側辺の位置を推定する。例えば,X=0の点からX軸方向に検出することで,原稿の左辺の位置を推定する。また,X=Wxの点からX軸方向の逆方向に検出することで,原稿の右辺の位置を推定する。なお,サンプリングの頻度は,左辺と右辺とで同じ頻度でもよいし,異なる頻度でもよい。
スキャナ100では,読取ヘッド21の長さ方向の端部近傍はノイズの影響を受けやすく,主走査方向の端部近傍にて,原稿の側辺ではない箇所にエッジを検出してしまうことがある。また,原稿が読取ヘッド21の長さ方向にはみ出した位置にセットされた場合,原稿の側辺によるエッジが適切に検出できない可能性がある。そのため,これらの場合には,前述したエッジ検出動作によって原稿の側辺の位置を推定すると,誤判断を招くおそれがある。
本形態のスキャナ100は,検出されたエッジの位置が,画像データ51のX軸方向の両端から予め決めた規定距離までの範囲内にある場合には,適切なエッジの位置ではないと判断する。具体的には,検出されたエッジの位置のX座標が0に近いかまたはWxに近い場合は,適切なエッジの位置ではないと判断する。この場合,原稿の主走査方向の端部が読取ヘッド21の読取範囲を超えている可能性を否定できないので,原稿の主走査方向の端部が読取ヘッド21の読取範囲を超えていると判断する。そして,そのエッジの位置に基づく原稿の側辺の位置の推定を行わない。
さらに,スキャナ100は,読取範囲を超えていると判断した場合には,後述する原稿の情報を取得する処理にて,検出されたエッジの両端の位置情報を使用しない。なお,規定距離は,画像データ51のX軸方向について,左端側と右端側とで同じでもよいし,異なっていてもよい。
また,スキャナ100は,原稿の上辺によるエッジの左右の端部の位置である先端角部についても,同様に判断する。先端角部によるエッジの位置を取得できなかった場合や,先端角部が,画像データ51のX軸方向の両端から予め決めた規定距離までの範囲内にある場合には,先端角部の位置を使用しない。例えば,先端角部の位置に基づく原稿の側辺の位置の推定を行わない。つまり,原稿の先端角部と推定されるエッジの位置が,主走査方向の端部近傍であった場合には,原稿の先端角部が読取範囲を超えていると判断する。
つまり,本形態のスキャナ100は,エッジの検出された位置が,読取範囲のうちX軸方向の両端近傍ではない範囲内にエッジが検出されたと判断した場合には,そのエッジの位置情報であるエッジデータを原稿の側辺の位置であると推定して,原稿の位置や形状に係る各種の情報を取得する際に使用する。以下では,読取範囲内にエッジが検出されたと判断した場合を,エッジデータが有効であるとする。一方,読取範囲内にエッジが検出されなかったと判断した場合には,エッジデータが無効であるとし,エッジデータを使用しない。
続いて,本形態のスキャナ100において,前述した原稿の読み取り動作を行う読取処理について,図4のフローチャートを参照して説明する。読取処理は,スキャナ100にて,読取開始の指示入力を受け付けたことを契機に,CPU31にて実行される。なお,以下では,画像データ51内の各点の位置を,前述したX−Y平面内の座標を用いて,「(X座標,Y座標)」と表記する。
本形態のスキャナ100は,読取処理を開始すると,まず,原稿の搬送を開始する(S101)。そして,原稿の搬送開始から所定の時間が経過したら,スキャナ100は,読取ヘッド21による読み取りを開始する(S102)。S102によって,スキャナ100は,X軸方向に1ライン分ずつ画像データを取得する。以後は,各ラインの画像データが,Y軸方向に順次追加して取得される。S102の処理は,読取処理の一例である。
さらに,スキャナ100は,取得した画像データ51に基づいて,原稿の上辺による影画像52と推定されるエッジの検出を開始する(S104)。具体的には,X軸方向にサンプリングした各位置において,Y軸方向に所定の幅の画像データ51に基づいて,輝度値が閾値を超えて変化した箇所をエッジとして検出し,エッジの位置情報であるエッジデータを取得する。
そして,スキャナ100は,上辺の一部であると判断できるエッジを検出したか否かを判断する(S105)。上辺を検出していないと判断した場合には(S105:NO),スキャナ100は,さらに読み進める。そして,上辺を検出したと判断した場合には,(S105:YES),スキャナ100は,検出された上辺の位置からさらに,予め決めた所定の距離だけ読み進める(S106)。
そして,スキャナ100は,読み取り開始からS106の終了までに読み取った画像データ51から検出されたエッジの位置に基づき,原稿の上辺全体の位置情報を取得する(S108)。例えば,S104にて上辺と推定された位置からX軸方向に連続するエッジを検出して,連続する上辺の位置とする。S108の処理は,エッジ取得処理の一例である。
次に,スキャナ100は,上辺の角部の位置を取得する(S109)。S108にて検出されたエッジの途切れた位置を原稿の角部と推定して,その位置からY軸方向に連続するエッジを検出する。Y軸方向にエッジが連続していれば,上辺によるエッジの途切れる位置は,原稿の先端角部に相当すると判断する。つまり,S109では,スキャナ100は,原稿の上辺によるエッジの終端の位置から,図5に示すように,原稿の上辺の角部の座標を取得する。例えば,上辺と左辺とによる角部C(Xc,Yc)と,上辺と右辺とによる角部D(Xd,Yd)とを取得する。S109の処理は,抽出処理の一例である
そして,スキャナ100は,左右両側の角部C,Dの取得に成功したか否かを判断する(S112)。例えば,上辺に終端が検出できなかった場合や,上辺が波打っている等により上辺の両端が適切に検出できなかった場合には,スキャナ100は,角部C,Dの座標を適切に取得できない。従って,スキャナ100は,角部C,Dの取得に失敗したと判断する。
さらに,スキャナ100は,前述したように,検出されたエッジの位置が画像データ51のX軸方向の両端近傍にあった場合には,そのエッジデータは信頼性が低い。つまりそのエッジデータに基づいて,辺の位置を判断することは好ましくない。そのため,そのエッジデータは無効であるとして,スキャナ100は,辺の位置の推定にそのエッジデータを使用しない。以下では,エッジデータを無効とする範囲を,図5に示すように,左辺側を規定距離Wlとし,右辺側を規定距離Wrとする。WlとWrとは,同じ距離でもよいし,異なっていてもよい。
つまり,スキャナ100は,S112にて,取得された角部CのX座標Xcが,0から予め決めた規定距離Wlまでの範囲内にある場合,つまり,Xc<Wlである場合には,角部Cの取得に失敗したと判断する。また,スキャナ100は,取得された角部DのX座標Xdが,X座標の最大値Wxから予め決めた規定距離Wrまでの範囲内である場合,つまり,Xd>Wx−Wrである場合には,角部Dの取得に失敗したと判断する。S112の処理は,判断処理の一例である。
そして,スキャナ100は,左右両側の角部C,Dの取得に成功したと判断した場合には(S112:YES),上辺と左辺と右辺とを使用すると決定する(S113)。つまり,左辺のエッジデータも,右辺のエッジデータも,ともに有効であり,いずれも以後の処理に使用できる。
一方,スキャナ100は,角部C,Dの少なくとも一方の取得に成功しなかったと判断した場合には(S112:NO),左辺側の角部Cの取得に成功したか否かを判断する(S115)。そして,スキャナ100は,左辺側の角部Cの取得に成功したと判断した場合には(S115:YES),左辺のエッジデータは有効であり,以後の処理にて上辺と左辺とを使用すると決定する(S116)。
また,スキャナ100は,左辺側の角部Cの取得に成功しなかったと判断した場合には(S115:NO),右辺側の角部Dの取得に成功したか否かを判断する(S118)。そして,スキャナ100は,右辺側の角部Dの取得に成功したと判断した場合には(S118:YES),右辺のエッジデータは有効であり,以後の処理にて上辺と右辺とを使用すると決定する(S119)。
スキャナ100は,右辺側の角部Dの取得に成功しなかったと判断した場合には(S118:NO),上辺のみを使用すると決定する(S121)。つまり,左辺のエッジデータも右辺のエッジデータも無効であり,左辺も右辺も使用できない。この場合には,スキャナ100は,後述する原稿の情報を取得する処理を実行しない。
そこで,S121の後,スキャナ100は,原稿の下辺まで読み取りが終了したか否かを判断する(S123)。例えば,原稿の終端が読取ヘッド21に対向する位置を通り抜け,さらに予め決めた時間だけ搬送したら,原稿の下辺までの読み取りが終了したと判断できる。読み取りが終了していないと判断した場合には(S123:NO),さらに読み取りを継続する。そして,読み取りが終了したと判断したら(S123:YES),読取処理を終了する。なお,S121の後,上辺の情報のみを利用して可能な処理が有れば,当該処理を実行してもよい。
一方,S113,S116,S119のいずれかにて,左辺と右辺との少なくとも一方は使用すると決定した場合には,スキャナ100は,まず,サンプリング位置決定処理を実行する(S125)。図6のフローチャートに,サンプリング位置決定処理の手順を示す。
原稿の傾きが大きい場合などでは,例えば,図7に示すように,左右のいずれかの辺によるエッジデータが途中から無効となる可能性がある。サンプリング位置決定処理は,側辺のエッジデータが有効から無効に変化すると予測される位置である超過位置Hの座標を取得し,読取位置の副走査方向の位置がその超過位置HのY座標に近づいたら,それまでよりサンプリング頻度を高くする処理である。なお,この処理では,原稿が長方形であると推定している。
サンプリング位置決定処理では,スキャナ100は,まず,上辺のX軸方向に対する原稿の傾き角θを取得する(S201)。傾き角θは,図7に示すように,角部Cと角部Dとを結ぶ線分とX軸とがなす角としてもよいし,上辺の各エッジデータを直線近似した直線とX軸とのなす角としてもよい。S201の処理は,傾き取得処理の一例である。
次に,傾き角θ>0であれば,超過位置Hの座標を取得する。例えば,図7に示すように,Yc<Ydであれば,左辺側のエッジデータが無効となる可能性がある。そこで,スキャナ100は,角部Cから上辺に直角な直線を想定し,原稿の左辺と仮定する。さらに,スキャナ100は,仮定した左辺とX=Wlの直線とが交差すると予測される超過位置Hの座標(Wl,Yh)を取得する(S203)。
具体的に,超過位置HのY座標Yhは,S201にて求めた傾き角θを用いて,以下の(式1)のように表すことができる。
tanθ = (Xc−Wl) / (Yh−Yc)
Yh = Yc + (Xc−Wl)/tanθ … (式1)
次に,スキャナ100は,左辺側のエッジ検出のためのサンプリング頻度を決定する(S205)。スキャナ100では,前述したように,Y軸方向に所定のサンプリング頻度でエッジ検出を実行する。そして,スキャナ100は,図8に示すように,超過位置HのY座標Yhから所定範囲内の領域Qでは,領域Q以外の領域よりもサンプリング頻度を高くする。領域Qは,境界領域の一例である。
具体的に,スキャナ100は,検出位置のY座標に応じて,図8に示すように,サンプリング頻度Pa,Pbを決定する。所定範囲としては,例えば,100ピクセルとする。
サンプリング頻度Pa =50(ピクセル) ただし,Y < Yh−100
サンプリング頻度Pb = 5(ピクセル) ただし,Y ≧ Yh−100
そして,スキャナ100は,S205にて決定したサンプリング頻度に従って,エッジ検出を実行する位置を決定し,RAM33に記憶する(S207)。なお,実際に超過する位置が超過位置Hより下方となる可能性もあるので,エッジ検出位置は,超過位置Hよりも少し下方まで決定しておくとよい。S207の後,サンプリング位置決定処理を終了する。
そして,スキャナ100は,決定されたエッジ検出位置まで画像データ51を生成したら,エッジ検出動作を実行する。検出されたエッジの位置のX座標がWl以下となったら,スキャナ100は,その後は左辺側のエッジ検出を実行しない。つまり,エッジデータが無効となったら,左辺についてのエッジ検出動作の実行は中止し,原稿の読み取りのみを継続する。そして,スキャナ100は,この時点以降は,左辺は使用しない。なお,左辺が無効となっても,右辺のエッジデータを適切に取得できていれば,右辺側のエッジ検出については継続する。
サンプリング位置決定処理によって決定されたように,超過位置Hに近い位置では,サンプリング頻度を高くするので,検出されたエッジデータが無効となったことを見逃す可能性は低い。従って,無効のエッジデータを有効であると誤判断する可能性は低い。
これにより,側辺のエッジデータが有効であるか否かを精密に判断できる。つまり,信頼性の低いエッジデータを側辺の位置と推定して使用する可能性は低い。なお,右辺側のエッジデータが途中で無効となる可能性がある場合には,スキャナ100は,S203にて,角部Dを通る右辺を仮定し,仮定した右辺とX=Wrの直線とが交差すると予測される点を超過位置Hとする。
また,原稿の搬送方向についての長さが,(Yh−Yc)よりも小さい場合には,エッジデータが無効となる前に読み取りが終了する。読取位置のY座標が(Yh−100)に達しないうちに原稿の終端に達した場合には,スキャナ100は,結果的にサンプリング頻度を変更しない。
図4の読取処理に戻り,S125のサンプリング位置決定処理が終了したので,次に,原稿情報取得処理を実行する(S127)。原稿情報取得処理とは,有効であると判断されたエッジデータを用いて原稿に係る情報を取得する処理である。取得する原稿の情報は,原稿の特性と状態との少なくとも一方であり,例えば,原稿のサイズ,原稿の傾き,原稿の回転斜行,原稿の形状,原稿に形成されているパンチ穴の位置がある。原稿情報取得処理の詳細については,後述する。S127の処理は,情報取得処理の一例である。
本形態のスキャナ100は,上辺の位置のみでなく,左辺と右辺との少なくとも一方の位置に関するエッジデータが有効である場合に,種々の原稿情報取得処理のうち,必要に応じて1以上の処理を実行する。左辺と右辺との両方とも無効である場合には,いずれの処理も実行しない。スキャナ100は,原稿の情報を取得する各種の処理のうち,1つ以上を有していればよい。複数の処理を有している場合には,全て実行してもよいし,ユーザの設定などによって選択された処理のみを実行してもよい。
原稿情報取得処理が終了したら,原稿の読み取りが終了したか否かを判断する(S123)。読み取りが終了していないと判断したら(S123:NO),さらに読み取りを継続する。そして,読み取りが終了したと判断したら(S123:YES),読取処理を終了する。
続いて,S127にて実行される原稿情報取得処理について説明する。まず,各種の情報を取得する処理の概要を説明する。本形態のスキャナ100は,原稿のサイズを取得する処理では,長方形以外の形状の原稿でも,原稿の全体を含む最小の長方形のサイズを取得する。スキャナ100は,例えば,原稿の途中に上辺よりも幅広の箇所がある場合には,その箇所の幅に基づいて,原稿の主走査方向の大きさを取得する。スキャナ100は,左右両辺のエッジデータがともに有効である場合に,原稿のサイズを取得する処理を実行する。
また,本形態のスキャナ100は,原稿の傾きを取得する処理では,原稿の辺縁と軸方向とのなす傾き角を取得する。上辺のみによる検出ではなく,左辺と右辺との少なくとも一方の位置を用いることで,より精密に傾き角を取得できる。スキャナ100は,例えば,取得した傾き角に基づいて,画像データ51を補正する。スキャナ100は,左辺と右辺との少なくとも一方のエッジデータが有効である場合に,原稿の傾きを取得する処理を実行する。
また,本形態のスキャナ100は,原稿の回転斜行を取得する処理では,原稿の左辺または右辺と軸方向とのなす傾き角が,搬送につれて変化していく状態であるか否かを取得する。原稿の傾き角が搬送につれて増加していると,原稿のジャムの原因となる可能性がある。スキャナ100は,例えば,回転斜行を検出したら,エラーメッセージを表示して,原稿の搬送を停止する。スキャナ100は,左辺と右辺との少なくとも一方のエッジデータが有効であれば,原稿の回転斜行を取得する処理を実行する。ただし,左右両辺の位置のエッジデータがともに有効であれば,より確実な判断が可能となる。
また,本形態のスキャナ100は,原稿の形状を取得する処理では,エッジデータとして検出された左辺と右辺との位置を繋いで,原稿の形状として取得する。スキャナ100は,例えば,原稿の形状に応じて,読み取った画像データ51を補正する。スキャナ100は,両辺のエッジデータがともに有効である場合,原稿の形状を取得する処理を実行する。左辺または右辺のいずれか一方のみが有効な場合には,取得できる原稿の形状は,不完全な情報となる。
また,本形態のスキャナ100は,原稿に形成されているパンチ穴の位置を取得する処理では,各辺から所定の距離範囲の位置に所定の大きさの円状の画像が含まれている場合に,パンチ穴と判断する。スキャナ100は,例えば,パンチ穴があると判断した場合には,パンチ穴の画像を周辺の地色に変換する処理を実行する。スキャナ100は,左辺と右辺との少なくとも一方の位置のエッジデータが有効である場合に,有効である側の辺に近いパンチ穴について,パンチ穴の位置を取得する処理を実行する。
なお,側辺のエッジデータを取得するためのエッジ検出動作のサンプリング頻度は,側辺を使用して取得する原稿の情報の種類に応じて,異なる頻度とする。前述した超過位置Hの近傍以外でのサンプリング頻度Paを,原稿情報取得処理として実行する処理の種類ごとに予め設定されている頻度とする。例えば,側辺の位置が高精度に要求される情報を取得する場合には,それ以外の場合に比較して高いサンプリング頻度とする。これにより,取得される原稿の情報の精度の向上が期待できる。なお,超過位置Hの近傍でのサンプリング頻度Pbは,サンプリング頻度Paに基づいて決定してもよいし,情報の種類にかかわらず予め決めた値に設定してもよい。
以下では,原稿情報取得処理の例として,図9に示す原稿サイズ取得処理と,図10に示す回転斜行取得処理とについて,それぞれのフローチャートを参照して説明する。これらの処理は,読取処理において,S113,S116,S119のいずれかを実行した後に実行される。つまり,本処理の開始時には,上辺以外に使用できる辺(左辺または右辺または両方)が確定している。
まず,図9のフローチャートを参照して,原稿サイズ取得処理について説明する。この処理は,S113にて左右の両辺の位置を使用できると決定した場合に実行される。原稿サイズ取得処理では,スキャナ100は,まず,上辺の情報に基づいて原稿の左右の位置の初期値を決定し,左辺位置と右辺位置との初期位置を決定する(S301)。具体的には,スキャナ100は,左辺位置を角部CのX座標Xcとし,右辺位置を角部DのX座標Xdとする。
次に,スキャナ100は,原稿の読み取り動作とエッジ検出動作とによって取得されたエッジデータが,左辺位置や右辺位置より外側であるか否かを判断する(S303)。具体的には,左側のエッジデータのX座標が左辺位置より小さいか,または,右側のエッジデータのX座標が右辺位置より大きいかの少なくとも一方を満たしていれば,スキャナ100は,エッジデータが外側であると判断する。
スキャナ100は,エッジデータの方が外側であると判断した場合には(S303:YES),外側であると判断したエッジデータのX座標を,対応する左辺位置または右辺位置とする(S305)。外側であると判断したエッジデータが片側の辺のみであれば,スキャナ100は,片側の辺位置のみを変更する。一方,スキャナ100は,エッジデータの方が外側ではないと判断した場合には(S303:NO),S305をスキップする。
そして,スキャナ100は,1ページ分の読み取りが完了したか否かを判断する(S307)。読み取りが完了していなければ(S307:NO),スキャナ100は,次に取得されたエッジデータが有効であるか否かを判断する(S309)。前述したように,原稿の搬送につれて,原稿の側辺が読取範囲から逸脱する場合がある。逸脱した後は,検出されたエッジデータは無効となるので,スキャナ100は,仮にエッジデータが取得されても使用しない。
スキャナ100は,エッジデータが有効であると判断した場合には(S309:YES),S303に戻って,エッジデータと辺位置とを比較する。そして,スキャナ100は,エッジデータが有効で読み取りを完了したと判断したら(S307:YES),最終的な左辺位置と右辺位置との間隔を原稿の幅として原稿のサイズを算出し(S311),原稿サイズ取得処理を終了する。
一方,スキャナ100は,読み取りが完了する前に,エッジデータが無効となったと判断した場合には(S309:NO),原稿のサイズの取得に失敗したことになる。そこで,スキャナ100は,原稿サイズは不明であると決定して(S313),原稿サイズ取得処理を終了する。なお,原稿の読み取りが完了していなければ,読み取り動作は継続する。
続いて,図10のフローチャートを参照して,回転斜行取得処理について説明する。この処理は,左辺と右辺との少なくとも一方の位置を使用できると決定した場合に実行される。回転斜行取得処理では,まず,スキャナ100は,上辺の情報に基づいて,左辺と右辺との予測位置を取得する(S401)。例えば,前述した傾き角θとサンプリング位置とを利用して,スキャナ100は,次にエッジ検出が実行される位置でのエッジデータを予測する。
スキャナ100は,エッジ検出を実行したら,取得されたエッジデータと,S401にて予測した予測位置とを比較する。そして,スキャナ100は,予測位置とエッジデータとの差分が予め決めた近似範囲内であるか否かを判断する(S403)。予測位置とエッジデータとが近く,差分が近似範囲内であると判断した場合には(S403:YES),スキャナ100は,1ページ分の読み取りが完了したか否かを判断する(S405)。
スキャナ100は,読み取りが完了したと判断した場合には(S405:YES),回転斜行は発生せず,読み取りが終わったので,そのまま回転斜行取得処理を終了する。一方,読み取りが完了していなければ(S405:NO),スキャナ100は,読み取りを継続するとともに,S401に戻って,次の予測位置を取得する。
一方,予測位置とエッジデータとの差分が近似範囲を超えていると判断した場合には(S403:NO),回転斜行の可能性がある。そこで,スキャナ100は,例えば,両辺とものエッジデータが有効であれば,両側の差分が同程度であるか否かを判断する(S407)。
そして,スキャナ100は,両側の差分が同程度であれば(S407:YES),回転斜行と決定する(S409)。そして,スキャナ100は,例えば,エラーメッセージを表示して,原稿の搬送と読み取りとを停止する。一方,両側の差分が同程度でなければ(S407:NO),スキャナ100は,不定形の原稿であると決定する(S411)。不定形と決定した場合は,読取完了まで読み取りを継続してもよい。S409とS411の後,回転斜行取得処理を終了する。
なお,片側のみのエッジデータが有効である場合には,S403にてNOであれば回転斜行であると判断してもよい。あるいは,さらに次のエッジデータと予測位置とを比較して,差分が増大している場合に回転斜行であると判断してもよい。判断結果に応じて,読み取りを継続するか否かを決定して,回転斜行取得処理を終了する。
以上,詳細に説明したように,本形態のスキャナ100は,原稿を搬送しつつ原稿の画像を読み取る。そして,エッジ検出動作を実行して,読み取った画像データ51から,エッジの位置の情報であるエッジデータを取得する。さらに,取得したエッジデータに基づいて,原稿の左辺または右辺が読取ヘッド21の読取範囲を超えるか否かを判断する。つまり,エッジ検出動作にて検出されたエッジのすべてをそのままで原稿の端部とせず,信頼性の高いエッジデータであるか否かを判断するので,原稿のエッジの検知精度の向上が期待できる。
なお,本実施の形態は単なる例示にすぎず,本発明を何ら限定するものではない。したがって本発明は当然に,その要旨を逸脱しない範囲内で種々の改良,変形が可能である。例えば,スキャナに限らず,複写機,複合機,FAX装置等,画像読取機能を備えるものであれば適用可能である。また,例えば,原稿を搬送する代わりに,読取ヘッド21を移動させて読み取る構成のものにも適用可能である。
また,本発明は,PC等の情報処理装置にも適用可能である。例えば,PCにて,スキャナ100から画像データを取得し,取得した画像データに基づいて,エッジ検出動作を行うこともできる。そして,PCにてエッジデータを取得するとともに,そのエッジデータが有効であるか否かを判断してもよい。さらに,判断結果をスキャナ100に送信してもよいし,PCにて利用してもよい。
また,例えば,左辺側の規定距離Wlと右辺側の規定距離Wrとの少なくとも一方は,無くてもよい。つまり,Wl=0でもよいし,Wr=0でもよい。
また,先端の角部C,Dの座標に基づいて超過位置Hを算出するとしたが,検出されたエッジの位置と読取範囲の限界から規定距離の位置との距離が閾値以下となった場合に,超過位置Hに近づいたと判断してもよい。また,超過位置Hに近づいたらサンプリング頻度を高くするとしたが,変更しなくてもよい。また,取得する原稿の情報に応じて異なる頻度でサンプリングするとしたが,全て一律の頻度としてもよい。
また,例えば,S105にタイムアウトを設けてもよい。つまり,上辺のエッジデータを取得できなかった場合は,読み取り失敗であり,エラーメッセージを表示して処理を終了するとしてもよい。
また,実施の形態に開示されている処理は,単一のCPU,複数のCPU,ASICなどのハードウェア,またはそれらの組み合わせで実行されてもよい。また,実施の形態に開示されている処理は,その処理を実行するためのプログラムを記録した記録媒体,または方法等の種々の態様で実現することができる。