(57)【特許請求の範囲】
【請求項１】
ＪＰＥＧ方式により符号化された画像データを回転させる画像処理装置であって、
回転処理の対象である画像の符号データに基づいて、ＪＰＥＧ方式の処理単位となる各ブロックの位置を特定するためのブロック位置情報と、各ブロックに含まれる直流成分値とを生成する生成手段と、
前記生成手段により生成された各ブロックのブロック位置情報および直流成分値のうち、主走査方向の各ブロックラインの先頭ブロックのブロック位置情報および直流成分値のみを保持する情報保持手段と、
前記情報保持手段により保持されている先頭ブロックのブロック位置情報および直流成分値に基づいて、前記回転処理の方向および角度に基づいた順序で、符号化された画像データのブロックにアクセスし、前記アクセスしたブロックの符号を直流成分値及び交流成分値に変換し、前記変換された直流成分値及び交流成分値を前記回転処理の方向及び角度に基づいて変換して再符号化し、前記回転処理の方向及び角度に基づいて再配置を行うことにより、９０度回転又は１８０度回転された画像の符号データを生成する回転符号生成手段と
を有する画像処理装置。
【請求項２】
前記回転符号生成手段は、
要求された回転角度及び回転方向に対応するブロックの切り出し順序を決定し、
前記ブロック位置情報に基づき、決定された切り出し順序で符号化された画像データをブロックライン単位で切り出し、
各ブロックの符号を復号化することにより得られる直流成分差分値、交流成分のゼロラン及び交流成分の有効係数と、当該ブロックラインの先頭ブロックの直流成分値とに基づいて、各ブロックの直流成分値および交流成分値を変換係数として生成し、
要求された回転角度及び回転方向に応じて、前記変換係数の配置及び正負符号の少なくとも一方を変換することにより、回転処理後の変換係数を算出し、
算出された回転処理後の変換係数のうちの直流成分値を用いて、直前ブロックにおける直流成分値と注目ブロックの直流成分値とに基づき、ブロックラインにおける各注目ブロックの直流成分差分値を生成し、生成された直流成分差分値と回転処理後の変換係数における前記交流成分値をブロック単位で符号化し、符号化された符号を、要求された回転角度及び回転方向に基づいて再配置することによりことにより９０度回転又は１８０度回転された画像の符号データを生成する請求項１記載の画像処理装置。
【請求項３】
前記回転符号生成手段は、画像を右に９０度回転させるよう要求されている場合には、回転処理の対象である画像における先頭ブロックの副走査方向下方から上方に走査するような走査順序をブロックの切り出し順序として決定し、全てのブロックの符号をバッファリングし、バッファリングされている符号をそのまま出力することにより符号化された符号の再配置を行う請求項２記載の画像処理装置。
【請求項４】
前記回転符号生成手段は、画像を左に９０度回転させるよう要求されている場合には、回転処理の対象である画像における先頭ブロックの副走査方向上方から下方に走査するような走査順序をブロックの切り出し順序として決定し、全てのブロックの符号をバッファリングし、バッファリングされている符号を、主走査方向のブロックライン単位で、処理順とは逆の順序で出力することにより符号化された符号の再配置を行う請求項２記載の画像処理装置。
【請求項５】
前記回転符号生成手段は、画像を１８０度回転させるよう要求されている場合には、回転処理の対象である画像における主走査方向のブロックラインのうち、副走査方向最下のブロックラインを主走査方向に走査するような走査順序をブロックの切り出し順序として決定し、１ブロックライン分の符号が揃うまで符号化された符号を先入れ後出し方式でバッファリングし、１ブロックライン分の符号が揃うとバッファリングされている符号をそのまま出力することにより符号化された符号の再配置を行う請求項２記載の画像処理装置。
【請求項６】
ＪＰＥＧ方式により符号化された画像データを回転させるコンピュータにおいて、
回転処理の対象である画像の符号データに基づいて、ＪＰＥＧ方式の処理単位となる各ブロックの位置を特定するためのブロック位置情報と、各ブロックに含まれる直流成分値とを生成するステップと、
生成された各ブロックのブロック位置情報および直流成分値のうち、主走査方向の各ブロックラインの先頭ブロックのブロック位置情報および直流成分値のみを保持するステップと、
生成された各ブロックのブロック位置情報および直流成分値のうち、先頭ブロック以外の他のブロックのブロック位置情報および直流成分値を消去し、
保持されている先頭ブロックのブロック位置情報および直流成分値に基づいて、前記回転処理の方向および角度に基づいた順序で、符号化された画像データのブロックにアクセスし、前記アクセスしたブロックの符号を直流成分値及び交流成分値に変換し、前記変換された直流成分値及び交流成分値を前記回転処理の方向及び角度に基づいて変換して再符号化し、前記回転処理の方向及び角度に基づいて再配置を行うことにより、９０度回転又は１８０度回転された画像の符号データを生成するステップと
を前記コンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号化された画像データを回転させる画像処理方法に関する。
【背景技術】
【０００２】
例えば、特許文献１には、ＤＣＴブロックを再配列し、各ブロック内でＤＣＴ係数の順序を再配列し、適当な係数の符号ビットを変更することにより量子化ＤＣＴドメイン内で９０度回転を行う方法が開示されている。
また、特許文献７には、完全な伸長および圧縮の工程を経由することなしに、画像の圧縮ドメイン表現を直接操作して、選択された空間ドメイン操作を行う方法が開示されている。
【特許文献１】特開平７−１５４２６４号公報
【特許文献２】特開平９−２４７４２３号公報
【特許文献３】特開平９−２４７４２４号公報
【特許文献４】特開平８−２０４９５７号公報
【特許文献５】特開平１０−１１２７９６号公報
【特許文献６】特開平１０−３３６４２７号公報
【特許文献７】特開平１１−３３１８４７号公報
【特許文献８】特開２０００−１３４４５９号公報
【特許文献９】特開２００１−１５７０２９号公報
【特許文献１０】特開２００３−１８９１０９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
本発明は、上述した背景からなされたものであり、比較的軽い処理負荷で、符号化された画像データを回転させる画像処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００４】
［画像処理装置］
上記目的を達成するために、本発明にかかる画像処理装置は、ＪＰＥＧ方式により符号化された画像データを回転させる画像処理装置であって、画像の符号データに基づいて、ＪＰＥＧ方式の処理単位となるブロックそれぞれを直接復号化するために必要となる必要情報を生成する生成手段と、前記生成手段により生成された各ブロックの必要情報のうち、一部のブロックの必要情報を保持する情報保持手段と、前記情報保持手段により保持されている必要情報に基づいて、回転された画像の符号データを生成する回転符号生成手段とを有する。
【０００５】
好適には、前記情報保持手段は、画像の周縁部に相当するブロックの必要情報のみを保持し、前記改定符号生成手段は、画像周縁部に相当するブロックの必要情報に基づいて、９０度回転又は１８０度回転された画像の符号データを生成する。
【０００６】
好適には、前記情報保持手段は、主走査方向の各ブロックラインのうち、先頭ブロックの必要情報のみを保持し、この先頭ブロックに続く後続ブロックの必要情報を消去する。
【０００７】
好適には、前記生成手段は、前記必要情報として、符号データにおける各ブロックの位置を特定するためのブロック位置情報と、各ブロックに含まれる直流成分値とを生成し、前記情報保持手段は、一部のブロックのブロック位置情報及び直流成分値を保持する。
【０００８】
また、本発明にかかる画像処理装置は、ＪＰＥＧ方式により符号化された画像データを回転させる画像処理装置であって、画像の符号データに基づいて、既定の走査方向のブロック群からなるブロックラインそれぞれに対して直接アクセスするためのアクセス情報を生成するアクセス情報生成手段と、前記アクセス情報生成手段により生成されたアクセス情報に基づいて、回転された画像の符号データを生成する回転符号生成手段とを有する。
【００１０】
［プログラム］
また、本発明にかかるプログラムは、ＪＰＥＧ方式により符号化された画像データを回転させるコンピュータにおいて、画像の符号データに基づいて、ＪＰＥＧ方式の処理単位となるブロックそれぞれを直接復号化するために必要となる必要情報を生成するステップと、生成された各ブロックの必要情報のうち、一部のブロックの必要情報を保持するステップと、保持されている必要情報に基づいて、回転された画像の符号データを生成するステップとを前記コンピュータに実行させる。
【発明の効果】
【００１１】
本発明の画像処理装置によれば、符号化された画像データの回転に要するメモリ量を小さくすることができる。
【発明を実施するための最良の形態】
【００１２】
［背景と概略］
まず、本発明の理解を助けるために、その背景及び概略を説明する。
例えば、国際標準ＪＰＥＧは、８×８ブロックを単位とする符号化処理及び復号化処理を行う。このようなＪＰＥＧにより生成された画像の符号データを、完全に復号化することなく９０度回転又は１８０度回転させるには、ブロック単位のランダムスキャンが必要である。
しかし、以下の理由のために、ＪＰＥＧの符号から特定のブロックを抽出することは難しい。
（課題１）可変長符号化によって、符号がビット単位で変化するため、伸長なしにブロックの位置を見つけることが難しい。
（課題２）ＤＣＴ係数の直流成分値（以下ＤＣ値）は、直前ブロックのＤＣ値との差分値として符号化されるため、あるブロックのＤＣ値を得るためには、直前ブロックのＤＣ値を知る必要がある。
【００１３】
上記２つの課題を解決するために、例えば、１パス目でブロック毎のビット位置とＤＣ値とを求めて、このビット位置及びＤＣ値をメモリに格納しておき、２パス目で、メモリに格納されたビット位置及びＤＣ値を用いてブロックのランダムスキャンを行うことが考えられる。
これにより、各ブロックへのランダムスキャンが可能になり、回転処理のために画像全体を伸長する必要がなくなる。
【００１４】
しかしながら、全ブロックのビット位置及びＤＣ値を保持すると、メモリ領域を圧迫する。仮に、ビット位置に４[Byte]、ＤＣ値に２[Byte]必要だとすると、８ビットグレイの画像を回転させる場合に、原画像に比較して９％（すなわち、（４＋２）／６４）程度のメモリ容量が必要である。一般に、ＪＰＥＧの圧縮率は、１０〜２０程度で運用されることが多いので、ビット位置及びＤＣ値を保持するために、原画像の符号（以下、原符号）全体と同程度かそれ以上のメモリが必要ということになり、組込み機器などではメモリコストとして大きい。また、メインメモリが潤沢なＣＰＵ処理の場合でも、６００dpiＡ３相当で７[MByte]程必要になるため、現状ではキャッシュメモリに収めるのが難しく、メインメモリへのアクセスが発生して、処理速度が低下する。
【００１５】
そこで、本実施形態における画像処理装置２は、ブロックライン毎に、先頭ブロックのビット位置及びＤＣ値のみを記憶し、先頭ブロックのビット位置及びＤＣ値のみを用いて、９０度回転又は１８０度回転を実現する。ブロックラインとは、図１（Ａ）に例示するブロックのうち、走査方向（主走査方向又は副走査方向）に配列されたブロック群である。本例では、主走査方向に配列されたブロック群からなるブロックラインの先頭ブロックについてのみ、ビット位置及びＤＣ値が保持され、後続ブロック（先頭ブロックに続くブロック群）のビット位置及びＤＣ値は保持されない。換言すると、本例の画像処理装置２は、ブロックラインへのランダムスキャンを用いて、所望の回転方向及び回転角度（９０度又は１８０度）で回転された画像の符号データを生成する。
【００１６】
より具体的には、画像処理装置２は、画像を右に９０度回転させる場合には、図１（Ｂ）に例示するように、各ブロックラインを（原画像で）下から順に、副走査方向を優先して並列的に処理していけば、回転画像の符号データを生成することができる。なお、各ブロックの回転は、各ブロックに含まれるＤＣＴ係数の転置及び正負符号の交換により実現される。したがって、回転画像の符号データを生成する過程において、逆ＤＣＴ処理を行う必要はない。また、各ブロックラインにおける後続ブロック（非先頭ブロック）の処理も、そのブロックを処理するときには直前ブロックの処理が終わっていることが保証されるため、先頭ブロックと同様に処理できる。
なお、以下の説明では、原画像の走査方向の最上流位置にあるブロック（本来的な先頭ブロック）だけでなく、直前ブロックまで処理された後続ブロックも先頭ブロックとよぶ場合がある。
【００１７】
また、画像処理装置２は、画像を左に９０度回転させる場合には、図２（Ａ）に例示するように、各ブロックラインを（原画像で）上から順に、副走査方向を優先して並列的に処理する。ただし、このとき得られるライン単位の符号は、回転後画像では下から上への順に並ぶ。
そこで、画像処理装置２は、図２（Ｂ）に例示するように、回転画像後の符号をブロックライン単位にバッファリングしておいて、符号の出力時に、処理順とは反対の順序で出力することにより、符号を並べなおす。このとき、リスタートマーカ（RSTマーカ）の挿入などの手段でブロックライン単位にバイトバウンダリに揃えておくことが望ましい。
なお、このような並び替えは、ＤＭＡのチェイニングのような手法でも実行し、システム内の他のモジュールに、並び替えられた符号を蹴り出すようにしてもよい。この場合、本実施形態のモジュール内に、ワークメモリを持たないように構成できる。
【００１８】
また、画像処理装置２は、画像を１８０度回転させる場合には、図２（Ｃ）に例示するように、各ブロックラインを（原画像で）下から順に、主走査方向を優先して処理する。換言すると、画像処理装置２は、原画像で下から、各ブロックライン毎に逐次処理する。ただし、このとき得られるブロック符号は、回転後画像では右から左に並ぶ。
ここで、ＤＣ値の差分の取り方は、主走査方向の向きで決まるので、ブロックを並べなおしてからでないとＤＣ値を符号化することができない。
そこで、本画像処理装置２は、ＤＣ値及び交流成分値（以下ＡＣ値）のＤＣＴ係数を非圧縮でブロックライン分バッファリングしてから、ブロックの並べ替えと符号化を行う。
なお、画像処理装置２は、ＡＣ値のみを先に符号化し、ＤＣ値を非圧縮でバッファリングし、ブロックライン分貯まったところでＤＣ値を符号化して、先に符号化されたＡＣ値の符号とマージするようにしてもよい。前者は、処理が単純であるが非圧縮のブロックラインメモリを必要とする。一方、後者は、ワークメモリを減らせるが、処理が複雑になる。また、画像処理装置２は、ＡＣ値に対してゼロランレングス符号化だけかけて、このＡＣ値及びＤＣ値をバッファリングし、ブロックライン分貯まったところで残りの符号化処理を行ってもよい。
【００１９】
なお、カラー画像を符号化又は復号化する場合には、色差をサブサンプリングするために、ＭＣＵ（Minimum Coding Unit）というブロック群が事実上の処理単位となるが、本ブロックをＭＣＵに置き換えることにより同じ効果が容易に得られるため、説明の便宜上、ブロックによる構成を説明する。
【００２０】
［ハードウェア構成］
次に、画像処理装置２のハードウェア構成を説明する。
図３は、本発明にかかる画像処理方法が適応される画像処理装置２のハードウェア構成を、制御装置２１を中心に例示する図である。
図３に例示するように、画像処理装置２は、ＣＰＵ２１２及びメモリ２１４などを含む制御装置２１、通信装置２２、ＨＤＤ・ＣＤ装置などの記録装置２４、並びに、ＬＣＤ表示装置あるいはＣＲＴ表示装置およびキーボード・タッチパネルなどを含むユーザインターフェース装置（ＵＩ装置）２５から構成される。
画像処理装置２は、例えば、プリンタ装置３の内部に設けられ、入力された画像の符号データを、回転された画像の符号データに変換して、プリンタ装置３のプリントエンジンなどに送信する。
【００２１】
［画像処理プログラム］
図４は、制御装置２１（図３）により実行され、本発明にかかる画像処理方法を実現する画像処理プログラム５の機能構成を例示する図である。
図４に例示するように、画像処理プログラム５は、ブロック切出し部５００、ＤＣ伸長部５１０、情報保持部５２０、先頭情報格納部５３０、符号シーク部５４０、変換係数伸長部５５０、ブロック内回転部５６０、ＤＣ差分算出部５７０、ハフマン符号化部５８０、及び再配置部５９０を有する。
画像処理プログラム５において、ブロック切出し部５００は、入力された原符号（原画像の符号データ）から、各ブロックの符号を切り出す。
ここで、ブロック切出し部５００は、ブロックを切り出すためにはハフマン伸長によって可変長符号の切れ目を見つける必要があるが、ＡＣ値は必要ないので、完全に伸長する必要はない。すなわち、ＪＰＥＧのＡＣ成分の符号は、ゼロラン（係数値０の連続数）と有効係数のペアでシンボルを構成する、いわゆる２次元ハフマン符号であり、付加ビット表現をとるため、完全に伸長する場合は、ゼロランを展開して無効係数を再構成し、グループ番号と付加ビットから有効係数を再構成する必要があるが、本例のブロック切出し部５００は、ブロック位置の検出とＤＣ値の伸長を目的とするため、上記の処理をする必要がない。
つまり、本例のブロック切出し部５００は、注目ビット列に適合する符号語を検索し、計数した画素数に応じ、ＤＣ成分であれば完全にハフマン復号化してＤＣ伸長部５１０に出力し、同時に、符号語の先頭位置をビット位置として情報保持部５２０に出力する。また、ブロック切出し部５００は、ＡＣ成分であれば符号語のビット数だけ注目ビット列を進め、該当符号語に対応する画素数を計数して、次の符号語を検索する。
なお、実際には、EOB（EndOfBlock）やマーカなどの処理が入るが、説明の便宜上、これらの処理を省いて説明する。
【００２２】
ＤＣ伸長部５１０は、入力された原符号のＤＣ値を復号化し、復号化されたＤＣ値を情報保持部５２０に出力する。
本例のＤＣ伸長部５１０は、ＤＣ成分（差分値）に基づいて、各ブロックのＤＣ値を生成し、生成されたＤＣ値を情報保持部５２０に出力する。
【００２３】
情報保持部５２０は、ブロック切出し部５００から入力されたビット位置、及び、ＤＣ伸長部５１０から入力されたＤＣ値のうち、先頭ブロックのビット位置及びＤＣ値のみを先頭情報格納部５３０に格納し、他のブロック（後続ブロック）のビット位置及びＤＣ値を消去する。
なお、本例の情報保持部５２０は、先頭ブロックそれぞれを直接復号化するために必要となる必要情報として、先頭ブロックのビット位置及びＤＣ値のみを保持するが、これに限定されるものではなく、画像の周縁部に相当する他のブロックのビット位置及びＤＣ値を保持してもよい。
【００２４】
符号シーク部５４０は、先頭情報格納部５３０により格納されている先頭ブロックのビット位置に基づいて、入力された原符号をランダムスキャンし、必要な符号をブロックライン単位で切り出す。ブロックの切出し順序は、図１又は図２に例示したように、回転方向及び回転角度に対応したものである。
本例の符号シーク部５４０は、所望の回転方向及び回転角度に対応する先頭ブロックのビット位置及びＤＣ値を先頭情報格納部５３０から読み出し、読み出されたビット位置から符号語を復号化して、先頭ブロックのシンボル（ＤＣ差分値、ＡＣのゼロラン、及びＡＣの有効係数）を切り出し、切り出された先頭ブロックのシンボルと、読み出されたＤＣ値（このブロックのＤＣ値）とを変換係数伸長部５５０に出力する。なお、本例の符号シーク部５４０は、先頭ブロックが切り出されると、次のブロックのビット位置を保持し、保持されたビット位置から、後続ブロックのシンボルを切り出す。
【００２５】
変換係数伸長部５５０は、符号シーク部５４０により切り出された各ブロックの符号を復号化して、このブロックの変換係数（ＤＣ値及びＡＣ値）を生成し、生成された変換係数をブロック内回転部５６０に出力する。
本例の変換係数伸長部５５０は、符号シーク部５４０から先頭ブロック（本来的な先頭ブロック）のシンボル（ＤＣ差分値、ＡＣのゼロラン、及びＡＣの有効係数）とＤＣ値とが入力された場合には、入力されたＤＣ値をそのまま適用し、ＡＣのゼロランを展開して無効係数（ゼロ係数）を生成し、ＡＣの有効係数とマージする。また、変換係数伸長部５５０は、後続ブロックのシンボル（ＤＣ差分値、ＡＣのゼロラン、及びＡＣの有効係数）が入力された場合には、入力されたＤＣ差分値に直前ブロックのＤＣ値を加算してＤＣ値を生成し、ＡＣのゼロランを展開しＡＣの有効係数とマージする。
【００２６】
ブロック内回転部５６０は、所望の回転方向及び回転角度に応じて、変換係数伸長部５５０から入力された変換係数の配置及び正負符号の少なくとも一方を変換し、変換された変換係数をＤＣ差分算出部５７０に出力する。このように、９０度又は１８０度の回転処理は、逆ＤＣＴ処理を行わなくても実施可能である。
【００２７】
ＤＣ差分算出部５７０は、ブロック内回転部５６０から入力された変換係数のうち、ＤＣ値に基づいて、回転された画像における直前ブロックのＤＣ値と注目ブロックのＤＣ値との差分を算出する。
本例のＤＣ差分算出部５７０は、画像を１８０度回転する場合（図２（Ｃ）の場合）に、１ブロックライン分の変換係数をバッファリングし、１ブロックライン分が貯まったら、バッファリングされた順序とは逆の順序で、各ブロックの変換係数を配列し、配列されたブロック群（すなわち、回転後の画像のブロック群）における直前ブロックのＤＣ値を、注目ブロックのＤＣ値から減算して、注目ブロックのＤＣ差分値を生成する。なお、本例のＤＣ差分算出部５７０は、画像を９０度回転する場合に、１ブロック分の変換係数をバッファリングして、注目ブロックのＤＣ差分値を算出する。
【００２８】
ハフマン符号化部５８０は、ＤＣ差分算出部５７０から入力された変換係数（ＤＣ差分値及びＡＣ値）を符号化する。
本例のハフマン符号化部５８０は、ＤＣ差分算出部５７０から入力された変換係数をブロック単位でハフマン符号化し、生成された符号を再配置部５９０に出力する。
【００２９】
再配置部５９０は、ハフマン符号化部５８０により符号化された符号を、回転方法及び回転角度に応じて再配置する。
本例の再配置部５９０は、ハフマン符号化部５８０により符号化された各ブロックの符号をバッファリングし、画像を左に９０度回転する場合には、図２（Ｂ）に例示するように、バッファリングされた順序とは逆の順序で、各ブロックラインを出力する。
【００３０】
［全体動作］
次に、画像処理装置２の動作を説明する。
図５は、画像処理プログラム５によるアクセス情報登録処理（Ｓ１０）を示すフローチャートである。
図５に示すように、ステップ１００（Ｓ１００）において、ブロック切出し部５００は、入力された原符号のビット列の中から、走査順に注目ビット位置を設定し、設定された注目ビット位置から符号語を検索し切り出す。
また、ブロック切出し部５００は、設定された注目ビット位置を情報保持部５２０に出力する。
【００３１】
ステップ１１０（Ｓ１１０）において、ブロック切出し部５００は、切り出された符号語がＤＣ成分であるかＡＣ成分であるかを判断する。具体的には、ブロック切出し部５００は、これまでに切り出された符号語に対応するシンボル数（ＤＣ値及びＡＣ値の個数）に基づいて、ＤＣ成分であるかＡＣ成分であるかを判断する。
画像処理プログラム５は、切り出された符号語がＤＣ成分である場合に、Ｓ１２０の処理に移行し、切り出された符号語がＡＣ成分である場合に、Ｓ１３０の処理に移行する。
【００３２】
ステップ１２０（Ｓ１２０）において、ブロック切出し部５００は、切り出された符号語を復号化し、復号化されたＤＣ成分（ＤＣ差分値）をＤＣ伸長部５１０に出力し、この符号語のビット数だけ注目ビット位置を進める。
また、ブロック切出し部５００は、シンボル数のカウント値を１つ加算する。
ＤＣ伸長部５１０は、ブロック切出し部５００から入力されたＤＣ差分値と、直前ブロックのＤＣ値とを合算して、このブロックのＤＣ値を算出し、算出されたＤＣ値を情報保持部５２０に出力する。
【００３３】
ステップ１３０（Ｓ１３０）において、ブロック切出し部５００は、切り出された符号語から、符号語に対応するＡＣ値の個数を判定し、判定されたＡＣ値の個数をシンボル数のカウント値に加算する。
また、ブロック切出し部５００は、切り出された符号語のビット数だけ注目ビット位置を進めて、Ｓ１８０の処理に移行する。
【００３４】
ステップ１４０（Ｓ１４０）において、情報保持部５２０は、ブロック切出し部５００から入力された注目ビット位置が先頭ブロックのビット位置であるか否かを判断する。例えば、情報保持部５２０は、ＤＣ伸長部５２０から入力されたＤＣ値の個数をカウント値、このカウント値に基づいて、先頭ブロックのＤＣ値であるか後続ブロックのＤＣ値であるかを判断する。
画像処理プログラム５は、注目ビット位置が先頭ブロックである場合に、Ｓ１５０の処理に移行し、注目ビット位置が後続ブロックである場合に、Ｓ１６０の処理に移行する。
【００３５】
ステップ１５０（Ｓ１５０）において、情報保持部５２０は、ブロック切出し部５００から入力された注目ビット位置を先頭ブロックのビット位置として先頭情報格納部５３０に格納し、ＤＣ伸長部５１０から入力されたＤＣ値を先頭ブロックのＤＣ値として先頭情報格納部５３０に格納する。
【００３６】
ステップ１６０（Ｓ１６０）において、情報保持部５２０は、ブロック切出し部５００から入力された注目ビット位置、及び、ＤＣ伸長部５１０から入力されたＤＣ値を先頭情報格納部５３０に格納することなく削除する。
【００３７】
ステップ１７０（Ｓ１７０）において、画像処理プログラム５は、入力された原符号のビット列全体が処理されたか否かを判断し、未処理のビット列が存在する場合には、Ｓ１００の処理に戻って、次の符号語に対する処理に移行し、全ビット列が処理された場合には、アクセス情報登録処理（Ｓ１０）を終了する。
アクセス情報登録処理（Ｓ１０）が終了すると、後述する回転処理（９０度回転処理（Ｓ２０）又は１８０度回転処理（Ｓ２２））に移行する。
【００３８】
図６は、画像処理プログラム５による９０度回転処理（Ｓ２０）を示すフローチャートである。
図６に示すように、ステップ２００（Ｓ２００）において、画像処理プログラム５は、画像を右に９０度回転又は左に９０度回転させるよう指示されると、９０度回転処理を開始する。
符号シーク部５４０は、要求された回転角度及び回転方向に対応するスキャン順序を決定する。具体的には、符号シーク部５４０は、右に９０度回転させるよう要求された場合に、図１（Ｂ）に例示するように、原画像における先頭ブロックの紙面の下方から上方に走査（すなわち、原画像の副走査方向下流から上流に走査）し、先頭ブロックの上端ブロックまでくると、次の副走査ライン（主走査方向右側のブロックライン）のブロック群を先頭ブロックとして紙面の下方から上方に走査するよう決定する。また、符号シーク部５４０は、左に９０度回転させるよう要求された場合に、図２（Ａ）に例示するように、原画像における先頭ブロックの紙面の上方から下方に走査（すなわち、原画像の副走査方向上流から下流に走査）し、先頭ブロックの下端ブロックまでくると、次の副走査ライン（主走査方向右側のブロックライン）のブロック群を先頭ブロックとして紙面の上方から下方に走査するよう決定する。
そして、符号シーク部５４０は、先頭情報格納部５３０に格納されている先頭情報のビット位置（又は直前ブロック処理後のビット位置）を用いて、決定されたスキャン順序に対応するブロック（注目ブロック）に直接アクセスし、この注目ブロックの符号をシンボル（ＤＣ差分値、ＡＣのゼロラン及びＡＣの有効係数）に変換し、変換されたシンボルを変換係数伸長部５５０に出力する。
また、符号シーク部５４０は、注目ブロックが本来的な先頭ブロックである場合には、先頭情報格納部５３０からＤＣ値を読み出して変換係数伸長部５５０に出力する。
【００３９】
ステップ２１０（Ｓ２１０）において、変換係数伸長部５５０は、符号シーク部５４０から入力された注目ブロックのシンボルを、ＤＣ値及びＡＣ値に変換し、変換されたＤＣ値及びＡＣ値をブロック内回転部５６０に出力する。
【００４０】
ステップ２２０（Ｓ２２０）において、ブロック内回転部５６０は、要求された回転角度及び回転方向に応じて、変換係数伸長部５５０から入力された注目ブロックのＤＣ値及びＡＣ値の配置及び正負符号を変換し、変換されたＤＣ値及びＡＣ値をＤＣ差分算出部５７０に出力する。
【００４１】
ステップ２３０（Ｓ２３０）において、ＤＣ差分算出部５７０は、直前ブロックのＤＣ値と、注目ブロックのＤＣ値との差分（ＤＣ差分値）を算出し、算出されたＤＣ差分値と、入力されたＡＣ値とをハフマン符号化部５８０に出力する。
ハフマン符号化部５８０は、ＤＣ差分算出部５７０から入力されたＤＣ差分値及びＡＣ値を再符号化し、生成された注目ブロックの符号を再配置部５９０に出力する。
【００４２】
ステップ２４０（Ｓ２４０）において、再配置部５９０は、ハフマン符号化部５８０から入力された注目ブロックの符号をバッファリングする。
ステップ２５０（Ｓ２５０）において、画像処理プログラム５は、全ブロックが処理された場合に、Ｓ２６０の処理に移行し、未処理のブロックが存在する場合に、Ｓ２００の処理に戻る。
【００４３】
ステップ２６０（Ｓ２６０）において、画像処理プログラム５は、左に９０度回転させるよう要求されている場合に、Ｓ２７０の処理に移行し、右に９０度回転させるよう要求されている場合に、再配置部５９０にバッファリングされている符号をそのまま回転符号（回転された画像の符号データ）として外部に出力する。
【００４４】
ステップ２７０（Ｓ２７０）において、再配置部５９０は、バッファリングされている符号を、図２（Ｂ）に例示するように、主走査方向のブロックライン単位で、処理順とは逆の順序で外部に出力する。これにより、ブロックラインの順序が入れ替えられる。
【００４５】
図７は、画像処理プログラム５による１８０度回転処理（Ｓ２２）を示すフローチャートである。なお、本図に示された処理のうち、図６に示された処理と実質的に同一のものには同一の符号が付されている。
図７に示すように、Ｓ２００において、画像処理プログラム５は、画像を１８０度回転させるよう指示されると、１８０度回転処理を開始する。
符号シーク部５４０は、要求された回転角度及び回転方向に対応するスキャン順序を決定する。具体的には、符号シーク部５４０は、１８０度回転させるよう要求された場合に、図２（Ｃ）に例示するように、原画像における最下ブロックライン（主走査方向のブロックラインのうち、副走査方向最下流のブロックライン）を主走査方向に走査し、主走査方向最下流のブロックまでくると、副走査方向上流のブロックライン（紙面で１つ上のブロックライン）を走査するよう決定する。
そして、符号シーク部５４０は、先頭情報格納部５３０に格納されている先頭情報のビット位置（又は直前ブロック処理後のビット位置）を用いて、決定されたスキャン順序に対応するブロック（注目ブロック）に直接アクセスし、この注目ブロックの符号をシンボルに変換し、変換されたシンボルを変換係数伸長部５５０に出力する。
また、符号シーク部５４０は、注目ブロックが本来的な先頭ブロックである場合には、先頭情報格納部５３０からＤＣ値を読み出して変換係数伸長部５５０に出力する。
【００４６】
Ｓ２１０において、変換係数伸長部５５０は、符号シーク部５４０から入力された注目ブロックのシンボルを、ＤＣ値及びＡＣ値に変換し、変換されたＤＣ値及びＡＣ値をブロック内回転部５６０に出力する。
Ｓ２２０において、ブロック内回転部５６０は、要求された回転角度及び回転方向に応じて、変換係数伸長部５５０から入力された注目ブロックのＤＣ値及びＡＣ値の配置及び正負符号を変換し、変換されたＤＣ値及びＡＣ値をＤＣ差分算出部５７０に出力する。
【００４７】
ステップ２２４（Ｓ２２４）において、ＤＣ差分算出部５７０は、ブロック内回転部５６０から入力された注目ブロックのＤＣ値及びＡＣ値を先入れ後出し方式でバッファリングする。これにより、主走査方向のブロックラインに含まれるブロック群の順序が入れ替えられる。
【００４８】
ステップ２２８（Ｓ２２８）において、画像処理プログラム５は、主走査方向のブロックライン（図２（Ｃ））分のＤＣ値及びＡＣ値がＤＣ差分算出部５７０にバッファリングされた場合（すなわち、主走査方向のブロックラインが完成した場合）に、Ｓ２３４の処理に移行し、ブロックライン分のＤＣ値及びＡＣ値がバッファリングされていない場合に、Ｓ２００に戻って、次のブロックを処理する。
【００４９】
ステップ２３４（Ｓ２３４）において、ＤＣ差分算出部５７０は、バッファリングされている１ブロックライン分のＤＣ値及びＡＣ値を先入れ後出し方式で１ブロックずつ取り出し、取り出されたブロックのＤＣ値と、直前ブロックのＤＣ値との差分（ＤＣ差分値）を算出し、算出されたＤＣ差分値と、取り出されたブロックのＡＣ値とをハフマン符号化部５８０に出力する。
ハフマン符号化部５８０は、ＤＣ差分算出部５７０から入力されたＤＣ差分値及びＡＣ値を再符号化し、生成された注目ブロックの符号を再配置部５９０に出力する。
【００５０】
Ｓ２４０において、再配置部５９０は、ハフマン符号化部５８０から入力された注目ブロックの符号をバッファリングする。
Ｓ２５０において、画像処理プログラム５は、未処理のブロックが存在する場合に、Ｓ２００の処理に戻り、全ブロックが処理された場合に、再配置部５９０にバッファリングされている符号をそのまま回転符号として外部に出力する。
【００５１】
以上説明したように、本実施形態における画像処理装置２は、全ブロックのビット位置及びＤＣ値を保持するのではなく、先頭ブロックのビット位置及びＤＣ値のみを保持して、９０度又は１８０度に回転された画像の符号データを生成する。
これにより、ビット位置及びＤＣ値の保持に要するメモリ領域が小さくなる。
【００５２】
［変形例］
図８は、変形例における画像処理プログラム５２の機能構成を例示する図である。なお、本図に示された各構成のうち、図４に示された構成と実質的に同一のものには同一の符号が付されている。
図８に例示するように、画像処理プログラム５２は、図４の画像処理プログラム５のＤＣ差分算出部５７０を削除し、ハフマン符号化部５８０をＡＣ符号化部５８２で置換し、このＡＣ符号化部５８２の後段にＤＣ符号化部５８２を追加した構成をとる。
【００５３】
本変形例のＡＣ符号化部５８２は、ブロック内回転部５６０から入力された注目ブロックのＤＣ値及びＡＣ値のうち、ＡＣ値のみを符号化し、入力されたＤＣ値と、符号化されたＡＣ値（以下ＡＣ符号）とをＤＣ符号化部５８４に出力する。
本変形例のＤＣ符号化部５８４は、１８０度回転が要求されている場合に、ＡＣ符号化部５８２から入力されたＤＣ値及びＡＣ符号をバッファリングし、ブロックライン分のＤＣ値が貯まったところで、このブロックラインに含まれるブロック群の順序を入れ替えて、ＤＣ差分値を算出し、算出されたＤＣ差分値を符号化する。
【００５４】
このように、本変形例の画像処理プログラム５２は、１８０度回転が要求されている場合に、ＡＣ値を符号化した状態でバッファリングするため、バッファリングに要するワークメモリを減らすことができる。
なお、画像処理プログラムは、各ブロックのＡＣ値のうち、無効係数のみをランレングス方式で符号化して、バッファリングして、ブロックラインに含まれるブロック群の入替えを行ってもよい。
【図面の簡単な説明】
【００５５】
【図１】原画像を右に９０度回転させる場合のスキャン順序を説明する。
【図２】（Ａ）は、原画像を左に９０度回転させる場合のスキャン順序を説明し、（Ｂ）は、ブロックラインの再配置を説明する図であり、（Ｃ）は、原画像を１８０度回転させる場合のスキャン順序を説明する図である。
【図３】本発明にかかる画像処理方法が適応される画像処理装置２のハードウェア構成を、制御装置２１を中心に例示する図である。
【図４】制御装置２１（図３）により実行され、本発明にかかる画像処理方法を実現する画像処理プログラム５の機能構成を例示する図である。
【図５】画像処理プログラム５によるアクセス情報登録処理（Ｓ１０）を示すフローチャートである。
【図６】画像処理プログラム５による９０度回転処理（Ｓ２０）を示すフローチャートである。
【図７】画像処理プログラム５による１８０度回転処理（Ｓ２２）を示すフローチャートである。
【図８】変形例における画像処理プログラム５２の機能構成を例示する図である。
【符号の説明】
【００５６】
２・・・画像処理装置
５，５２・・・画像処理プログラム
５００・・・ブロック切出し部
５１０・・・ＤＣ伸長部
５２０・・・情報保持部
５３０・・・先頭情報格納部
５４０・・・符号シーク部
５５０・・・変換係数伸長部
５６０・・・ブロック内回転部
５７０・・・ＤＣ差分算出部
５８０・・・ハフマン符号化部
５８２・・・ＡＣ符号化部
５８４・・・ＤＣ符号化部
５９０・・・再配置部
【図１】
0004666261.tif 000002
【図２】
0004666261.tif 000003
【図３】
0004666261.tif 000004
【図４】
0004666261.tif 000005
【図５】
0004666261.tif 000006
【図６】
0004666261.tif 000007
【図７】
0004666261.tif 000008
【図８】
0004666261.tif 000009