(57)【要約】【課題】移動情報を格納する領域をより少なくする。【解決手段】画像９０度回転処理部１６は、画像上の各画素毎に移動済か否かの移動情報を格納する格納部を備え、移動済か否かの移動情報として、画像の全画素数をＮとしたとき、全画素数Ｎではなく、（Ｎ＋１）／２個の画素数を格納する。【選択図】図１
2012175164.tif 000002
【特許請求の範囲】
【請求項１】
画像上の回転開始画素の回転後位置を算出する算出手段と、前記回転後位置の画素の画素値を格納する格納手段と、前記回転後位置の画素の画素値を、前記回転開始画素の画素値に変更する変更手段と、前記回転開始画素を前記回転後位置の画素に置き換えて、前記算出手段、格納手段、変更手段を繰り返す連鎖処理を実行する連鎖処理手段を備え、前記画像上の全画素が一回の移動により回転後の位置に移動される画像処理装置であって、前記画像上の各画素毎に移動済か否かの移動情報を格納する移動情報格納手段を備え、前記移動済か否かの移動情報として、前記画像の全画素数をＮとしたとき、（Ｎ＋１）／２個（小数以下切捨て）の画素数を格納することを特徴とする画像処理装置。
【請求項２】
前記連鎖処理手段は、前記連鎖処理を実行中に、前記回転開始画素の位置と点対称の位置にある画素位置が含まれていない場合には、前記点対称の位置にある画素位置を、未移動の回転開始画素として設定することを特徴とする請求項１記載の画像処理装置。
【請求項３】
画像上の回転開始画素の回転後位置を算出する算出工程と、前記回転後位置の画素の画素値を格納する格納工程と、前記回転後位置の画素の画素値を、前記回転開始画素の画素値に変更する変更工程と、前記回転開始画素を前記回転後位置の画素に置き換えて、前記算出工程、格納工程、変更工程を繰り返す連鎖処理を実行する連鎖処理工程を備え、前記画像上の全画素が一回の移動により回転後の位置に移動される画像処理方法であって、前記画像上の各画素毎に移動済か否かの移動情報を格納する移動情報格納工程を備え、前記移動済か否かの移動情報として、前記画像の全画素数をＮとしたとき、（Ｎ＋１）／２個（小数以下切捨て）の画素数を格納することを特徴とする画像処理方法。
【請求項４】
請求項３記載の画像処理方法をコンピュータに実現させるためのプログラム。
【請求項５】
請求項３記載の画像処理方法をコンピュータに実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像を回転処理する画像処理装置、画像処理方法、プログラムおよび記録媒体に関する。
【背景技術】
【０００２】
本出願人は先に、より小さなメモリ領域上で、画像を９０度単位で回転処理する画像処理装置を提案した（特許文献１を参照）。すなわち、画像データ上の回転開始画素の回転後位置を算出する算出工程と、前記回転後位置の画素の画素値を、一時格納部に格納する格納工程と、前記回転後位置の画素の画素値を、前記回転開始画素の画素値に変更する変更工程と、前記回転開始画素を前記回転後位置の画素に置き換えて、前記算出工程、格納工程、変更工程の各処理を繰り返す連鎖処理工程により、前記画像データ上の全画素が一回の移動により回転後の位置に移動される。
【０００３】
図４（ａ）〜（ｄ）は、それぞれ２×２ドット画像（ａ〜ｄの画素）、２×３ドット画像（ａ〜ｆの画素）、２×４ドット画像（ａ〜ｈの画素）、４×３ドット画像（ａ〜ｌの画素）を左回りに９０度回転処理する場合の移動前後の画素状態と、移動で連鎖する画素の位置関係を矢印で表す。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、上記した技術では、回転処理中に移動済か否かを示す移動情報を全画素（例えば、図４（ａ）では４画素分、（ｄ）では１２画素分）について格納しているため、移動情報を格納する領域として回転対象となる画像の全画素分の領域を確保する必要があった。
【０００５】
本発明は、上記した課題に鑑みてなされたもので、
本発明の目的は、移動情報を格納する領域をより少なくした画像処理装置、画像処理方法、プログラムおよび記録媒体を提供することにある。
【課題を解決するための手段】
【０００６】
本発明は、画像上の回転開始画素の回転後位置を算出する算出手段と、前記回転後位置の画素の画素値を格納する格納手段と、前記回転後位置の画素の画素値を、前記回転開始画素の画素値に変更する変更手段と、前記回転開始画素を前記回転後位置の画素に置き換えて、前記算出手段、格納手段、変更手段を繰り返す連鎖処理を実行する連鎖処理手段を備え、前記画像上の全画素が一回の移動により回転後の位置に移動される画像処理装置であって、前記画像上の各画素毎に移動済か否かの移動情報を格納する移動情報格納手段を備え、前記移動済か否かの移動情報として、前記画像の全画素数をＮとしたとき、（Ｎ＋１）／２個（小数以下切捨て）の画素数を格納することを最も主要な特徴とする。
【発明の効果】
【０００７】
本発明によれば、移動済か否かの移動情報として、全画素の半分の移動情報の格納で済む。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施例の構成を示す。
【図２】画像回転処理のフローチャートを示す。
【図３】本発明の処理フローチャートを示す。
【図４】画像の回転例を説明する図である。
【発明を実施するための形態】
【０００９】
以下、発明の実施の形態について図面により詳細に説明する。
【実施例１】
【００１０】
図１は、本発明の実施例の構成を示す（前掲した公報の図２に対応）。画像処理装置は、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、時計回路１４、磁気ディスク装置１５、画像９０度回転処理部１６、ソースデータ符号化部１７、画像領域ノイズ除去部１８、画像領域内グラデーション化部１９、画像領域内面積算出部２０、画像領域内変更後の活用部２１、ＣＲＴ画面表示装置２２、表示制御部２３、キーボード装置２４、画面指示装置２５、入力制御部２６、ネットワークＩ／Ｆ２７、ネットワーク伝送制御部２８、バス２９を有する。
【００１１】
ＣＰＵ１１は、画像処理装置の動作を制御し、ＲＯＭ１２は、ＣＰＵ１１が起動時に実行するプログラムや必要なデータ等を記憶し、ＲＡＭ１３は、ＣＰＵ１１のワークエリア等を構成する記憶装置であり、時計回路１４は、現在の日時情報を出力し、磁気ディスク装置１５は、アプリケーションプログラム、ワークデータ、ファイルデータ、画像データなどを記憶する。
【００１２】
画像９０度回転処理部１６は、磁気ディスク装置１５に格納されている画像データに対して、右回りまたは左回りに９０度単位で回転処理を施し、回転処理が施された画像データは、磁気ディスク装置１５に保存された後、後述する画像領域内変更後の活用部２１に送信される。
【００１３】
ソースデータ符号化部１７は、後述する入力制御部２６で入力された暗号化または符号化指示に基づき、磁気ディスク装置１５に格納された画像データに対して暗号化または符号化を行う。ソースデータ符号化部１７により暗号化または符号化された画像データは、磁気ディスク装置５に保存された後、画像９０度回転処理部１６、後述の画像領域ノイズ除去部１８、画像領域内グラデーション化部１９、または画像領域内面積算出部２０などに送信される。
【００１４】
画像領域ノイズ除去部１８は、磁気ディスク装置１５に格納されている画像データに対して特定画像領域のノイズを除去し、ノイズ除去されたデータは、磁気ディスク装置１５に保存された後、後述の画像領域内変更後の活用部２１に送信される。画像領域内グラデーション化部１９は、磁気ディスク装置１５に格納されている画像データに対して特定画像領域内をグラデーション化し、特定画像領域内をグラデーション化されたデータは、磁気ディスク装置１５に保存された後、後述の画像領域内変更後の活用部２１に送信される。
【００１５】
画像領域内面積算出部２０は、磁気ディスク装置１５に格納されている画像データに対して特定画像領域内のドット面積を算出し、特定画像領域内のドット面積を算出した算出データは、磁気ディスク装置１５に保存された後、後述の画像領域内変更後の活用部２１に送られる。
【００１６】
画像領域内変更後の活用部２１は、画像９０度回転処理部１６、画像領域ノイズ除去部１８、画像領域内グラデーション化部１９、または画像領域内面積算出部２０などで変更（加工）または算出された画像データや算出データを使用して、例えば画像編集、画像圧縮あるいは符号化などの応用処理を行う。
【００１７】
ＣＲＴ画面表示装置２２は、画像処理装置を操作するための画面を表示し、表示制御部２３は、ＣＲＴ画面表示装置２２の表示内容を制御し、キーボード装置２４は、画像処理装置に対してキー操作を行い、画面指示装置２５は、ＣＲＴ画面表示装置２２の任意の点を指示する等の操作作業を行う、例えば、操作パネル等である。入力制御部２６は、キーボード装置２４および画面指示装置２５の入力情報を取り込む等の入力に係る制御を行い、ネットワークＩ／Ｆ２７は、画像処理装置を図示しない外部ネットワーク等に接続するためのネットワークインタフェース回路等のインタフェース装置であり、ネットワーク伝送制御部２８は、画像処理装置がネットワークＩ／Ｆ２７を介して外部に接続された図示しない他の端末装置との間で情報伝送を制御する。
【００１８】
上記した構成により、磁気ディスク装置１５に格納されている（あるいは入力された）画像データは、画像９０度回転処理部１６により９０度単位の回転処理を施され、回転処理が施された画像データは、例えば表示制御部２３によってＣＲＴ画面表示装置２２へ表示されるなどの出力処理が施される。
【００１９】
図２は、画像回転処理のフローチャートを示す（前掲した公報の図３に対応）。画像回転処理の一例として画像データを左回り９０度単位で回転する処理を説明する。
【００２０】
まず、各種設定を入力する（Ｓ１）。画像処理装置は、例えばキーボード装置２４のキー入力に基づき、（１）画像回転処理の対象画像データ、（２）処理の種類（左回り９０度など９０度単位の回転処理）、（３）後述する連鎖処理（ステップＳ９〜Ｓ１３）の最初の開始画素（例えば画像データの先頭を基準とした相対アドレスで示す：オフセット値ａ＝０）、（４）２回目以降の連鎖処理の開始画素の順番（例えば画像データの先頭を基準とした相対アドレス順）などの各種設定情報を入力する。なお、ここでは、（４）の２回目以降の連鎖処理の開始画素の順番は、画像データの左上端の画素から右下端の画素の順番であるとする。
【００２１】
ステップＳ２で各種初期設定を行う（Ｓ２）。画像処理装置は、ステップＳ１で入力された各種設定情報に基づき、初期設定を行う。例えば、予め用意した連鎖処理の開始画素のアドレスを格納するアドレス変数Ａｓに、上記（３）で入力された最初の開始画素を設定する（Ａｓ＝ａ＝０）。ステップＳ３で、全画素を開始画素にした連鎖処理は終了したか否かを判定する（Ｓ３）。ステップＳ３では、画像回転処理の終了を判定する。アドレス変数Ａｓに設定された開始画素が対象画像データの最後尾（ここでは右下端）に達したか否かにより判定している。即ち、画像回転処理の終了は、対象画像データ中の上記（４）で入力された順番において最後の画素に対する処理が終了した場合である。ステップＳ３でＹＥＳの場合（Ｓ３、ＹＥＳ）、画像回転処理は正常に終了したため、ステップＳ４で後処理を行う（Ｓ４）。ステップＳ４では、画像処理装置は、対象画像データの９０度回転処理の実施／未実施の判断結果を報告したり、実施の場合には処理後の対象画像データを磁気ディスク装置１５に格納する等の後処理を行う。
【００２２】
ステップＳ３でＮｏの場合（Ｓ３、Ｎｏ）、画像回転処理は終了していないので、ステップＳ５へ移る。ステップＳ５では、ステップＳ２または後述のステップＳ１４で設定された連鎖処理の開始画素を、現注目画素に設定する（Ｓ５）。ここでは、ステップＳ２または後述のステップＳ１４でアドレス変数Ａｓに設定された位置の画素を、現注目画素に設定する。現注目画素とは画像処理装置が現に処理対象とする一画素である。具体的には、予め用意した現注目画素のアドレスを格納する現注目画素位置Ａにアドレス変数Ａｓを設定することにより行う（Ａ＝Ａｓ）。これにより、現に処理対象とする一画素を特定すると共に、以降のステップＳ６〜Ｓ８に示す連鎖処理のチェック処理を行う。
【００２３】
続いてステップＳ６で、現注目画素の回転後位置Ａ１を算出する（Ｓ６）。ここでは、ステップＳ５で設定された現注目画素の回転後位置Ａ１を算出する。
具体的には、
Ａ１＝（Ｆｌｏｏｒ（Ａ／Ｗ）＋１）×（Ｗ×Ｌ＋１）−１−Ｌ×（１＋Ａ）  式（１）
（Ｆｌｏｏｒ（ｚ）はｚを超えない最大整数である。ただし、Ａは現注目画素の位置、Ｗは回転前の対象画像データの横幅画素数、Ｌは回転前の対象画像データの縦幅画素数）で示される計算により算出する。
【００２４】
ステップＳ７では、ステップＳ６で算出された回転後位置Ａ１にある画素は回転済みか否かを判定する（Ｓ７）。ステップＳ７では、連鎖処理を二重に行うことを防ぐために、回転後位置Ａ１にある画素が回転済みか否かを判定している。具体的には、画像処理装置は、ステップＳ６で算出した回転後位置Ａ１が、アドレス変数Ａｓのアドレス値も上位アドレスになっているか（即ちＡ１＜Ａｓ）否かにより判定する。これは、アドレス変数Ａｓのアドレス値よりも上位アドレスにある画素については既に連鎖処理されたものであるとみなすことができるからである。
【００２５】
ステップＳ７でＹＥＳの場合（Ｓ７、ＹＥＳ）、回転後位置Ａ１にある画素は既に回転済みであり、当該連鎖処理空間（ステップＳ５で設定された現注目画素を開始画素として行う一連の連鎖処理）は既に連鎖処理が済んでいるものとみなして、当該連鎖処理空間のこれ以上の連鎖処理を回避するために、ステップＳ１４へ移る。
【００２６】
ステップＳ７でＮｏの場合（Ｓ７、Ｎｏ）、回転後位置Ａ１にある画素は未回転であり、当該連鎖処理空間は、未だ対象画像データの９０度回転処理のためデータ移動がされていないと判断して、ステップＳ８へ移る。ステップＳ８では、現在処理中の連鎖処理が終了か否かを判定する（Ｓ８）。ここでは、回転後位置Ａ１と開始画素のアドレスＡｓとが同一か否かにより、現在処理中の連鎖処理が終了か否かを判定している。これは、回転後位置Ａ１と開始画素のアドレスＡｓとが同一である場合は、回転後位置が開始画素のアドレスに戻ってきたと判断するためである。ステップＳ８でＹＥＳの場合（Ｓ８、ＹＥＳ）、ステップＳ９へ移り、ステップＳ８でＮｏの場合（Ｓ８、Ｎｏ）、ステップＳ６へ戻る。
【００２７】
以上説明したステップＳ５〜Ｓ８の一連の処理は、当該連鎖処理空間が９０度回転処理に係る画素の移動を終了しているか否かを判定する処理である。なお、予め対象画像データの画素毎に、回転後位置に移動されたか否か（移動済か否か）の移動情報を示す、例えば１ビットの指標領域（移動情報格納部）を設けて、回転処理が施された画素の移動情報は、未移動（例えばビット値０）から移動済（例えばビット値１）に変更するようにしてもよい。この場合、ステップＳ６〜Ｓ８に係る繰り返し工程の代わりに、ステップＳ５で設定された現注目画素の移動情報を確認する工程を設けることにより、当該連鎖処理空間が９０度回転処理に係る画素の移動を終了しているか否かを更に高速に判定することができる。これは、１ビット／ドットの画像データの９０度回転処理には向かない（移動情報の領域が確保できれば、回転後の画像データを直接この領域に格納できるため）。一方、２ビット／ドット以上の画像データの９０度回転処理では、この領域以外には回転時の画素値退避用として作業領域を１画素データ分だけしか確保（９０度回転して１画素ずつ移動する時の移動先の画素値を格納する）出来ない条件下では、高速化が最大になる方法である。
【００２８】
高速化が最大になる理由は、左上端から右下端の順番に全画素に連鎖処理を施す途中で、それぞれの画素を移動処理する前に、この移動情報格納部を確認することにより、既に移動処理が施されていれば、移動処理を回避できるためである。即ち、連鎖処理による複数画素（同一連鎖内）の位置確認を行なう必要がないことによる。
【００２９】
ところで、連鎖処理と、左上端から右下端の順番に全画素に適用する方法を同時に実施すると、画素位置の重複が出現する。この重複を避けるために、画像データ全体の全画素に個別に対応する９０度回転のための変換済みフラグビット（画素数分のビット数を持ち、初期値はＯＦＦとする）を設け、左上端から右下端の順番に全画素を連鎖処理規則の開始画素として適用する過程において、それぞれの開始画素から連鎖処理の経過点のフラグビットをＯＮにする過程で、変換済みフラグビットが既にＯＮの場合は、以前の開始画素からの連鎖処理が既に行われた経過点であるとみなして、現在の開始画素からの連鎖処理を回避する効率のよい回避処理が実現できる。
【００３０】
図２に戻り、ステップＳ９では、連鎖処理を開始する（Ｓ９）。ここでは、ステップＳ２または後述のステップＳ１４でアドレス変数Ａｓに設定された位置の画素を、現注目画素に設定する。現注目画素とは前述したように現に処理対象とする一画素である。具体的には、現注目画素位置Ａにアドレス変数Ａｓを設定し（Ａ＝Ａｓ）、さらにここでは、予め用意した現注目画素の画素値を格納するための現注目画素値格納用変数ＮｏｗＤｏｔに、アドレス変数Ａｓに設定された位置の画素の画素値を設定する。
【００３１】
ステップＳ１０では、現注目画素の回転後位置を算出する（Ｓ１０）。ここでは、ステップＳ９で設定された現注目画素Ａの回転後位置Ａ１を式（１）により算出する。
【００３２】
続いて、ステップ１１では、ステップＳ１０で算出された回転後位置Ａ１にある画素の画素値を更新する（Ｓ１１）。ここでは、回転後位置Ａ１の画素値を現注目画素の画素値に変換する処理を行う。具体的には、回転後位置Ａ１にあった画素の画素値を画素値一時格納用変数ＤｏｔＳａｖｅに格納する（退避させる）と共に、回転後位置Ａ１の画素の画素値を現注目画素の画素値（現注目画素値格納用変数ＮｏｗＤｏｔに格納された画素値）に変更する。これにより、回転後位置Ａ１にある画素の画素値を更新する。
【００３３】
続いて、ステップＳ１２では、ステップＳ１０で算出された回転後位置Ａ１にあった画素を現注目画素に変換する（Ｓ１２）。ステップＳ１２は、連鎖処理を行うために現注目画素を置き換える処理である。具体的には、現注目画素位置ＡにステップＳ１０で算出された回転後位置Ａ１を設定すると共に、ステップＳ１１で画素値一時格納用変数ＤｏｔＳａｖｅに格納されている回転後位置Ａ１にあった画素の画素値を現注目画素値格納用変数ＮｏｗＤｏｔに格納する。
【００３４】
以上説明したステップＳ１１、Ｓ１２の処理は、９０度単位の回転処理のための画素データの移動における連鎖処理でデータが失われないように、最も少ない量の画素データ（ここでは一画素）を退避させる処理と回復処理を行っている。
【００３５】
続いて、ステップＳ１３では、現在処理中の連鎖処理が終了か否かを判定する（Ｓ１３）。ステップＳ１３では、回転後位置Ａ１とアドレス変数Ａｓのアドレスとが同一であるか否かにより、現在処理中の連鎖処理が終了か否かを判定している。これは、回転後位置Ａ１と開始画素のアドレス変数Ａｓとが同一である場合は、回転後位置Ａ１が開始画素のアドレスに戻ってきたと判断するためである。
【００３６】
ステップＳ１３でＹＥＳの場合（Ｓ１３、ＹＥＳ）、現在処理中の連鎖処理は終了したので、ステップＳ１４では、次の連鎖処理のための開始画素のアドレスを設定する（Ｓ１４）。例えばＡｓ＝Ａｓ＋１（例えば、前回の連鎖処理の開始画素の右隣りの画素。それが右端の場合は、次の行の左端の画素）によりアドレス変数Ａｓを再設定する。
【００３７】
ステップＳ１４は、次に続く連鎖処理空間の処理を行うために、次の連鎖処理空間の処理開始画素を再設定する処理である。ステップＳ１４の処理が終了すると、ステップＳ３へ戻る。なお、再設定される次の連鎖処理空間の処理開始画素は、画像データ上の未移動画素にすることもできる。未移動の画素の決定は、ステップＳ５〜Ｓ８において説明した、移動情報格納部に格納された移動情報に基づいて行ってもよい。
【００３８】
ステップＳ１３でＮｏの場合（Ｓ１３、Ｎｏ）、現在処理中の連鎖処理は終了していないので、ステップＳ１０へ戻って、ステップＳ１２で変換された現注目画素についてのステップＳ１０〜Ｓ１２の処理を繰り返す。
【００３９】
以上の処理により、画像データを左回り９０度単位に回転する処理が実施される。上記した動作例では、入力された画像データを９０度単位（右回りまたは左回り）に回転処理するために、１画素毎の回転後の画素位置を座標変換して求め、その位置の画素値を回転後の画素値として変更している。また、この求めた先の座標位置の変更（回転）前の画素値についても、同様にして回転後の画素位置を算出し、求まった座標位置の画素値を回転後の画素値として変更していく連鎖処理を規則とし（以降、このような規則を「連鎖処理規則」という）、この規則を左上端位置の画素から右下端の順番に全画素に適用して全画素を１回ずつ移動することにより、画像回転のための部分画像領域の一時退避用の作業領域が１画素分の領域ですむ。
【００４０】
また、上記した連鎖処理の規則と、左上端から右下端の順番に全画素に適用する方法の両方を同時に行なうと、画素位置の重複が出現するので、この重複を回避するために、全画素位置に漏れなく配置されている１個以上の連鎖処理空間（一つの連鎖処理空間は、スタート点がどこでも連鎖処理により画素を辿るとスタート点に戻る閉じた特徴がある）に注目し、９０度回転のための画素値移動済みか（注目する１連鎖処理空間内の画素値ローテーション済み）否かを判断するために、連鎖処理の開始画素を全画素の画素位置として、現注目画素を画像の端から順番に調べることもできる。
【００４１】
現在注目している画像座標上の画素に繋がる一つの連鎖処理空間が、これまで調べてきた画像座標（例えば上位位置）に繋がっていない場合は、９０度回転用画素移動のための内部データローテーションが行なわれていない連鎖処理空間とみなして、内部データローテーションを、一つの連鎖処理空間内の内部データローテーションを途中で止めて、次の連鎖処理空間を捜索することなく行う。
【００４２】
通常、スキャナやカメラで読取る画像は矩形であり、矩形内の画像の特徴として、線形状や帯状（水平・地平線は横、柱は縦、床・天井は横など）のものが矩形の縦線または横線に平行して存在する。本実施例の画像回転処理方法によれば、画質の劣化が発生しない特徴を持つ画像の縦横を変更（画像を９０度単位で回転）する機能が、画像回転用の作業領域を不要（または最小化）とし、また回転処理を高速化することができる。
【００４３】
次に、上記した連鎖処理の点対称性を説明する。前述したように、現注目画素Ａの回転後位置Ａ１は、式（１）により算出される。
【００４４】
矩形画像の領域の形は、上下、左右の対称であることから、矩形の中心について、点対称位置に対応する２点の画素同士は、９０度回転処理において、９０度回転後の位置も点対称の関係にある。
【００４５】
それを以下に示す。
Ａの９０度回転後の位置Ａ１の最終画素点からの距離（Ｌ〜Ａ１）は、
Ｌ〜Ａ１＝Ｗ×Ｌ−１−Ａ１
＝Ｌ×（１＋Ａ）−Ｆｌｏｏｒ（Ａ／Ｗ）×（Ｗ×Ｌ＋１）−１    （１）
である。
【００４６】
一方、Ａの画素中心からの点対称に当たる画素位置ｒｅＡは、ｒｅＡ＝（Ｗ×Ｌ−１−Ａ）であるので、その９０度回転後の位置ｒｅＡ１は、
ｒｅＡ１＝（Ｆｌｏｏｒ（（Ｗ×Ｌ−１−Ａ）／Ｗ）＋１）×（Ｗ×Ｌ＋１）−１−Ｌ×（１＋Ｗ×Ｌ−１−Ａ）
＝Ｌ×（１＋Ａ）−Ｆｌｏｏｒ（Ａ／Ｗ）×（Ｗ×Ｌ＋１）−１    （２）
であり、この値は、先頭画素位置からの距離にも該当する。即ち、（１）と（２）が同じ値になる。この特徴は、Ａ１とｒｅＡ１の対応位置が、画像の中心位置を基に点対称の関係であることを表している。ここで、
Ｆｌｏｏｒ（（Ｗ×Ｌ−１−Ａ）／Ｗ）＝Ｌ−Ｆｌｏｏｒ（Ａ／Ｗ）−１
であることを利用している。
【００４７】
上記した連鎖処理の規則を、矩形画像の中心を基準にして点対称位置関係にある、例えば、左上端画素と右下端画素に適用すると、両者が同一の連鎖処理上の中に存在しない場合（例えば、図４（ｂ）：２組の連鎖処理のそれぞれ別々の組に属している）を考える。この場合、左上端から右下端の順番に全画素を連鎖処理規則の開始画素として適用する過程において、点対称の位置関係にある二点を別々の開始画素にする、二系統の連鎖処理を回避すべきかどうかの判断（「以前の開始画素からの連鎖処理が既に行なわれたものであるとみなして現在の開始画素からの連鎖処理を行わない」回避規制に関する判断）を、二系統内の一系統だけを調べるだけで済むため、連鎖処理の重複を効率良く避けることができる。
【００４８】
即ち、連鎖処理の規則を、矩形画像の中心を基準にして点対称位置関係にある、例えば、左上端画素と右下端画素に適用すると、両者が同一の連鎖処理上の中に存在しない場合は、９０度回転の重複を回避するための捜索において、約半分の捜索量で済ませられるため、より高速処理が実現できる。
【００４９】
また、上記した連鎖処理の規則を、矩形画像の中心を基準にして点対称位置関係にある、例えば、左上端画素と右下端画素に適用すると、両者が同一の連鎖処理上の中に存在する場合（例えば、図４（ａ）：１組の連鎖処理しかない）を考える。
【００５０】
この場合、左上端から右下端の順番に全画素を連鎖処理規則の開始画素として適用する過程において、点対称位置関係にある二点を別々の開始画素にする二系統の連鎖処理を回避すべきかどうか判断するための調査を行なう必要がない（二系統にはならず、一系統だけ）ことにより、連鎖処理の重複を効率良く避けることができる。即ち、連鎖処理の規則を、矩形画像の中心を基準にして点対称位置関係にある、例えば、左上端画素と右下端画素に適用すると、両者が同一の連鎖処理上の中に存在する場合は、９０度回転の重複を回避するための捜索において、約半分の捜索量で済ませられるため、より高速処理が実現できる。また、以上で説明した両方法を適用すれば、全体で約半分の捜索量で済み、より高速処理が実現できる。
【００５１】
図３は、本発明の処理フローチャートを示す。以下、図３を用いて、画像の中心点を基に点対称の位置関係にある画素同士を有効に活用した、本発明の処理を説明する。画像回転処理の例として、画像データを左回り９０度単位で回転する処理を説明する。
ステップ１０１では、ステップＳ１と同様に、各種設定情報を入力する。各種設定情報は、（１）画像回転処理の対象画像データ、（２）処理の種類（左回り９０度など９０度単位の回転処理）、（３）連鎖処理（ステップ１０９〜１１６）の最初の開始画素（例えば画像データの先頭を基準とした相対アドレスで示す：オフセット値ａ＝０）、（４）２回目以降の連鎖処理の開始画素の順番（例えば画像データの先頭を基準とした相対アドレス順）、（５）９０度回転のための画素移動状況を把握する移動情報格納領域として、Ｆｌｏｏｒ（（（全画素数）＋１）／２）ビット分確保し、その初期設定（例えば、ＯＦＦ：０クリア）等である。
【００５２】
本実施例では、（４）の２回目以降の連鎖処理の開始画素の順番は、画像データの左上端の画素位置から対象画像データ全体の中央画素位置ｌｃまでの順番とし（図２の処理と異なる点）、（５）移動情報格納領域内のビット位置もこの順番とする。
【００５３】
ステップ１０２では、各種初期設定を行う。例えば、予め用意した連鎖処理の開始画素のアドレスを格納するアドレス変数Ａｓに、上記（３）で入力された最初の開始画素を設定する（Ａｓ＝ａ＝０）。ステップ１０３では、全画素を開始画素にした連鎖処理が終了したか否かを判定する。ステップ１０３では、画像回転処理の終了を判定している。ここでは、アドレス変数Ａｓに設定された開始画素が対象画像データ全体の中央画素位置ｌｃに達したか否かにより判定している（図２の処理と異なる点）。すなわち、画像回転処理の終了は、対象画像データ中の上記（４）で入力された順番において、最後の画素に対する処理が済んだときである。このステップ１０３は、点対称の特徴を用いている。
【００５４】
ステップ１０３でＹＥＳの場合、画像回転処理は正常に終了したため、ステップ１０４に進み、ステップ１０４では、対象画像データの９０度回転処理の実施／未実施の判断結果を報告したり、実施の場合には、処理後の対象画像データを磁気ディスク装置１５に格納するなどの後処理を行う。
【００５５】
ステップ１０３でＮｏの場合、画像回転処理が終了していないので、ステップ１０５に進み、ステップ１０２または後述のステップ１２３で設定された連鎖処理の開始画素を、現注目画素に設定する。ここでは、ステップ１０２または後述のステップ１２３でアドレス変数Ａｓに設定された位置の画素を、現注目画素に設定する。現注目画素は、現に処理対象とする一画素であり、具体的には、予め用意した現注目画素のアドレスを格納する現注目画素位置Ａにアドレス変数Ａｓを設定することにより行う（Ａ＝Ａｓ）。これにより、現に処理対象とする一画素を特定すると共に、以降のステップ１０７〜１０９に示す連鎖処理のチェック処理を行う。
【００５６】
また、ステップ１０６では、図２の処理にはない新たな機能である、点対称の特徴を生かすために、「画像中心点から最後尾までの間に、連鎖処理開始点を、効率良く設けるための状態変数ＦｌａｇＨの初期設定（状態ＯＮ）」を行う。
【００５７】
続いて、ステップ１０７では、現注目画素の回転後位置Ａ１を算出する。ここでは、ステップ１０５で設定された現注目画素の回転後位置Ａ１を式（１）により算出する。
【００５８】
ステップ１０８では、ステップ１０７で算出された回転後位置Ａ１にある画素は回転済みか否かを判定する。ステップ１０８では、連鎖処理を二重に行うことを防ぐために、回転後位置Ａ１にある画素が回転済みか否かを判定している。具体的には、ステップ１０７で算出した回転後位置Ａ１が、アドレス変数Ａｓのアドレス値も上位アドレスになっているか（即ちＡ１＜Ａｓ）否かにより判定する。これは、アドレス変数Ａｓのアドレス値よりも上位アドレスにある画素については既に連鎖処理されたものであるとみなすことができるからである。
【００５９】
ステップ１０８でＹＥＳの場合、回転後位置Ａ１にある画素は既に回転済みであり、当該連鎖処理空間（ステップ１０５で設定された現注目画素を開始画素として行う一連の連鎖処理）は既に連鎖処理が終了しているものとみなして、当該連鎖処理空間のこれ以上の連鎖処理を回避するために、ステップ１２３に進む。
【００６０】
ステップ１０８でＮｏの場合、回転後位置Ａ１にある画素は未回転であり、当該連鎖処理空間は未だ対象画像データの９０度回転処理のためのデータ移動がされていないと判断して、ステップ１０９に進む。ステップ１０９では、現在処理中の連鎖処理が終了しているか否かを判定する。ここでは、回転後位置Ａ１と開始画素のアドレスＡｓとが同一か否かにより、現在処理中の連鎖処理が終了しているか否かを判定している。これは、回転後位置Ａ１と開始画素のアドレスＡｓとが同一である場合は、回転後位置が開始画素のアドレスに戻ってきたと判断するためである。
【００６１】
ステップ１０９でＹＥＳの場合、ステップ１１０に進み、ステップ１０９でＮｏの場合、ステップ１０７に戻る。以上説明したステップ１０５〜１０９の処理は、当該連鎖処理空間が９０度回転処理に係る画素の移動を終了しているか否かを判定する処理である。なお、予め対象画像データの画素毎に、回転後位置に移動したか否か（移動済か否か）の移動情報を示す、例えば１ビットの指標領域（移動情報格納部）を設けて、回転処理が施された画素の移動情報は未移動（例えばビット値０）から移動済（例えばビット値１）に変更するようにしてもよい。この場合、ステップ１０７〜１０９の繰り返し工程の代わりに、ステップ１０５で設定された現注目画素の移動情報を確認する工程を設けることにより、当該連鎖処理空間が９０度回転処理に係る画素の移動を終了しているか否かを更に高速に判定することができる。
【００６２】
これは、１ビット／ドットの画像データの９０度回転処理でも効果があり、図２の処理を改良している。すなわち、移動情報を格納する領域が、図２の処理（回転後の画像データの格納領域の大きさ）のほぼ半分の大きさ（＝（（全画素数）＋１）／２個（小数以下切捨て）の格納（ビット数））で済む。つまり、１ビット／ドット以上のすべての階調の画像データの９０度回転処理において、この領域以外には、回転時の画素値退避用として作業領域を１画素データ分だけしか確保（９０度回転して１画素ずつ移動する時の移動先の画素値を格納する）できない条件下では、高速化が最大になる方法である。高速化が最大になる理由は、左上端から右下端の順番に全画素に連鎖処理を施す途中で、それぞれの画素を移動処理する前に、この移動情報格納部を確認することにより、既に移動処理が施されていれば、移動処理を回避できるためであり、連鎖処理による複数画素（同一連鎖内）の位置確認を行なう必要がない。
【００６３】
上記した連鎖処理と、左上端から右下端までの順番に全画素に適用する方法の両方を同時に行うと、画素位置の重複が出現するので、この重複を避けるために、画像データ全体の全画素に個別に対応する９０度回転のための変換済みフラグビット（画素数分のビット数を持ち、初期値はＯＦＦとする）を設け、左上端から右下端の順番に全画素を連鎖処理規則の開始画素として適用する過程において、それぞれの開始画素から連鎖処理により経過する点のフラグビットをＯＮにし、その過程で、変換済みフラグビットが既にＯＮの場合は、以前の開始画素からの連鎖処理が既に行われた途中の点であるとみなして現在の開始画素からの連鎖処理を行わないよう回避する効率のよい回避処理が実現できる。
【００６４】
図３に戻り、ステップ１１０では、連鎖処理を開始する。ここでは、ステップ１０２または後述のステップ１２３でアドレス変数Ａｓに設定された位置の画素を、現注目画素に設定する。現注目画素は、前述したように、現に処理対象とする一画素であり、具体的には、現注目画素位置Ａにアドレス変数Ａｓを設定し（Ａ＝Ａｓ）、さらに、予め用意した現注目画素の画素値を格納するための現注目画素値格納用変数ＮｏｗＤｏｔに、アドレス変数Ａｓに設定された位置の画素の画素値を設定する。
【００６５】
ステップ１１１では、現注目画素の回転後位置を算出する。ここでは、ステップ１１０で設定された現注目画素Ａの回転後位置Ａ１を式（１）により算出する。
【００６６】
次のステップ１１２、１１３は、図２の処理にはない新たな機能で、点対称の位置関係にある画素を、連鎖処理するための準備処理である。ステップ１１２では、現在の連鎖処理中の現注目画素位置が、この連鎖処理の開始点の点対称位置に一致しているか否かを判定する。ステップ１１２でＹＥＳの場合、ステップ１１３に進み、ステップ１１２でＮｏの場合、ステップ１１４に進む。  ステップ１１３では、ステップ１０６で初期設定した状態変数ＦｌａｇＨを状態ＯＦＦ（今回の連鎖処理の中に、点対称の位置関係にある画素の連鎖処理も含まれていることを表す）にする。ステップ１１４では、ステップ１１１で算出された回転後位置Ａ１にある画素の画素値を更新する。ここでは、回転後位置Ａ１の画素値を現注目画素の画素値に変換する処理を行う。具体的には、回転後位置Ａ１にあった画素の画素値を画素値一時格納用変数ＤｏｔＳａｖｅに格納する（退避させる）と共に、回転後位置Ａ１の画素の画素値を現注目画素の画素値（現注目画素値格納用変数ＮｏｗＤｏｔに格納された画素値）に変更する。これにより、回転後位置Ａ１にある画素の画素値を更新する。
【００６７】
続いて、ステップ１１５では、ステップ１１１で算出された回転後位置Ａ１にあった画素を現注目画素に変換する。ステップ１１５は、連鎖処理を行うために現注目画素を置き換える処理である。具体的には、現注目画素位置Ａにステップ１１１で算出された回転後位置Ａ１を設定すると共に、ステップ１１４で画素値一時格納用変数ＤｏｔＳａｖｅに格納されている回転後位置Ａ１にあった画素の画素値を現注目画素値格納用変数ＮｏｗＤｏｔに格納する。
【００６８】
以上説明したステップ１１４、１１５の処理は、９０度単位の回転処理のための画素データの移動における連鎖処理でデータが失われないよう、最も少ない量の画素データ（ここでは一画素）を退避させる処理と回復処理を行っている。
【００６９】
続いて、ステップ１１６では、現在処理中の連鎖処理が終了か否かを判定する。具体的には、回転後位置Ａ１とアドレス変数Ａｓのアドレスが同一であるか否かにより、現在処理中の連鎖処理が終了か否かを判定している。これは、回転後位置Ａ１と開始画素のアドレス変数Ａｓとが同一である場合は、回転後位置Ａ１が開始画素のアドレスに戻ってきたと判断するためである。
【００７０】
ステップ１１６でＹＥＳの場合、現在処理中の連鎖処理が終了したので、ステップ１１７に進み、点対称の位置の画素の連鎖処理が必要か否かを判定する。ステップ１１６でＮｏの場合、現在処理中の連鎖処理が終了していないので、ステップ１１１に戻り、ステップ１１５で変換された現注目画素についてステップ１１１〜１１５の処理を繰り返す。
【００７１】
ステップ１１７〜１２２は、図２の処理にはない、点対称な位置関係にある画素の連鎖処理を効率良く行うための新たな処理である。ステップ１１７では、現在処理中の連鎖処理の中に、画像の点対称の位置関係にある画素の連鎖処理が含まれていて、既に終了しているか否かを判定する。状態変数ＦｌａｇＨがＯＮのとき、今回の連鎖処理の中に、点対称の位置関係にある画素の連鎖処理が含まれていないことを表し、また、ＦｌａｇＨがＯＦＦのとき、今回の連鎖処理の中に、点対称の位置関係にある画素の連鎖処理も含まれていることを表す。
【００７２】
ステップ１１７でＹＥＳの場合、現在処理中の連鎖処理は終了していないので、ステップ１１８に進み、ステップ１１７でＮｏの場合、現在処理中の連鎖処理は終了したので、ステップ１２３に進む。
【００７３】
ステップ１１８では、ステップ１１０の連鎖処理開始点の、点対称の位置関係（画像中心点ｌｃが基準点）に当たる位置を新たな開始点（現注目画素の初期の位置）とした、連鎖処理を開始する。ステップ１１９では、現注目画素の回転後位置を算出する。ここでは、ステップ１１８で設定された現注目画素Ａの回転後位置Ａ１を式（１）により算出する。
【００７４】
続いて、ステップ１２０では、ステップ１１９で算出された回転後位置Ａ１にある画素の画素値を更新する。ここでは、回転後位置Ａ１の画素値を現注目画素の画素値に変換する処理を行う。これにより、回転後位置Ａ１にある画素の画素値を更新する。
【００７５】
続いて、ステップ１２１では、ステップ１１９で算出された回転後位置Ａ１にあった画素を現注目画素に変換する。ステップ２１は、連鎖処理を行うために現注目画素を置き換える処理である。
【００７６】
以上説明したステップ１２０、１２１の処理は、９０度単位の回転処理のための画素データの移動における連鎖処理でデータが失われないよう、最も少ない量の画素データ（ここでは一画素）を退避させる処理と回復処理を行っている。
【００７７】
続いて、ステップ１２２では、現在処理中の連鎖処理が終了か否かを判定する。具体的には、回転後位置Ａ１とステップ１１８で設定されていた“新たな開始点（現注目画素の初期の位置）”のアドレスとが同一であるか否かにより、現在処理中の連鎖処理が終了か否かを判定している。これは、回転後位置Ａ１と、この“新たな開始点（現注目画素の初期の位置）”のアドレスとが同一である場合は、回転後位置Ａ１が開始画素のアドレスに戻ってきたと判断するためである。
【００７８】
ステップ１２２でＹＥＳの場合、現在処理中の連鎖処理は終了したので、ステップ１２３に進み、次の連鎖処理のための開始画素のアドレスを設定し、ステップ１２２でＮｏの場合、現在処理中の連鎖処理は終了していないので、ステップ１１９に戻り、ステップ１２１で変換された現注目画素についてステップ１１９〜１２１の処理を繰り返す。
【００７９】
ステップ１２３は、次に続く連鎖処理空間の処理を行うために、次の連鎖処理空間の処理開始画素を再設定する処理である。この次の連鎖処理のための開始画素のアドレスは、例えばＡｓ＝Ａｓ＋１（例えば、前回の連鎖処理の開始画素の右隣りの画素。それが右端の場合は、次の行の左端の画素）によりアドレス変数Ａｓを再設定する。ステップ１２３の処理が終了すると、ステップ１０３に戻る。なお、再設定される次の連鎖処理空間の処理開始画素は、画像データ上の未移動画素としてもよい。未移動の画素の決定は、ステップ１０５〜１０９で説明した移動情報格納部に格納された移動情報に基づいて行ってもよい。
【００８０】
以上の処理により、画像データを左回り９０度単位に回転する処理が行われる。ところで、連鎖処理の規則と、左上端から右下端の順番に全画素に適用する方法の両方を同時に行うと、画素位置の重複が出現するので、この重複を避けるために連鎖処理を行わない回避規制について、対象画像データが正方形（回転対象矩形の縦横の画素数が同じ）の画像データの場合、原画像のどの位置を開始画素にしても連鎖処理に含まれる画素位置の並びは、常に、正方形の中心点を通る縦横方向のそれぞれの対称軸に関して対称の位置になる２点、および正方形の中心点に関して点対称の位置になる点を加えた４点となる。従って、開始画素を、原画像の縦横それぞれ半分の画素数の大きさで原画像の左上または右上または左下または右下に形成する４つの正方形のいずれかの範囲に限定することができる。
【００８１】
すなわち、対象画像データが正方形の場合は、９０度回転処理が簡素に実行でき、かつ、連鎖処理の開始画素を画像全体の１／４の面積を占める連続した領域に集中する。これにより、例えば、１ビット／ドット画像データなど、隣り合う複数の画素値が１バイト（＝８ビット）や１ワード（＝１６ビットなど）内に詰め込まれている場合で、隣り合う複数の画素値を連続処理するときに、画像データの取り出しまたは格納に効率（処理速度を向上できる）が良い。
【００８２】
また、対象画像データが正方形（回転対象矩形の縦横画素数が同じ）の画像データの場合に、画素移動のために規制となる前述した方法（開始画素を、原画像の縦横それぞれ半分の画素数の大きさで原画像の左上または右上または左下または右下に形成する４つの正方形のいずれかの範囲に限定する方法）では、画素移動の順番を、上記４つの小正方形（原画像の縦横共に１／２の大きさの画像）内をそれぞれの中心点を固定してそれぞれ独立に９０度回転移動し、その後で、４つの小正方形単位にまとめて平行移動（ローテーション）する順番に変更することもできる。なお、小正方形の単位は４つの場合に限定されない。
【００８３】
すなわち、対象画像データ全体の９０度回転を、複数の大きさの領域に分けて多段階に処理し、画像小領域を９０度回転する処理を先に実施し、所定の加工を施した後に、画像全体である大領域を形成する場合に有効な処理である。
【００８４】
以下、画像データ全体の９０度回転を、複数の領域に分けて多段階に処理する原理を説明する。ここでは、一辺の長さ＝Ｌ＊８（画素数、＊は掛け算を表す）の正方形を形成する画像データが、正方形の左上端から右上端に、その後、１行下の左端から右端に向かって、以下、同様に右下端まで順番に連続して格納されている場合に、左回りに９０度回転する場合を例に説明する。
【００８５】
このとき、画像データ上の任意の画素の位置座標（ｘ，ｙ）と、任意の画素の９０度回転移動後の位置座標（Ｘ、Ｙ）の関係は、  Ｘ＝ｙ  式（２）、Ｙ＝Ｌ＊８−１−ｘ  式（３）となる（但し、ｘ，ｙ，Ｘ，Ｙは０〜（Ｌ＊８−１）の範囲の値である）。そこで、ｘ＝（ｘ２＊８）＋ｘ１，ｙ＝（ｙ２＊８）＋ｙ１として、ｘ２＝Ｆｌｏｏｒ（ｘ／８），ｘ１＝ｘｍｏｄ８,ｙ３＝Ｆｌｏｏｒ（ｙ／８），ｙ１＝ｙｍｏｄ８（但し、ｗ  ｍｏｄ  ８は、８を法とするｗの剰余値）とすると、Ｘ１＝ｙ１，Ｙ１＝Ｌ１−１−ｘ１となる。なお、Ｌ１＝８であり、座標（ｘ１，ｙ１），（Ｘ１，Ｙ１）は、それぞれ左回り９０度回転する前と後の正方形（一辺の長さ＝８）内の画素の座標値を表す。
【００８６】
同様にして、Ｘ２＝ｙ２，Ｙ２＝Ｌ２−１−ｘ２となる。なお、Ｌ２＝Ｌであり、座標（ｘ２，ｙ２），（Ｘ２，Ｙ２）はそれぞれ左回り９０度回転する前と後の正方形（一辺の長さ＝Ｌ）内の画素の座標値を表す。
【００８７】
Ｘ＝（Ｘ２＊８）＋Ｘ１，Ｙ＝（Ｙ２＊８）＋Ｙ１とすると、Ｘ＝（ｙ２＊８）＋ｙ１＝ｙ  すなわち式（２）と同じになる。Ｙ＝（（Ｌ２−１−ｘ２）＊８）＋Ｌ１−１−ｘ１＝Ｌ＊８−１−（（ｘ２＊８）＋ｘ１）＝Ｌ＊８−１−ｘ  すなわち式（３）と同じになる。
【００８８】
次に、上述した画像回転処理の具体例で説明する。
（例１）図４（ａ）は、画像回転処理の第１の例を説明する図である。図４（ａ）では、２×２ドットの正方形画像データ（画素ａ，ｂ，ｃ，ｄにより構成される）を左回りに９０度回転する場合の、移動前後の画素状態と移動で連鎖する点の位置関係を示している（画素を表すａ，ｂ，ｃ，ｄは、２×２ドットの２次元配置で示しているが、１次元のメモリアドレス配置で表現すると、隣り合せにａ，ｂ，ｃ，ｄの順に並ぶ。また、９０度回転後に、文字も回転させているのは分かり易くするための便宜上の表現である。実際には、ａ，ｂ，ｃ，ｄそれぞれが１画素を表すので、１画素の中での回転はない。以下の図４（ｂ）〜（ｆ）も同様）。
【００８９】
図４（ａ）の場合、連鎖処理数は、１組（ａ→ｃ→ｄ→ｂ→ａ）である。移動位置の算出は、式（１）により以下の内容になる。すなわち、１次元画素列ａ，ｂ，ｃ，ｄにおいて、移動前のａの画素（相対）位置を０とすると、他の画素の移動前の位置は、ｂは１，ｃは２，ｄは３になる。従って、移動後のａの位置＝（Ｆｌｏｏｒ（０／２）＋１）×（２×２＋１）−１−２×（１＋０）＝２、同様に、移動後のｂの位置＝（Ｆｌｏｏｒ（１／２）＋１）×（２×２＋１）−１−２×（１＋１）＝０、移動後のｃの位置＝３、移動後のｄの位置＝１となり、移動後は、１次元画素列ｂ，ｄ，ａ，ｃ順に変更になることが導かれる。
【００９０】
例えば、ａの位置の画素は、９０度回転移動後は、移動前のｃの位置に移動することを表している。また、図中の矢印が示す位置関係を辿ると、移動前にａから開始した連鎖処理は、全ての画素位置を通って、元のａの位置に戻ってきており、連鎖処理空間の数は１組であることが分かる。
【００９１】
図３の処理フローチャートを参照して説明する。ここでは、画像回転処理の例として、画像データを左回り９０度単位で回転する処理、特に当該９０度回転のための画素移動状況を把握する移動情報格納領域を使用した例を説明する。
【００９２】
ステップ１０１で設定する各種設定情報は、
（１）画像回転処理の対象画像データの画素（ａｂｃｄ）がこの順に位置付けられたアドレスに並んでいるものとし、横Ｗ＝２、縦Ｌ＝２の２次元配置のデータとして取り扱う。
（２）処理の種類（ここでは、左回り９０度など９０度単位の回転処理）
（３）後述する連鎖処理（ステップ１１０〜１１６）の最初の開始画素（ここでは画像データの先頭を基準とした相対アドレスで示す：ａの位置の初期オフセット値＝０）
（４）２回目以降の連鎖処理の開始画素の順番（ここでは画像データの先頭を基準とした相対アドレス順）、
（５）９０度回転のための画素移動状況を把握する移動情報格納領域を、Ｆｌｏｏｒ（（（全画素数＝４）＋１）／２）＝２ビット確保し、初期設定（例えば、ＯＦＦ＝０クリア）する。
【００９３】
なお、上記（４）の２回目以降の連鎖処理の開始画素の順番は、画像データの左上端の画素位置から対象画像データ全体の中央画素位置（相対アドレス）ｌｃ＝１までの順番であるとし、（５）の移動情報格納領域内のビット位置もこの順番とする。
【００９４】
「移動情報格納領域の現情報内容（ビット）：００」
ステップ１０２では、予め用意した連鎖処理の開始画素のアドレスを格納するアドレス変数Ａｓに、上記（３）で入力された最初の開始画素ａの位置（アドレス）を設定する（Ａｓ＝０）。ステップ１０３では、全画素を開始画素にした連鎖処理は終了したか否かを判定し、ステップ１０２からステップ１０３に最初に制御が移って来たときには、ステップ１０５に進む。２回目にステップ１０３に制御が移るステップ１２３から来たときには、すべての連鎖処理が終了しているので、ステップ１０４に進む。
【００９５】
ステップ１０５では、ステップ１０２で設定された連鎖処理の開始（変数Ａｓに設定された位置）画素を、現注目画素Ａに設定する（Ａ＝Ａｓ）。これにより、現に処理対象とする一画素を特定すると共に、以降のステップ１０７〜１０９に示す連鎖処理のチェック処理を行う。また、ステップ１０６では、点対称の特徴を生かすために、「画像中心点から最後尾までの間に、連鎖処理開始点を、効率良く設けるための状態変数ＦｌａｇＨの初期設定（状態ＯＮ：１）」を行う。続いて、ステップ１０７では、現注目画素の回転後位置Ａ１を式（１）により算出する。ここでは、Ａ＝０、Ｗ＝２、Ｌ＝２で示される計算により算出結果＝２を得る（Ａ１＝２）。
【００９６】
次に、ステップ１０８では、連鎖処理を二重に行うことを防ぐために、回転後位置Ａ１にある画素が回転済みか否かを判定する。具体的には、移動情報格納領域内の現注目画素の回転後位置Ａ１に該当する（Ａ１＝２番目の）ビットがＯＮかどうかを判定すべきであるが、移動情報格納領域内に存在しない２番目のビットを指しているので、回転済みではないとみなし、ステップ１０９に進む。ステップ１０９では、当該９０度回転のための画素移動状況を把握する移動情報格納領域内の現注目画素の回転後位置Ａ１に該当する（先頭ビットを０番として、２番目の）ビットをＯＮ＝１にすべきであるが、２番目のビットが存在しないので、ビット設定は行わない。
【００９７】
「移動情報格納領域の現情報内容（ビット）：００」
更に、現在処理中の連鎖処理が終了か否かを判定する。ここでは、回転後位置Ａ１と開始画素のアドレスＡｓとが同一であるか否かにより、現在処理中の連鎖処理が終わりかどうかを判定する。現時点では、Ａ１＝２であり、Ａｓ＝０であるので、Ａ１≠Ａｓで連鎖処理は終了してないと判断し、Ａ１をＡ（新たなＡとして）に代入してから、ステップ１０７に戻る。制御が戻ったステップ１０７では、現注目画素の回転後位置Ａ１を算出する。ここでは、Ａ＝２、Ｗ＝２、Ｌ＝２で示される計算により算出結果＝３を得る（Ａ１＝３）。
【００９８】
次に、ステップ１０８に進み、ステップ１０７で算出された回転後位置Ａ１にある画素は回転済みか否かを判定する。具体的には、移動情報格納領域内の現注目画素の回転後位置Ａ１に該当する（Ａ１＝３番目の）ビットがＯＮかどうかを判定すべきであるが、現時点では移動情報格納領域内に存在しない３番目のビットを指しているので、回転済みではないとみなし、ステップ１０９に進む。
【００９９】
ステップ１０９では、移動情報格納領域内の現注目画素の回転後位置Ａ１に該当する（３番目の）ビットをＯＮ＝１にすべきであるが、３番目のビットが存在しないので、ビット設定は行わない。
【０１００】
「移動情報格納領域の現情報内容（ビット）：００」
次に、現在処理中の連鎖処理が終了か否かを判定する。ここでは、回転後位置Ａ１と開始画素のアドレスＡｓとが同一であるか否かにより、現在処理中の連鎖処理が終了か否かを判定している。現時点では、Ａ１＝３であり、Ａｓ＝０であるので、Ａ１≠Ａｓで連鎖処理は終了してないと判断し、Ａ１をＡ（新たなＡとして）に代入してから、ステップ１０７に戻る。再び制御が戻ったステップ１０７では、現注目画素の回転後位置Ａ１を算出する。ここでは、Ａ＝３、Ｗ＝２、Ｌ＝２で示される計算により算出結果＝１を得る（Ａ１＝１）。
【０１０１】
次に、ステップ１０８に進み、ステップ１０７で算出された回転後位置Ａ１にある画素は回転済みか否かを判定する。具体的には、移動情報格納領域内の現注目画素の回転後位置Ａ１に該当する（Ａ１＝１番目の）ビットがＯＮかどうかを判定し、現時点では移動情報格納領域内の１番目のビットはＯＦＦを指しているので、回転済みではないとみなし、ステップ１０９に進む。ステップ１０９では、移動情報格納領域内の現注目画素の回転後位置Ａ１に該当する（１番目の）ビットが存在するのでＯＮ＝１にする。
【０１０２】
「移動情報格納領域の現情報内容（ビット）：０１」
次に、現在処理中の連鎖処理が終了か否かを判定する。ここでは、回転後位置Ａ１と開始画素のアドレスＡｓとが同一であるか否かにより、現在処理中の連鎖処理が終了か否かを判定している。現時点では、Ａ１＝１であり、Ａｓ＝０であるので、Ａ１≠Ａｓで連鎖処理は終了してないと判断し、Ａ１をＡ（新たなＡとして）に代入してから、ステップ１０７に戻る。３度制御が戻ったステップ１０７では、現注目画素の回転後位置Ａ１を算出する。ここでは、Ａ＝１、Ｗ＝２、Ｌ＝２で示される計算により算出結果＝０を得る（Ａ１＝０）。次に、ステップ１０８に進み、ステップ１０７で算出された回転後位置Ａ１にある画素は回転済みか否かを判定する。具体的には、移動情報格納領域内の現注目画素の回転後位置Ａ１に該当する（Ａ１＝０番目の）ビットがＯＮかどうかを判定し、現時点では移動情報格納領域内の０番目のビットはＯＦＦを指しているので、回転済みではないとみなし、ステップ１０９に進む。ステップ１０９では、移動情報格納領域内の現注目画素の回転後位置Ａ１に該当する（０番目の）ビットが存在するのでＯＮ＝１にする。
【０１０３】
「移動情報格納領域の現情報内容（ビット）：１１」
更に、現在処理中の連鎖処理が終了か否かを判定する。ここでは、回転後位置Ａ１と開始画素のアドレスＡｓとが同一であるか否かにより、現在処理中の連鎖処理が終わりかどうかを判定している。現時点では、Ａ１＝０であり、Ａｓ＝０であるので、Ａ１＝Ａｓで連鎖処理は終了したと判断し、ステップ１１０に進む。ステップ１１０では、連鎖処理を開始する。ここでは、ステップ１０２または後述のステップ１２３でアドレス変数Ａｓに設定された位置の画素を、現注目画素に設定する。具体的には、現注目画素位置Ａにアドレス変数Ａｓを設定し（Ａ＝Ａｓ＝０）、さらにここでは、予め用意した現注目画素の画素値を格納するための現注目画素値格納用変数ＮｏｗＤｏｔに、アドレス変数Ａｓに設定された位置の画素の画素値を設定（ＮｏｗＤｏｔ＝ａ）する。
【０１０４】
ステップ１１１に進み、現注目画素の回転後位置を算出する。ここでは、ステップ１１０で設定された現注目画素Ａの回転後位置Ａ１を算出する。Ａ＝０、Ｗ＝２、Ｌ＝２で示される計算により算出結果＝２を得る（Ａ１＝２）。ステップ１１１の処理は、前述したステップ１０７の処理と同様である。
【０１０５】
ステップ１１２では、現在の連鎖処理中の現注目画素の回転後位置Ａ１＝２が、この連鎖処理の開始点Ａｓ＝０の点対称位置Ａｓｙｍに一致しているかどうかを判定する。この連鎖処理の開始点（Ａｓ＝０）の点対称位置Ａｓｙｍ（＝（Ｗ×Ｌ−１−Ａｓ））がＡｓｙｍ＝３と算出されるので、Ａ１≠Ａｓｙｍであり、この結果によりステップ１１４に進む。
【０１０６】
ステップ１１４では、ステップ１１１で算出された回転後位置Ａ１にある画素の画素値を更新する。ここでは、回転後位置Ａ１の画素値を現注目画素の画素値に変換する処理を行う。具体的には、回転後位置Ａ１＝２にあった画素の画素値（ｃ）を画素値一時格納用変数ＤｏｔＳａｖｅに格納する（退避させる）と共に、回転後位置Ａ１＝２の画素の画素値を現注目画素の画素値（現注目画素値格納用変数ＮｏｗＤｏｔに格納された画素値ａ）に変更する。これにより、回転後位置Ａ１にある画素の画素値を更新する。
【０１０７】
続いて、ステップ１１５に進み、ステップ１１１で算出された回転後位置Ａ１にあった画素を現注目画素に変換する。ステップ１１５は、連鎖処理を行うために現注目画素を置き換える処理である。具体的には、現注目画素位置Ａにステップ１１１で算出された回転後位置Ａ１を設定（Ａ＝Ａ１）すると共に、ステップ１１４で画素値一時格納用変数ＤｏｔＳａｖｅに格納されている回転後位置Ａ１にあった画素の画素値（ｃ）を現注目画素値格納用変数ＮｏｗＤｏｔに格納する。
【０１０８】
続いて、ステップ１１６に進み、現在処理中の連鎖処理が終了か否かを判定する。具体的には、回転後位置Ａ１とアドレス変数Ａｓのアドレスとが同一であるか否かにより、現在処理中の連鎖処理が終了か否かを判定する。Ａ１＝２，Ａｓ＝０であるので、現在処理中の連鎖処理が終了ではなく、ステップ１１１に戻る。ステップ１１１に戻り、現注目画素Ａの回転後位置Ａ１を算出する。Ａ＝２、Ｗ＝２、Ｌ＝２で示される計算により算出結果＝３を得る（Ａ１＝３）。
【０１０９】
ステップ１１２では、現在の連鎖処理中の現注目画素の回転後位置Ａ１＝３が、この連鎖処理の開始点Ａｓ＝０の点対称位置Ａｓｙｍ＝３に一致しているかどうかを判定し、Ａ１＝Ａｓｙｍで一致しているので、この結果によりステップ１１３に進み、ステップ１０６で初期設定した状態変数ＦｌａｇＨを状態ＯＦＦ（今回の連鎖処理の中に、点対称の位置関係にある画素の連鎖処理も含まれていることを表す）にし、その後、ステップ１１４に進む。
【０１１０】
ステップ１１４では、ステップ１１１で算出された回転後位置Ａ１にある画素の画素値を更新する。具体的には、回転後位置Ａ１＝３にあった画素の画素値（ｄ）を画素値一時格納用変数ＤｏｔＳａｖｅに格納する（退避させる）と共に、回転後位置Ａ１＝３の画素の画素値を現注目画素の画素値（現注目画素値格納用変数ＮｏｗＤｏｔに格納された画素値ｃ）に変更する。
【０１１１】
続いて、ステップ１１５に進み、ステップ１１１で算出された回転後位置Ａ１にあった画素を現注目画素に変換する。具体的には、現注目画素位置Ａにステップ１１１で算出された回転後位置Ａ１を設定（Ａ＝Ａ１）すると共に、ステップ１１４で画素値一時格納用変数ＤｏｔＳａｖｅに格納されている回転後位置Ａ１にあった画素の画素値（ｄ）を現注目画素値格納用変数ＮｏｗＤｏｔに格納する。
【０１１２】
続いて、ステップ１１６に進み、現在処理中の連鎖処理が終了か否かを判定する。具体的には、回転後位置Ａ１とアドレス変数Ａｓのアドレスとが同一であるか否かにより、現在処理中の連鎖処理が終了か否かを判定する。Ａ１＝３，Ａｓ＝０であるので、現在処理中の連鎖処理が終了ではなく、ステップ１１１に戻る。
【０１１３】
再びステップ１１１に戻り、現注目画素Ａの回転後位置Ａ１を算出する。Ａ＝３、Ｗ＝２、Ｌ＝２で示される計算により算出結果＝１を得る（Ａ１＝１）。
【０１１４】
ステップ１１２では、現在の連鎖処理中の現注目画素の回転後位置Ａ１＝１が、この連鎖処理の開始点Ａｓ＝０の点対称位置Ａｓｙｍ＝３に一致しているかどうかを判定し、Ａ１≠Ａｓｙｍで一致していないので、この結果によりステップ１１４に進む。
【０１１５】
ステップ１１４では、ステップ１１１で算出された回転後位置Ａ１にある画素の画素値を更新する。具体的には、回転後位置Ａ１＝１にあった画素の画素値（ｂ）を画素値一時格納用変数ＤｏｔＳａｖｅに格納する（退避させる）と共に、回転後位置Ａ１＝１の画素の画素値を現注目画素の画素値（現注目画素値格納用変数ＮｏｗＤｏｔに格納された画素値ｄ）に変更する。
【０１１６】
続いて、ステップ１１５に進み、ステップ１１１で算出された回転後位置Ａ１にあった画素を現注目画素に変換する。具体的には、現注目画素位置Ａにステップｓ１０で算出された回転後位置Ａ１を設定（Ａ＝Ａ１）すると共に、ステップ１１４で画素値一時格納用変数ＤｏｔＳａｖｅに格納されている回転後位置Ａ１にあった画素の画素値（ｂ）を現注目画素値格納用変数ＮｏｗＤｏｔに格納する。
【０１１７】
続いて、ステップ１１６に進み、現在処理中の連鎖処理が終了か否かを判定する。具体的には、回転後位置Ａ１とアドレス変数Ａｓのアドレスとが同一であるか否かにより、現在処理中の連鎖処理が終了か否かを判定する。Ａ１＝１，Ａｓ＝０であるので、現在処理中の連鎖処理が終了ではなく、ステップ１１１に戻る。
【０１１８】
３度ステップ１１１に戻り、現注目画素Ａの回転後位置Ａ１を算出する。Ａ＝１、Ｗ＝２、Ｌ＝２で示される計算により算出結果＝０を得る（Ａ１＝０）。ステップ１１２では、現在の連鎖処理中の現注目画素の回転後位置Ａ１＝０が、この連鎖処理の開始点Ａｓ＝０の点対称位置Ａｓｙｍ＝３に一致しているかどうかを判定し、Ａ１≠Ａｓｙｍで一致していないので、この結果によりステップ１１４に進む。
【０１１９】
ステップ１１４では、ステップ１１１で算出された回転後位置Ａ１にある画素の画素値を更新する。具体的には、回転後位置Ａ１＝０にあった画素の画素値（ａ）を画素値一時格納用変数ＤｏｔＳａｖｅに格納する（退避させる）と共に、回転後位置Ａ１＝０の画素の画素値を現注目画素の画素値（現注目画素値格納用変数ＮｏｗＤｏｔに格納された画素値ｂ）に変更する。
【０１２０】
続いて、ステップ１１５に進み、ステップ１１１で算出された回転後位置Ａ１にあった画素を現注目画素に変換する。具体的には、現注目画素位置Ａにステップ１１１で算出された回転後位置Ａ１を設定（Ａ＝Ａ１）すると共に、ステップ１１４で画素値一時格納用変数ＤｏｔＳａｖｅに格納されている回転後位置Ａ１にあった画素の画素値（ａ）を現注目画素値格納用変数ＮｏｗＤｏｔに格納する。
【０１２１】
続いて、ステップ１１１６に進み、現在処理中の連鎖処理が終了か否かを判定する。具体的には、回転後位置Ａ１とアドレス変数Ａｓのアドレスとが同一であるか否かにより、現在処理中の連鎖処理が終了か否かを判定する。Ａ１＝０，Ａｓ＝０であるので、現在処理中の連鎖処理が終わりと判断し、ステップ１１７に進む。
【０１２２】
ステップ１１７では、現在処理中の連鎖処理の中に、画像の点対称の位置関係にある画素の連鎖処理が含まれていて、既に終了しているか否かを判定する。状態変数ＦｌａｇＨはＯＦＦになっているので、今回の連鎖処理の中に、点対称の位置関係にある画素の連鎖処理も含まれていることを表す。従って、現在処理中の連鎖処理は終了したので、ステップ１２３に進み、次の連鎖処理のための開始画素のアドレスを設定する。
【０１２３】
ステップ１２３は、次の連鎖処理のための開始画素のアドレスを設定する。例えばＡｓ＝Ａｓ＋１（例えば、前回の連鎖処理の開始画素の右隣りの画素。それが右端の場合は、次の行の左端の画素）によりアドレス変数Ａｓを再設定する。現時点で、Ａｓ＝０であるので、新しいＡｓ＝１に再設定し、ステップ１２３を終了し、ステップ１０３に戻り、全画素を開始画素にした連鎖処理が終了したか否かを判定する。
【０１２４】
この判定には、「移動情報格納領域の現情報内容（ビット）：１１」の情報を利用する。現在捜索開始する新しいＡｓ＝１であり、そこから後ろに向かっても全ビット（今回のケースでは残り１ビットしかない）がＯＮ（＝１）であるので、すべての連鎖処理が終了していると判断し、ステップ１０４に進んで、後処理を行って終了する。
【０１２５】
（例２）図４（ｂ）は、画像回転処理の第２の例を説明するための図である。図４（ｂ）では、２×３ドットの矩形画像データ（上位アドレスから順にａ，ｂ，ｃ，ｄ，ｅ，ｆの並び）を、左回りに９０度回転する場合の、移動前後の画素状態と移動で連鎖する点の位置関係を示している。この場合も矢印によって、移動前の画素の位置が９０度回転した移動後に、どこの位置になるかを表している。
【０１２６】
この９０度回転処理は、２×３ドットの矩形画像データ（６ドット分）が格納できる領域の大きさのままで、データの並び替えだけで、３×２ドットの矩形画像表現（上位アドレスから順にｂ，ｄ，ｆ，ａ，ｃ，ｅの並び）に変更する方法である。具体的には図４（ａ）の場合と同様に、移動位置の算出は、式（１）にＷ＝２、Ｌ＝３を適用して、Ａ１＝（Ｆｌｏｏｒ（Ａ／２）＋１）×７−１−３×（１＋Ａ）から、Ａ＝０〜５をそれぞれ代入し、その結果、それぞれＡ１＝３，０，４，１，５，２から導かれるものである。
【０１２７】
図３の処理フローチャートにより、図４（ｂ）中の矢印が示す位置関係を辿ると、移動前にａから開始した連鎖処理は、ａ→ｄ→ｂ→ａと辿って閉じていることから、ａ→ｄ→ｂで一つの連鎖処理空間を形成し、同様に、ｃ→ｅ→ｆでもう一つの連鎖処理空間を形成して、併せて２組の連鎖処理空間で構成されていることが分かる。図３の処理フローチャートによる処理を辿れば、移動前にａから開始した連鎖処理は、ａ→ｄ→ｂ→ａと繋いだ１組が、ステップ１０１〜ステップ１１６において実行され、その途中のステップ１１３は実行されないので、ＦｌａｇＨ＝１になることから、もう１組のｃ→ｅ→ｆ→ｃの連鎖処理は、ステップ１１６〜ステップ１２２において実行される。
【０１２８】
（例３）図４（ｃ）は、画像回転処理の第３の例を説明するための図である。図４（ｃ）では、２×４ドットの矩形画像データ（上位アドレスから順にａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈの並び）を、左回りに９０度回転し、４×２ドットの矩形画像データ（上位アドレスから順にｂ，ｄ，ｆ，ｈ，ａ，ｃ，ｅ，ｇの並び）に変更する場合の、移動前後の画素状態と移動で連鎖する点の位置関係を示している。連鎖処理空間は、ａ→ｅ→ｇ→ｈ→ｄ→ｂ→ａの組と、ｃ→ｆ→ｃの組の２組であることが分かる。
【０１２９】
前述した図２の処理フローチャートにおいて、上記した連鎖処理の規則を、矩形画像データの中心を基準にして点対称位置関係にある、例えば、左上端画素と右下端画素に適用してもよい。このとき、両者が同一の連鎖処理上の中に存在しない場合は、９０度回転の重複を回避するための捜索において、約半分の捜索量で済む。
【０１３０】
（例４）図４（ｄ）は、画像回転処理の第４の例を説明するための図である。ここでは、例４として、４×３ドットの矩形画像データ（上位アドレスから順にａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ，ｉ，ｊ，ｋ，ｌの並び）を、左回りに９０度回転し、３×４ドットの矩形画像データ（上位アドレスから順にｄ，ｈ，ｌ，ｃ，ｇ，ｋ，ｂ，ｆ，ｊ，ａ，ｅ，ｉの並び）に変更する場合の、移動前後の画素状態と移動で連鎖する点の位置関係を示しており、連鎖処理空間は、ａ→ｊ→ｉ→ｌ→ｃ→ｄ→ａの組と、ｂ→ｇ→ｅ→ｋ→ｆ→ｈ→ｂの組の２組であることが分かる。
【０１３１】
（例５）図４（ｅ）は、画像回転処理の第５の例を説明するための図である。ここでは、例５として、５×３ドットの矩形画像データ（上位アドレスから順にａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ，ｉ，ｊ，ｋ，ｌ，ｍ，ｎ，ｏの並び）を、左回りに９０度回転し、３×５ドットの矩形画像データ（上位アドレスから順にｅ，ｊ，ｏ，ｄ，ｉ，ｎ，ｃ，ｈ，ｍ，ｂ，ｇ，ｌ，ａ，ｆ，ｋの並び）に変更する場合の、移動前後の画素状態と移動で連鎖する点の位置関係を示しており、連鎖処理空間は、ａ→ｍ→ｉ→ｅ→ａの組と、ｂ→ｊ→ｂの組と、ｃ→ｇ→ｋ→ｏ→ｃの組と、ｆ→ｎ→ｆ、および不動点（移動しない）ｄ，ｈ，ｌの７組であることが分かる。この例のように、全体の画素数が奇数個となる場合は、画素の移動がない不動点（丸で囲んだｄ、ｈ、ｌの画素）が存在する。
【０１３２】
ここでも例３と同様に、前述した図２の処理フローチャートにおいて、上記した連鎖処理の規則を、矩形画像データの中心を基準にして点対称位置関係にある、例えば、左上端画素と右下端画素に適用してもよい。このとき、両者が同一の連鎖処理上の中に存在しない場合は、９０度回転の重複を回避するための捜索において、約半分の捜索量で済む。その方法の一例を示したのが、図３の処理フローチャートである。約半分の捜索量で済むことにより、画像データ上の各画素について移動済か否かの移動情報を格納する移動情報格納部において、移動済か否かの移動情報を格納する移動情報を、全画素について格納するのではなく、図３の処理フローチャートにより、（（全画素数）＋１）／２個（小数以下切捨て）の格納（ビット数）だけで済む。
【０１３３】
上記した例について、移動情報格納領域のサイズを図２と図３の場合で比較すると、以下の通りとなる。
【０１３４】
図４（ａ）の例では、図２の場合、４画素分の移動情報格納領域を必要とするのに対し、図３の場合、２画素分の移動情報格納領域で済む。
【０１３５】
図４（ｂ）の例では、図２の場合、６画素分の移動情報格納領域を必要とするのに対し、図３の場合、３画素分の移動情報格納領域で済み、図４（ｃ）の例では、図２の場合、８画素分の移動情報格納領域を必要とするのに対し、図３の場合、４画素分の移動情報格納領域で済み、図４（ｄ）の例では、図２の場合、１２画素分の移動情報格納領域を必要とするのに対し、図３の場合、６画素分の移動情報格納領域で済み、図４（ｅ）の例では、図２の場合、１５画素分の移動情報格納領域を必要とするのに対し、図３の場合、８画素分の移動情報格納領域で済む。
【０１３６】
本発明は、前述した実施例の機能を実現するソフトウエアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（ＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても達成される。この場合、記憶媒体から読出されたプログラムコード自体が前述した実施例の機能を実現することになる。プログラムコードを供給するための記憶媒体としては、例えば、ハードディスク、光ディスク、光磁気ディスク、不揮発性のメモリカード、ＲＯＭなどを用いることができる。また、コンピュータが読出したプログラムコードを実行することにより、前述した実施例の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）などが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれる。さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれる。また、本発明の実施例の機能等を実現するためのプログラムは、ネットワークを介した通信によってサーバから提供されるものでも良い。
【符号の説明】
【０１３７】
１１  ＣＰＵ
１２  ＲＯＭ
１３  ＲＡＭ
１４  時計回路
１５  磁気ディスク装置
１６  画像９０度回転処理部
１７  ソースデータ符号化部
１８  画像領域ノイズ除去部
１９  画像領域内グラデーション化部
２０  画像領域内面積算出部
２１  画像領域内変更後の活用部
２２  ＣＲＴ画面表示装置
２３  表示制御部
２４  キーボード装置
２５  画面指示装置
２６  入力制御部
２７  ネットワークＩ／Ｆ
２８  ネットワーク伝送制御部
２９  バス
【先行技術文献】
【特許文献】
【０１３８】
【特許文献１】特開２００９−７６９８９号公報
【図１】
2012175164.tif 000003
【図２】
2012175164.tif 000004
【図３】
2012175164.tif 000005
【図４】
2012175164.tif 000006