(57)【要約】【課題】  画像の圧縮、伸張に伴い当該画像が回転される場合に、メモリ使用量を抑え、且つより高速に処理するための技術を提供することを目的とする。【解決手段】  処理対象の画像が回転される場合、処理対象の所定のブロックに対し、回転角度に応じて異なるブロックを参照することで所定の圧縮処理を実行する。そして、所定のブロックに対応する圧縮データに対し、所定のブロックに対する所定の圧縮処理で参照されたブロックを参照することで所定の伸張処理を実行する。【選択図】  図６
2020088694.tif 000002
【特許請求の範囲】
【請求項１】
処理対象の画像が分割された各ブロックに所定の圧縮処理を実行することで、前記処理対象の画像を圧縮する圧縮手段と、
前記圧縮手段により圧縮された前記処理対象の画像のうちの伸張対象部分に含まれる複数のブロックのそれぞれに対応する、前記圧縮手段による圧縮で得られた圧縮データに、所定の伸張処理と回転を実行する実行手段と、
前記実行手段による前記所定の伸張処理と前記回転が前記複数のブロックに対して実行されることで得られた前記伸張対象部分に対応する伸張画像を、所定のメモリ領域に記憶する記憶手段と、
前記記憶手段により前記所定のメモリ領域に記憶された前記伸張画像を出力する出力手段と、
前記伸張対象部分を変更する変更手段と、
を備え、
前記記憶手段による前記伸張対象部分に対応する前記伸張画像の前記所定のメモリ領域への記憶と、前記出力手段による前記所定のメモリ領域に記憶された前記伸張画像の出力が、前記変更手段による前記伸張対象部分の変更のたびに実行されることで、伸張および回転が実行された前記処理対象の画像が出力され、
前記圧縮手段は、処理対象の所定のブロックに対し、前記実行手段による回転の回転角度に応じて異なるブロックを参照することで前記所定の圧縮処理を実行し、前記実行手段は、前記所定のブロックに対応する圧縮データに対し、前記所定のブロックの圧縮において前記所定の圧縮処理で参照されたブロックを参照することで前記所定の伸張処理を実行することを特徴とする画像処理装置。
【請求項２】
前記圧縮手段に、前記伸張対象部分に含まれる複数のブロックに、前記所定の圧縮処理を所定の圧縮順序に従って順次実行させる圧縮制御手段と、
前記実行手段に、前記複数のブロックに対して前記所定の伸張処理を前記所定の圧縮順序に対応する所定の伸張順序に従って順次実行させる伸張制御手段と、
をさらに備え、
前記圧縮手段は、前記所定のブロックに対する前記所定の圧縮処理において、前記所定の圧縮順序における１つ前のブロックを参照し、前記実行手段は、前記所定のブロックに対する前記所定の伸張処理において、前記所定の圧縮順序における１つ前のブロックを参照し、
前記圧縮制御手段および前記伸張制御手段は、前記回転角度に応じて、前記所定の圧縮順序と前記所定の伸張順序を異ならせることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記圧縮制御手段は、前記変更手段により前記伸張対象部分が変更されるたびに、前記伸張対象部分に含まれる複数のブロックに、前記所定の圧縮処理を所定の圧縮順序に従って順次実行させ、
前記伸張制御手段は、前記変更手段により前記伸張対象部分が変更されるたびに、前記複数のブロックに対して前記所定の伸張処理を前記所定の伸張順序に従って順次実行させることを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記変更手段は、前記伸張対象部分の変更方法を前記回転角度に応じて異ならせることを特徴とする請求項３に記載の画像処理装置。
【請求項５】
前記変更手段は、前記処理対象の画像において前記伸張対象部分となる複数の部分の、前記伸張対象部分となる順番を前記回転角度に応じて異ならせることを特徴とする請求項４に記載の画像処理装置。
【請求項６】
前記処理対象の画像が分割された各ブロックをＪＰＥＧに従った順序で順次圧縮することで、前記画像をＪＰＥＧ圧縮するＪＰＥＧ圧縮制御手段をさらに備え、
前記圧縮制御手段は、前記圧縮手段に、前記ＪＰＥＧ圧縮制御手段によるＪＰＥＧに従った前記順序とは異なる前記所定の圧縮順序に従って、前記各ブロックに対して前記所定の圧縮処理を順次実行させることを特徴とする請求項２乃至４のいずれか１項に記載の画像処理装置。
【請求項７】
前記処理対象の画像が回転されない場合、前記ＪＰＥＧ圧縮制御手段が、前記複数のブロックをＪＰＥＧに従った順序で順次圧縮することで、前記画像をＪＰＥＧ圧縮することを特徴とする請求項６に記載の画像処理装置。
【請求項８】
前記実行手段により前記処理対象の画像に伸張と回転が行われる場合に、前記圧縮手段は、前記処理対象の所定のブロックに対し、前記回転角度に応じて異なるブロックを参照することで前記所定の圧縮処理を実行し、
前記実行手段による伸張と回転が行われない場合、前記圧縮手段は、前記処理対象の所定のブロックに対し、前記回転の回転角度に関わらず同じブロックを参照することで前記所定の圧縮処理を実行することを特徴とする請求項１乃至７のいずれか１項に記載の画像処理装置。
【請求項９】
原稿をスキャンするスキャン手段と、
前記スキャン手段によるスキャンにより得られたスキャン画像を印刷するプリント手段をさらに備え、
前記プリント手段は、前記圧縮手段により圧縮され且つ前記実行手段により伸張された前記スキャン画像を印刷することを特徴とする請求項１乃至８のいずれか１項に記載の画像処理装置。
【請求項１０】
前記スキャン画像が回転され、且つ回転された前記スキャン画像が前記プリント手段により印刷される場合に、前記圧縮手段は、前記処理対象の所定のブロックに対し、前記回転角度に応じて異なるブロックを参照して前記所定の圧縮処理を実行し、
前記スキャン画像が回転される場合であっても、前記スキャン画像が前記プリント手段により印刷されない場合、前記圧縮手段は、前記処理対象の所定のブロックに対し、前記回転の回転角度に関わらず同じブロックを参照することで前記所定の圧縮処理を実行することを特徴とする請求項９に記載の画像処理装置。
【請求項１１】
前記出力手段は、所定のメモリ領域に記憶された、前記伸張対象部分に含まれる伸張画像を前記所定のメモリ領域とは異なるメモリに書き込むことを特徴とする請求項１乃至１０のいずれか１項に記載の画像処理装置。
【請求項１２】
前記所定の圧縮処理は、１つのブロックに対応する画像データの周波数データへの変換、および、当該変換により得られた周波数データにおける当該１つのブロックの直流成分値と他のブロックの直流成分値との差分の計算を含み、
前記所定の伸張処理は、当該他のブロックの直流成分値に対する当該差分の加算、および、当該加算で得られた周波数データの画像データへの変換を含み、
前記圧縮手段は、処理対象の所定のブロックに対し、前記実行手段による回転の回転角度に応じて異なる他のブロックを参照することで前記差分を計算し、前記実行手段は、前記所定のブロックに対応する圧縮データに対し、前記他のブロックの直流成分値に前記差分を加算することで得られた周波数データを画像データに変換することを特徴とする請求項１乃至１１のいずれか１項に記載の画像処理装置。
【請求項１３】
処理対象の画像が分割された各ブロックに所定の圧縮処理を実行することで、前記処理対象の画像を圧縮する圧縮工程と、
前記圧縮工程において圧縮された前記処理対象の画像のうちの伸張対象部分に含まれる複数のブロックのそれぞれに対応する、前記圧縮工程における圧縮で得られた圧縮データに、所定の伸張処理と回転を実行する実行工程と、
前記実行工程における前記所定の伸張処理と前記回転が前記複数のブロックに対して実行されることで得られた前記伸張対象部分に対応する伸張画像を、所定のメモリ領域に記憶する記憶工程と、
前記記憶工程において前記所定のメモリ領域に記憶された前記伸張画像を出力する出力工程と、
前記伸張対象部分を変更する変更工程と、
を備え、
前記記憶工程における前記伸張対象部分に対応する前記伸張画像の前記所定のメモリ領域への記憶と、前記出力工程における前記所定のメモリ領域に記憶された前記伸張画像の出力が、前記変更工程における前記伸張対象部分の変更のたびに実行されることで、伸張および回転が実行された前記処理対象の画像が出力され、
前記圧縮工程では、処理対象の所定のブロックに対し、前記実行工程における回転の回転角度に応じて異なるブロックを参照することで前記所定の圧縮処理を実行し、前記実行工程では、前記所定のブロックに対応する圧縮データに対し、前記所定のブロックの圧縮において前記所定の圧縮処理で参照されたブロックを参照することで前記所定の伸張処理を実行することを特徴とする画像処理方法。
【請求項１４】
処理対象の画像が分割された各ブロックに所定の圧縮処理を実行し、且つ、処理対象の所定のブロックに対し、前記処理対象の画像の回転の回転角度に応じて異なるブロックを参照することで前記所定の圧縮処理を実行する圧縮手段により圧縮された前記処理対象の画像を伸張する画像処理装置であって、
前記圧縮手段により圧縮された前記処理対象の画像のうちの伸張対象部分に含まれる複数のブロックのそれぞれに対応する、前記圧縮手段による圧縮で得られた圧縮データに、所定の伸張処理と前記回転角度に応じた回転を実行する実行手段と、
前記実行手段による前記所定の伸張処理と前記回転が前記複数のブロックに対して実行されることで得られた前記伸張対象部分に対応する伸張画像を、所定のメモリ領域に記憶する記憶手段と、
前記記憶手段により前記所定のメモリ領域に記憶された前記伸張画像を出力する出力手段と、
前記伸張対象部分を変更する変更手段と、
を備え、
前記記憶手段による前記伸張対象部分に対応する前記伸張画像の前記所定のメモリ領域への記憶と、前記出力手段による前記所定のメモリ領域に記憶された前記伸張画像の出力が、前記変更手段による前記伸張対象部分の変更のたびに実行されることで、伸張および回転が実行された前記処理対象の画像が出力され、
前記実行手段は、前記所定のブロックに対応する圧縮データに対し、前記圧縮手段による前記所定の圧縮処理で参照された、前記回転角度に応じて異なるブロックを参照することで、前記所定の伸張処理を実行することを特徴とする画像処理装置。
【請求項１５】
処理対象の画像を圧縮する画像処理装置であって、
前記処理対象の画像が分割された各ブロックに所定の圧縮処理を実行することで、前記処理対象の画像を圧縮する圧縮手段を有し、
前記圧縮手段により圧縮された前記処理対象の画像のうちの伸張対象部分に含まれる複数のブロックのそれぞれに対応する、前記圧縮手段による圧縮で得られた圧縮データに、所定の伸張処理と回転が実行され、
前記所定の伸張処理と前記回転が前記複数のブロックに対して実行されることで得られた前記伸張対象部分に対応する伸張画像が、所定のメモリ領域に記憶され、
前記所定のメモリ領域に記憶された前記伸張画像が出力され、
前記伸張対象部分に対応する前記伸張画像の前記所定のメモリ領域への記憶と、前記所定のメモリ領域に記憶された前記伸張画像の出力が、前記伸張対象部分の変更のたびに実行されることで、伸張および回転が実行された前記処理対象の画像が出力され、
前記所定の伸張処理は、処理対象の所定のブロックに対応する圧縮データに対し、前記回転の回転角度に応じて異なるブロックが参照されることで実行され、
前記圧縮手段は、前記所定のブロックに対し、前記所定の伸張処理で参照される、前記回転の前記回転角度に応じて異なるブロックを参照することで、前記所定の圧縮処理を実行することを特徴とする画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回転が行われる画像の圧縮処理、伸張処理を行う画像処理装置および画像処理方法に関する。
【背景技術】
【０００２】
多値ディジタル静止画符号化方式の国際標準規格であるＪｏｉｎｔ  Ｐｈｏｔｏｇｒａｐｈｉｃ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ（以下ＪＰＥＧと称する）がある。ＪＰＥＧにおいては、カラー静止画の膨大なデータ量を効率よく圧縮・伸張するために、離散コサイン符号化、量子化およびハフマン符号化を組み合わせた符号化方式を用いて符号化アルゴリズムを規定している。
【０００３】
ところで、画像データを取り扱うに際して、入力した画像を所定の角度だけ回転させたい場合がある。例えば、ＣＤ−ＲＯＭなどの媒体から、あるいはインターネットなどを介してパーソナルコンピュータに取り込んだＪＰＥＧ画像をプリンタでプリントする場合がある。この場合に、用紙のサイズや画像のレイアウトに応じて、ＪＰＥＧ画像を９０度、１８０度、あるいは２７０度回転させた状態で出力させたいことがある。このような場合に、対象となるＪＰＥＧ画像の全体を復元し、しかる後に所定の角度だけ回転処理を施す方法が考えられる。
【０００４】
しかし、この方法によると、復元した画像の全体を一時的に保持するための大容量のメモリが必要となるばかりでなく、大容量の画像データを回転処理するために回転処理の所要時間も増大し、システムに対する負荷が大きくなるという問題が生ずる。例えば、このようなＪＰＥＧ画像の復元、保持、回転処理を印刷装置で実行することとすると、印刷装置のメモリのコストが高くなり、また処理の負荷が増大する。
【０００５】
特許文献１には、画像の一部に対する回転、復号を順次行うことが記載されている。具体的には、ＪＰＥＧ画像を９０度回転するために、画像処理回路が、画像データの左端のブロックのＡＣ成分（交流成分）のアドレスと、ＤＣ成分（直流成分）の値とを求めて解析テーブルを生成する。次に、画像処理回路が、解析テーブルに格納されているＡＣ成分のアドレスを参照し、画像データの左端のブロックに対応するデータを取得してＡＣ成分を復号するとともに、ＤＣ成分の値を復号して出力する。そして、該画像処理回路の後段に存在する回路によって並べ換え処理が施され、回転後の行データが得られることが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−３０４２４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１に示すＪＰＥＧ回転処理は、あるブロックの直流成分値を得るために、出力されないブロックについてもデコードを行う空デコード解析を行う必要がある。そのため、ページメモリを使用したＪＰＥＧデータの回転処理と比較して、解析処理に掛かる時間が必要になる。
【０００８】
上記の課題を鑑みて本発明は、回転が行われる画像の圧縮、伸張において、メモリ使用量を抑え且つより高速に処理するための技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記の課題を解決するための本発明の画像処理装置は、処理対象の画像が分割された各ブロックに所定の圧縮処理を実行することで、前記処理対象の画像を圧縮する圧縮手段と、前記圧縮手段により圧縮された前記処理対象の画像のうちの伸張対象部分に含まれる複数のブロックのそれぞれに対応する、前記圧縮手段による圧縮で得られた圧縮データに、所定の伸張処理と回転を実行する実行手段と、前記実行手段による前記所定の伸張処理と前記回転が前記複数のブロックに対して実行されることで得られた前記伸張対象部分に対応する伸張画像を、所定のメモリ領域に記憶する記憶手段と、前記記憶手段により前記所定のメモリ領域に記憶された前記伸張画像を出力する出力手段と、前記伸張対象部分を変更する変更手段と、を備え、前記記憶手段による前記伸張対象部分に対応する前記伸張画像の前記所定のメモリ領域への記憶と、前記出力手段による前記所定のメモリ領域に記憶された前記伸張画像の出力が、前記変更手段による前記伸張対象部分の変更のたびに実行されることで、伸張および回転が実行された前記処理対象の画像が出力され、前記圧縮手段は、処理対象の所定のブロックに対し、前記実行手段による回転の回転角度に応じて異なるブロックを参照することで前記所定の圧縮処理を実行し、前記実行手段は、前記所定のブロックに対応する圧縮データに対し、前記所定のブロックの圧縮において前記所定の圧縮処理で参照されたブロックを参照することで前記所定の伸張処理を実行することを特徴とする。
【発明の効果】
【００１０】
回転が行われる画像の圧縮、伸張において、メモリ使用量を抑え且つより高速に処理することができる。
【図面の簡単な説明】
【００１１】
【図１】ＪＰＥＧ圧縮処理における、ＭＣＵの処理順およびＭＣＵ内画素の処理順を示す図である。
【図２】ＪＰＥＧ伸張において９０度回転させる場合の空デコード処理の一例を示すフローチャートである。
【図３】ＪＰＥＧ画像を右９０度回転させて伸張する処理の一例を示すフローチャートである。
【図４】ＪＰＥＧ画像を右９０度回転させて伸張する動作の一例を示す図である。
【図５】画像の圧縮処理および伸張処理を行う画像処理装置を示すブロック図である。
【図６】右９０度回転が伴う画像圧縮時における処理順序の一例を示す図である。
【図７】右９０度回転が伴う画像圧縮処理の一例を示すフローチャートである。
【図８】右９０度回転が伴う画像伸張時における処理順序の一例を示す図である。
【図９】右９０度回転が伴う画像伸張処理の一例を示すフローチャートである。
【図１０】右２７０度回転が伴う画像圧縮時における処理順序の一例を示す図である。
【図１１】右２７０度回転が伴う画像伸張時における処理順序の一例を示す図である。
【図１２】右９０度回転が伴う画像圧縮時における処理順序の別の例を示す図である。
【図１３】右９０度回転が伴う画像伸張時における処理順序の別の例を示す図である。
【図１４】右９０度回転が伴う画像伸張処理の別の例を示すフローチャートである。
【図１５】第１の実施形態で説明したＭＣＵの圧縮処理の順序を示す図である。
【図１６】第２の実施形態で説明したＭＣＵの圧縮処理の順序を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について詳細に説明する。
【００１３】
［第１の実施形態］
本実施形態を説明するために、まずＪＰＥＧ圧縮処理による圧縮（ここではエンコードとも呼ぶ）により生成されたＪＰＥＧ画像データの伸張（ここではデコードとも呼ぶ）を行う処理について説明する。ＪＰＥＧ圧縮、伸張では、非圧縮画像が複数のブロック（ここではＭＣＵと呼ぶ）に分割され、各ブロックに対して圧縮、伸張が行われる。ここでＪＰＥＧ画像データ内の横１列分のＭＣＵ群を、以降、「ＭＣＵライン」と呼ぶこととする。ここで説明する伸張処理により、ＪＰＥＧデータ全体の伸張処理における各ＭＣＵラインの、ビット位置と、各色成分の直流成分値を用いて、ページメモリより少ないメモリ領域で９０度回転の伸張処理を可能とする。
【００１４】
図１は、ＪＰＥＧ圧縮処理における、ＭＣＵの処理順およびＭＣＵ内画素の処理順を示す図である。図１を用いて説明する処理が、一般的なＪＰＥＧ圧縮処理である。図１で説明する処理は、例えば図５で後述するＪＰＥＧ圧縮器５０３、圧縮制御のためのＤＭＡＣ（ダイレクト・メモリ・アクセス・コントローラ）である圧縮用ＤＭＡＣ５０４により実行される。
【００１５】
非圧縮画像データをＪＰＥＧ圧縮する際には、入力画像データが縦横１６画素などのＭＣＵの単位に分割され、図１（ａ）の太い点線で示すように、そのＭＣＵを左上から順に圧縮処理していく。具体的には、圧縮用ＤＭＡＣ５０４が、メモリ５１０に格納されている画像データの各ＭＣＵに図１（ａ）の太い点線で示す順序でアクセスする。そして、該アクセスにより順次読み込まれるＭＣＵがＪＰＥＧ圧縮器５０３に入力され、ＭＣＵごとに順次ＪＥＰＧ圧縮される。
【００１６】
ここで、このＪＰＥＧデータの１ＭＣＵの縦横画素数を図１（ｄ）のようにそれぞれｘ、ｙとし、縦横ＭＣＵ数を図１（ｃ）のようにそれぞれｍ、ｎとする。即ち、画像サイズは横ｍｘ、縦ｎｙ画素であり、１ＭＣＵラインはｍ個のＭＣＵで構成されることになる。
【００１７】
ＪＰＥＧ圧縮器５０３は、入力されたＭＣＵの圧縮データに対して、ＭＣＵ左上端の画素のアドレスをＳＡ（スタートアドレス）として、図１（ｂ）に示すように、ＭＣＵ内のラスタ順に左から１画素ずつ走査して所定の圧縮処理を行う。具体的には、ＪＰＥＧ圧縮器５０３によるＭＣＵに対するＪＰＥＧ圧縮では、各ＭＣＵに対するＤＣＴ（離散コサイン変換）により、各ＭＣＵの画像データが周波数成分のデータに変換される。その周波数成分のデータは、ＤＣ（直流）成分、ＡＣ（交流）成分に分けられる。
【００１８】
そして、あるＭＣＵについての圧縮が完了すると、右隣りのＭＣＵがＪＰＥＧ圧縮器５０３による新たな処理対象となり、該ＭＣＵ内に対して同様にＪＰＥＧ圧縮が行われる。なお、各ＭＣＵの直流成分値として、該ＭＣＵの実際の直流成分値と１つ前に圧縮されたＭＣＵの実際の直流成分値との差分が計算され、記憶される。ただし、画像の左上に配置されているＭＣＵについては、上記のような差分ではなく、実際の直流成分値が該ＭＣＵの直流成分値として記憶される。
【００１９】
１ＭＣＵラインの処理を終了すると、次のＭＣＵラインの左端のＭＣＵから、同様の処理を行う。これを１ページ終了まで続けることで、１ページ分のＪＰＥＧデータが作成される。以上が一般的なＪＰＥＧ圧縮の処理である。
【００２０】
このように圧縮されたＪＰＥＧ画像データを９０度回転させて伸張する時には、まずＪＰＥＧ画像データに含まれる左端のＭＣＵラインのビット位置と直流成分値を取得する。図２は、ＪＰＥＧ伸張において９０度回転させる場合の空デコード処理の一例を示すフローチャートである。なお、図２に示すフローチャートにおける各処理は、図５で後述する、ＪＰＥＧ伸張器５０５、伸張用ＤＭＡＣ５０６により実行される。
【００２１】
ｓ２０１で伸張用ＤＭＡＣ５０６は、ＭＣＵラインごとに同様の処理を実行させるためのループカウンタｉを、ｉ＝０として初期化する。
【００２２】
ｓ２０２で伸張用ＤＭＡＣ５０６は、変数ａｄｄｒ［ｉ］を変数ａｄｄｒ［０］＝０として初期化し、変数ｄｃ［ｉ］［ｋ］（ｋ＝０，１，２）について、ｄｃ［０］［ｋ］を取得する。ここで、ａｄｄｒ［ｉ］は、ＪＰＥＧデータの第ｉＭＣＵラインにおける処理対象のＭＣＵのうち最初に処理されるＭＣＵの開始ビット位置を示す変数である。図２においては、ａｄｄｒ［ｉ］は、最初に処理されるＭＣＵライン（右９０度回転時では左端の縦ＭＣＵライン）のそれぞれのＭＣＵの、バンドメモリにおける書込み開始ビット位置を示す変数である。変数ｄｃ［ｉ］［ｋ］は、最初に処理されるＭＣＵライン（右９０度回転時では左端の縦ＭＣＵライン）のそれぞれのＭＣＵの、実際の直流成分値を示す。ｋ＝０，１，２はそれぞれ、Ｙ成分、Ｃｂ成分、Ｃｒ成分を指す。
【００２３】
図２における処理は、ＪＰＥＧデータの左端の縦のＭＣＵラインに実行される。そのため、ｓ２０１では、ＪＰＥＧデータの左上のＭＣＵの実際の直流成分値であるｄｃ［０］［ｋ］が取得される。ここで、画像の左端の縦のＭＣＵラインにおける、上から２番目のＭＣＵの実際の直流成分値ｄｃ［１］［ｋ］は、ｓ２０１で取得されたｄｃ［０］［ｋ］から求めることができる。具体的には、ｓ２０２で取得されたｄｃ［０］［ｋ］に対して、画像の最上のＭＣＵライン（第０ＭＣＵライン）における直流成分値（左隣のＭＣＵに対する実際の直流成分値の差分）を順次加算することで求めることができる。なお、このとき、画像の最上のＭＣＵライン（第０ＭＣＵライン）における左端のＭＣＵ以外の実際の直流成分値は、一時的にＪＰＥＧ伸張器５０５に記憶されるが、順次上書きされる。このように、あるＭＣＵについて実際の直流成分値を求めるために、他のＭＣＵの実際の直流成分値を求め、一時的に記憶することを、空（から）デコードと呼ぶ。空デコードでは、周波数成分データの画像データへの変換や画像出力は不要である。そのため、空デコードでは、逆ＤＣＴ処理は行われず、ハフマン符号解析のみ行われればよい。
【００２４】
ｓ２０３で伸張用ＤＭＡＣ５０６は、例えばメモリ５１０に記憶されているＪＰＥＧデータにアクセスして入力し、ＪＰＥＧ伸張器５０５は、入力されたＪＰＥＧデータを、１ＭＣＵライン分空デコードする。後述するように、ｓ２０３の処理は、各ＭＣＵラインについて繰り返し実行される。そのため、「ｉ＝０」としてｓ２０３が最初に実行されるときは、画像の最上のＭＣＵラインについて空デコードが実行される。
【００２５】
ｓ２０３においてＭＣＵ１ラインに対する空デコードが終了すると、ｓ２０４において伸張用ＤＭＡＣ５０６は、ループカウンタｉをインクリメントする。
【００２６】
ｓ２０５で伸張用ＤＭＡＣ５０６は、画像左端であり且つ第ｉＭＣＵラインのＭＣＵについて、ｓ２０３での空デコード処理の結果として得られたビット位置ａｄｄｒ［ｉ］と、直流成分値ｄｃ［ｉ］［ｋ］を取得して保存しておく。ｓ２０５が初めて実行されるときは、画像の左端でかつ上から２番目のＭＣＵについて、ビット位置ａｄｄｒ［ｉ］と、直流成分値ｄｃ［ｉ］［ｋ］が取得される。このように保存されたビット位置ａｄｄｒ［ｉ］と、直流成分値ｄｃ［ｉ］［ｋ］は、図３を用いて後述するように、左端以外のＭＣＵの実際の直流成分値を求める際に使用される。
【００２７】
ｓ２０６でＪＰＥＧ伸張器５０５は、入力ＪＰＥＧデータの全ＭＣＵラインについて、左端のＭＣＵのための空デコードが終了したかを判定する。ｓ２０６における判定結果がＹＥＳなら図２に示す処理が終了し、ＮＯならｓ２０３へ処理が戻る。
【００２８】
以上のフローにより、入力ＪＰＥＧデータの各ＭＣＵラインについて左端のＭＣＵのビット位置と直流成分値を取得できる。
【００２９】
次に、ＪＰＥＧ画像を右９０度回転させて伸張するための処理について説明する。図３は、ＪＰＥＧ画像を右９０度回転させて伸張する処理の一例を示すフローチャートである。なお、図３の処理の前に、図２に示した処理が実行される。また図３に示す処理も、ＪＰＥＧ伸張器５０５、伸張用ＤＭＡＣ５０６により実行される。
【００３０】
また図４は、ＪＰＥＧ画像を右９０度回転させて伸張する動作の一例を示す図である。ここでは、図４（ａ）に示す画像がＪＰＥＧ圧縮され、そのＪＰＥＧ圧縮された画像が図２、図３に示す伸張処理により図４（ｅ）に示す画像のように、９０度回転が実行されるものとする。
【００３１】
なお、伸張用ＤＭＡＣ５０６は、あらかじめ、ｎｙ×ｐｘ画素分（＝入力画像の縦ＭＣＵラインのｐライン分）の伸張後の画素値を非圧縮で格納できるメモリＢ（メモリ領域）を、伸張用ＤＭＡＣ５０６内に用意しておく。例えば各画素がＲＧＢの３つの色成分で表現され、各色成分が８ｂｉｔ（１バイト、０〜２５５の値）で表されるならば、メモリＢのメモリ容量は、３×ｎｙ×ｐｘバイトとなる。図４（ｅ）に示すように、ｎｙ×ｐｘ画素は、回転後の画像の縦のＭＣＵラインのｐライン分の画素に相当する。ｐは、画像全体における縦のＭＣＵライン数の上限ｍを越えることは無く、また１ページ分のメモリ領域を使用させないために、ｐ＜ｍである。また伸張用ＤＭＡＣ５０６は、図２のｓ２０５で取得された、開始ビット位置ａｄｄｒ［ｉ］および画像左端のＭＣＵの実際の直流成分値を、メモリ領域に書き込んでいる。
【００３２】
ｓ３０１で伸張用ＤＭＡＣ５０６は、カウンタｊをｊ＝０として初期化する。なお、後述する処理により、ｐライン分の縦ＭＣＵラインごとにデコード対象が変更される。カウンタｊは、デコード対象のｐライン分の縦ＭＣＵラインを示す。
【００３３】
ｓ３０２で伸張用ＤＭＡＣ５０６は、上述したメモリＢが解放されるのを待つ。
【００３４】
ｓ３０３で伸張用ＤＭＡＣ５０６は、カウンタｉをｉ＝０として初期化する。カウンタｉは、当該デコード対象の横ＭＣＵラインを示し、該横ＭＣＵラインにおける、ｐライン分の縦のＭＣＵライン分の圧縮画像が伸張される。
【００３５】
ｓ３０４で伸張用ＤＭＡＣ５０６は、図２のｓ２０５で取得されていた入力ＪＰＥＧデータのａｄｄｒ［ｉ］のビット位置および実際の直流成分値ｄｃ［ｉ］［ｋ］（ｋ＝０，１，２）を取得する。また伸張用ＤＭＡＣ５０６は、ｊ番目の出力バンドメモリに対応するｐ個分のＭＣＵにアクセスする。そしてＪＰＥＧ伸張器５０５は、直流成分値を用いて、該アクセスにより入力したＪＰＥＧデータにおける横方向の第ｉＭＣＵラインに対して、ＭＣＵのｐ個分だけ所定の伸張処理を行う。この所定の伸張処理には、逆ＤＣＴによる周波数データの画像データへの変換等が含まれる。
【００３６】
具体的には、ｓ３０４が初めて実行されるとき、図２における処理により、画像左端のＭＣＵのビット位置ａｄｄｒ［ｉ］と、直流成分値ｄｃ［ｉ］［ｋ］が、ｉ＝０〜ｎ−１のラインについて記憶されている。そこでｓ３０４で伸張用ＤＭＡＣ５０６は、ビット位置ａｄｄｒ［ｉ］により左端のＭＣＵの直流成分値ｄｃ［ｉ］［ｋ］を取得する。そして、ＪＰＥＧ伸張器５０５は、伸張用ＤＭＡＣ５０６により読み出されたｐ個分のＭＣＵのうちの左端以外のＭＣＵについて、実際の直流成分値ｄｃ［ｉ］［ｋ］を求める。具体的には、左端のＭＣＵの直流成分値ｄｃ［ｉ］［ｋ］に対してＭＣＵの直流成分値（左隣のＭＣＵに対する直流成分値の差分）が順次加算される。これにより、第ｉＭＣＵラインについて、該ｐ個のＭＣＵの直流成分値ｄｃ［ｉ］［ｋ］が求められる。ｓ３０４でＪＰＥＧ伸張器５０５はさらに、直流成分値ｄｃ［ｉ］［ｋ］と該ｐ個のＭＣＵの交流成分値とに対して逆ＤＣＴを施すことで、第ｉＭＣＵラインのｐ個分のＭＣＵの画像データ（画素値）を得ることができる。
【００３７】
ｓ３０５でＪＰＥＧ伸張器５０５は、伸張後の各ＭＣＵの画素値について、図４（ｂ）から図４（ｃ）のように各ＭＣＵを９０度回転する。また伸張用ＤＭＡＣ５０６は、画素出力順を制御して、メモリ５１０に対して、図４（ｄ）（ｅ）のようにＭＣＵが配置されるよう画素値を出力する。
【００３８】
ｓ３０６では、ｓ３０４において、第ｉＭＣＵラインのｐＭＣＵ個分伸張処理された状態にある。伸張用ＤＭＡＣ５０６は、ｓ３０４における伸張で得られた実際の直流成分値ｄｃ［ｉ］［ｋ］と、ビット開始位置ａｄｄｒ［ｉ］を記憶する。
【００３９】
ｓ３０７でＪＰＥＧ伸張器５０５は、カウンタｉをインクリメントする。
【００４０】
ｓ３０８でＪＰＥＧ伸張器５０５は、ｉ＝ｎであれば、つまり入力画像の横ＭＣＵラインの全てについてｓ３０４〜ｓ３０６の処理が終了していれば、ｓ３０９に処理を進める。ｉ＝ｎでなければ、ｓ３０４へ処理が戻る。
【００４１】
なお、ｓ３０９に処理が進むとき、当該入力された圧縮画像のｐ本の縦ＭＣＵラインに相当するバンドについて伸張、回転、メモリ５１０への出力が完了している。また、該ｐ本の縦ＭＣＵラインの右端のＭＣＵラインに関する、ビット位置ａｄｄｒ［ｉ］と、直流成分値ｄｃ［ｉ］［ｋ］がＪＰＥＧ伸張器５０５に格納されている。
【００４２】
ｓ３０９では、カウンタｊをインクリメントすることで。ｓ３０２からｓ３０８までの処理が次の出力バンドについて実行される。なお次の出力バンドについて、ｓ３０４が実行されるとき、前回ｓ３０６が実行されたときに記憶された、前の出力バンドの右端に対応するビット位置ａｄｄｒ［ｉ］と、直流成分値ｄｃ［ｉ］［ｋ］が用いられる。
【００４３】
ｓ３１０でＪＰＥＧ伸張器５０５は、ｊ≧ｍ／ｐであるか確認する。ｊ≧ｍ／ｐであれば、入力画像データの全面に対してｓ３０２〜ｓ３０９で示した回転処理が終了したことになるので図３に示す処理を終了する。ｊ≧ｍ／ｐでなければ、処理がｓ３０２へ戻って次の出力バンドの処理を行う。
【００４４】
図４（ａ）に示したような画像がＪＰＥＧ圧縮されたデータがＪＰＥＧ伸張器５０５に入力された場合、図３に示した処理により、図４（ｅ）に示したような伸張後のデータが得られる。また、メモリＢに対応するバンドごとに順次デコードが行われるため、ＪＰＥＧ伸張器５０５や伸張用ＤＭＡＣ５０６に画像全体を格納するページメモリが用意されていなくても、ＪＰＥＧデータに回転を加えてデコードすることができる。
【００４５】
しかしながら、図２、図３に示したＪＰＥＧ回転伸張処理では、図２のｓ２０３において空デコード解析を行う必要がある。そのため解析処理に多くの時間が必要になることがある。さらに、ＪＰＥＧ伸張時においては、入力画像の各ＭＣＵラインにおいて、ｐＭＣＵ個分の伸張を行うごとに、図３のｓ３０２、ｓ３０４において、その時点のビット位置と直流成分値情報を取得するための割り込み処理が必要になる。そのため、バンドメモリのためのメモリ領域のサイズによっては割り込み回数が増大し、処理速度が低下するという課題がある。
【００４６】
そこで本実施形態では、画像の圧縮と伸張のそれぞれにおける、ＭＣＵの処理順序について、図１、図４で説明した処理順序とは異なるものを適用する。これにより、空デコード解析を必要とせず、処理時間の早い伸張回転処理を実現する。さらに、本実施形態における圧縮、伸張により、圧縮時、伸張時の双方で所定の情報を取得するための割り込み処理回数を削減する。以下、詳細に説明する。
【００４７】
図５は、画像の圧縮処理および伸張処理を行う画像処理装置を示すブロック図である。なお、図５では、スキャナおよびプリンタを備え、スキャン、プリントに加えてコピーが可能な画像処理装置５００を例に説明する。
【００４８】
５０１は、画像処理装置５００の全体を制御するＣＰＵである。画像処理装置５００は、制御プログラムを記憶した不図示のＲＯＭ等のメモリを含む。ＣＰＵ５０１は、ＲＯＭ等に記憶されている制御プログラムを、例えばメモリ５１０をワークメモリとして実行することで、各種の制御を行うことができる。
【００４９】
５０２は、原稿をスキャンしてＲＧＢ多値ビットマップ画像データを得るスキャナである。スキャナ５０２で得られたビットマップ画像データは、一度メモリ５１０へ格納される。後述するように、このビットマップ画像データが、本実施形態による圧縮、回転伸張の対象となる。また画像処理装置５００は、不図示のＩＦ（インターフェース）や、メモリカード等の外部メモリを装着するためのスロットを含む。そして、そのＩＦを介して外部装置から受信した画像データもしくは外部メモリから読み出された画像データが、本実施形態による圧縮、回転伸張の対象となってもよい。画像処理装置５００が有するＩＦとしては、無線ＬＡＮ等のための無線インターフェースや、有線ＬＡＮやＵＳＢ等のための有線インターフェースが含まれる。
【００５０】
なお、ＩＦを介して外部装置から受信した画像データや、外部メモリから読み出した画像データが、図１に示すような一般的なＪＰＥＧ圧縮により圧縮されていることがある。例えば、画像処理装置５００が、このようなＪＰＥＧデータに対して、印刷を行うことがある。このとき、画像処理装置５００が、該ＪＰＥＧデータに対して、用紙サイズや印刷方向等の印刷設定に合わせて回転されるよう回転伸張することがある。このような場合には、例えばＪＰＥＧ伸張器５０５、伸張用ＤＭＡＣ５０６は、図２、図３に示した方法により、回転伸張を行う。即ち、ＪＰＥＧの規格に則して圧縮されているため、その規格を考慮した順序でＭＣＵが空デコードされることで、回転伸張が行われる。
【００５１】
５０３は、ＭＣＵ単位でＪＰＥＧ圧縮処理を行うＪＰＥＧ圧縮器であり、内部に１ＭＣＵ分の画像データを格納できるメモリを持つ。ＪＰＥＧ圧縮器５０３は、１ＭＣＵに対して上述したようなＤＣＴ変換や直流成分値の差分の計算、１ＭＣＵに対する周波数データの記憶等の処理を行う。
【００５２】
５０４は、メモリ５１０から、非圧縮画像データを読み込み、ＭＣＵ単位にＪＰＥＧ圧縮器５０３へ供給し、かつ、ＪＰＥＧ圧縮器５０３で圧縮されたＪＰＥＧデータをメモリ５１０へ出力する圧縮制御を行う圧縮用ＤＭＡＣである。
【００５３】
なお、圧縮用ＤＭＡＣ５０４は、非圧縮画像データの圧縮後に回転伸張を行うか否かに応じて、ＪＰＥＧ圧縮器５０３に圧縮を行わせるＭＣＵの順序を異ならせる。具体的には、圧縮後に回転伸張を行うことが決定されていなければ、圧縮用ＤＭＡＣ５０４はＪＰＥＧ圧縮器５０３に、図１に示したような一般的なＪＰＥＧ圧縮における順序でＭＣＵを圧縮させる。具体的には、左上のＭＣＵからＭＣＵライン右方向に向かって圧縮が行われ、該ＭＣＵラインの圧縮後、画像の縦方向において１つ下のＭＣＵラインについて、左から右に向かって圧縮が行われる。一方、圧縮後に回転伸張を行うことが決定されていれば、圧縮用ＤＭＡＣ５０４はＪＰＥＧ圧縮器５０３に、図１に示した順序と異なる、画像の回転角度に応じた順序で、ＭＣＵを圧縮させる。なお、圧縮後に回転伸張を行うか否かは、例えば圧縮対象の非圧縮画像データが印刷される場合に、その印刷における印刷設定に応じて判定される。回転角度に応じたＭＣＵの処理順序の詳細については後述する。
【００５４】
５０５は、ＭＣＵ単位でＪＰＥＧ伸張処理を行うＪＰＥＧ伸張器であり、１ＭＣＵ分の画像データを格納できる内部メモリを持つ。
【００５５】
５０６は、メモリ５１０から後述の順でＪＰＥＧ画像データを読み込み、ＪＰＥＧ伸張器５０５へ供給し、かつ、ＪＰＥＧ伸張器で伸張された結果の非圧縮画像データを、後述の順でメモリ５１０へ出力する伸張制御を行う伸張用ＤＭＡＣである。なお、伸張用ＤＭＡＣ５０６は、ＪＰＥＧ伸張器５０５により伸張、回転されたＭＣＵ内の画像データを、回転角度に応じた書き込み方法でメモリ５１０に書き込む機能を持つ。このように、圧縮用ＤＭＡＣ５０４、伸張用ＤＭＡＣ５０６はそれぞれ、ＪＰＥＧ画像への圧縮のためのＪＰＥＧ圧縮制御、ＪＰＥＧ画像の伸張のためのＪＰＥＧ伸張制御を実行する。
【００５６】
５０７は、伸張用ＤＭＡＣ５０６でメモリ５１０へ出力された非圧縮画像データに所定の画像処理を行って、プリンタ５０８で出力できる量子化データを出力する画像処理部である。
【００５７】
５０８は、画像処理部５０７から出力された量子化データに基づいて画像をプリントするプリンタである。５０９は、上記各ブロックと、メモリ５１０との間のデータ転送を行うバスである。５１０は、上記各ブロックの処理結果を格納するメモリである。
【００５８】
本実施形態では、画像の圧縮と伸張のそれぞれにおける、ＭＣＵの処理順序について、図１、図４で説明したＪＰＥＧにおける一般的な処理順序とは異なるものを適用する。具体的には、圧縮用ＤＭＡＣ５０４、伸張用ＤＭＡＣ５０６それぞれが、画像の回転角度に応じた順序でメモリ５１０からＭＣＵを読み出し、ＪＰＥＧ圧縮器５０３、ＪＰＥＧ伸張器５０５に圧縮、伸張を実行させる。
【００５９】
これにより、空デコード解析を必要とせず、処理時間の早い伸張回転処理を実現する。さらに、本実施形態における圧縮、伸張により、圧縮時、伸張時の双方で所定の情報を取得するための割り込み処理回数を削減する。さらに、ＪＰＥＧ圧縮器５０３、ＪＰＥＧ伸張器５０５は、通常のＪＰＥＧ圧縮、ＪＰＥＧ伸張と同様の処理（ＤＣＴ、逆ＤＣＴ等）を実行する。そのため、通常のＪＰＥＧ用の処理を本実施形態における圧縮、伸張にも兼用することができる。以下、詳細に説明する。
【００６０】
まず、図６と図７を用いて、本実施形態の画像圧縮時における、圧縮用ＤＭＡＣ５０４の動作を説明する。図６は、本実施形態の画像圧縮時における処理順序の一例を示す図であり、図７は、本実施形態の画像圧縮処理の一例を示すフローチャートである。圧縮用ＤＭＡＣ５０４は、スキャナ５０２からラスタ順にメモリ５１０へ入力される非圧縮画像データに対して、ＭＣＵ単位に画素値を読み込む。そして、圧縮用ＤＭＡＣ５０４は、読み込まれた画素値をＪＰＥＧ圧縮器５０３へ供給し、かつ、画素値を供給したＭＣＵ順にＪＰＥＧ圧縮器で圧縮されたＪＰＥＧデータを、メモリ５１０内に連続的に出力する。
【００６１】
なお、スキャナ５０２により原稿がスキャンされることで得られる非圧縮画像データにおいては、ＲＧＢそれぞれの画素値として８ｂｉｔのデータが割り当てられている。メモリ５１０には、このＲＧＢ画素値がスタートアドレスＳＡから順次並んでいるデータが格納される。図６に示すように、入力画像の１ＭＣＵの横幅をｘ画素、縦幅をｙライン（ｙ画素）とし、入力画像は横ｍ個×縦ｎ個のＭＣＵで構成されるものとする。このとき、入力画像のサイズは横ｍｘ×縦ｎｙ画素となる。この場合、各画素の画素値のバイト数は、ＲＧＢそれぞれについて８ｂｉｔ（１バイト）割り当てられているため３バイトとなり、ＭＣＵの横幅のバイト数は３ｘバイトとなる。
【００６２】
圧縮用ＤＭＡＣ５０４は、右９０度回転の伸張出力時には、図７に示すフローに従って、ＭＣＵ単位で非圧縮画像をメモリ５１０から読み出してＪＰＥＧ圧縮器５０３に供給する。
【００６３】
ｓ７０１で圧縮用ＤＭＡＣ５０４は、入力画像がｑ本の横ＭＣＵライン（＝ｑｙライン）分以上、メモリ５１０に読み込まれたときに処理を開始する。なお、このときメモリ５１０における現在の読み込み位置を示すカレントアドレスとして、そのｑＭＣＵライン分の左上画素のアドレスをカレントアドレスＣＡ＝ＳＡ＿ａを初期値として処理が開始される。また、このとき圧縮用ＤＭＡＣ５０４は、ＪＰＥＧ圧縮器５０３を初期化する。ｓ７０２で圧縮用ＤＭＡＣ５０４は、カレントアドレスＣＡから、連続した３ｘバイトを読み出す。さらに、圧縮用ＤＭＡＣ５０４は、読み出された３ｘバイトの情報をＪＰＥＧ圧縮器５０３に入力する。また圧縮用ＤＭＡＣ５０４は、ＣＡに、読み出された分のバイト数（３ｘバイト）を随時加算する。
【００６４】
ｓ７０３で圧縮用ＤＭＡＣ５０４は、その時点のカレントアドレスＣＡにオフセットとして値ｏｆｆ１を加算する。ここではｏｆｆ１＝３（ｍ−１）ｘである。図６に示すように、ｏｆｆ１の加算により、カレントアドレスＣＡが同ＭＣＵ内の次のラインの左端に移動する。
【００６５】
ｓ７０４で圧縮用ＤＭＡＣ５０４は、ｓ７０２とｓ７０３をｙ−１回繰り返す。この計ｙ回の処理で、１ＭＣＵ分の入力画像データが、ＪＰＥＧ圧縮器５０３に供給される。ＪＰＥＧ圧縮器５０３は、入力された１ＭＣＵの画像データに対してＪＰＥＧ圧縮処理を行う。具体的には、ＪＰＥＧ圧縮器５０３は、通常のＪＰＥＧ圧縮と同様に、画像データにＤＣＴを施すことで周波数データに変換し、直流成分については、前回圧縮したＭＣＵの直流成分の差分値を求める。そして、その差分値と交流成分が現在圧縮対象のＭＣＵのデータとしてＪＰＥＧ圧縮器５０３に記憶される。ただし、スタートアドレスＳＡに対応するＭＣＵについては、直流成分として差分ではなく実際の直流成分値が記憶される。ｓ７０４において圧縮用ＤＭＡＣ５０４はさらに、ＪＰＥＧ圧縮器５０３に記憶されているＭＣＵの圧縮データを、メモリ５１０に書き込む。ただし、このときの書き込み位置は、当該圧縮されている画像の非圧縮データとは異なる書き込み位置である。なお、この時点でカレントアドレスＣＡはＭＣＵの右下端画素の次の画素のアドレスとなっている。
【００６６】
ｓ７０５で圧縮用ＤＭＡＣ５０４は、カレントアドレスＣＡに値ｏｆｆ２を加算する。ただしｏｆｆ２＝３（ｍ−１）ｘである。ｏｆｆ２の加算により、カレントアドレスＣＡは図６に示すように下のＭＣＵ左上端へ移動する。即ち、圧縮されたＭＣＵの下のＭＣＵが新たな読み込み対象となる。
【００６７】
ｓ７０６で圧縮用ＤＭＡＣ５０４は、ｓ７０２〜ｓ７０５の処理をｑ−１回繰り返す。これら計ｑ回の処理により、縦ＭＣＵラインにおけるｑ個のＭＣＵについて、圧縮が完了する。
【００６８】
ｓ７０７で圧縮用ＤＭＡＣ５０４は、カレントアドレスＣＡに値ｏｆｆ３を加算する。ｏｆｆ３の加算により、カレントアドレスＣＡは図６に示すように、当該圧縮対象となったＭＣＵの右隣りの縦ＭＣＵラインにおける、ｑ個上のＭＣＵの左上端のアドレスへ移動する。
【００６９】
ｓ７０８で圧縮用ＤＭＡＣ５０４は、ｓ７０２〜ｓ７０７の処理をｍ−１回繰り返す。この計ｍ回の処理により、入力画像のｑ本の横ＭＣＵライン分のデータが、ＪＰＥＧ圧縮器５０３により圧縮され、その圧縮画像がメモリ５１０に格納される。ｓ７０８の処理が終了すると（つまりｓ７０２〜ｓ７０７の処理がｑ回繰り返されると）、ＪＰＥＧ圧縮器５０３の処理をいったん終了する。
【００７０】
なお、ｓ７０８の処理が完了した時点で、横ｍｘ画素×縦ｑｙ画素の圧縮処理が完了している。そのため、ｓ７０８の終了時に、ここまでに圧縮したｑ本のＭＣＵライン分の非圧縮画像が格納されているメモリ５１０内のメモリ領域が解放されてよい。
【００７１】
またｓ７０８の処理が完了すると、圧縮用ＤＭＡＣ５０４は、次のｑ本のＭＣＵライン分の非圧縮画像をメモリ５１０から読み出す。この非圧縮画像がメモリ５１０にない場合、圧縮用ＤＭＡＣ５０４は、該非圧縮画像がメモリ５１０に格納されるまで待機する。
【００７２】
なお、ｓ７０５〜ｓ７０７における処理により、縦方向にｑ個分のＭＣＵに対して圧縮処理が順次実行され、続けて右隣の縦のＭＣＵが同様に圧縮される。このような順番で行う処理を以下「縦ＭＣＵ順」と呼ぶこととする。
【００７３】
ｓ７０９で圧縮用ＤＭＡＣ５０４は、ｓ７０１〜ｓ７０８の処理をページ終了まで繰り返す。つまり、ｑ本のＭＣＵライン分の部分画像である圧縮対象画像が、入力画像において順次変更され、その圧縮対象画像の中では、縦ＭＣＵ順でＭＣＵが順次圧縮される。ただし、ｓ７０１で圧縮用ＤＭＡＣ５０４は、ＪＰＥＧ圧縮器を初期化し、かつ、そのｑＭＣＵライン分の左上端画素のアドレスをカレントアドレスＣＡ＝ＳＡ＿ｂとして処理を行う。なお、入力されている当該圧縮対象画像が、前の１ＭＣＵライン分の非圧縮画像と連続したメモリ領域にある場合はＳＡ＿ｂ＝ＣＡとなる。一方、当該圧縮対象画像が新たなメモリ領域に格納された場合は、ＳＡ＿ｂ＝「そのメモリ領域の開始アドレス」となる。
【００７４】
また、Ｓ７０８の処理が完了した時点で、直流成分値の差分計算は中断され、リフレッシュされる。即ち、例えば図６のＣＡ初期値＝ＳＡ＿ｂに対応するＭＣＵについては、差分ではなく実際の直流成分値が記憶される。
【００７５】
上記のｓ７０１〜ｓ７０８に示した処理がページ終了まで繰り返されると、入力画像全体がＪＰＥＧ圧縮器５０３へ入力され、計ｎ／ｑ個の圧縮データがメモリ５１０に格納される。ただし、これらの圧縮データは、圧縮されたＭＣＵの順序が図１とは異なる。即ち、通常のＪＰＥＧ圧縮とは異なる順序でＭＣＵが圧縮されているため、通常のＪＰＥＧ伸張器では正しく伸張することができない。そのため、後述する伸張処理により、図６で示したＭＣＵが圧縮された順序と同じ順序で、各ＭＣＵに対して回転伸張処理が行われる。
【００７６】
次に、図６、図７に示した処理によって生成された圧縮データを伸張する際の、ＪＰＥＧ伸張器５０５と伸張用ＤＭＡＣ５０６の動作を、図８、図９を用いて説明する。図８は、右９０度回転が伴う画像伸張時における処理順序の一例を示す図であり、図９は、右９０度回転が伴う画像伸張処理の一例を示すフローチャートである。
【００７７】
伸張用ＤＭＡＣ５０６は、メモリ５１０内の圧縮データを指定アドレスから連続的にＪＰＥＧ伸張器５０５へ供給する。ＪＰＥＧ伸張器５０５は、ＭＣＵ１個分の伸張画像データを格納および回転できる内部メモリを持つ。そしてＪＰＥＧ伸張器５０５は、伸張用ＤＭＡＣ５０６を介して供給された１ＭＣＵの圧縮データに対して伸張処理を行い、伸張された画像データをこの内部メモリに格納する。
【００７８】
そしてＪＰＥＧ伸張器５０５は、伸張処理が行われ、ＪＰＥＧ圧縮器５０３に格納されている画像データを９０度回転し、それをＭＣＵ内のラスタ順に伸張用ＤＭＡＣ５０６へ出力する。伸張用ＤＭＡＣ５０６は、ＭＣＵ単位に出力された非圧縮画像データを、メモリ５１０へ出力する。
【００７９】
ＪＰＥＧ伸張器５０５は、図８（ａ）のように、内部メモリに伸張結果の非圧縮画像を１ＭＣＵずつ出力し、図８（ｂ）のように内部メモリ上で回転を行う。そしてＪＰＥＧ伸張器５０５は、回転された画像を、図８（ｃ）のように回転後のＭＣＵ内のラスタ順に伸張用ＤＭＡＣ５０６へ出力する。なお、図８（ａ）における伸長処理のため伸張用ＤＭＡＣ５０６は、図６に示したＭＣＵの圧縮順と同じ順序で、圧縮されたＭＣＵをＪＰＥＧ伸張器５０５に入力する。これにより、ＪＰＥＧ伸張器５０５は、伸張対象のＭＣＵに含まれる直流成分値の差分を、該差分が求められた他のＭＣＵの直流成分値に対して加算することができる。
【００８０】
図８（ａ）に示すように伸張され、図８（ｂ）に示すように回転された画像データは、伸張用ＤＭＡＣ５０６により、回転伸張された画像がメモリ５１０に格納される。図９は、伸張用ＤＭＡＣ５０６が回転された画像をメモリに書き込む処理を示すフローチャートである。
【００８１】
ｓ９００において、伸張用ＤＭＡＣ５０６は、ｓ３０２で示した処理と同様に、３ｎｙ×ｐｘバイト（ただしｐはｍより小さい整数）のサイズの出力バンドメモリＢを伸張用ＤＭＡＣ５０６内に確保し、その先頭アドレスをＳＡとする。該出力バンドメモリＢは、伸張される画像の単位サイズに相当するメモリ領域である。該単位サイズの横幅は、図８（ｄ）に示す９０度回転後の画像の横幅に対応するｎ×ｙ画素（横に並んだｎ個のＭＣＵに相当）であり、該単位サイズの縦の高さは、ｐ×ｘ画素（縦に並んだｐ個のＭＣＵに相当）である。この出力バンドメモリＢとして確保されるメモリサイズは、図４で示した伸張処理におけるメモリＢのサイズと同じである。また、ｓ９００において伸張用ＤＭＡＣ５０６は、出力バンドメモリにおける現在の書き込み開始位置を示すカレントアドレスＣＡに、初期値を設定する。具体的には、図８（ｄ）に示す画像左上のＳＡ（スタートアドレス）から右方向に（ｎ−１）×ｙ画素分移動した位置に相当するアドレスであるＳＡ＋３（ｎ−１）ｙがＣＡの初期値として設定される。
【００８２】
ｓ９０１において、伸張用ＤＭＡＣ５０６は、図３のｓ３０４、ｓ３０５と同様に、伸張対象のＭＣＵをＪＰＥＧ伸張器５０５に入力し、図８（ａ）、図８（ｂ）に示したように、伸張、回転させる。ＪＰＥＧ伸張器５０５によるこの伸張、回転は、図３、図４で示した処理と同様であり、図４における伸張回転処理のための機能を兼用することができる。また、伸張用ＤＭＡＣ５０６は、ＪＰＥＧ伸張器５０５に入力する伸張対象のＭＣＵの順序として、図６で示した圧縮順に従った順序で、ＭＣＵをＪＰＥＧ伸張器５０５に入力する。そのため、ＪＰＥＧ伸張器５０５は、各ＭＣＵの直流成分を適切に伸張することができる。
【００８３】
ｓ９０２において伸張用ＤＭＡＣ５０６は、ＪＰＥＧ伸張器からＭＣＵ内ラスタ順に出力される各画素値を、出力バンドメモリへ、カレントアドレスＣＡから、連続した３ｙバイト分書き込む。なお、ここでの３ｙバイト分の書き込みは、図８（ｄ）における１ＭＣＵの横方向のｙ画素分のデータを書き込むことに相当する。また、カレントアドレスＣＡには書き込んだ分のバイト数が随時加算される。
【００８４】
ｓ９０３で伸張用ＤＭＡＣ５０６は、その時点のカレントアドレスＣＡに値ｏｆｆ１を加算する。ｏｆｆ１は、３（ｎ−１）ｙである。図８（ｄ）に示すように、ｏｆｆ１の加算により、カレントアドレスＣＡが同ＭＣＵ内の次のラインの左端に移動する。ｓ９０４で伸張用ＤＭＡＣ５０６は、ｓ９０２とｓ９０３をｘ−１回繰り返す。この計ｘ回の処理で、１ＭＣＵ分の出力非圧縮画像データが、伸張用ＤＭＡＣ５０６内の出力バンドメモリに書き出される。この時点でカレントアドレスＣＡはＭＣＵの右下端画素の次の画素のアドレスとなる。
【００８５】
ｓ９０５で伸張用ＤＭＡＣ５０６は、カレントアドレスＣＡに値ｏｆｆ２を加算する。ｏｆｆ２は、−３ｙ（（ｘ−１）ｑ＋２）である。カレントアドレスＣＡは図８（ｄ）に示すように、回転後の出力画像における左隣のＭＣＵの左上端へ移動する。
【００８６】
ｓ９０６で伸張用ＤＭＡＣ５０６は、ｓ９０２〜ｓ９０５の処理をｑ−１回繰り返す。ｓ９０６における処理により、図６に示す画像において縦にｑ個並んだＭＣＵのそれぞれについて、９０度回転が行われ、さらにその回転後のｑ個のＭＣＵが、図８（ｄ）に示す画像において右からｑ個のＭＣＵとして配置される。
【００８７】
ｓ９０７で伸張用ＤＭＡＣ５０６は、カレントアドレスＣＡに値ｏｆｆ３を加算する。ｏｆｆ３は、３ｙ（ｎ＋ｑ−２）である。ｏｆｆ３の加算によりカレントアドレスＣＡは、図８（ｄ）に示す画像において、最後にメモリ５１０にデータが書き込まれたＭＣＵのｑ−１個右であり、且つ１ＭＣＵライン下のＭＣＵにおける、左上の画素に移動する。
【００８８】
ｓ９０８で伸張用ＤＭＡＣ５０６は、ｓ９０２〜ｓ９０７の処理をｐ−１回繰り返す。この計ｐ回の処理で、図６に示したデータにおける、横ｐ、縦ｑ個分のＭＣＵそれぞれのデータがＪＰＥＧ伸張器５０５により伸張され且つ９０度回転される。そして、伸張、回転された画像が、伸張用ＤＭＡＣ５０６の内部の出力バンドメモリに書き込まれる。図８（ｄ）に示すように、その書込みでは、横ｑ、縦ｐ個分のＭＣＵとして、９０度回転された画像が書き込まれることになる。なお、ｓ９０２〜ｓ９０７の処理が合計ｐ回実行された後、伸張用ＤＭＡＣ５０６は、最後に伸張対象となった入力画像の第ｉＭＣＵにおけるビット位置ａｄｄｒ［ｉ］と直流成分値ｄｃ［ｉ］［ｋ］（ｋ＝０，１，２）を更新する。これらの値は、次の出力バンドでの処理時に利用される。
【００８９】
ｓ９０９で伸張用ＤＭＡＣ５０６は、ｓ９０１〜ｓ９０８の処理を、ｑ／ｎ−１回繰り返す。即ち、伸張用ＤＭＡＣ５０６は、圧縮画像のうちの伸張対象部分であるｑ×ｐ個のＭＣＵを変更しながら、ｓ９０１〜ｓ９０８の処理を繰り返す。これにより、図８（ｄ）の画像における、横幅がｎ×ｙ画素（横に並んだｎ個のＭＣＵに相当）であり、縦の高さがｐ×ｘ画素（縦に並んだｐ個のＭＣＵに相当）の伸張回転済みの画像が、伸張用ＤＭＡＣ５０６内部の出力バンドメモリに記憶される。そして、ｓ９０９において伸張用ＤＭＡＣ５０６はさらに、出力バンドメモリ内の画像を、メモリ５１０に出力する。即ち、図６に示した圧縮画像における、ｐ本の縦ＭＣＵラインに相当する縦バンドの圧縮データが伸張、回転されてメモリ５１０に格納されたことになる。
【００９０】
ｓ９１０において伸張用ＤＭＡＣ５０６は、ｓ９００〜ｓ９０９の処理を、画像の全体がデコードされるまで繰り返す。具体的には、ｓ９００〜ｓ９０９の処理が、ｍ／ｐ−１回繰り返される。なお、ｓ９０９の処理が実行されて出力バンドメモリＢに記憶されている画像がメモリ５１０に出力されるたびに、伸張用ＤＭＡＣ５０６は、当該出力された画像を出力バンドメモリＢから削除する。これにより、入力画像を非圧縮で格納できるページメモリ（３ｍｎｘｙバイト）よりメモリ容量の小さい、バンドメモリＢ（３ｐｎｘｙバイト）を用いて、圧縮されている入力画像全体の伸張、回転を行うことができる。
【００９１】
なお、ｓ９０９によるループにおける２回目以降の処理において、ｓ９０１で始めに伸張されるＭＣＵの直流成分としては、他のＭＣＵの直流成分値との差分値が記憶されている。具体的には、図８（ｄ）に示す画像において、該ｓ９０１で始めに伸張されるＭＣＵに対してｑ−１個分左であり且つ１つ分上に配置されたＭＣＵの直流成分値との差分値が記憶されている。
【００９２】
そこで伸張用ＤＭＡＣ５０６は、前回メモリバンドＢに対して回転伸張を行った際にＪＰＥＧ伸張器５０５に記憶されていた、ビット位置ａｄｄｒ［ｉ］と直流成分値ｄｃ［ｉ］［ｋ］（ｋ＝０，１，２）を読み出し、ビット位置ａｄｄｒ［ｉ］および当該直流成分値ｄｃ［ｉ］［ｋ］（ｋ＝０，１，２）をＪＰＥＧ伸張器５０５に入力する。そのため、ｓ９０１で始めに伸張されるＭＣＵに対して、適切な直流成分値を求めることができる。
【００９３】
上記のように、本実施形態においては、まずＪＰＥＧ圧縮器５０３により入力画像が圧縮されるときに、圧縮用ＤＭＡＣ５０４により、入力画像がｑＭＣＵラインずつの複数の画像データに分割される。そして、９０度回転の場合、分割された画像データそれぞれについて、左上のＭＣＵから下方向に向かってＭＣＵがＪＰＥＧ圧縮器５０３により圧縮されるよう、圧縮用ＤＭＡＣ５０４により制御が行われる。そして、９０度回転が伴う伸張時には、伸張用ＤＭＡＣ５０６が、上記圧縮順に従った順序でＭＣＵをＪＰＥＧ伸張器５０５に伸張させ、さらに９０度回転に対応する書込み順序、アドレスに従って、メモリ５１０に画像を書き込む。
【００９４】
このとき、上記実施形態では、画像に対して回転を伴う圧縮、伸張が行われる場合に、圧縮されるＭＣＵの順序と伸張されるＭＣＵの順序が同一になるよう制御が行われる。そのため、図４を用いて説明した空デコード解析が不要となるため、より高速な画像圧縮、伸張が可能となる。また、図４に示した例では、各ＭＣＵラインごとにビット位置と直流成分値を更新するために（ｍ／ｐ）×ｎ回発生する割り込み処理についても、上記の処理を行うことで処理回数の削減が可能となる。具体的には、図９のｓ９０８のように各画像の先頭からｐｑＭＣＵ個ずつ伸張することによって、割り込み回数を（ｍ／ｐ）×（ｎ／ｑ）回にすることができ、つまり図４の例の１／ｑに削減することができる。そのため、割り込み処理分の処理時間を大幅に削減でき、全体の処理を大幅に高速化することができる。
【００９５】
以上より、空デコード解析を不要とし、割り込み処理の回数を削減した高速な画像圧縮処理、画像伸張処理を実現している。
【００９６】
さらに、本実施形態でも、ＪＰＥＧ圧縮器５０３によるＤＣＴやＭＣＵ間における直流成分値の差分の計算、ＪＰＥＧ伸張器５０５による逆ＤＣＴやＭＣＵに対する実際の直流成分値の計算等、通常のＪＰＥＧと同様の処理を用いる。つまり、本実施形態では、圧縮用ＤＭＡＣ５０４、伸張用ＤＭＡＣ５０６による制御により、ＭＣＵの圧縮順、伸張順が通常のＪＰＥＧとは異なるが、１ＭＣＵに対する処理は通常のＪＰＥＧと同様である。そのため、本実施形態による圧縮、伸張のために、ＪＰＥＧ圧縮器５０３、ＪＰＥＧ伸張器５０５とは異なる特別な圧縮器、伸張器が用意されなくても、上述の高速な画像圧縮、画像伸張を行うことが可能である。
【００９７】
［第２の実施形態］
第１の実施形態では、画像の圧縮、伸張に伴い当該画像を右に９０度回転する場合について説明した。第２の実施形態では、画像の圧縮、伸張に伴い当該画像を右に２７０度回転（左に９０度回転）する場合について説明する。
【００９８】
第１の実施形態で説明したように、画像を右に９０度回転する場合、入力画像の縦のＭＣＵラインにおけるｑライン分の画像が圧縮の単位となり、当該ｑライン分の画像内では縦ＭＣＵ順に圧縮が行われる。そして、右に９０度回転する場合の伸張処理では、図８（ｄ）に示したように、ｐ×ｑ個のＭＣＵに相当する画像単位ｉで伸張処理が行われ、且つ該画像単位ｉ内では各ＭＣＵが圧縮時と同じ順に伸張が行われる。そして、第ｊ出力バンドにおける第ｉ画像単位の処理において、ｓ９０８で記録されたアドレス値および直流成分値を、第ｊ＋１出力バンドにおける第ｉ画像単位の伸張処理で使うことができる。
【００９９】
しかしながら、２７０度回転時には、圧縮時の処理を同じとすると、伸張時はＭＣＵ単位の処理が９０度回転時の処理と逆になる。そのため、第ｊ出力バンド伸張時に使用するアドレス値および直流成分値を、それ以前の出力バンドでの処理で得ることができないという問題がある。本実施形態は、圧縮時に入力画像の「右から」縦ＭＣＵ順に圧縮することでその課題を解決する。ただし、伸張時の回転方向が圧縮前に既知である必要がある。
【０１００】
図１０および図１１はそれぞれ、右２７０度回転が伴うＪＰＥＧ圧縮、伸張処理における処理順序を示す図である。第２の実施形態における画像処理装置の構成は第１の実施形態と同様であるが、画像データを２７０度回転する点が異なる。以下では、画像の圧縮、伸張に伴い該画像が右２７０度回転される時のＪＰＥＧ圧縮器５０３と圧縮用ＤＭＡＣ５０４の動作、ならびにＪＰＥＧ伸張器５０５と伸張用ＤＭＡＣ５０６の動作について説明する。
【０１０１】
まず、右２７０度回転の伸張出力時の圧縮用ＤＭＡＣ５０４の動作を、図１０を用いて説明する。ただし、右２７０度回転の伸張出力時の処理フローは、図７に示した、画像が９０度回転される場合の処理フローと同じであるが、処理に用いられる設定値が異なる。具体的には、図１０に示す順序でＭＣＵが圧縮されるように、カレントアドレスＣＡの初期値と、処理対象のデータのアドレスを変更するためのオフセット値が設定される。
【０１０２】
ｓ７０１において圧縮用ＤＭＡＣ５０４は、カレントアドレスＣＡとして、ＳＡ＿ａを設定する。このときのＳＡ＿ａは、画像の左上をＳＡとすると、ＳＡ＿ａ＝ＳＡ＋３（ｍ−１）ｘであり、このアドレスは、図１０に示すように、画像の右上のＭＣＵにおける左上の画素に対応する。そして、ｓ７０２における処理により、ＭＣＵ内の１ラインのデータが読み出される。ｓ７０３における処理で用いられるオフセットであるｏｆｆ１として、３（ｍ−１）ｘが用いられる。ｓ７０３における処理により、圧縮用ＤＭＡＣ５０４により読み出されるデータのアドレスが、ＭＣＵにおける１つ下のラインの左端の画素に対応するアドレスに移動する。そして、ｓ７０４における処理により、ｓ７０２、ｓ７０３がさらにｙ−１回繰り返されると、１ＭＣＵの圧縮が完了する。
【０１０３】
ｓ７０５において用いられるオフセットであるｏｆｆ２として、ｏｆｆ１と同じである、３（ｍ−１）ｘが用いられる。ｓ７０５における処理により、読み出されるデータのアドレスが、画像における１つ下のＭＣＵにおける左上の画素に対応するアドレスに移動する。
【０１０４】
ｓ７０６における処理により、ｓ７０２〜ｓ７０５の処理がさらにｑ−１回繰り返されると、縦に並んだｑ個のＭＣＵについて圧縮が完了する。
【０１０５】
ｓ７０７において用いられるオフセットであるｏｆｆ３として、３ｙ（ｍ−２−ｘｐｍ）が用いられる。ｓ７０７における処理により、圧縮対象のＭＣＵが、１つ左であり且つｑ−１個上のＭＣＵに移る。さらに、読み出し対象のアドレスが、該ＭＣＵの左上の画素に対応するアドレスに移る。
【０１０６】
ｓ７０８、ｓ７０９における処理により、図１０に示す順序に従って、ＭＣＵが順次圧縮される。これにより、入力画像全体がＪＰＥＧ圧縮器５０３へ入力されたことになり、すなわち、計ｎ／ｑ個（ただしｎ≧ｑ、ｎがｑで割り切れない場合は＋１個）のＪＰＥＧデータが生成される。ただし、これらのＪＰＥＧデータは、各ＭＣＵについては通常のＪＰＥＧと同様の処理で圧縮されているが、ＭＣＵの圧縮順は通常のＪＰＥＧのものとは異なる。
【０１０７】
また、右２７０度回転を伴う伸張処理を行う際のフローについても、圧縮時同様に、設定値が異なる以外は、図９を用いて説明した右９０度回転を伴う伸張処理と同じである。具体的には、右２７０度回転時の各設定値は下記の通りとなる。
ＣＡの初期値＝ＳＡ
ｏｆｆ１＝３（ｎ−１）ｙ
ｏｆｆ２＝−３ｍ（ｙ−１）ｘ
ｏｆｆ３＝０
【０１０８】
上記の設定値を用いて図９のフローが実行されることで、図１１に示すように、図１０で示した画像が右に２７０度（左に９０度）回転された状態で伸張される。図１０で示した画像に含まれるＭＣＵの、伸張が行われる順序は、圧縮された順序と同じである。また伸張されたデータがメモリ５１０に書き込まれるときの、メモリ５１０における書き込み位置は具体的には次のようになる。まず、メモリ５１０にデータを書き込む際の書き込み先アドレスを示すＣＡの初期値が、右２７０度回転後の画像における左上の画素に対応するアドレス（ＳＡ）に設定される。そして、回転後のＭＣＵの左上の画素から右方向に向かって、データの伸張、書込みが行われ、ｏｆｆ１により、書き込み位置が該ＭＣＵの下のラインに移る。この伸張、書込みが該ＭＣＵの全体に行われた後、ｏｆｆ２により、書き込み位置が右隣りのＭＣＵの左上の画素に対応するアドレスに移る。これらの処理が横に並んだｑ個のＭＣＵについて実行されると、ｏｆｆ３により、書き込み位置が、最後に伸張したＭＣＵから左にｑ−１個分且つ下に１個分ずれたＭＣＵの、左上の画素に対応するアドレスに移る。以上の処理を縦にｐＭＣＵライン繰り返すことで、ｑ×ｐ個のＭＣＵについて、右に２７０度回転させた伸張が完了する。そして、以上の処理を、ＣＡの初期値を変更しながら回転後の画像全体に対して実行することで、図１０に示した画像を右に２７０度回転させた伸張処理が完了する。よって、右９０度回転と同じ処理（図９に示した処理）を、設定値を異ならせて実行することで、右２７０度回転が可能となる。そのため、右９０度回転を伴う伸張処理と同様に、右２７０度回転を伴う伸張処理においても空デコード解析は不要であり、割り込み処理の回数が削減された高速な処理を実現できる。
【０１０９】
なお、図１５は、第１の実施形態で説明したＭＣＵの圧縮処理の順序を示す図であり、図１６は、第２の実施形態で説明したＭＣＵの圧縮処理の順序を示す図である。そして、図１５、図１６の圧縮順序それぞれに応じた伸張順序に従って伸張が行われる。このように、画像の回転角度に応じた順序でＭＣＵが圧縮され、且つその順序に応じた順序で伸張処理が実行されることで、空デコードを不要とすることができる。
【０１１０】
［第３の実施形態］
図１２および図１３はそれぞれ、右９０度回転が伴うＪＰＥＧ圧縮、伸張処理における処理順序の別の例を示す図である。第１の実施形態と同じく右９０度回転を伴う手法であるが、第１の実施形態では入力画像データの圧縮順が縦ＭＣＵ順であったのに対し、ＭＣＵの横ライン方向に向かって圧縮処理が行われる。
【０１１１】
以下に、第３の実施形態におけるＪＰＥＧ圧縮器５０３と圧縮用ＤＭＡＣ５０４の動作ならびに、ＪＰＥＧ伸張器５０５と伸張用ＤＭＡＣ５０６の動作について説明する。
【０１１２】
図１４は、ＪＰＥＧ圧縮器５０３と圧縮用ＤＭＡＣ５０４により処理を示すフローチャートであり、右９０度回転が伴う画像伸張処理の別の例を示す。
【０１１３】
ｓ１４０１において、圧縮用ＤＭＡＣ５０４は、カレントアドレスＣＡとして、図１２に示すＳＡ＿ａを設定する。ｓ１４０２において、圧縮用ＤＭＡＣ５０４は、カレントアドレスＣＡから、連続した３ｘバイトを読み出す。ＣＡには読み出した分のバイト数が随時加算される。ｓ１４０３において、圧縮用ＤＭＡＣ５０４は、その時点のカレントアドレスＣＡに値ｏｆｆ１を加算する。ただしｏｆｆ１＝３（ｍ−１）ｘである。図１０に示すように、ｏｆｆ１の加算により、カレントアドレスＣＡが同ＭＣＵ内の次のラインの左端に移動する。ｓ１４０４では、ｓ１４０２とｓ１４０３がｙ−１回繰り返される。この計ｙ回の処理で、１ＭＣＵ分の入力画像データが、ＪＰＥＧ圧縮器５０３に供給される。ＪＰＥＧ圧縮器５０３は入力されるＭＣＵに対して、連続してＪＰＥＧ圧縮処理を行う。この時点でカレントアドレスＣＡはＭＣＵの右下端画素の次の画素のアドレスとなる。
【０１１４】
ｓ１４０５において、圧縮用ＤＭＡＣ５０４は、カレントアドレスＣＡに値ｏｆｆ２を加算する。ただしｏｆｆ２＝−３ｍ（ｙ−１）ｘである。ｏｆｆ２の加算により、カレントアドレスＣＡは、図１２に示すように右のＭＣＵ左上端へ移動する。ｓ１４０６において、圧縮用ＤＭＡＣ５０４は、ｓ１４０２〜ｓ１４０５の処理をｐ−１回繰り返す。この計ｐ回の処理で、横に並んだｐ個のＭＣＵについての圧縮処理が完了する。ｓ１４０７において、圧縮用ＤＭＡＣ５０４は、カレントアドレスＣＡに値ｏｆｆ３を加算する。ｏｆｆ３の加算により、カレントアドレスＣＡは、図１２に示すように、一つ下の横ＭＣＵラインにおける先頭のＭＣＵの左上端へ移動する。なお、ｏｆｆ３は、３ｘ（ｍ−ｐ）ｘである。
【０１１５】
ｓ１４０８において、圧縮用ＤＭＡＣ５０４は、ｓ１４０２〜ｓ１４０７の処理をｑ−１回繰り返す。この計ｑ回の処理で、入力画像のｐ×ｑ個のＭＣＵに相当するデータがＪＰＥＧ圧縮器５０３へ入力され、圧縮用ＤＭＡＣ５０４内のバンドメモリに格納されたことになる。
【０１１６】
ｓ１４０９において、圧縮用ＤＭＡＣ５０４は、カレントアドレスＣＡに値ｏｆｆ４を加算する。ｏｆｆ４の加算により、カレントアドレスＣＡは、図１２に示すように、右隣りの縦ＭＣＵラインにおけるｑ−１個上のＭＣＵの、左上の画素のアドレスとなる。
【０１１７】
ｓ１４１０において、圧縮用ＤＭＡＣ５０４は、ｓ１４０２〜ｓ１４０９の処理をバンド終了まで繰り返す。以上の処理により、ここまでに圧縮したｑ本の横ＭＣＵライン分の画像が圧縮され、圧縮用ＤＭＡＣ５０４内のバンドメモリに格納される。そして圧縮用ＤＭＡＣ５０４は、バンドメモリ内の画像をメモリ５１０に格納する。このとき、圧縮用ＤＭＡＣ５０４は、バンドメモリを解放してもよい。ここで圧縮用ＤＭＡＣ５０４は、次のＭＣＵラインの非圧縮画像がメモリ５１０内にない場合は、それが格納されるまで待機する。
【０１１８】
ｓ１４１１において、圧縮用ＤＭＡＣ５０４は、ｓ１４０１〜ｓ１４１０の処理を、画像全体にこれらの処理が実行されるまで繰り返す。つまり、圧縮用ＤＭＡＣ５０４は、カレントアドレスＣＡについて、図１２のＳＡ＿ｂのように、ｑライン分、順次下方向に変更することで、ｓ１４０１〜ｓ１４１０の処理を画像全体に実行する。これにより、入力画像全体がＪＰＥＧ圧縮器５０３により圧縮される。すなわち、第２の実施形態同様、計ｎ／ｑ個（ただしｎ≧ｑ、ｎがｑで割り切れない場合は＋１個）の圧縮画像が生成され、それらの圧縮画像がメモリ５１０に格納されたことになる。
【０１１９】
第３の実施形態における伸張処理は、図９に示した処理が実行される。ただし、処理に用いられる設定値は、第１の実施形態で示した右９０度回転時のものとは異なる。第３の実施形態における各設定値は下記の通りである。
ＣＡの初期値＝ＳＡ＋３（ｎ−１）ｙ
ｏｆｆ１＝３（ｎ−１）ｙ
ｏｆｆ２＝３（ｎ−１）ｙ
ｏｆｆ３＝３ｙ（ｎ−２−ｘｐｎ）
【０１２０】
これらの設定値を用いて図９に示した処理が実行されることで、図１３に示す順序に従ってメモリ５１０に伸張されたデータが書き込まれる。そのため、図１２に示したように圧縮された画像が、図１３に示すように、右に９０度回転された上でメモリ５１０に書き込まれる。
【０１２１】
以上の実施形態３で示した処理により、入力画像データの圧縮順が縦ＭＣＵ順でなくとも、画像の回転を伴う圧縮、伸張処理を、空デコード解析を行わず且つ割り込み処理の回数を削減した上で実現することができる。
【０１２２】
上述したように、以上の実施形態では、圧縮されている画像が回転されるように、且つ画像全体を一度に伸張せずに、分割して伸張する場合の処理について説明した。この処理において、圧縮された画像が、図１に示したように通常のＪＰＥＧ圧縮における順序に従ってＭＣＵが順次圧縮されたものである場合、当該伸張対象の一部のＭＣＵの直流成分値を求めるため、空デコードが必要になる。
【０１２３】
そこで以上の実施形態では、画像を圧縮、伸張させるときに該画像を回転する場合、画像の圧縮においてＭＣＵに対して圧縮処理が順次実行されるときの順序として、通常のＪＰＥＧとは異なり且つ回転角度に応じた順序が適用される。そして、そのように圧縮された画像について、ＭＣＵが該圧縮の順序に応じた順序で伸張、回転が順次実行され、回転角度に応じた順序に従ってＭＣＵが順次メモリに書き込まれる。そのため、空デコードを必要とせずに、画像の圧縮、伸張処理において画像を回転させることが可能となる。
【０１２４】
ただし、図６、図１０、図１２で示した圧縮処理により圧縮されたデータは、通常のＪＰＥＧとは異なる順序でＭＣＵが圧縮されているため、例えば外部装置が備える通常のＪＰＥＧデコーダでは伸張できないことも考えられる。そのため、例えば以上の実施形態における圧縮処理は、画像処理装置５００において、伸張が行われることが決定されている状況において実行される。例えば、スキャナ５０２により原稿がスキャンされることで得られたスキャン画像をプリンタ５０８が印刷することでコピーが行われる場合に、以上の実施形態における圧縮処理が実行される。具体的には、該スキャン画像をＪＰＥＧ圧縮器５０３が圧縮し、該圧縮されたスキャン画像をＪＰＥＧ伸張器５０５が伸張し、当該伸張された画像をプリンタ５０８が印刷する。この場合に、コピー設定（両面設定やＮｉｎ１のページ割り付け設定等）により、画像を右に９０度、２７０度に回転する必要が生じる場合がある。このとき、ＪＰＥＧ圧縮器５０３によるスキャン画像の圧縮に図６、図１０、図１２に示した圧縮処理が適用され、ＪＰＥＧ伸張器５０５による伸張に図８、図１１、図１３に示した伸張処理が適用される。
【０１２５】
一方、ＩＦを介して外部装置から受信した画像データや、外部メモリから読み出した画像データが、通常のＪＰＥＧ圧縮により圧縮されていることがある。この場合、ＭＣＵが圧縮された順序は、図１に示したような通常のＪＰＥＧ圧縮による順序である。例えば、ＪＰＥＧ伸張器５０５が、このようなＪＰＥＧ画像を伸張し、プリンタ５０８が印刷を行うことがある。そして、このとき、印刷設定（両面設定やＮｉｎ１のページ割り付け設定等）によっては、該ＪＰＥＧ画像に対する回転が必要な場合がある。このような場合には、伸張用ＤＭＡＣ５０６は、ＪＰＥＧ伸張器５０５に、図４に示したような空デコードを行わせることにより、回転伸張を行う。
【０１２６】
さらに、画像処理装置５００は、スキャナ５０２がスキャンした画像を外部装置に送信する場合などは、圧縮用ＤＭＡＣ５０４は、図１に示したような通常のＪＰＥＧ圧縮における圧縮順序に従って、ＭＣＵを圧縮する。
【０１２７】
このように画像処理装置５００が、通常のＪＰＥＧに則した圧縮や伸張を行う場合でも、各ＭＣＵに対する圧縮処理（ＤＣＴ等）や、伸張処理（逆ＤＣＴ等）は、圧縮、伸張順に関わらず共通の処理を用いることができる。そのため、図６、図１０、図１２に示した圧縮処理や、図８、図１１、図１３に示した伸張処理に、通常のＪＰＥＧ圧縮、伸張で用いられるＪＰＥＧ圧縮器５０３、ＪＰＥＧ伸張器５０５を用いることができる。
【０１２８】
なお、ＪＰＥＧ圧縮器５０３およびＪＰＥＧ伸張器５０５は、回路等のハードウェアで構成されていてもよいし、ＣＰＵ５０１がプログラムを実行することで、ＪＰＥＧ圧縮器５０３およびＪＰＥＧ伸張器５０５として動作してもよい。同様に、圧縮用ＤＭＡＣ５０４および伸張用ＤＭＡＣ５０６は、回路等のハードウェアで構成されていてもよいし、ＣＰＵ５０１がプログラムを実行することで、圧縮用ＤＭＡＣ５０４および伸張用ＤＭＡＣ５０６として動作してもよい。
【０１２９】
さらに、以上の実施形態では、画像処理装置５００が、ＪＰＥＧ圧縮器５０３および圧縮用ＤＭＡＣ５０４による圧縮処理と、ＪＰＥＧ伸張器５０５および伸張用ＤＭＡＣ５０６による伸張処理の両方を実行していた。しかしこれに限らず、ＪＰＥＧ圧縮器５０３および圧縮用ＤＭＡＣ５０４による圧縮処理と、ＪＰＥＧ伸張器５０５および伸張用ＤＭＡＣ５０６による伸張処理がそれぞれ別個の画像処理装置により実行されてもよい。この場合、例えば同一のベンダーにより画像圧縮装置としての画像処理装置（例えばデジタルカメラ）と、画像伸張装置としての画像処理装置（例えばプリンタ）が提供されるとする。この場合、上述した実施形態における、画像の回転角度に応じて順序によるＭＣＵの圧縮処理および伸張処理を、それぞれの画像処理装置に搭載することが可能である。そのため、上述の実施形態における圧縮処理、伸張処理をそれぞれ個別の画像処理装置で実現することができる。
【０１３０】
以上の実施形態がプログラムにより実現される場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することとなり、またそのプログラムコードを記憶した記憶媒体も以上の実施形態の機能を実現することになる。以上の実施形態の機能を実現するためのプログラムコードを、１つのコンピュータ（ＣＰＵ、ＭＰＵ）で実行する場合であってもよいし、複数のコンピュータが協働することによって実行する場合であってもよい。さらに、プログラムコードをコンピュータが実行する場合であってもよいし、プログラムコードの機能を実現するための回路等のハードウェアを設けてもよい。またはプログラムコードの一部をハードウェアで実現し、残りの部分をコンピュータが実行する場合であってもよい。
【図１】
2020088694.tif 000003
【図２】
2020088694.tif 000004
【図３】
2020088694.tif 000005
【図４】
2020088694.tif 000006
【図５】
2020088694.tif 000007
【図６】
2020088694.tif 000008
【図７】
2020088694.tif 000009
【図８】
2020088694.tif 000010
【図９】
2020088694.tif 000011
【図１０】
2020088694.tif 000012
【図１１】
2020088694.tif 000013
【図１２】
2020088694.tif 000014
【図１３】
2020088694.tif 000015
【図１４】
2020088694.tif 000016
【図１５】
2020088694.tif 000017
【図１６】
2020088694.tif 000018