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