(57)【要約】【課題】  画像の回転処理における使用メモリを抑え、且つ、高速に回転処理を実施するための近似方法を提供する。【解決手段】２次元に配列された画素データからなる画像の回転角度θでの回転処理を近似する画像処理方法であって、前記画像の１ライン分の画素データを読み出し、読み出した画素データについて回転角度に応じたシフト量を算出して、Ｘ方向へシフトさせるＸせん断処理を、前記画像のすべてのラインについて実施するステップと、Ｘせん断処理をされた画像の各画素データのＹ方向の位置について、回転角度に応じたシフト量を算出して、Ｙ方向へシフトさせるＹせん断処理を実施するステップとから成なる画像処理方法。【選択図】          図７
2006285573.tif 000002
【特許請求の範囲】
【請求項１】
２次元に配列された画素データからなる画像の回転角度θでの回転処理を近似する画像処理方法であって、
前記画像の１ライン分の画素データを読み出し、読み出した画素データについて、前記画像の各画素データの位置を（Ｘ０，Ｙ０）とすると、前記画素データのＸ方向の位置Ｘ１を、次式によりシフトさせる
【数１】
2006285573.tif 000020
Ｘせん断処理を、前記画像のすべてのラインについて実施するステップと、
Ｘせん断処理をされた画像の各画素データのＹ方向の位置Ｙ１を、次式によりシフトさせる
【数２】
2006285573.tif 000021
Ｙせん断処理を実施するステップとから成なる画像処理方法。
【請求項２】
請求項１に記載の画像処理方法であって、
前記Ｘせん断処理を実施するステップにおいて、Ｘ方向のオフセットを考慮して前記Ｘ１の値を変更し、
前記Ｙせん断処理を実施するステップにおいて、前記変更されたＸ１の値を用いてＹせん断処理を実施し、さらに、Ｙ方向のオフセットを考慮して前記Ｙ１の値を変更する、
ことを特徴とする画像処理方法。
【請求項３】
２次元に配列された画素データからなる画像の回転角度θでの回転処理を近似する画像処理方法であって、
前記画像から画素データを１ライン読出すステップと、
前記読み出した画素データをＸ方向へのシフト処理をし、さらにＹ方向へのシフト処理をした上でリング・バッファに格納するステップと、
リング・バッファのデータを前記回転角度に応じた傾きで斜めに読み出すステップと、
からなる画像処理方法。
【請求項４】
２次元に配列された画素データからなる画像の回転角度θでの回転処理を近似する画像処理方法をコンピュータに実行させるプログラムであって、
前記画像の１ライン分の画素データを読み出し、読み出した画素データについて、前記画像の各画素データの位置を（Ｘ０，Ｙ０）とすると、前記画素データのＸ方向の位置Ｘ１を、次式によりシフトさせる
【数３】
2006285573.tif 000022
Ｘせん断処理を、前記画像のすべてのラインについて実施させ、
Ｘせん断処理をされた画像の各画素データのＹ方向の位置Ｙ１を、次式によりシフトさせる
【数４】
2006285573.tif 000023
Ｙせん断処理を実施させるプログラム。
【請求項５】
請求項４に記載のプログラムであって、
前記Ｘせん断処理を実施させる際に、Ｘ方向のオフセットを考慮して前記Ｘ１の値を変更させ、
前記Ｙせん断処理を実施させる際に、前記変更されたＸ１の値を用いてＹせん断処理を実施させ、さらに、Ｙ方向のオフセットを考慮して前記Ｙ１の値を変更させる、
ことを特徴とするプログラム。
【請求項６】
２次元に配列された画素データからなる画像の回転角度θでの回転処理を近似する画像処理方法をコンピュータに実行させるプログラムであって、
前記画像から画素データを１ライン読出させ、
前記読み出された画素データをＸ方向へのシフト処理をし、さらにＹ方向へのシフト処理をした上でリング・バッファに格納させ、
前記リング・バッファのデータを前記回転角度θに応じた傾きで斜めに読み出しをさせる、
プログラム。
【請求項７】
２次元に配列された画素データからなる画像の回転角度θでの回転処理を近似する画像処理システムであって、
前記画像の１ライン分の画素データを読み出し、読み出した画素データについて、前記画像の各画素データの位置を（Ｘ０，Ｙ０）とすると、前記画素データのＸ方向の位置Ｘ１を、次式によりシフトさせる
【数５】
2006285573.tif 000024
Ｘせん断処理を、前記画像のすべてのラインについて実施する手段と、
Ｘせん断処理をされた画像の各画素データのＹ方向の位置Ｙ１を、次式によりシフトさせる
【数６】
2006285573.tif 000025
Ｙせん断処理を実施する手段とから成なる画像処理システム。
【請求項８】
請求項７に記載の画像処理システムであって、
前記Ｘせん断処理を実施する手段は、Ｘ方向のオフセットを考慮して前記Ｘ１の値を変更し、
前記Ｙせん断処理を実施する手段は、前記変更されたＸ１の値を用いてＹせん断処理を実施し、さらに、Ｙ方向のオフセットを考慮して前記Ｙ１の値を変更する、
ことを特徴とする画像処理システム。
【請求項９】
２次元に配列された画素データからなる画像の回転角度θでの回転処理を近似する画像処理システムであって、
前記画像から画素データを１ライン読出す手段と、
前記読み出した画素データをＸ方向へのシフト処理をし、さらにＹ方向へのシフト処理をした上でリング・バッファに格納する手段と、
リング・バッファのデータを前記回転角度に応じた傾きで斜めに読み出す手段と、
からなる画像処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理方法、プログラム、並びに画像処理システムに関し、特に、２次元に配列された画素データからなる画像の回転処理を近似する方法、当該方法をコンピュータに実行させるプログラム、並びに画像処理システムに関する。
【背景技術】
【０００２】
一般的に、２次元に配列された画素データからなる画像を回転処理するとき、画素データの回転前の位置を（Ｘ０，Ｙ０）、回転角をθ、Ｘ方向とＹ方向へのシフトを（ｄｘ，ｄｙ）とすると、回転後の画素データの位置（Ｘ１，Ｙ１）は、以下のように表される。
【数１】
2006285573.tif 000003
【０００３】
デジタル・マイクロ・デバイス（以下、ＤＭＤ）などを用いて画像を描画する描画装置では、描画される画像の各画素をＤＭＤのマイクロミラーに対応付けた上で、画素データがＤＭＤへ入力される。ＤＭＤは、その走査方向に対して一定の傾きをもって設置されており、ＤＭＤのマイクロミラーの２次元配列と画像の画素データの２次元配列とでは、前記の一定の傾きによってずれが生じている。そのため、画像の画素データの位置を、前記一定の傾きに応じて回転変形させた上で、ＤＭＤのマイクロミラーに対応付けることが必要である。また、画像自体を所定の角度で回転させて描画する場合には、予め画像に回転処理をし、その後、各マイクロミラーに対応する画素データを特定する必要がある。
【０００４】
そのため、描画前に画像を回転処理する方法として、一般的に、画像の各画素データの位置について上述のようにアフィン変換を用いて画像を回転処理する方法が採用されていた。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、上記のようなアフィン変換を用いて、例えばＭ×Ｎのサイズの画像を回転処理する場合、回転前のＭ×Ｎのサイズのデータをメモリに記憶したまま、回転後の画素データを格納するＭ×Ｎのサイズのデータ領域を保持し、各画素データの回転後の位置を特定して、特定された位置へ画素データを格納する必要がある。従って、画像のサイズが大きくなれば、保持しておくべき画像のデータ量も膨大になり、また、確保しておくべきデータ領域のサイズも大きくなり、使用するメモリ量が膨大なものとなる。
【０００６】
また、上述のアフィン変換で表すような積和演算処理がすべての画素データについて必要であるため、画像の回転処理に際しては、より効率的で高速処理が可能な手法が求められていた。
【０００７】
本発明は、上記の事情に鑑み、使用するメモリ量を抑えて、且つ、ライン処理が可能で高速に画像回転処理を近似する方法、プログラム、およびシステムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
すなわち、本発明の画像処理方法は、２次元に配列された画素データからなる画像の回転角度θでの回転処理を近似する画像処理方法であって、前記画像の１ライン分の画素データを読み出し、読み出した画素データについて、前記画像の各画素データの位置を（Ｘ０，Ｙ０）とすると、前記画素データのＸ方向の位置Ｘ１を、次式によりシフトさせる
【数２】
2006285573.tif 000004
【０００９】
Ｘせん断処理を前記画像のすべてのラインについて実施するステップと、
Ｘせん断処理をされた画像の各画素データのＹ方向の位置Ｙ１を、次式によりシフトさせる
【数３】
2006285573.tif 000005
【００１０】
Ｙせん断処理を実施するステップとから成なる。
【００１１】
アフィン変換による画像回転処理に比べて、Ｘ方向、Ｙ方向への所定のシフトを画像のラインごとに実施するため、複雑な演算処理を要せず、高速に処理をすることができる。
【００１２】
また、Ｘせん断処理においてはＹ方向の元の位置が保存され、かつ、Ｘせん断処理によって得られたＸ方向の位置Ｘ１を用いてＹせん断処理が実施されるため、元画像における各画素データの位置を記憶しておく必要がない。すなわち、Ｘせん断処理によって得られた位置に関するデータを、元の位置データに上書きしても差支えがない。Ｙせん断においても、Ｘせん断処理によって得られたＸ方向の位置に関するデータに変更はないので、Ｙせん断処理によって得られた位置に関するデータを、Ｘせん断処理によって得られた位置に関するデータに上書きをしても差支えがない。つまり、アフィン変換による回転処理とは異なり、元画像のデータをすべて保持したまま、演算をする必要がなく、使用メモリを抑えることが可能となる。
【００１３】
本発明の画像処理方法は、前記Ｘせん断処理を実施するステップにおいて、Ｘ方向のオフセットを考慮して前記Ｘ１の値を変更し、前記Ｙせん断処理を実施するステップにおいて、前記変更されたＸ１の値を用いてＹせん断処理を実施し、さらに、Ｙ方向のオフセットを考慮して前記Ｙ１の値を変更するものであってもよい。
【００１４】
これによって、画像回転中心を任意に設定することが可能となる。
【００１５】
また、本発明の画像処理方法は、２次元に配列された画素データからなる画像の回転角度θでの回転処理を近似する画像処理方法であって、前記画像から画素データを１ライン読出すステップと、前記読み出した画素データをＸ方向へのシフト処理をし、Ｙ方向へのシフトを考慮した上でリング・バッファに格納するステップと、リング・バッファのデータを前記回転角度に応じた傾きで斜めに読み出すステップとからなる。
【００１６】
リング・バッファを用いることで、画像を一時的に保持しておくためのメモリのサイズを抑えることができる。
【００１７】
また、１ラインずつ読出して、リング・バッファに格納する際にＸ方向へのシフトを考慮して格納しているので、これによって、ラインごとにＸせん断処理を実行することができ、さらに、Ｙ方向へのシフトも考慮して、リング・バッファへ格納し、またリング・バッファを回転角度θに応じた傾きで斜めに読み出すことでＹせん断処理を実施しているため、各ラインの処理を並列的に実行する、いわゆるパイプライン処理によって、高速に且つ効率的に画像の回転処理を近似することができる。
【００１８】
なお、本発明は、２次元に配列された画素データからなる画像の回転角度θでの回転処理を近似する回転処理方法または装置）であって、各行の列方向の位置と回転角度θとに応じた量だけその行をシフトさせる処理または手段と、各列の行方向の位置と回転角度θとに応じた量だけその列をシフトさせる処理または手段と、の両方を含むことを特徴とするものであってもよい。
【００１９】
また、本発明は、上記列をシフトさせる処理をリング・バッファに各行を順次循環的に格納しながら、各格納のたびにリング・バッファから斜めに１行分のデータを読出し、その読み出したデータを順次格納することによって実行することを特徴とするものであってもよい。
【発明の効果】
【００２０】
本発明の画像処理方法を適用すれば、画像の回転処理を、使用メモリの量を抑え、且つ、高速な処理で近似することができる。また、本発明の画像処理方法によって、画像の回転中心を任意の点に設定することが可能である。また、本発明の画像処理方法において、リング・バッファを用いる斜め読出しを実行するため、使用メモリの量を抑えることができ、さらに画像の回転処理を、画像のラインごとに並列に実施するため、より高速に画像の回転処理と同等の処理を実施することができる。
【発明を実施するための最良の形態】
【００２１】
ここでは、図１（Ａ）に示すような２次元に配列された画素データからなる画像１をＸせん断処理とＹせん断処理によって回転近似させる方法の詳細について説明する。
【００２２】
（Ｘせん断処理）  初めに、Ｘせん断処理について説明する。まず、画像１の画素データをＸ方向の１ラインだけ読出し、その位置を、回転角度θに対して以下のように定義する。ここで、画素データの元の位置を（Ｘ０，Ｙ０）、Ｘせん断後の画素データのＸ方向の位置をＸ１とすると、以下のように定義される。
【数４】
2006285573.tif 000006
【００２３】
Ｘ方向の１ラインだけ読出すということは、すなわち、Ｙ０の値は一定であるから、読出された各画素データの位置は、Ｘ方向の一定のシフトを施されることになる。新たな位置データ（Ｘ１，Ｙ０）は、各画素データの元の位置データ（Ｘ０，Ｙ０）に上書きされていく。これを、画像のすべてのラインについて実施すると、各画素データの位置は図１（Ｂ）のようにＹ方向の位置を示す値が大きいほど各ラインのシフト量は大きくなり、最終的に各画素データは、元の画像をＸ方向にせん断したような位置に配置される。
【００２４】
ここでは、１ラインごとに画素データのシフト量を求めているが、図１（Ｃ）に示すようにシフト量が数ラインにわたって同じであれば、その数ラインをまとめてＸ方向へのせん断処理を実施することも可能である。
【００２５】
その場合は、まず、Ｘ０からＸ１へのシフト量の最大値を求める。各画素データのＸ０からＸ１へのシフト量は
【数５】
2006285573.tif 000007
【００２６】
であり、その最大値をＸ方向最大変形量ＳＸとする。Ｘ方向最大変形量が自然数ではない場合は、小数点以下を四捨五入、切捨て、切り上げ等して、その値を自然数にする。
【００２７】
続いて、画像をブロックに分割する。このとき元の画像のＹ方向の長さをＬとすると、各ブロックの長さ、すなわちブロックのＹ方向の長さＬＢを、
【数６】
2006285573.tif 000008
【００２８】
と定義する。分割されたブロックごとにＸ方向への変形量を増やしながらシフトさせ、最後のブロックがＸ方向最大変形量であるＳＸだけシフトするようにする。
【００２９】
例えば、図１（Ｃ）に示すように、Ｘ方向最大変形量ＳＸ＝４とすると、画像は５つのブロックに同じ長さで分割される。その後、図１（Ｃ）の上から２つ目のブロックだけＸ方向へ１列分シフトさせる。続いて、上から３つ目のブロックだけＸ方向へ２列分シフトさせる。同じように４つ目のブロックは３列分シフトさせ、最後の５つ目のブロックはＸ方向最大変形量である４列分シフトさせる。
【００３０】
尚、ラインごとにせよブロックごとにせよ、上述のようにＸせん断処理を行うと、画像１の画像中心は、図２（Ａ）のように、ＳＸ／２の量でずれてしまっている。そこで、すべてのライン、あるいは、すべてのブロックに対して、さらに、−ＳＸ／２ずつＸ方向にシフトさせることで、画像の中心位置を元の位置に戻すことができる（図２（Ｂ））。
【００３１】
この画像中心を考慮したＸ方向のシフトを、予め考慮してＸせん断処理を実施してもよい。その場合は、Ｘせん断後の各ラインのＸ方向の位置は、
【数７】
2006285573.tif 000009
【００３２】
と定義することができる。
【００３３】
（Ｙせん断処理１）次に、Ｙせん断処理の一例について説明する。Ｙせん断処理とは、画像をＹ方向へ変形させて平行四辺形に変形させる処理をいい、変形後の画像が、Ｙせん断されたような形状になるものである。
【００３４】
回転処理を近似する際には、Ｙせん断処理はＸせん断処理した画像に対して実施する。ただし簡単のために、ここでは、Ｘせん断処理と同様に元画像１（図３（Ａ））に対して直接Ｙせん断処理を行うことを例にとって説明する。
【００３５】
元画像の画素データの位置は（Ｘ０，Ｙ０）とし、Ｙせん断処理後の画像の画素データのＹ方向位置Ｙ１とすると、その位置は、回転角度θに対して以下のように定義する。以下のように定義される。
【数８】
2006285573.tif 000010
【００３６】
これを、画像の画素データ１列ごとに算出して、Ｙ方向に各々をシフトさせる。Ｙ方向の１列だけ読出すということは、すなわち、Ｘ０の値は一定であるから、読出された各画素データの位置は、Ｙ方向の一定のシフトを施されることになる。新たな位置データ（Ｘ０，Ｙ１）は、各画素データのＹせん断処理以前の位置データ（Ｘ０，Ｙ０）に上書きされていく。これを、画像のすべてのラインについて実施すると、各画素データの位置は図３（Ｂ）のようにＸ方向の位置を示す値が大きいほど各ラインのシフト量は大きくなり、最終的に各画素データは、元の画像をＹ方向にせん断したような位置に配置される。
【００３７】
尚、上記では１列ごとにＹ方向のシフト量を算出することとしたが、あるいは、数列ごとにまとめてシフトさせてもよい。その場合は、まず、Ｙ０からＹ１へのシフト量の最大値を求める。各画素データのＹ０からＹ１へのシフト量は
【数９】
2006285573.tif 000011
【００３８】
であり、その最大値をＹ方向最大変形量ＳＹとする。Ｙ方向最大変形量が自然数ではない場合は、小数点以下を四捨五入、切捨て、切り上げ等して、自然数にする。
【００３９】
続いて、画像をブロックに分割する。このとき、元画像のＸ方向の幅をＷとすると、各ブロックの幅、すなわちブロックのＸ方向の幅をＷＢを、
【数１０】
2006285573.tif 000012
【００４０】
と定義する。分割されたブロックごとにＹ方向への変形量を増やしながらシフトさせ、最後のブロックがＹ方向最大変形量であるＳＹだけシフトするようにする。
【００４１】
例えば、図３（Ｃ）に示すように、量Ｙ方向最大変形量ＳＹ＝４とすると、画像は５つのブロックに同じ幅で分割される。その後、図３（Ｃ）の左から２つ目のブロックだけＹ方向へ１ライン分シフトさせる。続いて、左から３つ目のブロックだけＹ方向へ２ライン分シフトさせる。同じように４つ目のブロックは３ライン分シフトさせ、最後の５つ目のブロックはＹ方向最大変形量である４ライン分シフトさせる。
【００４２】
尚、ラインごとにせよブロックごとにせよ、上述のようにＹせん断処理を行うと、画像１の画像中心は、図４（Ａ）のように、ＳＹ／２の量でずれてしまっている。そこで、すべてのライン、あるいは、すべてのブロックに対して、さらに、−ＳＹ／２ずつＸ方向にシフトさせることで、画像の中心位置を元の位置に戻すことができる（図４（Ｂ））。
【００４３】
この画像中心を考慮したＸ方向のシフトを予め考慮して、Ｙせん断処理を実施してもよい。その場合は、Ｙせん断後の各画素データのＹ方向の位置は、
【数１１】
2006285573.tif 000013
【００４４】
と定義することができる。
【００４５】
Ｙせん断処理の他の方法として、リング・バッファを用いた斜め読出しを行う方法がある。以下では、リング・バッファを用いた斜め読出しを行う方法について説明する。
【００４６】
実際の回転処理を近似する方法においては、Ｘせん断処理を実施された画像に対して、あるいは、Ｘせん断におけるＸ方向へのシフト量を考慮しながらＹせん断処理を行うが、ここでは簡単のために元画像である画像１に対して、Ｙせん断処理を行うものとして説明する。
【００４７】
まず、Ｙ方向最大変形量ＳＹを求める。画像１における画素データの元の位置を（Ｘ０，Ｙ０）とするとこの値はすでに述べたように、
【数１２】
2006285573.tif 000014
【００４８】
の最大値として求めることができる。Ｙ方向最大変形量が自然数ではない場合は、小数点以下を四捨五入、切捨て、切り上げ等して、自然数にする。
【００４９】
次に、リング・バッファを用いて画素データの位置を変換していく。リング・バッファとは、配列の先頭と末尾をつないでデータを環状に記憶するものである。もちろん物理的に環状になっているものではなく、アドレスの指定方法によって概念的に環状のバッファを構成するものである。例えばＰ行Ｎ列のサイズのリング・バッファの場合、最終行であるＰ行目の次にデータを格納すべき行は、第１行目となる。また、Ｎ列目の次の列は第１列目となる。
【００５０】
ここでは、（少なくともＹ方向最大変形量ＳＹ以上の行数）×（元画像の幅）のサイズのリング・バッファが必要である。
【００５１】
まず、回転角度θが、０°＜θ＜９０°の場合について、説明する。
【００５２】
まず、画像１の第１行目のすべての画素データ（１ライン分の画素データ）を読出し、前記のリング・バッファの１行目に格納する。続いて、リング・バッファの１行１列目から、回転角度θから求められる傾きtan θで、斜めに画素データを読み出していく。このとき、リング・バッファの余の行は、すべてブランクデータとなっている。こうして読出したデータを、Ｙせん断後の画像の１ラインとして出力する。
【００５３】
具体的な斜め読出しの手順を、１２行×６列の元画像を、Ｙ方向最大シフト量６で実施する場合を、図５を用いて説明する。図５（Ａ）は、１２行×６列の元画像を表している。リング・バッファは、図５（Ｂ）に示すように、６行×６列のサイズである。このリング・バッファの第１行目に、元画像の第１行目の画素データを格納する。続いて、傾きtan θは、画像の幅とＹ方向最大シフト量ＳＹからも求めることができ、ここでは、傾き１となっている。傾き１で、リング・バッファの１行１列から順次データを読出していく。具体的には、１行１列、６行２列、５行３列、４行４列、３行５列、２行６列のデータを読出し、これを変換後の画像（図５（Ｃ））の第１行目の画素データとする。
【００５４】
続いて、図５（Ｂ）に示すように、元画像の２行目のデータをリング・バッファに格納し、傾き１で、２行１列から順次データを読出していく。読出したデータを変換後の画像の第２行目の画素データとする。
【００５５】
以上の処理を、元画像のすべてのライン（第１２行目まで）について繰り返した後、さらに、５行６列のブランクデータを用いで、同じ処理を繰り返す。すなわち、第１３行目としてブランクデータをリング・バッファに格納し、斜め読出しを行い、読出されたデータを変換後の画像（図５（Ｃ））の第１３行目の画像データとする。ブランクデータの最終行まで、同じように繰り返す。
【００５６】
次に、−９０°＜θ＜０°の場合についえ、説明する。ここでも、同じサイズの元画像、リング・バッファを用いる。このとき、Ｙ方向の負へ画像がシフトされるため、斜め読出しの傾きは−１となる。
【００５７】
図６（Ａ）に示す元画像の第１行目の画素データを、図６（Ｂ）に示すリング・バッファの最終行（ここでは６行目）に格納し、リング・バッファの１行１列から傾き−１で、順にデータを読み出していく。すなわち、２行２列、３行３列、４行４列、５行５列、６行６列のデータを読出し、読み出されたデータは、図６（Ｃ）の変換後の画像の第１行目の画素データとする。
【００５８】
続いて、元画像の第２行目の画素データを、図６（Ｂ）に示すリング・バッファの第１行目に格納する。先に、リング・バッファの最終行に、元画像の第１行目の画素データを格納してあるので、リング・バッファの最終行の次の行は、第１行目となる。続いて、リング・バッファの２行１列から、傾き−１で斜めにデータを読出していく。読み出されたデータは、図６（Ｃ）の画像の第２行目の画素データとされる。
【００５９】
元画像のすべてのライン（行）について、上記の処理を繰り返したのち、５行６列のブランクデータを用いて、処理を続行する。
【００６０】
尚、Ｘせん断処理におけるＸ方向へのシフトを考慮する場合は、元画像からリング・バッファへのデータ格納の際に、そのライン（行）のＸ方向へのシフト分をずらして、リング・バッファへ画素データを格納すればよい。
【００６１】
（回転近似の第１の形態）上述したＸせん断処理とＹせん断処理とによって、回転処理を近似する方法の手順を図７を参照しながら説明する。尚、以下では簡単のために、画像の中心位置での回転処理を近似するものとする。
【００６２】
まず、画像に対してＸせん断処理を実施する（図７（Ａ））。既に述べたとおり、ここで、画素データの元の位置を（Ｘ０，Ｙ０）、Ｘせん断後の画素データのＸ方向の位置をＸ１とすると、以下のように定義される。
【数１３】
2006285573.tif 000015
【００６３】
このＸせん断処理によって、画像１の各画素データの位置は、図７（Ａ）のようにＸ方向にシフトされる。さらに、−ＳＸ／２ずつＸ方向にシフトさせることで、画像の中心位置を元の位置に戻す（図７（Ｂ））。
【００６４】
あるいは、画像中心の位置ずれを考慮して、Ｘせん断後の各ラインのＸ方向の位置を、
【数１４】
2006285573.tif 000016
【００６５】
としてもよい。すなわち、Ｘせん断処理と回転中心を考慮したシフトを同時に実施することができる。
【００６６】
また、１ラインずつではなくＸ方向最大シフト量を求めた上で、画像１を複数のブロックに分割し、各ブロックをＸ方向へシフトさせてもよい。
【００６７】
尚、Ｘせん断処理による新たな位置データ（Ｘ１，Ｙ０）は、各画素データの元の位置データ（Ｘ０，Ｙ０）に上書きされていく。すなわち、元の画像のデータを保持しておく必要はない。
【００６８】
続いて、Ｘせん断処理をされた画像に対してＹせん断処理を実施する。Ｘせん断処理後の画像の各画素データの位置は（Ｘ１，Ｙ０）であり、Ｙせん断後の画素データの位置をＹ１とすると、その位置は、回転角度θに対して以下のように表すことができる。
【数１５】
2006285573.tif 000017
【００６９】
これによって、回転中心のＸ方向へのずれも考慮してＸせん断処理をされた画像が、さらに、Ｙせん断処理をされ、図７（Ｄ）に示すように各画素の位置がＹ方向へもシフトする。尚、Ｙせん断処理によっても、先に述べたように画像中心の位置がずれているので、さらに、−ＳＹ／２ずつＹ方向にシフトさせることで、そのずれを解消する。
【００７０】
あるいは、画像中心の位置のずれを予め考慮して、
【数１６】
2006285573.tif 000018
【００７１】
としてもよい。
【００７２】
尚、Ｘせん断処理およびＹせん断処理を実施するにあたって、画像中心以外の任意の点を回転の中心とすることも可能である。その場合は、回転の中心とする点の位置に応じて、Ｘ方向、Ｙ方向へのオフセット量（ＸOffSet，ＹOffSet）を定めればよい（図８）。このとき、Ｘ方向、Ｙ方向へのオフセット量は、それぞれ、Ｘせん断処理を行った場合の画像の行（ライン）の先頭位置の目標値、Ｙせん断処理を行った場合の画像の列の先頭位置の目標値の、元の画像の位置からのずれを指すものである。
【００７３】
具体的には、
【数１７】
2006285573.tif 000019
【００７４】
として、Ｘせん断処理、Ｙせん断処理を実施すればよい。
【００７５】
（回転近似の第２の形態）
上記の回転近似の手法のほか、Ｙせん断処理を、リング・バッファを用いた手法によって実施してもよい。その場合、Ｘせん断処理後の画像に対して、リング・バッファを用いたＹせん断処理を行ってもよいし、元画像に対して、Ｘせん断処理におけるＸ方向へのシフトを考慮しながら、リング・バッファを用いたＹせん断処理を行ってもよい。
【００７６】
いずれの場合にせよ、リング・バッファへ１ライン分の画素データ（図９（Ａ））を格納する際に、Ｘ方向へのシフト量分ずらしておく（図９（Ｂ））。このとき、Ｘせん断処理によるＸ方向へのシフト分だけでなく、画像の回転中心のずれを解消するためのシフト分も考慮する。また、Ｘ方向への変倍（拡大縮小）によりデータの増減があれば、その調整を行うスケーリング処理を行ってもよい。さらに、Ｙ方向への回転中心のずれを解消するために、行をずらしてリング・バッファに格納する（図９（Ｃ））。その上で、回転角度に応じた傾きで、斜めにデータを読み出していけばよい（図９（Ｄ））。斜め読出しの手法については、先に述べたとおりである。読み出されたデータは、先に読み出された画像１の１ライン分の画素データとなる（図９（Ｅ））。これを、画像１のすべてのラインについて繰り返し実施し、さらに、Ｙ方向への最大シフト量分のライン数のブランクデータを用いて、同様の処理を繰り返す。
【００７７】
以上の手順によって、画像１を回転角度θで回転させる処理と、ほぼ同等の画像を得ることができる。
【００７８】
また、Ｘせん断処理とＹせん断処理は、それぞれＸ方向あるいはＹ方向へのシフト処理であることから、アフィン変換を用いる回転処理に比べて、演算量が少なくてすみ高速に処理することができる。
【００７９】
さらに、元画像データを常に保持しておく必要もなく、Ｘせん断処理、Ｙせん断処理で得られた画素データの位置を次々上書きすることができるので、使用するメモリ量を少なくすることができる。
【００８０】
また、リング・バッファを用いて回転処理を近似する場合も、リング・バッファを用いることで、使用メモリを少なくすることが可能であり、また、ラインごとに並列に処理を実行可能な、いわゆるパイプライン処理によって、効率的なデータ読出しが可能となる。
【図面の簡単な説明】
【００８１】
【図１】Ｘせん断処理の説明図
【図２】Ｘせん断処理による画像回転中心のずれの補正を説明する図
【図３】Ｙせん断処理の説明図
【図４】Ｙせん断処理による画像回転中心のずれの補正を説明する図
【図５】リング・バッファを用いたＹせん断処理の説明図
【図６】リング・バッファを用いたＹせん断処理の説明図
【図７】回転処理を近似する方法の１実施形態の説明図
【図８】任意の点を画像の回転中心とする場合の、オフセットを説明する図
【図９】リング・バッファを用いた回転近似の方法を説明する図。
【図１】
2006285573.tif 000026
【図２】
2006285573.tif 000027
【図３】
2006285573.tif 000028
【図４】
2006285573.tif 000029
【図５】
2006285573.tif 000030
【図６】
2006285573.tif 000031
【図７】
2006285573.tif 000032
【図８】
2006285573.tif 000033
【図９】
2006285573.tif 000034