図1は本発明の一実施の形態におけるスキャナ装置の斜視図、図2は本発明の一実施の形態におけるスキャナ装置が備える画像処理装置の制御系統図、図3(a)は本発明の一実施の形態におけるスキャナ装置により原稿を含む一定領域の走査画像をソース画像として取り込む状況を示す図、図3(b)は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像の一例を示す図、図4は本発明の一実施の形態におけるスキャナ装置により取り込んだソース画像に含まれる原稿画像のエッジを検出している状況を示す図、図5は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像にブロック領域を設定した状態の一例を示す図、図6は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像の画素の配列の一例を示す図、図7は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像の各画素データが白黒画像の濃度値のみを持つ場合に画素データ記憶部に記録される画素データのメモリ領域上での配列の一例を示す図、図8は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像のブロック領域内に読み出し領域を設定した状態の一例を示す図、図9は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像のブロック領域に設定した読み出し領域内の画素データの配列の一例を示す図、図10及び図11は本発明の一実施の形態におけるスキャナ装置の補正処理部が行う補正処理手順の一例を示すフローチャート、図12は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像をソース画像ブロックに分割するとともに原稿画像を原稿画像ブロックに分割した状態の一例を示す図、図13は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像に含まれる原稿画像に設定された処理対象原稿画像ブロックの一例を示す図、図14は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像のソース画像ブロックとハミング距離との関係を説明する図、図15(a),(b)は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像に設定したソース画像ブロックから原稿画像ブロックの2頂点を結ぶ線分の少なくとも一部を含むソース画像ブロックを抽出する手順を説明する図、図16は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像に設定されたソース画像ブロックのうち、処理対象原稿画像ブロックについて抽出されたソース画像ブロックの一例を示す図、図17は本発明の一実施の形態におけるスキャナ装置が取り込んだソース画像の各画素データがカラーの濃度値を持つ場合に画素データ記憶部に記録される画素データの配列を示す図である。
図1において、スキャナ装置1は画像読み取り装置2とパーソナルコンピュータ3が通信ケーブル4によって接続されて成る。画像読み取り装置2はパーソナルコンピュータ3によってその動作制御がなされ、給紙トレイ2aから給紙された原稿5を内部に引き込んで図示しない原稿台に設置し、後述するラインセンサ7による原稿5の読み取りを行った後、排紙トレイ2bに排出する。パーソナルコンピュータ3が備える画像処理装置10は、画像読み取り装置2が読み込んだ原稿5の画像に所定の補正処理を施し、ディスプレイ3aに出力表示する。
図2において、パーソナルコンピュータ3の画像処理装置10は画像取り込み制御部11、画素データ書き込み制御部12、エッジ検出部13、原稿画像領域検出部14、補正処理部15、画像出力制御部16、1ライン分画素データ記憶部18、画素データ記憶部19、エッジデータ記憶部20、原稿画像領域データ記憶部21、読み出し対象ソース画像ブロック記憶部22、補正処理作業用画素データ記憶部23及び出力画像記憶部24を有している。
画像取り込み制御部11は、図3(a)に示すように、CCDやCMOS等の多数の撮像素子が列状に配設されて成るラインセンサ7を原稿台に対して相対移動させ、原稿台に設置された原稿5を主走査方向(図3(a)中に示す矢印Aの方向)及び副走査方向(図3(a)中に示す矢印Bの方向)に走査して原稿5を含む一定領域6の走査画像をソース画像30として取り込む。図3(b)はラインセンサ7が取り込んだソース画像30のイメージを示しており、このソース画像30には原稿5の画像(以下、原稿画像31と称する)が含まれている。なお、このソース画像30については、ラインセンサ7の主走査方向に対応する方向(矢印A1の方向)を横方向と称し、ラインセンサ7の副走査方向に対応する方向(矢印B1の方向)を縦方向と称する。
画素データ書き込み制御部12は、画像取り込み制御部11がラインセンサ7によって取り込んだソース画像30の画素データを1ライン分ずつ1ライン分画素データ記憶部18と画素データ記憶部19に書き込んで記憶させる。1ライン分画素データ記憶部18はソース画像30の1ライン分の画素データのみを記憶できるラインメモリであり、画素データ記憶部19はソース画像30の複数ライン分の画素データを記憶できるDRAM(Dynamic Random Access Memory)型のフレームメモリ(好ましくはSDRAM(Synchronous DRAM))である。
エッジ検出部13は、図4に示すように、1ライン分画素データ記憶部18に記憶されたソース画像30の1ライン分の画素データLDを読み出してそのラインにおける原稿画像31のエッジE1,E2を検出し、そのエッジE1,E2のデータをエッジデータ記憶部20に書き込んで記憶させる。エッジ検出部13は、検出したエッジE1,E2のデータをエッジデータ記憶部20に書き込んだら、1ライン分画素データ記憶部18に記憶されているソース画像30の1ライン分の画素データを消去する。
原稿画像領域検出部14は、エッジデータ記憶部20に記憶された複数ライン分のエッジデータに基づいてソース画像データ30に含まれる原稿画像31の領域検出を行う。そして、後述の補正処理に必要な原稿画像領域データ、すなわちソース画像30内における原稿画像31の位置、幅及びスキュー角(傾き角)を求めて原稿画像領域データ記憶部21に書き込んで記憶させる。
画素データ書き込み制御部12は、前述のように、画像取り込み制御部11が取り込んだソース画像30の画素データを1ライン分ずつ画素データ記憶部19に書き込んでいくが、このときラインセンサ7の主走査方向に並ぶ画素の画素データを画素データ記憶部19の同一ロウアドレス(raw address)のメモリ領域上に並べて書き込むのではなく、ソース画像30を横方向及び縦方向に分割するように設定された各ブロック領域BR(図5)内の画素の画素データを画素データ記憶部19の同一ロウアドレスのメモリ領域上に並べて書き込む。ここで、各ブロック領域BRの幅W(画素数)は画素データ記憶部19におけるバス幅の整数倍とする。
本実施の形態では、ソース画像30の横方向の画素数が256、画素データ記憶部19におけるバス幅が8画素分であると仮定し、ソース画像30の横方向の画素数256を4分割して1ブロック領域BR当たりW=64画素(256÷4)幅の4つのブロック領域BRを設定するものとする(図5)。各ブロック領域BRの縦方向の長さL(画素数)は任意であるが、ここではL=32画素(ラインセンサ7の副走査方向32ライン分)とする。なお、本実施の形態では、説明を簡単なものとするため、ソース画像30の各画素データは白黒画像の濃度値(階調)のみを持つものとする。
図6は上記条件下におけるソース画像30の画素の配列を示しており、図7はこの場合に画素データ記憶部19に記憶されるソース画像の画素データのメモリ領域上での配列を示している。図6では、ラインセンサ7が取り込んだソース画像30の横方向の画素列をラインセンサ7の副走査方向への走査の進行順に1ライン目、2ライン目、・・・と称している。また、図中の数字はソース画像30を構成する各画素の画素番号であり、ソース画像30左上隅の画素の画素番号を1とした通し番号となっている。
図6及び図7に示すように、画素データ書き込み制御部12は、ソース画像30の縦方向に並ぶ複数のブロック領域BR内の画素データを、画素データ記憶部19のまとまった(ロウアドレスが連続した)メモリ領域内に書き込む。図7中に符号rb1,rb2,rb3,rb4で示すロウアドレスが連続したメモリ領域(メモリ領域ブロックと称する)はそれぞれ、複数のブロック領域BRがソース画像30の縦方向に並んで形成されたブロック領域列LB1,LB2,LB3,LB4(図5,図6)に対応するものであり、各メモリ領域ブロックrb1,rb2,rb3,rb4の幅(ロウアドレス数)は予め任意の数に設定する。各メモリ領域ブロックrb1,rb2,rb3,rb4はリングバッファとし、補正処理終了後の画素データを消去しつつ、新しい画素データの書き込みができるようにしておく。
上記のように、各ブロック領域BR内の画素の画素データは画素データ記憶部19の同一ロウアドレスのメモリ領域上に並ぶように書き込まれるので、同じブロック領域BR内の画像の画素データは1つのロウアドレス指定コマンドの発行によるバースト転送によってまとめて(連続して)読み出すことができる。
ここで、図8に示すように、1つのブロック領域BR内に矩形の領域(以下、読み出し領域sbと称する)を設定してその領域内の画素データを読み出す場合を考える。このとき、設定した読み出し領域sbの最も若い画素番号がSA、横方向の画素数がH(Hはバス幅の整数倍でブロック領域BRの幅W以下とする)、縦方向の画素数がVであれば(ソース画像30の主走査方向の画素数は前述のようにW=256)、この読み出し領域sb内の画素の画素データは全て画素データ記憶部19の同一ロウアドレスのメモリ領域上に並んでいるので、4つのパラメータ「SA」,「H」,「V」,「W」を指定して“画素番号「SA」に対応するアドレスから「SA+H」のアドレスまでの連続したH個の画素データを読み出す動作を、SAにWを加えて新たなSAとしながらV回行う”というコマンドを画素データ記憶部19に対して発行すれば、設定した読み出し領域sb内の画素の画素データ全てをバースト転送によって高速に読み出すことができる。また、SAをブロック領域BRの最も若い画素番号に設定し、Hをブロック領域BRの幅Wに設定し、Vをブロック領域BRの長さLに設定すれば、そのブロック領域BR内の画素の画素データ全てを連続して読み出すことができる。
ここで、例えば図9に示すように、SA=1,H=16,V=16,W=64となる読み出し領域sbを設定した場合、これら4つのパラメータSA,H,V,Wを指定して上記コマンドを与えてやれば、設定した読み出し領域sb内にある画素番号「1〜16」,「257〜272」,・・・,「3841〜3856」の画素の画素データが連続して読み出される。或いは、この読み出し領域sbと同じ領域について読み出す別の方法として、SA=1、H=8、V=16、W=256となるコマンドと、SA=9、H=8、V=16、W=256となるコマンドとの2つのコマンドを連続して与えるようにしてもよい。この場合、画素番号「1〜8」,「257〜264」,・・・,「3841〜3848」の画素の画素データと、画素番号「9〜16」,「265〜272」,・・・,「3849〜3856」の画素の画素データが連続して読み出される。
補正処理部15は、原稿画像領域データ記憶部21に記憶された原稿画像領域データ(ソース画像30内における原稿画像31の位置、幅及びスキュー角)と、画素データ記憶部19に記憶されたソース画像30の画素データとに基づいて原稿画像31の補正処理を行う。以下、この補正処理部15が行う原稿画像31の補正処理の具体的手順を図10に示す補正処理のメインルーチンのフローチャート及び図11に示すサブルーチンのフローチャートを用いて説明する。
原稿画像31の補正処理は、先ず、ソース画像30を縦横同数の画素数を有する正方形形状の複数のソース画像ブロックSBに分割するとともに、原稿画像31を原稿画像31の向きに対応させたソース画像ブロックSBと同じ大きさの正方形形状の原稿画像ブロックGBに分割する(ステップS1、図12)。ここで、ソース画像ブロックSBの縦横の画素数はバス幅の整数倍とする。この実施の形態ではバス幅は8画素分であるので、ソース画像ブロックSBの縦横の画素数はともに8画素であるとする。
ステップS1が終了したら、補正処理しようとする原稿画像ブロックGB(以下、処理対象原稿画像ブロックSGBと称する)の指定を行う(ステップS2)。ここで、処理対象原稿画像ブロックSGBは1つの原稿画像ブロックGBのみを指定してもよいが、隣接する原稿画像ブロックGBを複数個まとめて指定してもよい。ここでは図13に示すように、原稿画像ブロックGBを原稿画像31の向きに対応させた縦横2個ずつ計4個の原稿画像ブロックGBから成る16×16画素分を処理対象原稿画像ブロックSGBとして指定するものとする。
ステップS2において処理対象原稿画像ブロックSGBの指定を行ったら、その処理対象原稿画像ブロックSGBの各頂点のソース画像30上での座標を算出する(ステップS3)。ここで、処理対象原稿画像ブロックSGBの頂点とは、処理対象原稿画像ブロックSGBを構成する各原稿画像ブロックGBの頂点のことであり、本実施の形態のように処理対象原稿画像ブロックSGBが縦横2個ずつ計4個の原稿画像ブロックGBから成る場合には9個の頂点P1,P2,・・・,P9(図13)の座標が存在し、また処理対象原稿画像ブロックSGBを構成する各原稿画像ブロックGBの辺として、12個の辺m1,m2,・・・,m12(隣接する原稿画像ブロックGB間で共有する辺は重複してカウントしている)が存在する。
ステップS3が終了したら、ステップS2で指定した処理対象原稿画像ブロックSGB内の領域の少なくとも一部を含むソース画像ブロックSBを読み出し対象ソース画像ブロックとして抽出する(ステップS4)。
このステップS4における読み出し対象ソース画像ブロックの抽出工程は、ソース画像30に設定されたソース画像ブロックSBのうち、処理対象原稿画像ブロックSGB内の領域と重複するものを抽出することによって実行できるが、本実施の形態のように、ソース画像ブロックSBと原稿画像ブロックGBが同じ大きさの正方形形状である場合には、1つの原稿画像ブロックSBの内部に1つのソース画像ブロックSBがすっぽり収まってしまうことはあり得えず、処理対象原稿画像ブロックSGB内の領域と重複するソース画像ブロックSBは必ず処理対象原稿ブロックSGBのいずれかの辺の少なくとも一部を含むことになるので、本実施の形態では、処理対象原稿画像ブロックSGBの全ての隣接する2頂点を結ぶ線分(すなわち原稿画像ブロックSGBの四辺)の少なくとも一部を含むソース画像ブロックSBを読み出し対象ソース画像ブロックとして抽出する。
ここで、原稿画像ブロックGBの隣接する2頂点を結ぶ線分の少なくとも一部を含むソース画像ブロックSBを読み出し対象ソース画像ブロックとして抽出する場合、どのソース画像ブロックSBが読み出し対象ソース画像ブロックとして抽出されるかは、選択する2頂点の位置によって決定される。
例えば、図14(a)のように、選択した2頂点Q1,Q2が1つのソース画像ブロック(符号をSBaとする)内に位置している場合には、このソース画像ブロックSBaのみが読み出し対象ソース画像ブロックとして抽出され、図14(b)のように、選択した2頂点Q1,Q2が上下(或いは左右)に隣接する2つのソース画像ブロック(符号をSBa,SBbとする)に跨って位置している場合には、これら2つのソース画像ブロックSBa,SBbが読み出し対象ソース画像ブロックとして抽出されることになる。また、図14(c)のように、選択した2頂点Q1,Q2が斜めに隣接する2つのソース画像(符号をSBa,SBbとする)に跨って位置している場合には、これら2つのソース画像ブロックSBa,SBbのほか、これら2つのソース画像ブロックSBa,SBbの双方に隣接する2つのソース画像ブロック(符号をSBc,SBdとする)のうち、2頂点Q1,Q2を結ぶ線分mが内部を通る方のソース画像ブロック(図14(c)の例ではSBc)が読み出し対象ソース画像ブロックとして抽出されることになる。
ここで、選択した2頂点を結ぶ線分が、隣接する2つのソース画像ブロックSBが共有している辺を横切る数をハミング距離Hdで表すことにすると、図14(a)における2頂点Q1,Q2間のハミング距離はHd=0、図14(b)における2頂点Q1,Q2間のハミング距離はHd=1、図14(c)における2頂点Q1,Q2間のハミング距離はHd=2となる。したがって、2頂点間のハミング距離がHd=0の場合にはその2頂点を含む1つのソース画像ブロックを読み出し対象ソース画像ブロックとして抽出すればよく、2頂点間のハミング距離がHd=1の場合にはその2頂点それぞれを含む上下或いは左右に隣接する2つのソース画像ブロックを読み出し対象ソース画像ブロックとして抽出すればよく、2頂点間のハミング距離がHd=2の場合にはその2頂点をそれぞれ含む斜めに隣接する2つのソース画像ブロックのほか、これら2つのソース画像ブロックの双方に隣接する2つのソース画像ブロックのうち、2頂点を結ぶ線分が内部を通る方のソース画像ブロックを読み出し対象ソース画像ブロックとして抽出すればよいことが分かる。
ここで、選択した2頂点間のハミング距離がHd=2である場合に、2頂点それぞれを含む2つのソース画像ブロックSBのほかにどのソース画像ブロックSBが2頂点を結ぶ線分の少なくとも一部を含むことになるのかを図15を用いて検討する。
選択した2頂点間のハミング距離がHd=2である場合、図15(a),(b)に示すように、選択した2頂点Q1,Q2それぞれを含む2つのソース画像ブロックSB1,SB3は上下又は左右ではなく斜めに隣接することになるので、ソース画像30上にはこれら2つのソース画像ブロックSB1,SB3が第1象限及び第3象限となるようなxy直交座標系を設定することができる。そして、このソース画像30上に設定したxy直交座標系を基準にして2頂点Q1,Q2を通る線分mを見た場合、この線分mがy軸を横切る点CYが図15(a)のようにy軸の正領域にあった場合(すなわち式のy切片が正値であった場合)には2頂点Q1,Q2を通る線分mは設定したxy直交座標系の第1象限、第3象限のほか第2象限を通ることになり、線分mがy軸を横切る点CYが図15(b)のようにy軸の負領域にあった場合(すなわち式のy切片が負値であった場合)には2頂点Q1,Q2を通る線分mは設定したxy直交座標系の第1象限、第3象限のほか第4象限を通ることになる。
また、図15(a),(b)に示すように、2頂点Q1,Q2の座標がそれぞれQ1(x1,y1;x1<0、y1<0)、Q2(x2,y2;x2>0、y2>0)であったとすると、これら2頂点Q1,Q2を結ぶ線分mの式は、
y=(y2−y1)/(x2−x1)×x+y1 (x1<x<x2,y1<y<y2)
となり、そのy切片cyは、
cy=(y1x2−x1y2)/(x2−x1)
となる。ここで、必ずx2−x1>0であるので、cyが正値であることはy1x2−x1y2>0であることに等しく、またcyが負値であることはy1x2−x1y2<0であることに等しい。このため、選択した2頂点Q1,Q2をそれぞれ含む2つのソース画像ブロックSB1,SB3が第1象限及び第3象限となるようにxy直交座標系を設定したときに、2頂点の座標がQ1(x1,y1;x1<0、y1<0)、Q2(x2,y2;x2>0、y2>0)であれば、y1x2−x1y2>0のときには2頂点Q1,Q2を結ぶ線分mは第2象限に位置するソース画像ブロックSB2を通るのでこれを読み出し対象ソース画像ブロックとして抽出すればよく、y1x2−x1y2<0のときには2頂点Q1,Q2を結ぶ線分mは第4象限に位置するソース画像ブロックSB4を通るのでこれを読み出し対象ソース画像ブロックとして抽出すればよいことになる。
次に、図11に示すサブルーチンのフローを用いてステップS4の具体的手順を説明する。ステップS4では、先ず、ステップS2で指定した処理対象原稿画像ブロックSGBの(すなわち原稿画像ブロックGBの)隣接する2頂点を選択し(ステップS11)、その選択した2頂点間のハミング距離Hdを算出する(ステップS12)。このハミング距離Hdは、選択した2頂点の座標と各ソース画像ブロックSBとの位置関係から容易に求めることができる。ハミング距離Hdは、例えば図13に示す例では、2頂点P5,P2の間のハミング距離はHd=2、2頂点P2,P1の間のハミング距離はHd=1、2頂点P1,P4の間のハミング距離はHd=2、2頂点P4,P5の間のハミング距離はHd=1となる。なお、本実施の形態のように、ソース画像ブロックSBと原稿画像ブロックGBが同じ大きさの正方形形状である場合には、選択した2頂点間のハミング距離Hdが3以上とは成ることはなく、必ず0,1,2のいずれかとなる。
ステップS12において2頂点間のハミング距離Hdを算出したら、そのハミング距離Hdの値が0又は1であるか否かの判断を行う(ステップS13)。そして、ハミング距離Hdの値が0又は1であった場合にはステップS14に進み、選択した2頂点を含む1又は2のソース画像ブロックSBを読み出し対象ソース画像ブロックとして抽出し、その結果を読み出し対象ソース画像ブロック記憶部22に書き込んで記憶させる(ステップS14)。
一方、ステップS13においてハミング距離Hdが0又は1でなかった(Hd=2であった)場合には、ステップS14の前にステップS14aに進む。ステップS14aでは、選択した2頂点を含む2つのソース画像ブロックSBが第1象限及び第3象限となるようにxy直交座標系を設定し、その設定したxy直交座標系を基準にして2頂点を通る線分の式を算出する。そして、算出した2頂点を通る線分の式のy切片が正値であるときには設定したxy直交座標系の第2象限に位置するソース画像ブロックSBを読み出し対象ソース画像ブロックとして抽出し、y切片が負値であるときには設定したxy直交座標系の第4象限に位置するソース画像ブロックSBを読み出し対象ソース画像ブロックとして抽出して、その結果を読み出し対象ソース画像ブロック記憶部22に書き込んで記憶させる。そして、このステップS14aが終了したらステップS14に進み、選択した2頂点を含む1又は2のソース画像ブロックSBを読み出し対象ソース画像ブロックとして抽出し、その結果を読み出し対象ソース画像ブロック記憶部22に書き込んで記憶させる。
ステップS14が終了したら、上記ステップS11〜ステップS14までの処理を処理対象原稿画像ブロックSGBの全ての隣接する2頂点について行ったかどうかの判断を行う(ステップS15)。その結果、ステップS11〜ステップS14までの処理を処理対象原稿画像ブロックSGBの全ての隣接する2頂点について行っていなかった場合にはステップS11に戻って2頂点の選択を新たに行い、ステップS11〜ステップS14までの処理を処理対象原稿画像ブロックSGBの全ての隣接する2頂点について行っていた場合には、ステップS4のサブルーチンを終了してメインルーチンに復帰する。
ここで補正処理部15は、ステップS14又はステップS14aにおいて、読み出し対象ソース画像ブロックとして抽出したソース画像ブロックSBを読み出し対象ソース画像ブロック記憶部22に書き込もうとする際、そのソース画像ブロックSBが既に読み出し対象ソース画像ブロック記憶部22に書き込まれている場合には重複して書き込まないようにする。
また補正処理部15は、ステップS11において処理対象原稿ブロックSGBの隣接する2頂点を選択する際、処理対象原稿画像ブロックSGBの中心に位置する頂点(図13に示す例では頂点P5)から各ソース画像ブロックSBの四辺を一定の方向に回るように順に選択していくようにすれば、ステップS12においてハミング距離Hdを算出する際、2頂点の座標の一方のみの座標を入れ替えるだけでよいので、処理速度を速めることができる。例えば図13に示す例では、2頂点P5,P2(辺m1)を選択して処理→2頂点P2,P1(辺m2)を選択して処理→2頂点P1,P4(辺m3)を選択して処理→2頂点P4,P5(辺m4)を選択して処理→2頂点P5,P4(辺m5)を選択して処理→2頂点P4,P7(辺m6)を選択して処理→・・・(以下、mの番号を1つずつ増大させる順に2頂点を選択して処理)・・・→2頂点P2,P5(辺m16)を選択して処理、という順で処理すればよい。なお、この一連の処理により、図13に示す処理対象原稿画像ブロックSGBについては、図16の斜線で縁取りをした4つの枠C1,C2,C3,C4内のソース画像ブロックSB、すなわちソース画像ブロックSB1,SB2,SB3,SB5,SB6,SB7,SB8,SB10,SB11,SB12が読み出し対象ソース画像ブロックとして抽出される。
ステップS4が終了したら、ステップS4で抽出した読み出し対象ソース画像ブロック内の画素の画素データをバースト転送によりまとめて読み出し、補正処理作業用画素データ記憶部23に書き込んで記憶させる(ステップS5)。このステップS5における読み出し対象ソース画像ブロック内の画素の画素データのバースト転送による読み出しは、前述したように、読み出し対象ソース画像ブロックを読み出し領域sbに設定したうえで、4つのパラメータSA,H,V,Wを指定するコマンドを発行することによって行う。
ここで、同じブロック領域BR内に属する読み出し対象ソース画像ブロックの画素の画素データは、画素データ記憶部19の同一ロウアドレスのメモリ領域上に並べて書き込まれているので、この場合には複数の読み出し対象ソース画像ブロックをまとめて読み出し領域sbに設定すれば、その読み出し領域sb内の画素の画素データを1つのコマンドでまとめて読み出すことが可能である。例えば図13及び図16に示す例において、斜線で縁取りをした4つの枠C1,C2,C3,C4内のソース画像ブロック「SB1とSB5」、「SB2とSB6とSB10」、「SB3とSB7とSB11」及び「SB8とSB12」がそれぞれ同じブロック領域BR内に属している場合には、各枠C1,C2,C3,C4内の領域をそれぞれ1つの読み出し領域sbに設定すれば、各枠内の領域の全画素データをそれぞれ1つのコマンドでまとめて読み出すことができる。なお、補正処理作業用画素データ記憶部23は、ステップS2において指定した処理対象原稿画像ブロックSGBについての読み出し対象ソース画像ブロック内の画素の画素データを記憶し得る程度の記憶容量を有していればよい。
ステップS5が終了したら、原稿画像領域データ記憶部21に記憶されている原稿画像領域データ(ソース画像30内における原稿画像31の位置、幅及びスキュー角)及び補正処理作業用画素データ記憶部23に記憶されている読み出し対象ソース画像ブロック内の画素の画素データに基づいて、ステップS2において指定した処理対象原稿画像ブロックSGBの単位で原稿画像31の補正処理を行う(ステップS6)。
このステップS6の工程では、先ず、現在補正処理の対象となっている処理対象原稿画像ブロックSGBの領域内に、原稿画像31の向きに対応させた縦横の配列で格子点を設定する。この格子点は補正後の原稿画像31(以下、ディスティネーション画像と称する)の各画素に相当するものであるので、隣接する格子点同士の間隔はソース画像30における画素同士の間隔と同じ間隔になるようにする。ここで、ディスティネーション画像はデスキュークロッピング処理された、すなわち原稿画像31がソース画像30から切り出されて傾きが0となるように補正され、かつ所定の基準で位置補正がなされた(例えば原稿画像31の左上隅がソース画像30の左上隅にくるように位置補正された)画像であり、ディスプレイ3aで画像出力しようとしている画像である。
処理対象原稿画像ブロックSGBの領域内に格子点を設定したら、各格子点と、原稿画像31に上記の位置補正を施して得られるディスティネーション画像上の画素(すなわちディスティネーション画像上の位置)との対応関係を設定する。
各格子点とディスティネーション画像上の画素との対応関係を設定したら、各格子点の周囲に位置するソース画像30上の複数の画素を特定し、その特定した複数の画素の画素データ(濃度値)を補正処理作業用画素データ記憶部23から読み出す。そして、従来知られた手法(例えばバイリニア補間法)によって各格子点における濃度値を設定し、その設定した濃度値を、ディスティネーション画像上の画素の濃度値として出力画像記憶部24にビットマップ形式で書き込んで記憶させる。
図16中に丸囲みで示す部分拡大図は、補正処理の対象となっている処理対象原稿画像ブロックSGBの中の一部を示すものであり、ソース画像30上の画素を丸の記号「○」で示し、処理対象原稿画像ブロックSGBに設定した各格子点を二重丸の記号「◎」で示している。この場合、1つの格子点Pxにおける濃度値をバイリニア補間法によって設定する場合には、ソース画像30上の4画素Px1,Px2,Px3,Px4の画素データが必要となるので、これら4画素Px1,Px2,Px3,Px4の画素データを補正処理作業用画素データ記憶部23から読み出すことになる。
ステップS6が終了したら、ステップS2〜ステップS6までの処理を全ての原稿画像ブロックBRについて行ったかどうかの判断を行う(ステップS7)。その結果、ステップS2〜ステップS6までの処理を全ての原稿画像ブロックBRについて行っていなかった場合にはステップS2に戻って新たな処理対象原稿画像ブロックの指定を行い、ステップS2〜ステップS6までの処理を全ての原稿画像ブロックBRについて行っていた場合には、一連の補正処理を終了する。
ここで、ステップS7からステップS2へ戻り、新たな処理対象原稿画像ブロックの指定を行った場合であって、その後のステップS4において抽出した読み出し対象ソース画像ブロックの中に、以前に読み出し対象ソース画像ブロックとして抽出したものがあるときには、以前に読み出し対象ソース画像ブロックとして抽出した(すなわち補正処理作業用画素データ記憶部23から読み出した)画素データをそのまま用いるようにする。これにより画素データの読み出し時間を短縮することができ、補正処理速度を速めることができる。
上記一連の補正処理が終了した時点で出力画像記憶部24には補正処理後の原稿画像31全体の画素データ、すなわちディスティネーション画像の画素データがビットマップ形式で記憶されており、画像出力制御部16は、出力画像記憶部24に記憶されている画素データをパーソナルコンピュータ3のディスプレイ3aに画像表示する。これにより、デスキュークロッピング処理された原稿画像31(ディスティネーション画像)がディスプレイ3a上に表示される。
以上説明したように、本実施の形態におけるスキャナ装置1では、取り込んだソース画像30を横方向及び縦方向に分割するように設定された各ブロック領域BR内の画素の画素データがDRAM型の画像データ記憶手段(画素データ記憶部19)の同一ロウアドレスのメモリ領域上に並ぶように書き込まれ、原稿画像31の補正処理のためにソース画像30の画素データを画像データ記憶手段から読み出す際には、ブロック領域BR内に設定した読み出し領域sbごとにバースト転送によりまとめて読み出すようになっている。このため、補正処理しようとする原稿画像31の画素1つにつき複数回のコマンド発行が必要であり、原稿画像31全体についての画素データを得るためには非常に多くのコマンド発行を行う必要があった従来と比較してデスキュークロッピング処理などの原稿画像31の補正処理を高速化することができる。
また、本実施の形態におけるスキャナ装置1では、ソース画像30を複数のソース画像ブロックSBに分割するとともに、原稿画像31を複数の原稿画像ブロックGBに分割し、各原稿画像ブロックGB内の領域の少なくとも一部を含むソース画像ブロックSBを読み出し対象ソース画像ブロックとして抽出し、その抽出した読み出し対象ソース画像ブロック内の画素の画素データを画素データ記憶手段(画素データ記憶部19)から読み出して原稿画像ブロックGB単位で原稿画像31の補正処理を実行するようになっている。すなわち、原稿画像31上の画素のまとまりに対してソース画像30の画素をまとめて読み出して原稿画像31の上の画素のまとまり単位で補正処理するようになっており、従来のように、処理対象としている原稿画像31上の画素ごとに補正に必要なソース画像30上の画素の画素データを読み出す必要がないので、この面からも従来と比較してデスキュークロッピング処理などの原稿画像の補正処理を高速化することができる。
これまで本発明の実施の形態について説明してきたが、本発明は上述の実施の形態に示したものに限定されない。例えば、上述の実施の形態では、説明を簡単なものとするため、ソース画像30の各画素データは白黒画像の濃度値のみを持つものとしていたが、各画素データはカラーの濃度値をもっていてもよい。但し、この場合は図17に示すように、ソース画像30の各画素のRGBごとのデータをブロック領域BRの幅Wの画素数単位でまとめて順に並べて配列し(図17では各画素のRGBデータの区別を括弧付きの英文字(r),(g),(b)を添えて示している)、前述の4つのパラメータ「SA」,「H」,「V」,「W」を指定して“画素番号「SA」に対応するアドレスから「SA+H」のアドレスまでの連続したH個の画素データを読み出す動作を、SAに「3W」を加えて新たなSAとしながらV回行う”というコマンドを発行すれば、設定した読み出し領域sb内の画素の画素データ全てをRGBデータごとにバースト転送によって高速に読み出すことができる。なお、この場合は読み出し開始の画素番号のパラメータ「SA」はRGBに対応して3つ存在することになる。
また、上述の実施の形態では、スキャナ装置は画像読み取り装置とパーソナルコンピュータが通信ケーブルによって接続されて成る構成であったが、スキャナ装置は必ずしもこのような構成を有していなくてもよく、画像読取装置が有する画像読み取り機能、パーソナルコンピュータが有する画像読み取り制御機能、演算機能及び画像出力機能を備えた単体のスキャナ装置であってもよい。