(57)【要約】【課題】リングバッファのメモリサイズの無駄を無くし、小さなメモリサイズで任意角回転を実現する画像処理装置を提供する。【解決手段】切り出し位置設定部１０４は画像データに対し、左右の切り出し位置を設定する。切り出し部１０５は切り出し設定値に従い画像データに対し切り出しを行う。書き込みアドレス生成部１０１はメモリのバッファに対し切り出し後の画像データの書き込みアドレスを生成する。読み出し座標生成部１１７は任意角回転された画像データの計算に必要な入力画像の座標を生成する。読み出しアドレス生成部１１１は読み出し座標生成部１１７で生成された座標をメモリのバッファアドレスに変換し、ずらし量補正する。そして書き込みアドレス値がバッファ境界をまたぐときに一定のずらし量分だけ切り出し設定値をずらし、読み出しアドレス値がバッファ境界をまたぐときに一定のずらし量分だけ読み出しアドレス値の補正を行う。【選択図】  図１
2009147453.tif 000002
【特許請求の範囲】
【請求項１】
入力画像データに対し、左右の切り出し位置を設定する切り出し位置設定手段と、
前記切り出し位置設定手段の切り出し設定値に従って入力画像データに対し切り出しを行う切り出し手段と、
メモリ上のバッファに対し、切り出し後の入力画像データの書き込みアドレスを生成する書き込みアドレス生成手段と、
任意角回転された画像データの計算に必要な入力画像の座標を生成する読み出し座標生成手段と、
前記読み出し座標生成手段で生成された座標をメモリ上のバッファアドレスに変換し、バッファ境界の処理に加えて一定のずらし量補正する読み出しアドレス変換手段とを有し、
前記書き込みアドレス生成手段の生成する書き込みアドレス値がバッファ境界をまたぐときに、前記一定のずらし量分だけ前記切り出し位置設定手段の切り出し設定値をずらし、前記読み出しアドレス変換手段において読み出しアドレス値がバッファ境界をまたぐときに、前記一定のずらし量分だけ読み出しアドレス値の補正を行うことを特徴とする画像処理装置。
【請求項２】
前記バッファは、リングバッファであることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記バッファは、複数のバッファからなることを特徴とする請求項１に記載の画像処理装置。
【請求項４】
入力画像データに対し、左右の切り出し位置を設定する切り出し位置設定手段と、前記切り出し位置設定手段の切り出し設定値に従って入力画像データに対し切り出しを行う切り出し手段と、メモリ上のバッファに対し、切り出し後の入力画像データの書き込みアドレスを生成する書き込みアドレス生成手段と、任意角回転された画像データの計算に必要な入力画像の座標を生成する読み出し座標生成手段と、前記読み出し座標生成手段で生成された座標をメモリ上のバッファアドレスに変換し、バッファ境界の処理に加えて一定のずらし量補正する読み出しアドレス変換手段とを有する画像処理装置による画像処理方法であって、
前記書き込みアドレス生成手段の生成する書き込みアドレス値がバッファ境界をまたぐときに、前記一定のずらし量分だけ前記切り出し位置設定手段の切り出し設定値をずらし、前記読み出しアドレス変換手段において読み出しアドレス値がバッファ境界をまたぐときに、前記一定のずらし量分だけ読み出しアドレス値の補正を行うステップを有することを特徴とする画像処理方法。
【請求項５】
請求項４に記載の画像処理方法の処理ステップをコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，画像の任意角回転を行う画像処理装置等に関する。
【背景技術】
【０００２】
スキャナや複写機、ＭＦＰ（マルチファンクションプリンタ）にて原稿を読み取る場合、スキャンされる原稿の傾きを補正するために、画像の任意角回転処理が使用される。あるいは、入力画像を傾けて並べてレイアウト印刷を行うような場合にも、画像の任意角回転処理が使用される、など画像の任意角回転処理が必要とされる機会が増えてきている。
【０００３】
図８は、スキャンされた原稿の傾きを補正する場合を想定して、入力画像の一部を任意角回転して出力画像として取り出す処理を説明する図である。図８（ａ）、（ｂ）に示した入力画像８０１−１、８０１−２（横Ｗｉｎ画素、縦Ｈｉｎライン）においては、出力画像に相当する領域８０２−１、８０２−２を角度θだけ回転させ、出力画像８０４（横Ｗ画素、縦Ｈライン）として出力する。ここで、任意角回転における回転角度θの値域は次式（１）の通りであり、以下では、説明の都合上、左回りのときθ＞０、右回りのときθ＜０と定義する。
【０００４】
−９０°＜  θ  ＜  ９０°  ・・・（１）
【０００５】
図８（ａ）は、画像を左回り回転させる例であり、入力画像中の領域８０２−１が左回りに回転されて出力画像８０４となる。また、図８（ｂ）は、画像を右回り回転する例であり、入力画像中の領域８０２−２が右回りに回転されて出力画像８０４となる。図８の処理を実行するにあたり、入力画像全体及び出力画像全体を格納できるメモリを確保できるならば、図８で示された処理を単純な座標変換で処理できる。
【０００６】
ところが組込み機器のようにメモリ資源の限られた機器では使用可能なメモリ量が少ないため、図８の出力バンド８０５（縦ｈライン）に示すように画像を高さの限定されたバンドに分割して、バンド単位で処理することが一般的に行われている。図８において出力バンド８０５に対応する入力画像内の領域は８０３−１又は８０３−２（以下、８０３）であるため入力用に領域８０３を含むライン数分のメモリ、出力用に出力バンド８０５分のメモリがあれば、１つの出力バンド分の任意角回転処理が可能である。１つの出力バンド分の処理が終わった後、入力データのライン位置を次の出力バンドに対応できる分だけずらすことで、次の出力バンドの処理が可能となる。
【０００７】
このように入力ライン位置をずらしながら入力を与えていくには、入力データをライン単位でリングバッファに格納して処理する方法が向いている。図９は、入力画像データをリングバッファに書き込み、これを読み出すことで任意角回転を行う処理を説明する図である。
【０００８】
図９において、リングバッファ９０１は、リングスタートアドレスＳＡｒｉｎｇから始まり、バッファサイズＳｒｉｎｇバイトのバッファである。リングエンドアドレスＥＡｒｉｎｇは、リングバッファの末尾の次のアドレスを示しており、ＳＡｒｉｎｇと、Ｓｒｉｎｇとは次式（２）の関係がある。
【０００９】
ＥＡｒｉｎｇ＝ＳＡｒｉｎｇ＋Ｓｒｉｎｇ  ・・・（２）
【００１０】
また、リングバッファ９０１のサイズＳｒｉｎｇは、入力される画像データの１ラインのデータサイズ（Ｓｌｉｎｅバイト）の倍数であるものとし、これはＨｒｉｎｇラインに対応しているものとする。
【００１１】
Ｓｒｉｎｇ＝Ｓｌｉｎｅ×Ｈｒｉｎｇ  ・・・（３）
【００１２】
図９において、矢印で示したように、入力データはラスター方向に書き込みを行う。また、領域９０２は、処理中の出力バンドに対応するリングバッファ内の領域を示しており、領域９０２中の矢印のように斜め方向にデータを読み出すことで、任意角回転処理が可能となる。ここで、リングバッファへの入力データの書き込みと出力データの読み出しについては、未読み出しのデータに対する入力データの上書きや、未書き込みのデータの読み出しが起きないよう、同期制御が必要である。なお、出力に対応する画素位置ちょうどに入力画素が存在するとは限らないが、この点については、図１０を用いて説明する。
【００１３】
図１０は、入力画素データから出力画素データを得る処理を説明する図である。入力座標グリッド１００１は、入力画像データの座標を示しており、各格子点に入力画素が存在している。出力座標グリッド１００２は、回転される出力画素の存在位置を、入力座標グリッド１００１上に重ねて表示したもので、各格子点に出力画素が相当する。
【００１４】
出力座標グリッド１００２の各格子点位置に対応する入力画素値が計算できれば、回転後の出力画素値が得られる。このため、結局、出力座標グリッドの入力座標上における格子点位置を計算すること、及び、求めた格子点位置に対応する入力画素値を補間等の計算により求めること、で任意角回転処理が可能となる。
【００１５】
まず、格子点位置の計算に関して説明する。最初の出力画素１０１０に対応する入力座標上の格子点位置を（ｘ０，ｙ０）とする。以下、出力をラスター方向にスキャンしたときの出力画素１０１１、１０１２、１０１３、１０１４に対応する格子点位置を、それぞれ（ｘ１，ｙ０）、（ｘ２，ｙ０）、（ｘ３，ｙ０）、（ｘ４，ｙ０）とする。また、出力において次のラインの最初の出力画素１０１５に対応する格子点位置を（ｘ０，ｙ１）とする。出力座標グリッド１００２における各格子点の間隔は一様であるため、格子点をラスター方向に１画素移動したときの、入力座標値の変位量を（Δｘｐ，Δｙｐ）とする。格子点を縦方向に１ライン移動したときの、入力座標値の変位量を（Δｘｌ，Δｙｌ）とすると、各格子点位置には、次式（４）、（５）の関係がある。
【００１６】
（ｘｎ，ｙｎ）＝（ｘｎ−１，ｙｎ−１）＋（Δｘｐ，Δｙｐ）、ｎ≧１  ・・・（４）
（ｘ０，ｙｎ）＝（ｘ０，ｙｎ−１）＋（Δｘｌ，Δｙｌ）、ｎ≧１      ・・・（５）
【００１７】
従って、初期座標位置（ｘ０，ｙ０）と変位量（Δｘｐ，Δｙｐ）、（Δｘｌ，Δｙｌ）が与えられれば、これら２つの式を適用することで、順次格子点位置の計算が可能である。ここで、角度θの任意角回転では、次式（６）、（７）の変位量を指定すればよい。
【００１８】
Δｘｐ＝ｃｏｓθ  、  Δｙｐ＝ｓｉｎθ  ・・・（６）
Δｘｌ＝−ｓｉｎθ  、  Δｙｌ＝ｃｏｓθ  ・・・（７）
【００１９】
また、さらに、横方向、縦方向の倍率Ｍｘ、Ｍｙを加えて、次式（８）、（９）の変位量を指定すれば、任意角回転と変倍を同時に実行することも可能である。
【００２０】
Δｘｐ＝ｃｏｓθ÷Ｍｘ  、  Δｙｐ＝ｓｉｎθ÷Ｍｘ  ・・・（８）
Δｘｌ＝−ｓｉｎθ÷Ｍｙ  、  Δｙｌ＝ｃｏｓθ÷Ｍｙ  ・・・（９）
【００２１】
次に、求めた格子点位置に対応する入力画素値の計算に関して説明する。これは、与えられた座標位置に対応する画素位置を計算する画素値補間の問題であるため、既存の様々な補間方法が使用可能である。代表的な例として、単純に座標位置の小数部を切り捨てる方法、最近傍画素補間、線形補間（出力座標位置の近傍４入力画素を使用して線形補間演算により出力画素値を計算）、などがある。さらに近傍１６入力画素等、多くの入力データを使用して補間する方法もある。図１０では、最近傍画素補間を適用した例を示しており、出力画素１０１０〜１０１５に対して、それぞれ対応する最も近い入力画素１０２０〜１０２５の値が、出力画素値として出力される。従って、図９で出力の読み出しを行う際には、図１０における入力画素１０２０〜１０２５に相当するデータを順次リングバッファから読み出せばよい。
【００２２】
以上、図９、図１０で説明したように、リングバッファを用いた任意角回転処理が可能であるが、このような方法で任意角回転処理を行う装置の構成例を図１１に示す。
【００２３】
図１１において、リングバッファの書き込み側は、次のような構成となっている。書き込みアドレス生成部１０１は、リングバッファへの書き込みアドレスを生成する部分であり、図９に示したようにラスター順のアドレスを生成する。書き込みアドレス生成部１０１は、さらにアドレス計算部１０２とリングアドレス変換部１０３からなっている。アドレス計算部１０２で生成したラスター順のアドレスに対して、リングアドレス変換部１０３では、リング境界における処理を行い、得られたリングバッファ上のアドレスが書き込みアドレス生成部１０１から出力される。
【００２４】
書き込みインタフェース部１０６は、書き込みアドレス生成部１０１の生成した書き込みアドレスとラスター順で入力される入力データを受け取って、リングバッファへの書き込み指示をメモリコントローラ部１０７に対して行うインタフェース部である。
【００２５】
図１１において、リングバッファのメモリ部分は、次のような構成となっている。メモリコントローラ部１０７は、書き込みインタフェース部１０６からのメモリ書き込み指示、及び、読み出しインタフェース部１１０からのメモリ読み出し指示を受けて、メモリ１０８の読み書きを行うコントローラ部である。
【００２６】
メモリ１０８は、メモリコントローラ部１０７で管理されたメモリであり、その一部あるいは全部がリングバッファ１０９として使用されている。図１１において、リングバッファの読み出し側は、次のような構成となっている。
【００２７】
回転座標生成部１１７は、図９に示したような斜め方向の座標を生成する部分であり、変位量設定部１１９、斜めラスター座標計算部１１８からなっている。変位量設定部１１９には、図４で説明した変位量（Δｘｐ，Δｙｐ）、（Δｘｌ，Δｙｌ）を設定し、この設定値を用いて、斜めラスター座標計算部１１８で、上記式（４）、（５）の計算を行い、斜め方向の座標を生成する。
【００２８】
補間部１１４は、回転座標生成部１１７で計算した座標位置に対応する画素値を使用する補間方法に応じた補間演算で求める部分である。補間部１１４は、補間座標計算部１１５と補間データ計算部１１６からなっている。補間座標計算部１１５は、回転座標生成部１１７から受け取った座標値から、使用する補間方法に応じて、必要となる入力画素の座標を計算する部分で、図１０の例で言えば、白丸１０２０〜１０２５の位置を計算する処理を行う。
【００２９】
補間データ計算部１１６は、補間座標計算部１１５で計算された位置の画素値を読み出しインタフェース部１１０から受け取り、使用する補間方法に応じた演算で出力値を計算する処理を行う。図１０の最近傍画素補間の例では、白丸１０２０〜１０２５の画素値をそのまま出力するため、補間データ計算部１１６で行う演算は特にないが、線形補間等、演算の必要な補間方法の場合は、ここで実行する。
【００３０】
読み出しアドレス生成部１１０１は、補間座標計算部１１５で計算された入力画像の座標値をリングバッファ上のアドレス値に変換して出力する部分であり、アドレス計算部１１０２とリングアドレス変換部１１０３からなる。アドレス計算部１１０２は、入力された座標値を、１画素当りのデータサイズや１ライン当りのデータサイズを考慮してアドレス値に変換する部分である。リングアドレス変換部１１０３では、リング境界における処理を行い、得られたリングバッファ上のアドレスが読み出しアドレス生成部１１０１から出力される。
【００３１】
読み出しインタフェース部１１０は、読み出しアドレス生成部１１０１の生成した読み出しアドレスを受け取って、リングバッファへの読み出し指示をメモリコントローラ部１０７に対して行うインタフェース部である。読み出しインタフェース部１１０の読み出したデータは、補間データ計算部１１６に入力され、そこで計算された値は、ラスター順の画像データとして出力される。
【発明の開示】
【発明が解決しようとする課題】
【００３２】
図９のように、リングバッファにラスター順で書き込み、斜めに読み出すことで任意角回転を行う場合、リングバッファとして必要となるメモリサイズが無駄に大きくなる、という課題が存在する。その課題について、図１２を用いて説明する。
【００３３】
図１２は、入力画像１２０１において、角度θの任意角回転を行って、横Ｗ画素、縦Ｈラインの出力画像を得る場合の説明図である。領域１２０２は、入力画像内で出力画像に相当する領域であり、領域１２０３は、入力画像内で１つの出力バンドに相当する領域である。この処理を、図９を用いて説明した方法で処理した場合、入力としてリングバッファに書き込むべき最低限の領域は、長方形の領域１２０４で示される。領域１２０４の幅をＷ１画素とすると、Ｗ１は、リングバッファとして必要な最小の画素幅であり、図１２からわかるように、出力画像の幅Ｗ，高さＨ、回転角度θを使用して、次式（１０）で計算される。なお、ここで、|θ|は、θの絶対値を示している。
【００３４】
Ｗ１＝Ｗ・ｃｏｓθ＋Ｈ・ｓｉｎ|θ|  ・・・（１０）
【００３５】
図１２において、領域１２０４の内部を見ると、出力画像に相当する領域１２０２の左右に、バッファへの書き込みは行われるが、読み出しは行われない無駄な三角形の領域１２０５、１２０６が存在することがわかる。また、これらの無駄な領域１２０５，１２０６のサイズは、回転角度θの絶対値や、出力画像の高さＨが大きくなると、それに従って大きくなっていく。左右に無駄な領域１２０５、１２０６が存在するということは、リングバッファ内において、これらに対応する領域のデータは使用されない、ということであり、従来の方法ではリングバッファのメモリサイズが無駄に大きくなっている。
【００３６】
本発明は上記のような問題点を解消することを目的としてなされたものであり、リングバッファのメモリサイズの無駄を無くし、小さなメモリサイズで任意角回転を実現する画像処理装置を提供することを目的とする。
【課題を解決するための手段】
【００３７】
本発明の画像処理装置は、入力画像データに対し、左右の切り出し位置を設定する切り出し位置設定手段と、前記切り出し位置設定手段の切り出し設定値に従って入力画像データに対し切り出しを行う切り出し手段と、メモリ上のバッファに対し、切り出し後の入力画像データの書き込みアドレスを生成する書き込みアドレス生成手段と、任意角回転された画像データの計算に必要な入力画像の座標を生成する読み出し座標生成手段と、前記読み出し座標生成手段で生成された座標をメモリ上のバッファアドレスに変換し、バッファ境界の処理に加えて一定のずらし量補正する読み出しアドレス変換手段とを有し、前記書き込みアドレス生成手段の生成する書き込みアドレス値がバッファ境界をまたぐときに、前記一定のずらし量分だけ前記切り出し位置設定手段の切り出し設定値をずらし、前記読み出しアドレス変換手段において読み出しアドレス値がバッファ境界をまたぐときに、前記一定のずらし量分だけ読み出しアドレス値の補正を行うことを特徴とする。
また、本発明の画像処理方法は、入力画像データに対し、左右の切り出し位置を設定する切り出し位置設定手段と、前記切り出し位置設定手段の切り出し設定値に従って入力画像データに対し切り出しを行う切り出し手段と、メモリ上のバッファに対し、切り出し後の入力画像データの書き込みアドレスを生成する書き込みアドレス生成手段と、任意角回転された画像データの計算に必要な入力画像の座標を生成する読み出し座標生成手段と、前記読み出し座標生成手段で生成された座標をメモリ上のバッファアドレスに変換し、バッファ境界の処理に加えて一定のずらし量補正する読み出しアドレス変換手段とを有する画像処理装置による画像処理方法であって、前記書き込みアドレス生成手段の生成する書き込みアドレス値がバッファ境界をまたぐときに、前記一定のずらし量分だけ前記切り出し位置設定手段の切り出し設定値をずらし、前記読み出しアドレス変換手段において読み出しアドレス値がバッファ境界をまたぐときに、前記一定のずらし量分だけ読み出しアドレス値の補正を行うステップを有することを特徴とする。
また、本発明のプログラムは、上記に記載の画像処理方法の処理ステップをコンピュータに実行させるためのプログラムである。
【発明の効果】
【００３８】
本発明によれば、バッファのバッファ境界をまたぐたびに、左右に一定のずらし量ずれた位置を読み書きするようにした。これにより、無駄な領域を読み書きすることが無くなり、リングバッファにためる画像幅を従来方式よりも小さくできる。すなわち、リングバッファのメモリサイズの無駄を無くし、小さなメモリサイズで任意角回転が実現できる。
【発明を実施するための最良の形態】
【００３９】
（第１の実施の形態）
本発明の第１の実施の形態は、図１１を用いて説明した従来方式のようにリングバッファを用いて任意角回転を実現した場合に、必要なリングバッファのサイズを削減するものである。まず、本発明の原理を図３を用いて説明する。
【００４０】
図３は、入力画像３０１において、出力画像に対応する領域３０２、ある出力バンドに対応する領域３０３、及びリングバッファサイズ分の入力に対応する複数の領域３０４、３０５、３０６、３０７を示している。
【００４１】
リングバッファサイズ分の入力に対応する各領域の幅はＷ２画素、高さはリングバッファのライン数（Ｈｒｉｎｇライン）である。リングバッファへの入力は、まず領域３０４に対して行われ、リングバッファが一杯になる、すなわちリングバッファの境界をまたぐタイミングになると、以後の入力は、一定のずらし量分左右にずれた位置にある領域３０５に対して行われる。
【００４２】
次に、領域３０５の入力が完了し、リングバッファの境界をまたぐタイミングになると、以後の入力は、一定のずらし量分左右にずれた位置にある領域３０６に対して行われる。以後、必要な入力が全て完了するまで、リングバッファの境界をまたぐたびに、一定のずらし量分左右にずれた位置にある領域を入力の対象としていく。
【００４３】
このような動作を行うことで、上記図１２に存在した左右の無駄な領域１２０５、１２０６がリングバッファに読み込まれなくなり、より小さなサイズのリングバッファを用いることができる。
【００４４】
従来方式と本発明を比較したときに、リングバッファのサイズをどれだけ小さくできるか、図４、図５を用いて説明する。図４は、リングバッファ４０１と出力バンド４０２の関係を表した図であり、リングバッファとして最低限必要な画素幅Ｗ２を示している。リングバッファの高さをＨｒｉｎｇラインとすると、出力バンドの右下角より左側に必要な幅は、Ｗ／ｃｏｓθ、右側に必要な幅は、Ｌｒｉｎｇ・ｔａｎ｜θ｜であるから、Ｗ２は次式（１１）で表される。
【００４５】
Ｗ２＝Ｗ／ｃｏｓθ＋Ｌｒｉｎｇ・ｔａｎ｜θ｜  ・・・（１１）
【００４６】
また、リングバッファの境界をまたいで次に移るときに必要な左右方向のずらし量は、図４で、出力バンドの右下角をちょうどリングバッファの右端まで移さねばならないため、次式（１２）で表される。
【００４７】
ずらし量＝−Ｌｒｉｎｇ・ｔａｎθ  ・・・（１２）
【００４８】
式（１２）のずらし量の符号であるが、右回りで回転角θ＞０のとき、ずらし量は負、すなわち、左側にずれた位置を新たなバッファ領域とする。また、左回りで回転角θ＜０のとき、ずらし量は正、すなわち、右側にずれた位置を新たなバッファ領域とする。
【００４９】
図５は、リングバッファとして最低限必要な高さ、すなわち、Ｌｒｉｎｇの最小値を説明する図であり、リングバッファ５０１の境界に対し、高さｈラインの出力バンド５０２の上下端がちょうど乗っている場合を示している。図５より、Ｌｒｉｎｇの最小値は次式（１３）で計算できる。
【００５０】
ＭＩＮ（Ｌｒｉｎｇ）＝Ｗ・ｓｉｎ｜θ｜＋ｈ・ｃｏｓθ  ・・・（１３）
【００５１】
Ｌｒｉｎｇの値は、リングバッファへの読み込み・書き込みの同期制御方法の影響も受けるため、必ず式（１３）の最小値を使用できるとは限らないが、ここでは、式（１３）が適用可能として、式（１１）に代入すると、結局、Ｗ２は次式（１４）で与えられる。
【００５２】
Ｗ２＝Ｗ／ｃｏｓθ＋Ｗｓｉｎ｜θ｜・ｔａｎ｜θ｜＋ｈ・ｓｉｎ｜θ｜  ・・・（１４）
【００５３】
以上より、例えば、具体的な数値として、Ｗ＝２０００（画素）、Ｈ＝３０００（ライン）、θ=１０°、ｈ＝８（ライン）とすると、従来方式において最低限必要なリングバッファ幅は、式（１０）より、Ｗ１＝２４９１画素となる。
【００５４】
一方、本発明において最低限必要なリングバッファ幅は、式（１４）より、Ｗ２＝２１００画素となる。
【００５５】
リングバッファの高さに関しては、従来方式でも本発明でも条件は同じであるため、結局、両方式におけるバッファサイズの比は、Ｗ２／Ｗ１＝０．８４となり、約１６％のメモリサイズが節約可能であるとわかる。
【００５６】
次に、第１の実施の形態における、任意角回転を行う画像処理装置の構成例を図１に示す。図１において、リングバッファの書き込み側は、次のような構成となっている。
【００５７】
書き込みアドレス生成部１０１は、リングバッファへの書き込みアドレスを生成する部分であり、図９に示したようにラスター順のアドレスを生成する。書き込みアドレス生成部１０１は、さらにアドレス計算部１０２とリングアドレス変換部１０３からなっている。
【００５８】
アドレス計算部１０２で生成したラスター順のアドレスに対して、リングアドレス変換部１０３では、リング境界における処理を行い、得られたリングバッファ上のアドレスが書き込みアドレス生成部１０１から出力される。
【００５９】
切り出し部１０５は、ラスター順で入力される入力データを受け取り、切り出し位置設定部１０４で設定された左右の切り出し位置に従って、図２に示すように画像の切り出しを行い、切り出し後の画像データを書き込みインタフェース部１０６に出力する。切り出し位置設定部１０４では、図２における切り出し開始位置と切り出しサイズを設定値として保持している。
【００６０】
切り出し部１０５は、図２における入力画像２０１のうち、切り出し開始位置より右側で、かつ、切り出し開始位置より切り出しサイズ分までの位置の画素データのみを出力画像２０２として出力する。
【００６１】
切り出し位置設定部１０４は、書き込みアドレス生成部１０１から、生成アドレスがリングバッファ境界をまたぐ事象の通知を受け、式（１２）で計算したずらし量分だけ、切り出し開始位置をずらして再設定する。
【００６２】
書き込みインタフェース部１０６は、書き込みアドレス生成部１０１の生成した書き込みアドレスと切り出し部１０５で切り出し後の画像データを受け取って、リングバッファへの書き込み指示をメモリコントローラ部１０７に対して行う。
【００６３】
図１における、リングバッファのメモリ部分は、図１１に示した従来方法と同じであり、メモリコントローラ部１０７、メモリ１０８からなっている。リングバッファ１０９は、メモリ１０８の一部あるいは全てを使用して実現されている。図１において、リングバッファの読み出し側は、次のような構成となっている。
【００６４】
回転座標生成部１１７は、図９に示したような斜め方向の座標を生成する部分であり、変位量設定部１１９、斜めラスター座標計算部１１８からなっている。変位量設定部１１９には、図１０で説明した変位量（Δｘｐ，Δｙｐ）、（Δｘｌ，Δｙｌ）を設定し、この設定値を用いて、斜めラスター座標計算部１１８で、式（４）、（５）の計算を行い、斜め方向の座標を生成する。
【００６５】
補間部１１４は、回転座標生成部１１７で計算した座標位置に対応する画素値を使用する補間方法に応じた補間演算で求める部分である。補間部１１４は、補間座標計算部１１５と補間データ計算部１１６からなっている。
【００６６】
補間座標計算部１１５は、回転座標生成部１１７から受け取った座標値から、使用する補間方法に応じて、必要となる入力画素の座標を計算する部分で、図１０の例で言えば、白丸１０２０〜１０２５の位置を計算する処理を行う。
【００６７】
補間データ計算部１１６は、補間座標計算部１１５で計算された位置の画素値を読み出しインタフェース部１１０から受け取り、使用する補間方法に応じた演算で出力値を計算する処理を行う。図１０の最近傍画素補間の例では、白丸１０２０〜１０２５の画素値をそのまま出力するため、補間データ計算部１１６で行う演算は特にないが、線形補間等、演算の必要な補間方法の場合は、ここで実行する。
【００６８】
読み出しアドレス生成部１１１は、補間座標計算部１１５で計算された入力画像の座標値をリングバッファ上のアドレス値に変換して出力する部分であり、アドレス計算部１１２とずらし補正つきリングアドレス変換部１１３からなる。アドレス計算部１１２は、入力された座標値を、１画素当りのデータサイズや１ライン当りのデータサイズを考慮してアドレス値に変換する部分である。
【００６９】
ずらし補正つきリングアドレス変換部１１３では、リング境界における通常のリングアドレス処理を行うと共に、リングバッファの書き込み側で用いたずらし量と同じ分だけ逆方向にアドレス値をずらし量補正する処理を行う。これを具体的に説明すると、アドレス値Ａがリング境界をまたぐ場合、通常のリングアドレス変換後のアドレス値Ａｒｉｎｇは次式（１５）、（１６）の通りである。
【００７０】
リング境界を一つ次に向かってまたぐ（Ａ≧ＥＡｒｉｎｇ）とき：
Ａｒｉｎｇ＝Ａ−（ＥＡｒｉｎｇ−ＳＡｒｉｎｇ）  ・・・（１５）
リング境界を一つ前に向かってまたぐ（Ａ＜ＳＡｒｉｎｇ）とき：
Ａｒｉｎｇ＝Ａ＋（ＥＡｒｉｎｇ−ＳＡｒｉｎｇ）  ・・・（１６）
【００７１】
これに対し、ずらし補正付きリングアドレス変換部１１３では、式（１５）、（１６）の後に、式（１２）のずらし量を考慮して次の式（１７）、（１８）で変換を行う。
【００７２】
リング境界を一つ次に向かってまたぐ（Ａ≧ＥＡｒｉｎｇ）とき：
Ａｒｉｎｇ'＝Ａｒｉｎｇ−ずらし量  ・・・（１７）
リング境界を一つ前に向かってまたぐ（Ａ＜ＳＡｒｉｎｇ）とき：
Ａｒｉｎｇ'＝Ａｒｉｎｇ＋ずらし量  ・・・（１８）
【００７３】
但し、式（１７）、（１８）におけるずらし量は、式（１２）の値そのものでなく、式（１２）の符号は保ったままで、画素数をバイト数に換算した値である。
【００７４】
このように、ずらし量を補正して得られたリングバッファ上のアドレスが読み出しアドレス生成部１１１から出力される。
【００７５】
読み出しインタフェース部１１０は、読み出しアドレス生成部１１１の生成した読み出しアドレスを受け取って、リングバッファへの読み出し指示をメモリコントローラ部１０７に対して行う。読み出しインタフェース部１１０の読み出したデータは、補間データ計算部１１６に入力され、そこで計算された値は、ラスター順の画像データとして出力される。なお、バッファのサイズや、ずらし量は、画素単位やバイト単位でなければならないため、上記説明の数式の値を整数化して使用しなければならない場合がある。このような場合の整数化の誤差については、それぞれの値に対して、切り捨て、丸め、四捨五入など適切な手段で対応するものとする。
【００７６】
また、リングバッファへの入力データの書き込みと出力データの読み出しの同期制御は省略されているが、未読み出しのデータに対する入力データの上書きや、未書き込みのデータの読み出しが起きないよう、適切に同期制御を行う必要がある。また、図１の構成を実現するにあたり、全ての部分、あるいは一部をＣＰＵ上のプログラムで実現してもよいし、全ての部分、あるいは一部をハードウェアで実現してもよい。
【００７７】
（第２の実施の形態）
本発明の第２の実施の形態は、第１の実施の形態のリングバッファの代わりに、複数のバッファ（この例では、トリプルバッファ）を用いた場合の例である。発明の原理は、第１の実施の形態の図３で説明したものと同じである。図３におけるバッファ入力領域３０４、３０５、３０６、３０７が、第１の実施の形態ではリングバッファであったのに対し、第２の実施の形態では複数のバッファを用意し、それぞれの領域を順次複数のバッファに転送するところが異なっている。
【００７８】
例えば、図７に示すような、３つのバッファを用いたトリプルバッファ構成では、入力書き込み用に１つのバッファ、出力読み出し用に２つのバッファを使用し、書き込み用、読み出し用のバッファを切り替えながら処理を進めていく。図７では、出力バンドが、バッファ１（７０１）とバッファ２（７０２）にまたがっているため、バッファ境界をまたいだ際に、第１の実施の形態と同様にずらし量の補正を行う必要がある。
【００７９】
次に、第２の実施の形態における、任意角回転を行う画像処理装置の構成例を図６に示す。第１の実施の形態との違いは、書き込みアドレス生成部におけるリングアドレス変換部１０３が、バッファアドレス変換部６０３に置き換わっていることである。また、メモリ上のリングバッファ１０９が、複数バッファ６０４に置き換わっていることである。また、読み出しアドレス生成部におけるずらし補正付きリングアドレス変換部１１３が、ずらし補正付きバッファアドレス変換部６０７に置き換わっていることである。以下では、これらの違いだけを説明する。
【００８０】
バッファアドレス変換部６０３は、アドレスがバッファ境界をまたぐ場合に、リングアドレスの計算ではなく、複数バッファを考慮したアドレスの計算を行う。例えば、図７において、バッファ３（７０３）への入力データの書き込みが終わり、アドレスがバッファ３のエンドアドレスＥＡ３に到達したときには、次のバッファ１のスタートアドレスＳＡ１へアドレスを変換して使用する。
【００８１】
メモリ上の複数バッファ６０４について、バッファ数や各バッファのサイズには限定は無く、また、複数のバッファ間のアドレスが連続しているか否かについても限定は無い。ずらし補正付きバッファアドレス変換部６０７は、まず、リング境界でのアドレス変換式（１５）、（１６）の代わりに、バッファ境界でのアドレス計算式でアドレスの変換を行う（式（１９）、（２０））。
【００８２】
バッファ境界を一つ次に向かってまたぐ（Ａ≧ＥＡｈ）とき：
Ａｂｕｆ＝Ａ−ＥＡｎ＋ＳＡｎ＋１  ・・・（１９）
バッファ境界を一つ前に向かってまたぐ（Ａ＜ＳＡｎ）とき：
Ａｂｕｆ＝Ａ−ＳＡｎ＋ＥＡｎ−１  ・・・（２０）
【００８３】
但し、ここでＳＡｎ、ＥＡｎは現バッファのスタート、エンドアドレス、ＳＡｎ＋１は次のバッファのスタートアドレス、ＥＡｎ−１は前のバッファのエンドアドレスである。
【００８４】
ずらし補正付きバッファアドレス変換部６０７は、次に、式（１７）、（１８）と同様にずらし量の補正を行う。
【００８５】
バッファ境界を一つ次に向かってまたぐとき：
Ａｂｕｆ'＝Ａｂｕｆ−ずらし量  ・・・（２１）
バッファ境界を一つ前に向かってまたぐとき：
Ａｂｕｆ'＝Ａｂｕｆ＋ずらし量  ・・・（２２）
【００８６】
このようにずらし量を補正して得られたアドレス値Ａｂｕｆ'がバッファの読み出しに使用される。図７の出力バンドをバッファ１（７０１）、バッファ２（７０２）から読み出す例で言う。最初は、バッファ１内の領域７０４を斜めに読み出していき、バッファ１の境界をバッファ２に向かってまたぐところで、式（１９）、（２１）の計算により、バッファ２内のずらし補正済みのアドレス値を得る。これにより、引き続きバッファ２内の領域７０５を斜めに読み出していく。なお、バッファのサイズや、ずらし量は、画素単位やバイト単位でなければならないため、上記説明の数式の値を整数化して使用しなければならない場合がある。
【００８７】
このような場合の整数化の誤差については、それぞれの値に対して、切り捨て、丸め、四捨五入など適切な手段で対応するものとする。また第２の実施の形態において、リングバッファへの入力データの書き込みと出力データの読み出しの同期制御は省略されているが、未読み出しのデータに対する入力データの上書きや未書き込みのデータの読み出しが起きないよう、適切に同期制御を行う必要がある。また、図６の構成を実現するにあたり、全ての部分、あるいは一部をＣＰＵ上のプログラムで実現してもよいし、全ての部分、あるいは一部をハードウェアで実現してもよい。
【００８８】
なお、本発明を実現するために、上述した実施形態の機能を実現するソフトウェアのプログラムコード（コンピュータプログラム）を記録した記憶媒体を用いても良い。この場合には記憶媒体をシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出し実行することによって本発明の目的が達成される。
【００８９】
この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することになり、プログラムコード自体及びそのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００９０】
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００９１】
また、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（基本システム或いはオペレーティングシステム）等が実際の処理の一部又は全部を行う場合も含まれることは言うまでもない。
【００９２】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれてもよい。この場合には、書き込まれたプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部又は全部を行ってもよい。
【図面の簡単な説明】
【００９３】
【図１】本発明の第１の実施の形態に係る画像処理装置の構成の一例を示した図である。
【図２】本発明の実施の形態に係る画像処理装置の切り出し部を説明する図である。
【図３】本発明の実施の形態に係る画像処理装置のバッファ入力領域を説明する図である。
【図４】本発明の実施の形態に係る画像処理装置において必要なバッファ幅を説明する図である。
【図５】本発明の実施の形態に係る画像処理装置における最小リングバッファサイズを説明する図である。
【図６】本発明の第２の実施の形態に係る画像処理装置の構成の一例を示した図である。
【図７】本発明の第２の実施の形態に係る画像処理装置の複数バッファを説明する図である。
【図８】従来の、入力画像の一部を任意角回転して出力画像として取り出す処理を説明する図である。
【図９】従来の、入力画像データをリングバッファに書き込み、これを読み出すことで任意角回転を行う処理を説明する図である。
【図１０】従来の、入力画素データから出力画素データを得る処理を説明する図である。
【図１１】従来の任意角回転処理を行う装置の構成例を示す図である。
【図１２】従来方式において必要なバッファ幅の説明図である。
【符号の説明】
【００９４】
１０１、６０１  書き込みアドレス生成部
１０２  アドレス計算部
１０３  リングアドレス変換部
１０４  切り出し位置設定部
１０５  切り出し部
１０６  書き込みインタフェース部
１０７  メモリコントローラ部
１０８  メモリ
１０９  リングバッファ
１１０  読み出しインタフェース部
１１１、６０５  読み出しアドレス生成部
１１２、６０６  アドレス計算部
１１３  ずらし補正つきリングアドレス変換部
１１４  補間部
１１５  補間座標計算部
１１６  補間データ計算部
１１７  回転座標生成部
１１８  斜めラスター座標計算部
１１９  変位量設定部
６０３  バッファアドレス変換部
６０４  複数バッファ
６０７  ずらし補正つきリングアドレス変換部
【図１】
2009147453.tif 000003
【図２】
2009147453.tif 000004
【図３】
2009147453.tif 000005
【図４】
2009147453.tif 000006
【図５】
2009147453.tif 000007
【図６】
2009147453.tif 000008
【図７】
2009147453.tif 000009
【図８】
2009147453.tif 000010
【図９】
2009147453.tif 000011
【図１０】
2009147453.tif 000012
【図１１】
2009147453.tif 000013
【図１２】
2009147453.tif 000014