(57)【要約】【課題】処理を高速化する。【解決手段】画像形成装置１０は、入力画像が記憶されているメモリ２０から補正する傾きに応じて始点座標を変えながら１ページのサイズよりも小さいブロック単位に画像を順次読み出すスキューブロック読み出し部１２と、スキューブロック読み出し部１２で順次読み出されたブロック単位の画像各々の傾きを修正し、傾きが修正された画像をブロック単位に出力するブロック傾き修正部１４と、ブロック傾き修正部１４が出力するブロック単位の画像に対して少なくとも任意倍率の拡縮処理を含む処理を行う拡縮付フィルタ処理部１６と、拡縮付フィルタ処理部１６で処理された画像をメモリ２０に順次書き込むブロック書き出し部１８とを設ける。【選択図】図１
2017200042.tif 000002
【特許請求の範囲】
【請求項１】
入力画像が記憶されているメモリから補正する傾きに応じて始点座標を変えながら１ページのサイズよりも小さいブロック単位に画像を順次読み出すスキューブロック読み出し部と、
前記スキューブロック読み出し部で順次読み出されたブロック単位の画像各々の傾きを修正し、傾きが修正された画像をブロック単位に出力するブロック傾き修正部と、
前記ブロック傾き修正部が出力するブロック単位の画像に対して少なくとも任意倍率の拡縮処理を含む処理を行う拡縮付フィルタ処理部と、
前記拡縮付フィルタ処理部で処理された画像をメモリに順次書き込むブロック書き出し部と
を有する画像形成装置。
【請求項２】
前記ブロック傾き修正部は、所定のサイズのバッファを備え、前記バッファを用いて傾きの補正を行い、その際、補正する傾きが大きくなると処理可能な画像のサイズが小さくなり、補正する傾きが小さくなると処理可能な画像のサイズが大きくなるように構成され、
前記スキューブロック読み出し部で読み出すブロック単位の画像のサイズは、前記ブロック傾き修正部で処理可能なサイズである
請求項１に記載の画像形成装置。
【請求項３】
前記拡縮付フィルタ処理部は、１ページ分の幅より小さい幅の画像の処理に対応するためのラインバッファを備え、
前記スキューブロック読み出し部で読み出すブロック単位の画像のサイズは、前記ブロック傾き修正部で処理可能かつ前記拡縮付フィルタ処理部で処理可能なサイズである
請求項１又は請求項２に記載の画像形成装置。
【請求項４】
前記スキューブロック読み出し部と前記ブロック傾き修正部とは、傾きの修正と任意倍率の拡縮とのそれぞれの座標を管理するためのカウンタを有し、前記カウンタをもとに各処理の始点座標を変更して処理を行う
請求項１乃至請求項３の何れかに記載の画像形成装置。
【請求項５】
前記ブロック傾き修正部は、傾きが修正された画像を前記メモリに書き込むことなくブロック単位で出力し、
前記拡縮付フィルタ処理部は、出力されたブロック単位の画像に対して前記任意倍率の拡縮処理を含む処理を行う
請求項１乃至請求項４の何れかに記載の画像形成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像形成装置に関し、例えば、スキュー補正（傾き補正）及びフィルタ処理等の画像加工機能を有する画像形成装置に適用して好適なものである。
【背景技術】
【０００２】
従来、複写機や複合機等の画像形成装置において、読み取り時に発生した原稿のスキュー（傾き）の解消を目的としてスキュー補正を行う画像形成装置が提案されている（例えば、特許文献１参照）。
【０００３】
スキュー補正を行う方法としては、画像の一部を矩形に切り出したブロック単位に画像をメモリより読み出してブロック単位の画像をバッファに一時的に保持し、該バッファに保持されたデータを傾きに応じて読み出すことでブロック単位の画像に対して傾きの補正を行い、補正を行った画像をブロック単位にメモリに書き出すことを、書き出す際のブロックの重なりがないように読み込みブロックのサイズを決めて、補正する傾きに応じて読み出しブロックの開始座標を変えながら画像全体にわたって行うことで、傾きを補正した画像を得る方法が知られている。画像形成装置においては、画像全体を保持するメモリを大容量低速メモリで構成し、画像の傾きの補正に使用するバッファを小容量高速メモリで構成することにより、処理にかかる構成コストを抑えながら、高速に傾きの補正を行う。この大容量低速メモリは、例えばＤＲＡＭ（Dynamic Random Access Memory）等で構成され、コストが安く、シーケンシャルアクセスは高速だがランダムアクセスは低速である。また小容量高速メモリは、例えばＳＲＡＭ（Static Random Access Memory）等で構成され、コストが高く、シーケンシャルアクセスもランダムアクセスも高速である。以後では、大容量低速メモリをメモリと標記し、小容量高速メモリをバッファと標記する。
【０００４】
画像形成装置の一般的な処理として、読み取り原稿のボケの解消や、読み取り原稿と出力原稿とのスクリーン干渉によるモアレ発生の抑止を目的としたフィルタ処理群がある。また画像形成装置の一般的な処理には、そのような処理の他に、ユーザが指定した倍率への拡大縮小等を目的とした任意倍率の拡縮処理がある。スキュー補正を行う画像形成装置では、読み取った原稿画像に対して、スキュー補正と、モアレ発生の抑止を目的としたフィルタ処理と、任意倍率への拡縮処理との３つの処理が行われるものがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−３５２７０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
このようにスキュー補正を行う画像形成装置では、読み取った原稿の画像に対して、スキュー補正と任意倍率への拡縮処理との処理が行われる場合がある。この場合、画像形成装置は、メモリに書き込まれたスキュー補正後の画像に対して任意倍率への拡縮処理を行うことになる。したがって、メモリに書き込まれたスキュー補正後の画像に対してフィルタ処理を行う処理構成では、スキュー補正にかかわる画像の読み出し書き出しによるメモリアクセスが原稿画像分増えるため、スキュー補正を行わず拡縮タ処理のみを行う場合よりも処理が遅くなるという問題があった。
【０００７】
本発明は以上の点を考慮してなされたもので、処理を高速化し得る画像形成装置を提案しようとするものである。
【課題を解決するための手段】
【０００８】
かかる課題を解決するため本発明の画像形成装置においては、入力画像が記憶されているメモリから補正する傾きに応じて始点座標を変えながら１ページのサイズよりも小さいブロック単位に画像を順次読み出すスキューブロック読み出し部と、スキューブロック読み出し部で順次読み出されたブロック単位の画像各々の傾きを修正し、傾きが修正された画像をブロック単位に出力するブロック傾き修正部と、ブロック傾き修正部が出力するブロック単位の画像に対して少なくとも任意倍率の拡縮処理を含む処理を行う拡縮付フィルタ処理部と、拡縮付フィルタ処理部で処理された画像をメモリに順次書き込むブロック書き出し部とを設けるようにした。
【０００９】
本発明は、フィルタ処理に任意倍率の拡縮処理が含まれている場合でも画像の傾き修正処理とフィルタ処理とをメモリを介さず連結して実行することができ、傾き修正処理とフィルタ処理との間でメモリアクセスを発生させないようにできるため、傾き修正処理を行わずフィルタ処理のみを行う場合よりも処理が遅くなることを抑えることができる。
【発明の効果】
【００１０】
本発明によれば、処理を高速化し得る画像形成装置を実現できる。
【図面の簡単な説明】
【００１１】
【図１】画像形成装置の構成を示すブロック図である。
【図２】メモリ上の入力画像及び出力画像を示す図である。
【図３】スキューブロック読み出し部の動作概略を示す図である。
【図４】ブロック傾き修正部の動作概略を示す図である。
【図５】ブロック傾き修正部における座標移動を示す図である。
【図６】Ｘ方向差分値及びＹ方向差分値を示す図である。
【図７】拡縮付フィルタ処理部の構成を示す図である。
【図８】拡縮付フィルタ処理手順を示すフローチャートである。
【図９】ブロック書き出し部の動作概略を示す図である。
【図１０】拡縮付フィルタ処理部の入出ブロックの座標を示す図である。
【図１１】フィルタ処理部がない場合の読み出し開始ブロックの決定を示す図である。
【図１２】フィルタ処理部がある場合の読み出し開始ブロックの決定を示す図である。
【図１３】次ブロック始点座標の決定を示す図である。
【図１４】ブロック傾き修正処理手順（１）を示すフローチャートである。
【図１５】ブロック傾き修正処理手順（２）を示すフローチャートである。
【図１６】ブロック傾き修正処理手順（３）を示すフローチャートである。
【図１７】他の実施の形態によるブロック傾き修正処理手順を示すフローチャートである。
【図１８】他の実施の形態によるｓｔｒｉｄｅｗ算出処理手順を示すフローチャートである。
【図１９】他の実施の形態によるｓｔｒｉｄｅｈ算出処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、発明を実施するための形態（以下実施の形態とする）について、図面を用いて説明する。
【００１３】
［１．実施の形態］
［１−１．画像形成装置の構成］
図１に示すように画像形成装置１０は複写機や複合機等であり、制御部１１、スキューブロック読み出し部１２、ブロック傾き修正部１４、拡縮付フィルタ処理部１６、ブロック書き出し部１８及びメモリ２０により構成される。制御部１１は、図示しないＣＰＵ（Central Processing Unit）を中心に構成されており、メモリ２０から所定のプログラムを読み出して実行することにより、画像形成装置１０を統轄制御する。スキューブロック読み出し部１２は、メモリ２０に置かれた入力画像ＩＭＧｉ（図２）を補正する傾きに応じて始点座標を変えながらブロック単位に読み出し、ブロック単位の画像をブロック傾き修正部１４に入力する。
【００１４】
図２（Ａ）は、メモリ２０上に置かれた入力画像ＩＭＧｉの例を示し、クロスハッチングされた領域が原稿を示す原稿領域ＡＰであり、傾いた状態の矩形原稿画像である。画像形成装置１０は、このような傾いた矩形原稿画像を図２（Ｂ）に示すようにそれぞれの辺がＸ方向又はＹ方向に沿うように傾きを補正し、出力画像ＩＭＧｏとして出力する。
【００１５】
図３は、図２の入力画像ＩＭＧｉを例に、スキューブロック読み出し部１２でブロック単位に読み出しを行う様子を示したものである。図３の破線枠のブロックはスキューブロック読み出し部１２が読み出すブロック単位の画像に対応する読み出しブロックＢＬｒであり、実線枠のブロックはブロック傾き修正部１４が出力する出力ブロックＢＬｏ１（図４）単位の画像の領域に対応するブロックである。スキューブロック読み出し部１２は、ブロック傾き修正部１４に入力するブロック各々に対して外接する矩形の範囲を読み出しブロックＢＬｒのブロック単位に読み出す。またスキューブロック読み出し部１２は、各ブロックの読み出し順番として、図の矢印で示すように、原稿領域ＡＰの出力左上に対応する読み出しブロックＢＬｒから読み出しを開始し、この読み出しブロックＢＬｒの読み出しが完了したら、この読み出しブロックＢＬｒの出力右方向に対応する読み出しブロックＢＬｒを読み出し、出力右端に対応する読み出しブロックＢＬｒまで順番に読み出す。またスキューブロック読み出し部１２は、出力右端に対応する読み出しブロックＢＬｒの読み出しが完了したら、出力の下方向に一段下がり、これらを繰り返し、原稿領域ＡＰ全体に対応する画像を読み出しブロックＢＬｒ単位に全面読み出す。さらにスキューブロック読み出し部１２は、各読み出しブロックＢＬｒ内の画素の読み出しもラスタースキャン順に左上の画素から順に読み出す。すなわちスキューブロック読み出し部１２は、左上から右方向に順番に読み、端までいったら一段下に下がって、これを繰り返し、読み出しブロックＢＬｒの全画素を読み出す。読み出しブロックＢＬｒのサイズや各読み出しブロックＢＬｒの始点座標の決定方法については後述する。
【００１６】
ブロック傾き修正部１４は、上述のスキューブロック読み出し部１２で読み出され入力される読み出しブロックＢＬｒ単位の画像各々の傾きを修正し、傾きを修正した画像各々をブロック単位に出力する。
【００１７】
図４は、ブロック傾き修正部１４で行う傾き修正の概略を示したものである。図４における入力ブロックＢＬｉ１は、図３における読み出しブロックＢＬｒに対応している。図４に示すように、入力ブロックＢＬｉ１中の実線枠で囲まれた出力領域Ａｏに対応する画素群から、図４の右図に示すように、傾きを修正したブロックの画像を生成し出力ブロックＢＬｏ１として出力する。出力ブロックＢＬｏ１の画素の出力順はラスタースキャン順であり、出力ブロックＢＬｏ１の出力は左上の画素を始点として順に出力されるため、ブロック傾き修正部１４は、図４中の斜線で示すように、補正する傾きと入力ブロックＢＬｉ１のＸ方向（横方向）の幅とに応じたサイズのバッファＢｆを持つ必要がある。
【００１８】
このようにブロック傾き修正部１４は、補正する傾きが大きいほど大きなサイズのバッファＢｆが必要になるため、バッファＢｆのサイズが一定である場合、補正する傾きが大きくなると、入力ブロックＢＬｉ１に内接する出力領域Ａｏ、すなわち処理可能な画像のサイズが小さくなる一方、補正する傾きが小さくなると、入力ブロックＢＬｉ１に内接する出力領域Ａｏ、すなわち処理可能な画像のサイズが大きくなる。またブロック傾き修正部１４のバッファＢｆのサイズは、補正する傾きが４５度より小さい場合において、拡縮付フィルタ処理部１６が処理可能な最大幅のブロック単位の画像を出力可能になるように決定される。
【００１９】
ブロック傾き修正部１４は、ラスタースキャン順に入力される入力ブロックＢＬｉ１の画像をバッファＢｆに蓄積していき、バッファＢｆに蓄積した入力ブロックＢＬｉ１の画像が出力ブロックＢＬｏ１の１ラインに対応する画素を連続して読み出せるだけ蓄積された段階で出力ブロックＢＬｏ１の１ラインに対応する画素を修正する傾き方向（図４の左図の矢印方向）に読み出し、出力の１ラインを生成して出力する。ブロック傾き修正部１４は、１ラインの出力が終わったら、出力に関与しなくなったバッファＢｆを未保持の入力画素の蓄積に割り当てると共に、次のラインの出力を行っていき、これを繰り返し行うことで出力ブロックＢＬｏ１に対応する全画素を順次生成して出力する。
【００２０】
図５は、傾き方向の読み出しについて、より具体的に説明するための図である。図５に示すように入力の各画素に対応する座標である入力対応座標Ｃｉに対して、出力に対応する各画素の座標である出力対応座標Ｃｏは傾いており、ブロック傾き修正部１４は、出力する画素を右方向に移動する場合には、図５（Ａ）に示すように現画素Ｐｐの座標のＸ座標及びＹ座標に対して△ｘ１及び△ｙ１を加算して次画素Ｐｎの座標を求めることができる。この△ｘ１及び△ｙ１は、出力の横方向に対応する１画素の移動ベクトル△ｘｙ１をＸ方向とＹ方向とに分解した移動量で、出力する原稿全体の横方向の画素数（以後ではｏｕｔｗ（図２）と標記する）と、図６に示す入力画像ＩＭＧｉ中の、出力画像ＩＭＧｏ（図２（Ｂ））に対応する原稿領域ＡＰの右上と左上の頂点座標のＸ方向及びＹ方向の差分値（それぞれｄｉｗｘ及びｄｉｗｙと以後標記する）をもとに求めることができ、下式のように表現できる。
△ｘ１＝ｄｉｗｘ／ｏｕｔｗ
△ｙ１＝ｄｉｗｙ／ｏｕｔｗ
ブロック傾き修正部１４は、出力する画素を下方向に移動する場合には、図５（Ｂ）に示すように現ライン画素Ｐｐｌの座標のＸ座標及びＹ座標に対して△ｘ２及び△ｙ２を加算して次ライン画素Ｐｎｌの座標を求めることができる。△ｘ２及び△ｙ２は、出力の縦方向に対応する１画素の移動ベクトル△ｘｙ２をＸ方向とＹ方向に分解した移動量で、出力する原稿全体の縦方向の画素数（以後ではｏｕｔｈ（図２）と標記する）と、図６に示す入力画像ＩＭＧｉ中の、出力画像ＩＭＧｏ（図２（Ｂ））に対応する原稿領域ＡＰの左下と左上の頂点座標のＸ方向及びＹ方向の差分値（以後ではそれぞれｄｉｈｘ及びｄｉｈｙと標記する）をもとに求めることができ、下式のように表現できる。
△ｘ２＝ｄｉｈｘ／ｏｕｔｈ
△ｙ２＝ｄｉｈｙ／ｏｕｔｈ
また、△ｘ２及び△ｙ２は、△ｘ１及び△ｙ１と、入力画像ＩＭＧｉのＸ方向の解像度とＹ方向の解像度と（以後では、ｉｎｘｒｅｓｏｌとｉｎｙｒｅｓｏｌと標記する）と出力画像ＩＭＧｏのＸ方向の解像度とＹ方向の解像度（以後では、ｏｕｔｘｒｅｓｏｌとｏｕｔｙｒｅｓｏｌと標記する）を使って下式のようにも表現できる。
△ｘ２＝−△ｙ１×（ｉｎｘｒｅｓｏｌ／ｉｎｙｒｅｓｏｌ）／（ｏｕｔｙｒｅｓｏｌ／ｏｕｔｘｒｅｓｏｌ）
＝（−ｄｉｗｙ×ｉｎｘｒｅｓｏｌ／ｉｎｙｒｅｓｏｌ）／（ｏｕｔｗ×ｏｕｔｙｒｅｓｏｌ／ｏｕｔｘｒｅｓｏｌ）
△ｙ２＝△ｘ１×（ｉｎｙｒｅｓｏｌ／ｉｎｘｒｅｓｏｌ）／（ｏｕｔｙｒｅｓｏｌ／ｏｕｔｘｒｅｓｏｌ）
＝（ｄｉｗｘ×ｉｎｙｒｅｓｏｌ／ｉｎｘｒｅｓｏｌ）／（ｏｕｔｗ×ｏｕｔｙｒｅｓｏｌ／ｏｕｔｘｒｅｓｏｌ）
【００２１】
入力解像度や出力解像度が逓倍関係になっていれば最小の解像度を使って、上式の分母及び分子の規格化を行うことができる。例えば、入力画像ＩＭＧｉのＸ方向解像度が６００、Ｙ方向解像度が６００、出力画像ＩＭＧｏのＸ方向解像度が６００、Ｙ方向解像度が６００であれば上式は下式（１）のように規格化でき、入力画像ＩＭＧｉのＸ方向解像度が３００、Ｙ方向解像度が６００、出力画像ＩＭＧｏのＸ方向解像度が６００、Ｙ方向解像度が６００であれば、上式は下式（２）のように規格化できる。
【００２２】
式（１）
△ｘ１＝ｄｉｗｘ／ｏｕｔｗ
△ｙ１＝ｄｉｗｙ／ｏｕｔｗ
△ｘ２＝−ｄｉｗｙ／ｏｕｔｗ
△ｙ２＝ｄｉｗｘ／ｏｕｔｗ
式（２）
△ｘ１＝（ｄｉｗｘ×２）／（ｏｕｔｗ×２）
△ｙ１＝（ｄｉｗｙ×２）／（ｏｕｔｗ×２）
△ｘ２＝−ｄｉｗｙ／（ｏｕｔｗ×２）
△ｙ２＝（ｄｉｗｘ×４）／（ｏｕｔｗ×２）
【００２３】
上式のようにすることで、入力画像ＩＭＧｉ上の座標のＸ方向座標及びＹ方向座標の小数点に該当する値（式の分母の値）と、出力の横移動及び縦移動それぞれのＸ方向及びＹ方向の移動量の分母の値とについて、Ｘ方向及びＹ方向それぞれ共通化できる。なお、上式の分子及び分母の値について、以降の説明を簡単にするため、△ｘ１、△ｙ１、△ｘ２及び△ｙ２の分子に該当する値をそれぞれｖｘ１、ｖｙ１、ｖｘ２及びｖｙ２と以後は標記し、△ｘ１及び△ｘ２の共通の分母をｘｖｂａｓｅ、△ｙ１及び△ｙ２の共通の分母をｙｖｂａｓｅと以後では標記する。
【００２４】
以上説明した△ｘ１、△ｙ１、△ｘ２及び△ｙ２を使用して、ブロック傾き修正部１４は、各入力ブロックＢＬｉ１において、各入力ブロックＢＬｉ１の出力の始点に対応する座標から、出力の１画素に対応する読み出し座標をラスタースキャン順に順次決定し、予め決められた出力ブロックＢＬｏ１のサイズ分の画素を生成し出力する。なお、出力ブロックＢＬｏ１のサイズや各出力ブロックＢＬｏ１の出力始点座標Ｃｏｓに対応する入力ブロックＢＬｉ１の出力始点対応座標Ｃｃｏｓ、具備するバッファＢｆのサイズの決め方、画素生成についてのより詳細な説明については後述する。
【００２５】
［１−２．拡縮付フィルタ処理部の構成］
拡縮付フィルタ処理部１６は、前段のブロック傾き修正部１４から入力された入力ブロックＢＬｉ２単位の画像に対して、少なくとも周辺の画素参照が必要な処理と、任意倍率の拡縮処理とを含む処理とを行い、図７に示すように出力ブロックＢＬｏ２として出力する。例えば、複写機や複合機等であれば、読み取り原稿のボケの解消や、読み取り原稿と出力原稿のスクリーン干渉によるモアレ発生の抑止や、ユーザ指定倍率への画像変換を目的とした任意倍率の拡縮処理を含むフィルタ処理が行われる。図７（Ａ）は、任意倍率の拡縮処理を含む種々のフィルタ処理の構成例を示すものであり、拡縮付フィルタ処理部１６は、文字部と文字以外の判定を画素毎に行う像域分離フィルタ３０と、像域分離フィルタ３０で文字以外と判定された画素に対して平滑化を行う平滑化フィルタ３２と、任意倍率の拡縮処理を行うブロック拡大縮小部４０と、像域分離フィルタ３０で文字と判定された画素に対して強調を行う強調フィルタ３４とで構成される。像域分離フィルタ３０及び平滑化フィルタ３２は、入力画像中の特定のパターンの検出や平滑化を行うものであり、ある解像度の入力画像を前提とした処理であるため、任意倍率の拡縮処理を行う前に処理を行う必要がある。各フィルタとも注目する１画素を処理するために、周辺の画素参照が必要であり、平滑化フィルタ３２を例に挙げると、注目する１画素の処理に注目画素を含む周辺９×９の画素の平均値を算出し、この平均値を注目画素の出力画素値として出力を行うことを入力される各画素に対して行っていく。周辺画素参照が必要なフィルタ処理は、１ページのライン単位で処理を行うと前後の画素を保持するためのラインバッファＬＢｆが大きくなってしまうため、拡縮付フィルタ処理部１６は、１ページを幅方向（Ｘ方向）に分割した入力ブロックＢＬｉ２単位分のラインバッファＬＢｆのみを有する構成とすることにより、ラインバッファＬＢｆのサイズを小さくでき、フィルタを構成するためのコストを抑えることができる。このような処理を行う場合、出力ブロックＢＬｏ１（図４）に対応した入力ブロックＢＬｉ２（図７）の境界付近の画素については、参照する画素が境界外となり、無効な画素出力となる。したがって拡縮付フィルタ処理部１６は、無効となる画素分大きなサイズの入力ブロックＢＬｉ２を予め入力し、各フィルタ処理や全フィルタ処理後の画素から無効な画素を削除して有効な画素のみを得る必要がある。例えば、図７の拡縮付フィルタ処理部１６の例では、１４画素幅（像域分離フィルタ５画素＋平滑化フィルタ４画素＋強調フィルタ５画素）の無効な画素が上下左右の入力ブロックＢＬｉ２境界に発生するため、１４画素幅分大きなサイズの入力ブロックＢＬｉ２を予め拡縮付フィルタ処理部１６に入力する必要がある。また、入力される入力ブロックＢＬｉ２に対して無効な画素の割合が大きくなると読み出しのオーバーヘッドが増えるため、拡縮付フィルタ処理部１６が有するラインバッファＬＢｆはオーバーヘッドが少なくなるように、かつ、大きくなりすぎないように決める必要がある。本実施の形態においては、縦横の出力サイズが同じ場合にオーバーヘッドが１０％程度となるよう、拡縮付フィルタ処理部１６のライン���ッファＬＢｆの幅を２８４（有効出力幅は２５６）と定めた場合を仮定して以後の説明を行う。オーバーヘッドとは、無効となる画素分だけ余分に読み出しが必要になる画素数であり、この場合のオーバーヘッドは２８４×２８４−２５６×２５６により求められる。
【００２６】
ブロック拡大縮小部４０は、ブロック単位に入力される画像に対して指定されたサイズに拡縮処理を行う。ブロック拡大縮小部４０は、Ｘ方向の拡大縮小を行うＸ方向拡大縮小部４２とＹ方向の拡大縮小を行うＹ方向拡大縮小部４４とで構成され、入力されたブロック画像に対して最初にＸ方向の拡大縮小を行い、次にＹ方向の拡大縮小を行う。
【００２７】
Ｘ方向拡大縮小部４２は、Ｘ方向拡大縮小カウンタとＸ方向出力カウンタとを有し、Ｘ方向拡大縮小カウンタをライン先頭（ブロック画像のライン先頭）でブロック毎に予め決定されたカウンタ初期値に設定し、入力されたブロック画像をＸ方向拡大縮小カウンタにしたがって拡大縮小すると共に、Ｘ方向の出力画素数をＸ方向出力カウンタでカウントし、Ｘ方向出力カウンタが予め決定された所定の値の範囲内の画素のみを出力することで、入力されたブロック画像をＸ方向に拡大縮小し、Ｘ方向に拡大縮小されたブロック画像をＹ方向拡大縮小部４４に入力する。
【００２８】
Ｙ方向拡大縮小部４４は、Ｘ方向拡大縮小部４２と同様に、Ｙ方向拡大縮小カウンタとＹ方向出力カウンタとを有し、Ｙ方向拡大縮小カウンタを先頭ライン（ブロック画像の先頭ライン）でブロック毎に予め決定されたカウンタ初期値に設定し、入力されたブロック画像をＹ方向拡大縮小カウンタにしたがって拡大縮小すると共に、Ｙ方向の出力ライン数をＹ方向出力カウンタでカウントし、Ｙ方向出力カウンタが予め決定された所定の値の範囲内のラインのみを出力することで、入力されたブロック画像をＹ方向に拡大縮小し出力する。またＹ方向拡大縮小部４４は、単純縮小以外の拡大縮小方法（例えば、補間拡大・縮小法）を行う場合には、ラインメモリを複数有する必要がある。
【００２９】
［１−３．拡縮付フィルタ処理手順］
拡縮付フィルタ処理部１６におけるＸ方向及びＹ方向の拡大縮小処理の詳細について、Ｘ方向拡大縮小部４２で１ライン分のブロック画像入力に対して行われる処理を例に図８に示すフローチャートにしたがって説明する。
【００３０】
ステップＳＰ３０１においてＸ方向拡大縮小部４２は、ライン先頭で出力カウンタ（ｒｘｏｃｎｔ）に０を、拡大縮小カウンタ（ｒｘｃｎｔ）に、ブロック画像毎の拡大縮小カウンタの初期値（ｒｘｃｎｔ０）を設定し、ステップＳＰ３０２へ進む。
【００３１】
ステップＳＰ３０２においてＸ方向拡大縮小部４２は、拡大縮小カウンタ（ｒｘｃｎｔ）の値が、拡大・縮小の倍率の分子の値（ｒｘｒａｔｉｏ）より小さいか判定を行い、小さければステップＳＰ３０３へ進み画素の出力を行い、それ以外の場合は画素の出力を行わずにステップＳＰ３０５へ進む。 ステップＳＰ３０３においてＸ方向拡大縮小部４２は、画素の出力を行って出力カウンタ（ｒｘｏｃｎｔ）に１を加算しさらに拡大縮小カウンタ（ｒｘｃｎｔ）に拡大・縮小の倍率の分母の値（ｒｘｂａｓｅ）を加算しステップＳＰ３０４へ進む。ここで出力画素値は、例えば、補間拡大・縮小法であれば、下式のように決定される。
【００３２】
（出力画素値）＝（（現画素の値）×（（倍率の分子の値）−（拡大・縮小カウンタの値））＋（次画素の値）×（拡大・縮小カウンタの値））／（倍率の分子の値）
【００３３】
ステップＳＰ３０４においてＸ方向拡大縮小部４２は、ステップＳＰ３０３で更新された拡大縮小カウンタ（ｒｘｃｎｔ）の値が拡大・縮小の倍率の分子の値（ｒｘｒａｔｉｏ）以上であるか判定を行い、以上であればステップＳＰ３０５へ進み入力画素位置の更新を行い、それ以外の場合はステップＳＰ３０６へ進む。
【００３４】
ステップＳＰ３０５においてＸ方向拡大縮小部４２は、拡大縮小カウンタ（ｒｘｃｎｔ）の値から拡大・縮小の倍率の分子の値（ｒｘｒａｔｉｏ）を減算し、入力画素位置を更新し（現画素の右隣りの画素を次の現画素とする）、ステップＳＰ３０６へ進む。 ステップＳＰ３０６においてＸ方向拡大縮小部４２は、出力カウンタ（ｒｘｏｃｎｔ）の値が１ラインの出力画素数（ｒｘｏｕｔｗ）に達したか判定を行い、達した場合は１ラインの処理を終了し次の入力画素ラインの処理を行い、達していない場合はステップＳＰ３０２へ戻る。Ｘ方向拡大縮小部４２は、以上の処理を全てのブロック画像の画素に対して行うことでＸ方向に拡大縮小を行う。
【００３５】
ブロック書き出し部１８は、前段の拡縮付フィルタ処理部１６で処理された画像を図９に示す書き出しブロックＢＬｗ単位でメモリ２０に書き出す。ここでの各書き出しブロックＢＬｗの入力順番は、上述したように、左上の書き出しブロックＢＬｗからラスタースキャン順に入力され、書き出しブロックＢＬｗ内の画素入力についてもラスタースキャン順に入力される。出力の原稿領域外（出力画像ＩＭＧｏ外）の画素が入力ブロックに含まれる場合には、ブロック書き出し部１８は、原稿領域外の画素以外の画像のみメモリ２０に書き出す（すなわち図９中のクロスハッチングされた原稿領域内の画素のみメモリ２０に書き込む）ようにしながら、全ブロックをメモリ２０に書き込むことにより、原稿全体の画像を得る。
【００３６】
［１−４．パラメータの算出方法］
以下では、画像形成装置１０の動作に必要なパラメータの算出方法等について説明する。図１０は、拡縮付フィルタ処理部１６へ入力される各ブロック画像と拡縮付フィルタ処理部１６が出力する各ブロック画像の始点座標について説明する図である。図の斜線の四角枠が拡縮付フィルタ処理部１６の出力する出力ブロックＢＬｏ２のブロック画像に対応し、出力ブロックＢＬｏ２のブロック画像の幅と高さとをそれぞれｆｏｕｔｂｗとｆｏｕｔｂｈと定義する。最初に出力される出力ブロックＢＬｏ２の始点座標である出力ブロック始点座標ＣＢＬｏｓのＸ座標及びＹ座標を各々０とすると、右に隣接する出力ブロックＢＬｏ２（図示せず）の始点座標である次出力ブロック始点座標ＣＢＬｏｎｓは、拡縮付フィルタ処理部１６の出力するブロック画像の幅（ｆｏｕｔｂｗ）分ずらした座標となり、下に隣接する出力ブロックＢＬｏ２（図示せず）の始点座標である次段出力ブロック始点座標ＣＢＬｏｎｃｓは、拡縮付フィルタ処理部１６の出力するブロック画像の高さ（ｆｏｕｔｂｈ）分ずらした座標となり、拡縮付フィルタ処理部１６の出力するブロック画像の幅及び高さ（ｆｏｕｔｂｗ及びｆｏｕｔｂｈ）は一定の値であるため、拡縮付フィルタ処理部１６は、各方向の以降の出力ブロックの始点座標も、出力するブロック画像の幅と高さとを単純に加算していくことで求めることができる。
【００３７】
拡縮付フィルタ処理部１６へ入力される入力ブロックＢＬｉ２は、拡縮付フィルタ処理部１６内の各フィルタ処理により発生する無効画素分大きいブロックサイズを入力する必要があり、その分入力ブロックＢＬｉ２の始点座標である入力ブロック始点座標ＣＢＬｉｓ（ｆｘｔｏｐ及びｆｙｔｏｐ）は出力ブロック始点座標ＣＢＬｏｓよりずれた位置となる。拡縮付フィルタ処理部１６は、入力ブロック始点座標ＣＢＬｉｓを求めるには、ブロック拡大縮小部４０に入力されるブロックである拡縮部入力ブロックＢＬｉ３の入力始点座標である拡縮部入力始点座標Ｃｉｓ（ｒｘｔｏｐ及びｒｙｔｏｐ）を最初に求める必要がある。拡縮部入力始点座標Ｃｉｓは、各方向の任意倍率の拡大・縮小の倍率の分母と分子の値（ｒｘｂａｓｅ、ｒｙｂａｓｅ、ｒｘｒａｔｉｏ及びｒｙｒａｔｉｏ）とブロック拡大縮小部４０の後段のフィルタ処理（強調フィルタ３４）で発生する無効画素の幅（ｏｂｎｗ２及びｏｂｎｈ２）を使って、下式のように計算できる。
【００３８】
式（１０）
ｒｘｔｏｐ＝ｆｌｏｏｒ［−（ｏｂｎｗ２×ｒｘｂａｓｅ）／ｒｘｒａｔｉｏ］
ｒｙｔｏｐ＝ｆｌｏｏｒ［−（ｏｂｎｈ２×ｒｙｂａｓｅ）／ｒｙｒａｔｉｏ］
【００３９】
上式のｒｘｔｏｐとｒｙｔｏｐとブロック拡大縮小部４０の前段のフィルタ処理（像域分離フィルタ３０及び平滑化フィルタ３２）で発生する無効画素の幅（ｏｂｎｗ１及びｏｂｎｈ１）とを使って、ページ最初に処理される拡縮付フィルタ処理部１６への入力ブロックＢＬｉ２の始点座標（入力ブロック始点座標ＣＢＬｉｓ）は下式で求められる。
【００４０】
式（１１）
ｆｘｔｏｐ＝ｒｘｔｏｐ−ｏｂｎｗ１
ｆｙｔｏｐ＝ｒｙｔｏｐ−ｏｂｎｈ１
【００４１】
次に、拡縮付フィルタ処理部１６の入力ブロックＢＬｉ１について、次ブロック（右方向のブロック）の始点座標である次入力ブロック始点座標ＣＢＬｉｎｓと次段ブロック（下方向のブロック）の始点座標である次段入力ブロック始点座標ＣＢＬｉｎｃｓとの算出方法について説明する。
【００４２】
出力ブロックＢＬｏ１の始点座標は、上述した通りＸ方向についてはｆｏｕｔｂｗ、Ｙ方向についてはｆｏｕｔｂｈずつ単純に増加させることで求めることができ、これに応じて入力側の各入力ブロックＢＬｉ１の始点座標も移動させることで求めることができる。但し、入力側の座標値はブロック拡大縮小部４０での任意倍率の拡縮前の座標値に換算する必要があるので、ブロック間で継ぎ目なく処理するには小数点以下の座標値についても考慮して求める必要がある。この少数点以下の座標値は、上述した拡縮付フィルタ処理手順（図８）の拡大縮小カウンタ初期値であるｒｘｃｎｔ０及びｒｙｃｎｔ０に対応し、拡大縮小カウンタ初期値についてページ最初のブロックの値は下式で求めることができる。
【００４３】
式（１２）
ｒｘｃｎｔ０＝（ｒｘｒａｔｉｏ−（ｏｂｎｗ２×ｒｘｂａｓｅ）％ｒｘｒａｔｉｏ）％ｒｘｒａｔｉｏ
ｒｙｃｎｔ０＝（ｒｙｒａｔｉｏ−（ｏｂｎｈ２×ｒｙｂａｓｅ）％ｒｙｒａｔｉｏ）％ｒｙｒａｔｉｏ
【００４４】
次ブロック（右方向のブロック）のＸ方向の拡大縮小カウンタ初期値と、次段ブロック（下方向のブロック）のＹ方向の拡大縮小カウンタ初期値は、それぞれ左と上に位置する入力ブロックＢＬｉ１で使用されるカウンタ初期値を使って下式で求めることができる。
【００４５】
式（１３）
ｒｘｃｎｔ０’（次ブロックのＸ方向の拡大縮小カウンタ初期値）
＝（ｆｏｕｔｂｗ×ｒｘｂａｓｅ＋ｒｘｃｎｔ０）％ｒｘｒａｔｉｏ
ｒｙｃｎｔ０’（次段ブロックのＹ方向の拡大縮小カウンタ初期値）
＝（ｆｏｕｔｂｈ×ｒｙｂａｓｅ＋ｒｙｃｎｔ０）％ｒｙｒａｔｉｏ
【００４６】
また、ブロック拡大縮小部４０の拡縮部入力ブロックＢＬｉ３の、次ブロックのＸ方向座標位置である拡縮部次ブロック入力始点座標Ｃｉｎｓと、次段ブロックのＹ方向座標位置である拡縮部次段ブロック入力始点座標Ｃｉｎｃｓとは、それぞれ左と上に位置する入力ブロックＢＬｉ１で使用されるカウンタ初期値を使って下式のようになる。
【００４７】
式（１４）
ｒｘｔｏｐ’（次ブロックのＸ方向座標位置）＝ｒｘｔｏｐ
＋ｆｌｏｏｒ［（ｆｏｕｔｂｗ×ｒｘｂａｓｅ＋ｒｘｃｎｔ０）／ｒｘｒａｔｉｏ］
ｒｙｔｏｐ’（次段ブロックのＹ方向座標位置）＝ｒｙｔｏｐ
＋ｆｌｏｏｒ［（ｆｏｕｔｂｈ×ｒｙｂａｓｅ＋ｒｙｃｎｔ０）／ｒｙｒａｔｉｏ］
【００４８】
上式の右辺の右項が入力側でのブロックの始点の座標の移動量となり、拡縮付フィルタ処理部１６の入力ブロックＢＬｉ１の次ブロックのＸ方向座標位置と、次段ブロックのＹ方向座標位置とについても、上式と同様に下式で求めることができる。
【００４９】
式（１５）
ｆｘｔｏｐ’（次ブロックのＸ方向座標位置）＝ｆｘｔｏｐ
＋ｆｌｏｏｒ［（ｆｏｕｔｂｗ×ｒｘｂａｓｅ＋ｒｘｃｎｔ０）／ｒｘｒａｔｉｏ］
ｆｙｔｏｐ’（次段ブロックのＹ方向座標位置）＝ｆｙｔｏｐ
＋ｆｌｏｏｒ［（ｆｏｕｔｂｈ×ｒｙｂａｓｅ＋ｒｙｃｎｔ０）／ｒｙｒａｔｉｏ］
【００５０】
［１−５．スキューブロック読み出し部及びブロック傾き修正部の動作］
次に、スキューブロック読み出し部１２とブロック傾き修正部１４の動作について説明する。スキューブロック読み出し部１２とブロック傾き修正部１４とは、後段で任意倍率の拡縮処理が入るため、動作に必要な各パラメータ値を求める際に考慮する必要がある。
【００５１】
図１１及び図１２は、スキューブロック読み出し部１２で最初に読み出すブロックである読み出し開始ブロックの詳細を説明するものである。図１１は、拡縮付フィルタ処理部１６がない場合の読み出しブロックＢＬｒを説明するもので、図１２は、拡縮付フィルタ処理部１６がある場合の読み出しブロックＢＬｒを説明するものである。本実施の形態では、拡縮付フィルタ処理部１６がある構成を実施の形態としているが、説明を明確にするために、先に拡縮付フィルタ処理部１６がない構成について図１１（Ａ）及び図１１（Ｂ）を用いて説明する。
【００５２】
図１１中に実線で示す枠が後段のブロック傾き修正部１４の出力に対応する領域である出力領域Ａｏであり、上述した通りこの出力領域Ａｏに外接する図１１中に破線で示す矩形の枠を読み出しブロックＢＬｒとして設定し、スキューブロック読み出し部１２は読み出しを行う。読み出しブロックＢＬｒの始点座標であるブロック始点座標ＣＢＬｓ（ｘｔｏｐ及びｙｔｏｐ）は、ｖｙ１が負の場合（傾き０〜−４５度）（図１１（Ａ））と、ｖｙ１が正の場合（傾き０〜４５度）（図１１（Ｂ））とで、ブロック傾き修正部１４の出力始点対応座標Ｃｃｏｓ（図４）が接する読み出しブロックＢＬｒの辺が異なるため、スキューブロック読み出し部１２はそれぞれ、原稿始点座標ＣＡＰｓ（ｘｏｒｇ及びｙｏｒｇ）、後段のブロック傾き修正部１４の出力ブロックサイズ（ｏｕｔｂｗ及びｏｕｔｂｈ）、移動量に関連する値（ｖｘ１、ｖｙ１、ｖｘ２、ｖｙ２、ｘｖｂａｓｅ及びｙｖｂａｓｅ）を用いて下式（３）で計算して決定する。
【００５３】
式（３）
ｖｙ１が負の場合：
ｘｔｏｐ＝ｘｏｒｇ
ｙｔｏｐ＝ｙｏｒｇ＋ｖｙ１×（ｏｕｔｂｗ−１）／ｙｖｂａｓｅ
ｖｙ１が正の場合：
ｘｔｏｐ＝ｘｏｒｇ＋ｖｘ２×（ｏｕｔｂｈ−１）／ｘｖｂａｓｅ
ｙｔｏｐ＝ｙｏｒｇ
【００５４】
次に拡縮付フィルタ処理部１６がある本実施の形態の構成について図１２（Ａ）及び図１２（Ｂ）を用いて説明する。先の拡縮付フィルタ処理部１６がない構成同様、図１２中に実線で示す枠が後段のブロック傾き修正部１４の出力に対応する領域で出力領域Ａｏであり、上述した通りこの出力領域Ａｏに外接する図１２中に破線で示す矩形の枠を読み出しブロックＢＬｒとして設定し、スキューブロック読み出し部１２は読み出しを行う。ここで、ブロック傾き修正部１４の出力領域Ａｏは、拡縮付フィルタ処理部１６の処理で生じる無効画素分大きなサイズとなっており、最終的に有効な出力となる領域である出力有効領域Ａｏｖは図１２中に一点鎖線で示す枠の領域となり、原稿始点座標ＣＡＰｓはこの出力有効領域Ａｏｖの左上に存在する。したがって、スキューブロック読み出し部１２は、読み出しブロックＢＬｒの始点座標を、原稿始点座標ＣＡＰｓから無効画素分ずれた位置から読み出す必要があり、原稿始点座標ＣＡＰｓ（ｘｏｒｇ及びｙｏｒｇ）、後段のブロック傾き修正部１４の出力ブロックサイズ（ｏｕｔｂｗ及びｏｕｔｂｈ）、移動量に関連する値（ｖｘ１、ｖｙ１、ｖｘ２、ｖｙ２、ｘｖｂａｓｅ及びｙｖｂａｓｅ）に加え、拡縮付フィルタ処理部１６の処理においてブロックの左端と上端で発生する無効画素の幅（ｏｂｎｗ及びｏｂｎｈ）を用いて下式（４）で計算して決定する。
【００５５】
ここで、式（４）のブロックの左端と上端で発生する無効画素の幅（ｏｂｎｗ及びｏｂｎｈ）は、ブロック拡大縮小部４０の前段のフィルタ処理（像域分離フィルタ３０及び平滑化フィルタ３２）で発生する無効画素の幅（ｏｂｎｗ１及びｏｂｎｈ１）と、ブロック拡大縮小部４０の後段のフィルタ処理（強調フィルタ３４）で発生する無効画素の幅（ｏｂｎｗ２及びｏｂｎｈ２）と、任意倍率の拡大・縮小の倍率の分母と分子の値（ｒｘｂａｓｅ、ｒｙｂａｓｅ、ｒｘｒａｔｉｏ及びｒｙｒａｔｉｏ）を使って下式で求めて使用する必要がある。
【００５６】
式（１６）
ｏｂｎｗ＝ｏｂｎｗ１
＋ｆｌｏｏｒ［（ｏｂｎｗ２×ｒｘｂａｓｅ＋ｒｘｒａｔｉｏ−１）／ｒｘｒａｔｉｏ］
ｏｂｎｈ＝ｏｂｎｈ１
＋ｆｌｏｏｒ［（ｏｂｎｈ２×ｒｙｂａｓｅ＋ｒｙｒａｔｉｏ−１）／ｒｙｒａｔｉｏ］
【００５７】
式（４）
ｖｙ１が負の場合：
ｘｔｏｐ＝ｘｏｒｇ＋（−ｏｂｎｗ×ｖｘ１−ｏｂｎｈ×ｖｘ２）／ｘｖｂａｓｅ
ｙｔｏｐ＝ｙｏｒｇ＋（−ｏｂｎｗ×ｖｙ１−ｏｂｎｈ×ｖｙ２＋ｖｙ１×（ｏｕｔｂｗ−１））／ｙｖｂａｓｅ
ｖｙ１が正の場合：
ｘｔｏｐ＝ｘｏｒｇ＋（−ｏｂｎｗ×ｖｘ１−ｏｂｎｈ×ｖｘ２＋ｖｘ２×（ｏｕｔｂｈ−１））／ｘｖｂａｓｅ
ｙｔｏｐ＝ｙｏｒｇ＋（−ｏｂｎｗ×ｖｙ１−ｏｂｎｈ×ｖｙ２）／ｙｖｂａｓｅ
【００５８】
スキューブロック読み出し部１２は、上式で算出したＸ座標及びＹ座標の整数値に対応する座標を最初の読み出しブロックＢＬｒの始点座標（例えば、−１．４であれば−２、２．５であれば２）として使用する。
【００５９】
読み出しブロックＢＬｒのサイズ（ｉｎｂｗ及びｉｎｂｈ）は、下式（５）で計算することで決定できる。
【００６０】
式（５）
ｖｙ１が負の場合：
ｉｎｂｗ＝（ｖｘ１×ｏｕｔｂｗ＋ｖｘ２×ｏｕｔｂｈ）／ｘｖｂａｓｅ＋α
ｉｎｂｈ＝（−ｖｙ１×ｏｕｔｂｗ＋ｖｙ２×ｏｕｔｂｈ）／ｙｖｂａｓｅ＋α
ｖｙ１が正の場合：
ｉｎｂｗ＝（ｖｘ１×ｏｕｔｂｗ−ｖｘ２×ｏｕｔｂｈ）／ｘｖｂａｓｅ＋α
ｉｎｂｈ＝（ｖｙ１×ｏｕｔｂｗ＋ｖｙ２×ｏｕｔｂｈ）／ｙｖｂａｓｅ＋α
【００６１】
上式のαは、後段のブロック傾き修正部１４で行う処理での補間演算（入力４画素で出力画素を補間して生成）や、開始座標の量子化による影響で必要となる画素入力に対応するためのマージンで、必要となる画素数以上の値（おおよそ２以上の値）を使えばよい。
【００６２】
また、スキューブロック読み出し部１２は、次ブロックの始点座標である次ブロック始点座標ＣＢＬｎｓについて、図１３で示すように、右方向への移動については左に隣接する読み出しブロックＢＬｒの始点座標を出力有効領域Ａｏｖの幅（ｓｔｒｉｄｅｗ）分ずらした位置を、下方向への移動については上に隣接する読み出しブロックＢＬｒの始点座標を出力有効領域Ａｏｖの高さ（ｓｔｒｉｄｅｈ）分ずらした位置を求めることで決定でき、左に隣接する読み出しブロックＢＬｒの始点座標を左ブロック始点座標ＣＢＬｌｓ（ｌｅｆｔ＿ｘｔｏｐ及びｌｅｆｔ＿ｙｔｏｐ）、上に隣接する読み出しブロックＢＬｒの始点座標を上ブロック始点座標ＣＢＬｕｓ（ｕｐ＿ｘｔｏｐ及びｕｐ＿ｙｔｏｐ）として下式（６）で計算する。
【００６３】
ここで、式（６）の出力有効領域Ａｏｖの幅と高さとに対応する値として説明したｓｔｒｉｄｅｗとｓｔｒｉｄｅｈとは、拡縮付フィルタ処理部１６の出力するブロック画像の幅及び高さ（ｆｏｕｔｂｗ及びｆｏｕｔｂｈ）と、対応するブロックでの拡縮付フィルタ処理部１６の拡大縮小カウンタ初期値（ｒｘｃｎｔ０及びｒｙｃｎｔ０）と、任意倍率の拡大・縮小の倍率の分母と分子の値（ｒｘｂａｓｅ、ｒｙｂａｓｅ、ｒｘｒａｔｉｏ及びｒｙｒａｔｉｏ）を使って下式で求めて使用する必要がある。
【００６４】
式（１７）
ｓｔｒｉｄｅｗ＝ｆｌｏｏｒ［（ｆｏｕｔｂｗ×ｒｘｂａｓｅ＋ｒｘｃｎｔ０）／ｒｘｒａｔｉｏ］
ｓｔｒｉｄｅｈ＝ｆｌｏｏｒ［（ｆｏｕｔｂｈ×ｒｙｂａｓｅ＋ｒｙｃｎｔ０）／ｒｙｒａｔｉｏ］
【００６５】
式（６）
（右へのブロック移動）
ｘｔｏｐ＝ｌｅｆｔ＿ｘｔｏｐ＋ｓｔｒｉｄｅｗ×ｖｘ１／ｘｖｂａｓｅ
ｙｔｏｐ＝ｌｅｆｔ＿ｙｔｏｐ＋ｓｔｒｉｄｅｗ×ｖｙ１／ｙｖｂａｓｅ
（下へのブロック移動）
ｘｔｏｐ＝ｕｐ＿ｘｔｏｐ＋ｓｔｒｉｄｅｈ×ｖｘ２／ｘｖｂａｓｅ
ｙｔｏｐ＝ｕｐ＿ｙｔｏｐ＋ｓｔｒｉｄｅｈ×ｖｙ２／ｙｖｂａｓｅ
【００６６】
なお、ブロック傾き修正部１４の出力ブロックＢＬｏ１のサイズや各出力ブロックＢＬｏ１の出力始点に対応する座標である出力始点対応座標Ｃｃｏｓ、具備するバッファＢｆに必要なサイズは、出力ブロックＢＬｏ１のサイズは上式のｏｕｔｂｗ及びｏｕｔｂｈとなり、各入力ブロックＢＬｉ１の出力始点対応座標Ｃｃｏｓは、図１１及び図１２に実線枠で示したブロック傾き修正部１４の出力に対応する出力領域Ａｏの左上の座標（ｘｓｔａｒｔ及びｙｓｔａｒｔ）となり、具備するバッファＢｆに必要なサイズは出力に対応する出力領域Ａｏの上辺のＹ座標値の差分値と入力ブロックＢＬｉ１の幅（ｉｎｂｗ）より求まり、下式（７）で計算される。
【００６７】
式（７）
バッファサイズ＝（ａｂｓ［ｖｙ１×ｏｕｔｂｗ／ｙｖｂａｓｅ］＋β）×ｉｎｂｗ
ｖｙ１が負の場合：
ｘｓｔａｒｔ＝０
ｙｓｔａｒｔ＝−ｆｌｏｏｒ［（ｙｃｎｔ００＋ｖｙ１×（ｏｕｔｂｗ−１））／ｙｖｂａｓｅ］
ｖｙ１が正の場合：
ｘｓｔａｒｔ＝−ｆｌｏｏｒ［（ｘｃｎｔ００＋ｖｘ２×（ｏｕｔｂｈ−１））／ｘｖｂａｓｅ］
ｙｓｔａｒｔ＝０
ここで、ａｂｓ［］は［］内の絶対値を表す
【００６８】
上式のβは、補間演算（入力４画素で出力画素を補間して生成）や、開始座標の量子化による影響で必要となる画素入力に対応するためのマージンでおおよそ２以上の値を使えば良い。また、ｆｌｏｏｒ［］は整数値にするための床関数（例えば、ｆｌｏｏｒ［−１．４］＝−２、ｆｌｏｏｒ［２．５］＝２）で、ｘｃｎｔ００、ｙｃｎｔ００は各入力ブロックＢＬｉ１の出力始点対応座標ＣｃｏｓのＸ方向、Ｙ方向の座標の小数値に対応する値である。最初の読み出しブロックＢＬｒのｘｃｎｔ００及びｙｃｎｔ００は下式で計算できる。
ｘｃｎｔ００＝（−ｏｂｎｗ×ｖｘ１−ｏｂｎｈ×ｖｘ２）％ｘｖｂａｓｅ
ｙｃｎｔ００＝（−ｏｂｎｗ×ｖｙ１−ｏｂｎｈ×ｖｙ２）％ｙｖｂａｓｅ
（「％」は剰余演算を表す）
また、次ブロック（右へのブロック移動）、次段ブロック（下へのブロック移動）のｘｃｎｔ００及びｙｃｎｔ００は左に隣接する読み出しブロックＢＬｒのｘｃｎｔ００、ｙｃｎｔ００をｌｅｆｔ＿ｘｃｎｔ００、ｌｅｆｔ＿ｙｃｎｔ００、上に隣接する読み出しブロックＢＬｒのｘｃｎｔ００、ｙｃｎｔ００をｕｐ＿ｘｃｎｔ００、ｕｐ＿ｙｃｎｔ００として下式で求めることができる。
（右へのブロック移動）
ｘｃｎｔ００＝
（ｌｅｆｔ＿ｘｃｎｔ００＋（ｓｔｒｉｄｅｗ×ｖｘ１）％ｘｖｂａｓｅ）％ｘｖｂａｓｅ
ｙｃｎｔ００＝
（ｌｅｆｔ＿ｙｃｎｔ００＋（ｓｔｒｉｄｅｗ×ｖｙ１）％ｙｖｂａｓｅ）％ｙｖｂａｓｅ
（下へのブロック移動）
ｘｃｎｔ００＝
（ｕｐ＿ｘｃｎｔ００＋（ｓｔｒｉｄｅｈ×ｖｘ２）％ｘｖｂａｓｅ）％ｘｖｂａｓｅ
ｙｃｎｔ００＝
（ｕｐ＿ｙｃｎｔ００＋（ｓｔｒｉｄｅｈ×ｖｙ２）％ｙｖｂａｓｅ）％ｙｖｂａｓｅ
【００６９】
画像形成装置１０は、以上で求めた値を元に各入力ブロックの処理に必要なパラメータを求め、以下のブロック傾き修正処理を行うことで、スキュー補正の後で任意倍率の拡大縮小を含むフィルタ処理を行う場合にも対応ができる。
【００７０】
［１−６．ブロック傾き修正処理手順］
また、ブロック傾き修正部１４で行う画素生成についてのより詳細な説明について、上式で決定した値をもとに、図１４、図１５及び図１６に示すフローチャートにしたがって説明する。
【００７１】
まずブロック傾き修正部１４は、ｘｃｎｔ００及びｙｃｎｔ００より、各入力ブロックＢＬｉ１の出力に対応する始点座標の整数値（ｘｓｔａｒｔ及びｙｓｔａｒｔ）を求めてライン先頭の座標値管理パラメータのｘｃｎｔ＿ｌｔｏｐ、ｙｃｎｔ＿ｌｔｏｐ、ｘｐｏｓ＿ｌｔｏｐ及びｙｐｏｓ＿ｌｔｏｐを設定し、Ｙ方向の出力ライン数カウンタ（ｙｏｃｎｔ）を０に設定する（ＳＰ１）。
【００７２】
次にブロック傾き修正部１４は、現座標値管理パラメータｘｃｎｔ、ｙｃｎｔ、ｘｐｏｓ及びｙｐｏｓを設定し、Ｘ方向の出力画素数カウンタ（ｘｏｃｎｔ）を０に設定する（ＳＰ２）。
【００７３】
次にブロック傾き修正部１４は、現座標値管理パラメータｘｐｏｓ及びｙｐｏｓに対応する画素をバッファＢｆより読み出し、出力画素を生成して対応する１画素を出力する（ＳＰ３）。ブロック傾き修正部１４は、入力４画素で出力画素を補間して生成する場合には、例えば、下式を用いて計算する。
出力画素値＝
（
（ｐ［ｘｐｏｓ、ｙｐｏｓ］×（ｘｖｂａｓｅ−ｘｃｎｔ）＋
ｐ［ｘｐｏｓ＋１、ｙｐｏｓ］×ｘｃｎｔ）／ｘｖｂａｓｅ×（ｙｖｂａｓｅ−ｙｃｎｔ）
＋（ｐ［ｘｐｏｓ、ｙｐｏｓ＋１］×（ｘｖｂａｓｅ−ｘｃｎｔ）＋
ｐ［ｘｐｏｓ＋１、ｙｐｏｓ＋１］×ｘｃｎｔ）／ｘｖｂａｓｅ×ｙｃｎｔ）／ｙｖｂａｓｅ
上式のｐ［］はｘｐｏｓ、ｙｐｏｓに対応する画素値である。
【００７４】
次にブロック傾き修正部１４は、Ｘ方向の出力画素数カウンタ（ｘｏｃｎｔ）に１を加算し、ｘｃｎｔ及びｙｃｎｔにそれぞれｖｘ１及びｖｙ１を加算する。ｖｘ１加算後のｘｃｎｔがｘｖｂａｓｅ以上の場合は、ｘｃｎｔからｘｖｂａｓｅを減算すると共にｘｐｏｓに１を加算する。一方ブロック傾き修正部１４は、ｖｘ１加算後のｘｃｎｔがｘｖｂａｓｅ未満でかつｘｃｎｔが０より小さい場合は、ｘｃｎｔにｘｖｂａｓｅを加算すると共にｘｐｏｓから１を減算する。ｙｃｎｔについてもブロック傾き修正部１４は同様に行う。これにより、次画素（現画素の右隣りの画素）の座標が計算される（ＳＰ４）。
【００７５】
次にブロック傾き修正部１４は、ｘｏｃｎｔがｏｕｔｂｗと一致するか判定し、一致しない場合はＳＰ３からの処理を行う（ＳＰ５）。
【００７６】
ＳＰ５の判断にてｘｏｃｎｔがｏｕｔｂｗと一致した場合は出力に対応する１ラインの出力が完了したことになるため、ブロック傾き修正部１４は、Ｙ方向の出力ライン数カウンタ（ｙｏｃｎｔ）に１を加算し、次ラインの先頭座標の計算を行う（ＳＰ６）。
【００７７】
次にブロック傾き修正部１４は、ｙｏｃｎｔがｏｕｔｂｈと一致するか判定し、一致しない場合はＳＰ２から処理を行い、この判定が一致するまで処理を繰り返す（ＳＰ７）。
【００７８】
ブロック傾き修正部１４は、以上を該ブロック傾き修正部１４に入力される各入力ブロックＢＬｉ１に対して行うことにより、原稿全体のブロックの出力処理を行う。
【００７９】
［１−７．効果等］
ここで、任意倍率の拡縮処理は、ブロック傾き修正部１４の出力解像度を変更することによっても実現できるが、モアレ発生の抑止等を目的としたフィルタ処理では、ある決まった解像度の入力画像に対して処理を行った方が良く、またその際に傾きが補正された画像に対して処理を行った方が良いため、画像形成装置１０は、スキュー補正処理と任意倍率の拡縮処理とをそれぞれ行う必要がある。
【００８０】
そのようなスキュー補正と任意倍率の拡縮処理とは、各処理で正確な座標管理が必要となるため、どちらか一方の処理を行った画像をメモリに出力し、その画像に対してもう一方の処理を行うようにメモリを介して連結させて処理する方法が一般的に行われているものと考えられ、メモリアクセスの増加や必要なメモリの増加が生じることになる。しかしながら、スキュー補正と任意倍率の拡縮処理を含むフィルタ処理を、メモリを介さずに連結して処理させるには、スキュー補正と任意倍率の拡縮処理の各処理で必要な正確な座標管理を同時に破綻なく行う必要があり、実現が難しかった。
【００８１】
これに対し画像形成装置１０は、スキュー補正後の画像をメモリ２０に書き込んだ後に該画像をメモリ２０から読み出してフィルタ処理を行うのではなく、補正する傾きに応じてメモリ２０上の入力画像ＩＭＧｉから読み出しブロックＢＬｒ単位に画像を読み出して読み出しブロックＢＬｒ単位毎に画像の傾きを修正し、傾きが修正された画像をブロック単位の画像に対して任意倍率への拡縮処理を含むフィルタ処理を行った後に、フィルタ処理が行われた画像をメモリ２０に書き込むようにした。これにより画像形成装置１０は、スキュー補正と任意倍率への拡縮処理を含むフィルタ処理との間でメモリアクセスを発生させないようにできるため、スキュー補正を行わず任意倍率への拡縮処理を含むフィルタ処理のみを行う場合よりも処理が遅くなることを抑えることができる。
【００８２】
また従来のような、メモリに書き込まれたスキュー補正後の画像に対して任意倍率への拡縮処理を含むフィルタ処理を行う処理構成の場合は、スキュー補正と任意倍率への拡縮処理を含むフィルタ処理との間で中間メモリが必要となるため、スキュー補正を行わず任意倍率への拡縮処理を含むフィルタ処理のみを行う場合よりも必要なメモリが増えてしまった。これに対し画像形成装置１０は、スキュー補正と任意倍率への拡縮処理を含むフィルタ処理との間の中間メモリが不要であるため、スキュー補正と任意倍率への拡縮処理を含むフィルタ処理との両方の処理を行った場合でも処理にかかるメモリを少なくできる。
【００８３】
またブロック傾き修正部１４は、所定のサイズのバッファＢｆを有し、該バッファＢｆを用いて傾きの補正を行い、その際、補正する傾きが大きくなると処理可能な画像のサイズが小さくなり、補正する傾きが小さくなると処理可能な画像のサイズが大きくなるように構成されていると共に、スキューブロック読み出し部１２は、ブロック傾き修正部１４で処理可能なサイズで、読み出しブロックＢＬｒ単位の画像を読み出すようにした。すなわち画像形成装置１０は、ブロック傾き修正部１４で用いられるバッファＢｆのサイズに合わせて（すなわち上回らないように）、入力ブロックＢＬｉ１のサイズを設定するようにした。
【００８４】
さらに拡縮付フィルタ処理部１６は、１ページ分の幅より小さい幅の画像の処理に対応するラインバッファＬＢｆを有すると共に、スキューブロック読み出し部１２は、ブロック傾き修正部１４で処理可能であり、かつ拡縮付フィルタ処理部１６で処理可能なサイズで、読み出しブロックＢＬｒ単位の画像を読み出すようにした。すなわち画像形成装置１０は、ブロック傾き修正部１４よりも処理負荷が大きい拡縮付フィルタ処理部１６で用いられるラインバッファＬＢｆのサイズに合わせて（すなわち上回らないように）、ブロック傾き修正部１４で用いられるバッファＢｆのサイズを設定するようにした。
【００８５】
以上の構成によれば画像形成装置１０は、入力画像ＩＭＧｉが記憶されているメモリ２０から補正する傾きに応じて始点座標を変えながら１ページのサイズよりも小さい読み出しブロックＢＬｒ単位に画像をバッファＢｆに順次読み出すスキューブロック読み出し部１２と、スキューブロック読み出し部１２で順次読み出された読み出しブロックＢＬｒ単位の画像各々の傾きを修正し、傾きが修正された画像をバッファＢｆにブロック単位に出力ブロックＢＬｏ１として出力するブロック傾き修正部１４と、ブロック傾き修正部１４が出力する出力ブロックＢＬｏ１単位の画像に対して少なくとも任意倍率の拡縮処理を含む処理を行う拡縮付フィルタ処理部１６と、拡縮付フィルタ処理部１６で処理された画像をメモリ２０に順次書き込むブロック書き出し部１８とを設けるようにした。
【００８６】
これにより画像形成装置１０は、フィルタ処理に任意倍率の拡縮処理が含まれている場合でもスキュー補正処理とフィルタ処理とをメモリを介さず連結して実行することができ、スキュー補正処理とフィルタ処理との間でメモリアクセスを発生させないようにできるため、スキュー補正処理を行わずフィルタ処理のみを行う場合よりも処理が遅くなることを抑えることができる。
【００８７】
［２．他の実施の形態］
なお上述した実施の形態において、図１７に示すＳＰ１０をＳＰ１（図１４）の前に追加することにより、ｒｘｃｎｔ００及びｒｙｃｎｔ００はブロック拡大縮小部４０で最初に入力される拡大縮小カウンタ初期値を設定することで各入力ブロックに対応する拡大縮小カウンタ初期値を自動的に設定させ、その拡大縮小カウンタ初期値に基づいて各入力ブロックのｓｔｒｉｄｅｗ、ｓｔｒｉｄｅｈを設定しても良い。ＳＰ１０におけるｓｔｒｉｄｅｈ算出のサブルーチンは、図１８に示すフローチャートであり、ｓｔｒｉｄｅｗ算出のサブルーチンは、図１９に示すフローチャートである。その場合、読み出しブロックＢＬｒ毎に毎回ｓｔｒｉｄｅｗ、ｓｔｒｉｄｅｈを算出しなくて済み、処理を簡略化できる。
【００８８】
また上述した実施の形態においては、拡縮付フィルタ処理部１６を像域分離フィルタ３０、平滑化フィルタ３２、ブロック拡大縮小部４０及び強調フィルタ３４により構成する場合について述べた。本発明はこれに限らず、拡縮付フィルタ処理部１６を、ＲＧＢデータからＣＭＹＫデータへの色変換処理等を行う色変換処理、Ｎ値化処理、背景検出処理、白紙検出処理、原稿カラー判定処理等、複写機や複合機等で必要な他の処理を含んだ構成にしても良い。特にＣＭＹＫデータへの色変換処理とＮ値化処理とについては、複写機や複合機等で紙等の記録媒体上にトナー等によるドットパターン形成を行うために必須の処理であり、ドットパターンへの変換により変換前の画素データ量が減る場合（例えば、１画素８ｂｉｔのデータを１ｂｉｔのデータに変換）は、最終的にメモリに書き込むデータ量を減らすことができるため、色変換処理及びＮ値化処理を含んだ構成とすることが望ましい。
【００８９】
さらに上述した実施の形態においては、複写機や複合機等の画像形成装置に本発明を適用する場合について述べた。本発明はこれに限らず、例えばプリンタやＦＡＸ機等の種々の機器に本発明を適用しても良い。
【００９０】
さらに上述した実施の形態においては、スキューブロック読み出し部としてのスキューブロック読み出し部１２と、ブロック傾き修正部としてのブロック傾き修正部１４と、拡縮付フィルタ処理部としての拡縮付フィルタ処理部１６と、ブロック書き出し部としてのブロック書き出し部１８とによって、画像形成装置としての画像形成装置１０を構成する場合について述べた。本発明はこれに限らず、その他種々の構成でなるスキューブロック読み出し部と、ブロック傾き修正部と、拡縮付フィルタ処理部と、ブロック書き出し部とによって、画像形成装置を構成しても良い。
【産業上の利用可能性】
【００９１】
本発明は、イメージスキャナやファクシミリ装置等、画像に関する種々の処理を行う種々の電子機器でも利用できる。
【符号の説明】
【００９２】
１０……画像形成装置、１１……制御部、１２……スキューブロック読み出し部、１４……ブロック傾き修正部、１６……拡縮付フィルタ処理部、１８……ブロック書き出し部、２０……メモリ、３０……像域分離フィルタ、３２……平滑化フィルタ、３４……強調フィルタ、４０……ブロック拡大縮小部、４２……Ｘ方向拡大縮小部、４４……Ｙ方向拡大縮小部、ＩＭＧｉ……入力画像、ＩＭＧｏ……出力画像、ＢＬｒ……読み出しブロック、ＢＬｗ……書き出しブロック、ＢＬｉ１……入力ブロック、ＢＬｏ１……出力ブロック、ＢＬｉ２……入力ブロック、ＢＬｏ２……出力ブロック、ＢＬｉ３……拡縮部入力ブロック、ＡＰ……原稿領域、Ａｏ……出力領域、Ａｏｖ……出力有効領域、Ｂｆ……バッファ、ＬＢｆ……ラインバッファ、ＣＡＰｓ……原稿始点座標、ＣＢＬｓ……ブロック始点座標、Ｃｏｓ……出力始点座標、Ｃｃｏｓ……出力始点対応座標、Ｃｉ……入力対応座標、Ｃｏ……出力対応座標、Ｐｐ……現画素、Ｐｎ……次画素、Ｐｐｌ……現ライン画素、Ｐｎｌ……次ライン画素、ＣＢＬｉｓ……入力ブロック始点座標、ＣＢＬｉｎｓ……次入力ブロック始点座標、ＣＢＬｉｎｃｓ……次段入力ブロック始点座標、ＣＢＬｏｓ……出力ブロック始点座標、ＣＢＬｏｎｓ……次出力ブロック始点座標、ＣＢＬｏｎｃｓ……次段出力ブロック始点座標、Ｃｉｓ……拡縮部入力始点座標、Ｃｉｎｓ……拡縮部次ブロック入力始点座標、Ｃｉｎｃｓ……拡縮部次段ブロック入力始点座標。
【図１】
2017200042.tif 000003
【図２】
2017200042.tif 000004
【図３】
2017200042.tif 000005
【図４】
2017200042.tif 000006
【図５】
2017200042.tif 000007
【図６】
2017200042.tif 000008
【図７】
2017200042.tif 000009
【図８】
2017200042.tif 000010
【図９】
2017200042.tif 000011
【図１０】
2017200042.tif 000012
【図１１】
2017200042.tif 000013
【図１２】
2017200042.tif 000014
【図１３】
2017200042.tif 000015
【図１４】
2017200042.tif 000016
【図１５】
2017200042.tif 000017
【図１６】
2017200042.tif 000018
【図１７】
2017200042.tif 000019
【図１８】
2017200042.tif 000020
【図１９】
2017200042.tif 000021