以下、本発明の一実施の形態について、図面を参照して説明する。
第1の実施の形態.
図1は、本発明の第1の実施の形態に係る画像処理装置の構成例を示す図である。この図に示すように、本発明の第1の実施の形態に係る画像処理装置は、CPU(Central Processing Unit)10、メモリカードI/F(Interface)11、メモリカード12、画像処理回路20、SDRAM(Synchronous Dynamic Random Access Memory)コントローラ13、および、SDRAM14を主要な構成要素としている。
ここで、CPU10は、装置の各部を制御する制御装置である。メモリカードI/F11は、メモリカード12が装着された場合に、当該メモリカード12に格納されている情報を読み出したり、新たな情報を書き込んだりする際の制御を行うインタフェースである。メモリカード12は、フラッシュメモリ等によって構成されており、図示せぬディジタルカメラ等に着脱自在に装着されて、撮影された画像データが格納されるとともに、メモリカードI/F11に接続することにより、当該格納された画像データを読み出すことができる。
画像処理回路20は、例えば、IC(Integrated Circuit)等の半導体装置によって構成され、メモリカード12から読み出され、SDRAM14に格納されている画像データに対して回転処理(例えば、90度、180度、270度等)を施して、得られた回転画像データを出力する。なお、画像処理回路20のみを単体で半導体装置として構成するのではなく、CPU10、メモリカードI/F11、SDRAMコントローラ13、および、SDRAM14のすべてまたはこれらのいずれかを含む形態で半導体装置として構成してもよい。
ここで、画像処理回路20は、CPUI/F21、ハフマン処理部22、レジスタ23、テーブル24、JPEG処理部25、および、SDRAMI/F26を主要な構成要素としている。
ここで、CPUI/F21は、CPU10との間で情報を授受する際のインタフェースである。生成手段としてのハフマン処理部22は、SDRAM14またはメモリカード12に格納されているJPEG画像データに施されているハフマン符号を復号処理する。
レジスタ23は、動作モードを示す情報、現在のステータスを示す情報、および、後述する解析テーブルのSDRAM14上の格納位置を示す情報等を保持する内部メモリである。テーブル24は、ハフマン復号に必要な情報等を格納しているメモリである。復号手段としてのJPEG処理部25は、図2を参照して後述するように、JPEG処理を実行するための回路であり、例えば、画像処理回路20の一部として構成される。
抽出手段および更新手段の一部としてのSDRAMI/F26は、SDRAM14に格納されている情報を読み出したり、SDRAM14に情報を格納したりする際のインタフェースである。
SDRAMコントローラ13は、SDRAM14を制御するためのインタフェースである。バッファとしてのSDRAM14は、画像処理回路20が画像処理を実行する際に必要な情報等を一時的に格納するメモリである。
図2は、図1に示すJPEG処理部25の詳細な構成例を示す図である。この図に示すように、JPEG処理部25は、CPUI/F25a、レジスタ25b、テーブル25c、入力バッファコントロール部25d、ハフマン処理部25e、逆量子化部25f、IDCT(Inverse Discrete Cosine Transform)部25g、および、出力バッファコントロール部25hによって構成されている。
ここで、CPUI/F25aは、CPU10との間で情報を授受する際のインタフェースである。レジスタ25bは、動作モードを示す情報、現在のステータスを示す情報等を保持するための内部メモリである。
テーブル25cは、画像データの復号に必要な、ハフマンテーブル、量子化テーブル、画像情報、および、MCU(Minimum Coded Unit(最小処理単位))情報等を有している。
入力バッファコントロール部25dは、SDRAM14から情報を読み出す際の入力バッファを制御する。更新手段の一部としてのハフマン処理部25eは、入力バッファコントロール部25dを介して入力された画像データに対して、テーブル25cに格納されているハフマンテーブルを参照し、ハフマン復号処理を施す。逆量子化部25fは、ハフマン処理部25eから供給された画像データに対して、テーブル25cに格納されている逆量子化テーブルを参照し、逆量子化処理を施す。IDCT部25gは、逆量子化部25fから供給された画像データに対して、IDCT処理を施す。出力バッファコントロール部25hは、外部に対して画像データを出力するための出力バッファを制御する。
次に、本発明の第1の実施の形態の動作の概要について説明する。
図3は、本発明の実施の形態の動作の概要を説明するための図である。本発明の第1の実施の形態では、JPEG方式によって圧縮された圧縮画像データ(以下、単に「画像データ」と称する)を、所定の方向に回転して(例えば、時計方向に90度回転して)出力する。ところで、図3(A)に示す画像データg0を時計方向に90度回転させて画像データg1を生成する場合、画像データの左端の列データc1(ハッチングが施されている部分)から回転処理後の画像データの行データr1(ハッチングが施されている部分)を生成するためには、画像データのDC成分(直流成分)とAC成分(交流成分)のそれぞれを一度ハフマン展開しなければならない。それは、画像データをJPEG符号化処理する場合、処理の最小単位であるMCU単位でDCT(離散コサイン変換)および量子化を行った後、DC成分は隣接するDC成分値をDPCM(Differential Pulse Code Modulation)により符号化し、AC成分はジグザグスキャンにより一列のビットストリームに並べ、ランレングス符号化及びハフマン符号化処理をするため、DC成分では隣接するMCUとの相関関係が問題となり、AC成分ではハフマン符号化処理によりそのデータ長が各MCUで一定にならず、JPEGデータのビットストリーム中のどのデータが求めるMCUのAC成分値であるかが判明できないためである。したがって、JPEG符号化された各MCUを並べ換えるには各MCUのDC成分値と、JPEG符号化された各MCUのビットストリーム中におけるAC成分の位置(以下、AC成分のアドレスという)を知る必要があり、これらの情報が不明な場合にはMCUを並べ換えることができない。
そこで、本発明においては、画像データの回転処理をする場合、まず、画像データ全体を画像処理回路20によって処理することにより、画像データの左端の列データのAC成分のアドレスと、DC成分の値とを求めて解析テーブルを生成する。次に、画像処理回路20は、解析テーブルに格納されているAC成分のアドレスを参照し、画像データの左端の列c1に対応するデータを取得してAC成分を復号するとともに、DC成分の値を復号して出力する。画像処理回路20の出力は、画像処理回路20の後段に存在する回路(不図示)によって並べ換え処理が施され、回転後の行データr1が得られる。この処理に際して、画像処理回路20は、各行データを処理する毎に、2列目の列データc2のAC成分の先頭アドレスと、2列目のDC成分の値を生成するための1列目のDC成分の値とを用いて、解析テーブルを生成する。その結果、1列目の列データc1の復号処理が完了すると、2列目の列データを復号するための解析テーブルが完成する。
1列目の列データの復号が終了すると、画像処理回路20は、解析テーブルを参照しながら、2列目の列データc2を行データr2に変換する処理を開始する。このときも、前述の場合と同様に、3列目の列データc3を行データr3に変換する処理を行うための解析テーブルを各行の処理毎に生成する。したがって、2列目の処理が完了した時点で、3列目の解析テーブルが完成する。
以上のような処理を繰り返すことにより、画像データg0を時計方向に90度回転させた画像データg1に変換することができる。
このように、解析テーブルを参照しながら回転処理を実行すると同時に、次の解析テーブルを生成するようにしたので、ソフトウエアによって処理を実行する場合に比較して、処理を高速化することができる。また、例えば、処理をパイプライン化することにより、処理を更に高速化することができる。さらに、画像処理回路20が復号処理と並行して解析テーブルを生成する処理を実行するようにしたので、システムを管理するCPUの負荷が軽減され、システム全体としての処理速度を向上させることができる。
次に、本発明の第1の実施の形態の詳細な動作について説明する。
図4は、本発明の第1の実施の形態において実行される処理の流れを説明するためのフローチャートである。このフローチャートの処理が開始されると、以下のステップが実行される。
ステップS10:CPU10から画像データの回転処理が指示されると、画像処理回路20は、CPU10に対して処理対象となる画像データを含む画像ファイルをメモリカード12から読み出してSDRAM14に格納するように依頼する。画像データがSDRAM14に格納されると、画像処理回路20は、画像データから各種復号テーブルを読み出す。ここで、画像ファイル40は、図5に示すように、ヘッダ情報41、テーブル42、および、圧縮データ43によって構成されている。ここで、ヘッダ情報41は、例えば、ファイル名、圧縮方式、画像サイズ、密度単位等の情報を有している。テーブル42は、例えば、ハフマンテーブル、および、量子化テーブル等によって構成されている。圧縮データ43は、JPEG方式により圧縮された画像データによって構成されている。画像処理回路20は、図5に示す画像ファイル40のテーブル42から各種テーブルを抽出する。
図6は、本発明の第1の実施の形態において処理の対象となる画像データの一例を示している。図6(A)に示すように、画像データは縦N画素、横M画素によって構成されるデータがY,Cb,Crのそれぞれについて1枚ずつ存在する。画像処理回路20は、8×8画素によって構成されるMCUが5つ横方向に配列されて構成される「処理ブロック」を1回の処理単位として処理する。なお、処理ブロックは、図6(B)に示すように、印刷装置において、画像データが回転された後に印刷される際に、印刷ヘッドが1走査で印刷することが可能なバンド幅に対応して設定される。
ステップS11:画像処理回路20は、ステップS10において抽出した各種復号テーブルをテーブル24およびテーブル25cにそれぞれ設定する。具体的には、テーブル24にはハフマンテーブルを格納する。また、テーブル25cにはハフマンテーブルおよび量子化テーブルを格納する。なお、画像情報(縦×横のサイズを示す情報)およびMCU情報(MCUのサイズを示す情報)についてもヘッダ情報41から読み出してレジスタ23,25bにそれぞれ格納する。
ステップS12:画像処理回路20は、画像データの解析処理を開始する。すなわち、画像処理回路20は、画像データをSDRAM14から順次読み出し、ハフマン復号処理を施すことによりDCT係数を得る。そして、得られたDCT係数と、画像情報(画像サイズを示す情報)とを対比することにより、画像データのどの位置に存在する処理ブロックであるかを解析する。そして、画像データの左端に位置する処理ブロック(図6(A)のハッチング施された領域に含まれている処理ブロック)に関する情報(AC成分のアドレス情報およびDC成分の値等の情報)を取得する。
ステップS13:画像処理回路20のハフマン処理部22は、ステップS12における解析結果に基づいて解析テーブルを生成する。図7は、解析テーブルの一例を示している。この図に示すように、解析テーブルは、処理ブロックの行数を示す「No.」、Y,Cb,CrそれぞれのDC成分を示す「Y」、「Cb」、「Cr」、画像ファイル内においてAC成分が格納されている位置を示す相対アドレスとしての「アドレス」、および、アドレスで示される位置から実際にデータが含まれているビット位置を示す「ビット」、画像データがSDRAM14に格納されている際の先頭の絶対アドレスとしての物理アドレスを示す「Sアドレス」、および、終端の絶対アドレスとしての物理アドレスを示す「Eアドレス」を有している。なお、ステップS13の処理では、SアドレスおよびEアドレスを除く他の項目が生成される。なお、この図において、「0x」は16進数表記であることを示している。また、「0b」は2進数表記であることを示している。
ステップS14:画像処理回路20のハフマン処理部22は、ステップS13において生成された解析テーブルを、SDRAM14の予め定められた領域に格納する。なお、レジスタ23には、解析テーブルを格納する領域の先頭アドレスが格納されているので、当該レジスタ23の内容に対応する領域に解析テーブルが格納される。
ステップS15:CPU10は、図7に示す解析テーブルの「アドレス」および「ビット」を参照するとともに、SDRAM14に格納されている画像データのアドレスを参照し、「Sアドレス」および「Eアドレス」を計算する。すなわち、図8に示すように、メモリカード12に格納されている画像ファイルは、例えば、512バイト単位で読み出されてSDRAM14に格納される。このようにしてSDRAM14に格納された画像データは、処理ブロック単位で画像処理回路20に供給されて処理が施される。このとき、各行の読み出しの先頭位置を示すのがSアドレスで、各行のデータの末尾を示すのがEアドレスである。したがって、画像処理回路20は、それぞれの行に対応するSアドレスを先頭として画像データを読み出して処理を行い、Eアドレスに至った場合には画像データがSDRAM14に存在しないので、CPU10はメモリカード12から画像データを読み出して、SDRAM14に格納する。
ステップS16:CPU10は、ステップS15において生成したSアドレスおよびEアドレスを図7に示す解析テーブルの該当する位置に格納する。その結果、図7に示す解析テーブルが完成する。
ステップS17:画像処理回路20のJPEG処理部25は、CPU10から処理の開始が指示されると、画像データの切り出し処理を開始する。すなわち、画像処理回路20のJPEG処理部25は、解析テーブルのSアドレスを参照して、SDRAM14に格納されている画像データから処理の対象となる部分(所望の処理ブロック)を抽出し、ハフマン処理部25e、逆量子化部25f、および、IDCT部25gに順次供給する。例えば、図3に示すように画像g0を時計方向に90度回転させる場合、画像g0のハッチングが施されている部分の下から上に復号して並べ換えすれば、画像g1は左から右へ再生されることになる。したがって、このような場合には、図7に示す解析テーブルの第n番目の要素から第1番目の要素に向かって復号処理すればよい。この結果、解析テーブルのY,Cb,Crの値をそれぞれ参照し、処理ブロックの先頭のMCUのDC成分が計算され、その後に続く4つのMCUについても先頭のMCUのDC成分の値を参照して順次DC成分が計算される。また、AC成分についてもそれぞれのMCU単位で計算がなされる。なお、SアドレスがEアドレスと等しくなった場合には、画像データを新たに読み出す必要があるので、CPU10は、解析テーブルのアドレスおよびビットを参照し、メモリカード12から画像データを読み出す。
ステップS18:画像処理回路20のハフマン処理部25eは、ステップS17において切り出し処理の対象となった処理ブロックを参照して、解析テーブルを生成する。具体的には、処理ブロックの末尾に位置するMCUの位置を参照して、アドレスおよびビットを算出し、末尾のMCUのDC成分を参照してY,Cb,Crを算出する。なお、処理が終了したデータのデータ量からアドレスおよびビットを求めるようにしてもよい。
ステップS19:画像処理回路20のハフマン処理部25eは、SDRAMI/F26を介して、SDRAM14に格納されている解析テーブルの対応する項目を、ステップS18において生成された項目によって更新(上書き)する。例えば、いまの例では、No.nの項目のデータが生成されるので、No.nの項目であるY、Cb、Cr、アドレス、および、ビットが更新される。
ステップS20:画像処理回路20は、1列分のデータの処理が終了したか否かを判定し、終了していない場合にはステップS17に戻って同様の処理を繰り返し、それ以外の場合にはステップS21に進む。例えば、第1回目の処理では、図3(A)に示す列c1の処理が完了したか否かが判定される。
ステップS21:CPU10は、ステップS18の処理によって生成された解析テーブルのアドレス、ビット、および、SDRAM14に格納されている画像データのアドレス値を参照し、No.1〜No.nまでのそれぞれのSアドレスを計算する。具体的には、処理が終了したデータのデータ量に応じてSアドレスを計算する。
ステップS22:CPU10は、ステップS21において算出されたSアドレスを解析テーブルの該当する部分に格納する。
ステップS23:画像処理回路20は、全ての列データに対する処理が終了したか否かを判定し、終了していない場合にはステップS17に戻って同様の処理を繰り返し、それ以外の場合には処理を終了する。
なお、以上の処理では、Sアドレスについては、列の処理が完了した後に、一括して更新するようにしたが、解析テーブルを更新する際に併せてSアドレスを更新するようにしてもよい。具体的には、画像処理回路20によって処理が終了したデータのデータ量に応じてアドレスおよびビットを更新するとともに、併せてSアドレスも更新する。そして、画像処理回路20が画像データを読み込んで処理している最中に、読み出し先がEアドレスに到達した場合には、画像データが存在しないとして、新たな画像データをメモリカード12から読み出して格納し、格納先の先頭アドレスをSアドレスに、また、末尾をEアドレスに設定する。そして、全ての画像データの処理が完了するまで、前述の場合と同様な処理を繰り返す。なお、画像データを決まった領域に格納することにより、Eアドレスは固定とすることができる。
以上のようにして復号処理が施された画像データは、図示せぬ後段の回路によって、MCU単位の画素の回転処理、表色系の変換処理(例えば、YCC表色系をYMCK表色系に変換する処理)、ハーフトーン処理等を行った後、印刷ヘッドを駆動し、記録用紙に対して回転した画像を印刷することができる。
以上に説明したように、本発明の第1の実施の形態によれば、画像処理回路20が解析テーブルを参照しながら画像切り出し処理を実行するとともに、次の列データ用の解析テーブルを生成するようにしたので、画像の回転処理を高速に実行することができる。
また、第1の実施の形態では、画像処理回路20が切り出し処理と、解析処理とを自動的に実行するようにしたので、例えば、処理ブロックの処理が完了するたびに、割り込みを発生してCPU10に事後の処理を担当させる場合に比較して、割り込み処理に係るオーバヘッドを省略することにより処理を高速化することができる。また、CPU10の負担を軽減することにより、システム全体としての処理速度を向上することができる。なお、必要に応じて、割り込みを発生してCPU10に事後の処理を担当させることも可能である。
第2の実施の形態.
次に、本発明の第2の実施の形態について説明する。なお、第2の実施の形態では、画像処理装置の構成は、図1および図2に示す第1の実施の形態と同様であるが、解析テーブルの内容と、バッファリング処理の内容が異なっている。以下では、解析テーブルとバッファリング処理について説明する。
図9は、本発明の第2の実施の形態において実行されるバッファリング処理の流れを説明するためのフローチャートである。このフローチャートの処理が開始されると、以下のステップが実行される。なお、当該処理は、図4に示すステップS10〜S16の処理が実行され、各種テーブルがテーブル24,25cに格納されるとともに解析テーブルが生成されてSDRAM14に格納された後に実行されるものとする。
ステップS30:CPU10は、各起点ブロック(画像データの左端に位置するMCU)を先頭として一定量(例えば、4キロバイト)の画像データをメモリカード12から取得する。
ステップS31:CPU10は、ステップS30において取得された画像データを、SDRAM14に確保されているバッファに格納する。その結果、SDRAM14には、図10(A)に示すような形態でデータが格納される。ここで、左端の数字1〜nは、画像データの各行に対応している。また、Dijは、処理ブロックを示しており、iは行を、jは列を示している。ここで、左端に存在しているD11〜Dn1は、画像の左端に位置する処理ブロック(起点ブロック)を示している。なお、図10に示す各データ(Dij)は、図6に示すMCU5個分に相当しており、可変長符号化が施されているので、長さがそれぞれ異なっている。
ステップS32:CPU10は、画像処理回路20に対して画像の切り出し処理を実行するように要求する。その結果、画像処理回路20は、バッファに格納されている画像データから所望の領域に格納された処理ブロックを切り出し(読み出し)、JPEG処理部25で復号処理を実行する。なお、このとき、ハフマン処理部25eは、図11(A)に示す解析テーブルのデータを生成して、SDRAM14の対応する領域に格納する。図11(A)に示す解析テーブルでは、図7に示す解析テーブルと比較して、Eアドレスが除外されている。これは、第2の実施の形態では、画像データは連続したメモリ領域に格納されることから、Sアドレスのみとされている。画像データ全体の処理が終了すると、CPU10は、全てのSアドレスを一括して計算し、解析テーブルに格納する。
ステップS33:画像処理回路20は、バッファの残りの容量を示す残バッファ量Rを計算し、レジスタ23に格納する(図11(B)参照)。ここで、残バッファ量Rとは、図10(A)に示すように、ハッチングが施されている部分が現在までに切り出しが終了した処理ブロックであるとした場合に、ハッチングが施されていない各行の領域のうち最も容量が小さいものをいう。この例では、2行目のD21の末尾からバッファの末尾までの容量が最も小さいので、これを残バッファ量Rと称する。
ステップS34:画像処理回路20は、ステップS33で計算した残バッファ量Rが、予め定められている下限値よりも小さいか否かを判定し、小さい場合にはステップS35に進み、それ以外の場合にはステップS37の処理に進む。具体的には、図10(B)に示すように、残バッファ量Rが下限値よりも小さくなった場合にはステップS35に進む。なお、下限値としては、バッファの1行の容量が4キロバイトである場合には、例えば、1キロバイトまたは512バイト程度に設定する。
ステップS35:画像処理回路20は、CPU10に画像データを読み出すように要求する。その結果、CPU10は、図11(A)に示す解析テーブルの「アドレス」を参照し、次に処理されるべき処理ブロックのアドレスを特定し、メモリカード12から読み出す。
ステップS36:CPU10は、ステップS35において読み出した画像データを、図11に示すバッファの左端から順に格納(上書き)する。その結果、図11(C)に示すように、バッファの内容が更新されることになる。この例では、図11(B)においてD14,D24,D34,D44,・・・,Dn4は、切り出し処理が終了していないので、図11(C)ではこれらが最初に読み出されてバッファの左端に配置され、それに続くデータが格納される。
ステップS37:画像処理回路20は、画像データのすべてのデータに対する処理が終了したか否かを判定し、終了していない場合はステップS32に戻って同様の処理を繰り返し、それ以外の場合には処理を終了する。
以上に説明したように、本発明の第2の実施の形態によれば、SDRAM14にバッファを確保し、当該バッファからデータを切り出すようにしたので、図11(A)に示すように、Eアドレスを省略して、解析テーブルのサイズを縮小することができる。
また、バッファが確保される領域を固定とすることにより、CPU10によるSDRAM14に対する管理処理に係る負担を軽減することができる。
なお、第2の実施の形態では、バッファのサイズおよび下限値は固定としたが、SDRAM14の使用状況に応じてバッファのサイズを変更するとともに、下限値をそれに応じて再設定するようにしてもよい。例えば、バッファサイズは、確保可能な上限値を選択するようにし、下限値は、当該バッファサイズの1/4〜1/8程度に設定すればよい。
第3の実施の形態.
次に、本発明の第3の実施の形態について説明する。本発明の第3の実施の形態は、第1の実施の形態と構成は略同様であるが、バッファに関する処理が異なっている。以下では、バッファに関する処理を中心に説明する。
図12は、第3の実施の形態のバッファに関する処理の流れを説明するためのフローチャートである。このフローチャートの処理が開始されると、以下のステップが実行される。
ステップS40:CPU10は、各起点ブロック(画像データの左端に位置するMCU)を先頭として、少なくとも1処理ブロック分のデータを含む一定量(例えば、1キロバイト)の画像データをメモリカード12から取得する。なお、バッファサイズとしては、処理ブロックにおいて想定される最大のデータ長程度とすればよい。
ステップS41:CPU10は、ステップS40において取得された画像データを、SDRAM14に確保されているバッファに格納する。その結果、SDRAM14には、図13(A)に示すような形態でデータが格納される。ここで、左端の数字1〜n、および、Dijは、図10の場合と同様である。
ステップS42:CPU10は、画像処理回路20に対して画像の切り出し処理を実行するように要求する。その結果、画像処理回路20は、バッファに格納されている画像データを処理ブロック単位で順番に切り出し(読み出し)、JPEG処理部25で復号処理を実行する。なお、このとき、ハフマン処理部25eは、図14に示す解析テーブルの対応する行のデータを生成して、SDRAM14に格納する。例えば、Dn1の処理がなされている場合には、No.「n」の行のデータが生成されて格納される。なお、図14に示す解析テーブルでは、Eアドレスが除外されているが、これは、前述の第2の実施の形態と同様の理由に基づく。画像データ全体の処理が終了すると、CPU10は、全てのSアドレスを一括して計算して、解析テーブルに格納する。なお、第3の実施の形態では、1処理ブロック単位でバッファが更新されるので、第2の実施の形態のような残バッファ量Rについては使用しない。
ステップS43:画像処理回路20は、CPU10に画像データを読み出すように要求する。その結果、CPU10は、図14に示す解析テーブルの「アドレス」を参照し、次に処理されるべき処理ブロックのアドレスを特定し、メモリカード12から読み出す。
ステップS44:CPU10は、ステップS43において読み出した画像データを、図13に示すバッファの左端から格納する。具体的には、図13(B)に示すように、処理ブロックD11,D21,D31,D41,・・・,Dn1の切り出しが完了すると、図13(C)に示すように、次の処理ブロックD12,D22,D32,D42,・・・,Dn2を先頭とする所定量の画像データがメモリカード12から読み出されてバッファに上書きされる。
ステップS45:画像処理回路20は、画像データのすべてのデータに対する処理が終了したか否かを判定し、終了していない場合はステップS42に戻って同様の処理を繰り返し、それ以外の場合には処理を終了する。
以上に説明したように、本発明の第3の実施の形態によれば、SDRAM14にバッファを確保し、当該バッファからデータを切り出すようにしたので、第2の実施の形態の場合と同様にEアドレスを省略して、解析テーブルのサイズを縮小することができる。
また、1処理ブロック分のデータを格納するバッファを確保するようにしたので、SDRAM14の容量が小さい場合であっても前述の処理を実現することができる。
第4の実施の形態.
次に、本発明の第4の実施の形態について説明する。本発明の第4の実施の形態は、第1の実施の形態と構成は略同様であるが、バッファに関する処理が異なっている。以下では、バッファに関する処理を中心に説明する。
図15は、第4の実施の形態のバッファに関する処理の流れを説明するためのフローチャートである。このフローチャートの処理が開始されると、以下のステップが実行される。
ステップS50:CPU10は、各起点ブロック(画像データの左端に位置するMCU)を先頭として、図17(B)に示すバッファ幅(例えば、4キロバイト)に対応する画像データをメモリカード12から取得する。
ステップS51:CPU10は、ステップS50において取得された画像データを、SDRAM14に確保されているバッファに格納する。その結果、SDRAM14には、図16(A)に示すような形態でデータが格納される。ここで、左端の数字1〜n、および、Dijは、図10の場合と同様である。なお、バッファを構成する1〜nの領域のそれぞれは、例えば、4キロバイトの容量を有している。
ステップS52:CPU10は、画像処理回路20に対して画像の切り出し処理を実行するように要求する。その結果、画像処理回路20は、バッファに格納されている画像データを処理ブロック単位で順番に切り出し(読み出し)、JPEG処理部25で復号処理を実行する。例えば、図3に示すように画像データを時計方向に90度回転させる場合には、Dn1〜D11の順に処理ブロックを切り出す。なお、このとき、ハフマン処理部25eは、図17(A)に示す解析テーブルの対応する行のデータを生成して、SDRAM14に格納する。なお、図17(A)に示す解析テーブルでは、Eアドレスが除外され、先頭アドレスが新たに追加されている。ここで、「先頭アドレス」とは、バッファの各行の先頭アドレス(SDRAM14の物理アドレス)であり、固定値である。画像データ全体の処理が終了すると、CPU10は、Sアドレスを計算して、解析テーブルに格納する。なお、先頭アドレスを格納せずに、解析テーブルの先頭のアドレス値と、オフセット値とから各先頭アドレスを必要に応じて算出するようにしてもよい。
ステップS53:画像処理回路20は、画像データを読み出している最中に、バッファの末尾に到達したか否かを判定し、到達した場合にはステップS54に進み、それ以外の場合にはステップS55に進む。例えば、図16(B)に示すように、D14が切り出し処理の対象となった場合、バッファの末尾に到達するので、ステップS54に進む。
ステップS54:CPU10は、末尾にまで切り出し処理が到達したラインについては、バッファ内の全データを更新(上書き)する。具体的には、図16(B)に示すように、D14の途中でバッファの末尾に到達した場合には、CPU10は、D14の残りのデータと、D15以降のデータをメモリカード12から読み出して、バッファに格納する。なお、処理ブロックの途中でバッファの更新処理が実行された場合(図16のD14の場合)には、バッファが更新された後(図16(C)の状態となった後)に、D14の残りのデータ(図16(C)のバッファの先頭に格納されているD14のデータ)に対する切り出し処理を実行する。
ステップS55:画像処理回路20は、1列分の画像データの処理が終了したか否かを判定し、終了した場合にはステップS56に進み、それ以外の場合にはステップS52に戻って同様の処理を繰り返す。
ステップS56:CPU10は、SDRAM14に格納されている解析テーブルを参照して全てのSアドレスを計算し、解析テーブルに格納する。
ステップS57:CPU10は、画像データの全列の処理が終了したか否かを判定し、終了していない場合にはステップS52に戻って同様の処理を繰り返し、それ以外の場合には処理を終了する。
以上に説明したように、本発明の第4の実施の形態によれば、SDRAM14にバッファを確保し、当該バッファの末尾まで到達した場合には新たなデータを読み込むようにし、リングバッファ形式で使用するようにした。その結果、第3の実施の形態のようにバッファに読み込まれた画像データの一部を廃棄して再度読み込む必要がなくなるので、メモリカード12からSDRAM14への画像データの転送回数を減らすることができる。すなわち、第2の実施の形態では、例えば、図10(A)で読み込まれたD14は、図10(C)で再度読み込まれているが、本実施の形態では、D14は2回に分けて分割して読み込まれるが、同一のデータが2度読み込まれることはない。
第5の実施の形態.
次に、本発明の第5の実施の形態について説明する。本発明の第5の実施の形態は、第1の実施の形態と構成は略同様であるが、図18に示すように、複数の画像データ(図18では2枚の画像データ)を同時に回転して出力することができるように、テーブルに関する処理が異なっている。以下では、テーブルに関する処理を中心に説明する。
図19は、第5の実施の形態の処理の流れを説明するためのフローチャートである。このフローチャートの処理が開始されると、以下のステップが実行される。
ステップS60:画像処理回路20は、図18に示す第1の画像に対応する画像データのテーブル情報をメモリカード12から読み込み、第1の復号テーブルとして、テーブル24,25cに設定する。
ステップS61:画像処理回路20は、第1の画像に対応する画像データを読み込み、解析することにより、第1の画像の解析テーブルである第1の解析テーブルを生成する。
ステップS62:画像処理回路20は、テーブル24,25cに格納されている第1の復号テーブルをSDRAM14の所定の領域に退避させる。
ステップS63:画像処理回路20は、図18に示す第2の画像に対応する画像データのテーブル情報をメモリカード12から読み込み、第2の復号テーブルとして、テーブル24,25cに設定する。
ステップS64:画像処理回路20は、第2の画像に対応する画像データを読み込み、解析することにより、第2の画像の解析テーブルである第2の解析テーブルを生成する。
ステップS65:画像処理回路20は、テーブル24,25cに格納されている第2の復号テーブルをSDRAM14の所定の領域に退避させる。
ステップS66:CPU10は、第1の画像を印刷するために、レジスタ23およびレジスタ25bに対して第1の復号テーブルおよび第1の解析テーブルの先頭アドレスを書き込むとともに、復号処理を実行するように画像処理回路20に要求する。その結果、画像処理回路20は、SDRAM14に退避されている第1の復号テーブルをテーブル24,25cに書き戻す。
ステップS67:画像処理回路20は、第1の復号テーブルおよび第1の解析テーブルを参照して第1の画像データの所定の列に対する切り出し処理を実行する。このとき、第1の解析テーブルの内容は、前述のように処理の進行に応じて更新される。
ステップS68:CPU10は、第2の画像を印刷するために、レジスタ23およびレジスタ25bに対して第2の復号テーブルおよび第2の解析テーブルの先頭アドレスを書き込むとともに、復号処理を実行するように画像処理回路20に要求する。その結果、画像処理回路20は、SDRAM14に退避されている第2の復号テーブルをテーブル24,25cに書き戻す。
ステップS69:画像処理回路20は、第2の復号テーブルおよび第2の解析テーブルを参照して第2の画像データの所定の列に対する切り出し処理を実行する。このとき、第2の解析テーブルの内容は、前述のように処理の進行に応じて更新される。
ステップS70:CPU10は、すべての列データに対する処理が完了したか否かを判定し、完了していない場合にはステップS66に戻って同様の処理を繰り返し、それ以外の場合には処理を終了する。
図20は、以上の処理における動作の概要を示す図である。この図に示すように、画像処理回路20は、第1の画像を処理する場合には、第1の解析テーブルを参照し、第2の画像を処理する場合には、第2の解析テーブルを参照して処理を行う。また、テーブル24,25cは、第1の画像を処理する場合には、第1の復号テーブルが書き戻され、第2の画像を処理する場合には、第2の復号テーブルが書き戻されて処理が実行される。その結果、図18に示すように、第1および第2の画像データを回転させることができる。
以上に説明したように、本発明の第5の実施の形態では、列単位で解析テーブルおよび復号テーブルを切り換えて復号処理を行うようにしたので、複数の画像データを同時に回転させることができる。
また、本発明の第5の実施の形態では、CPU10から使用するテーブル(復号テーブルおよび解析テーブル)を指示し、復号処理を実行するようにしたので、画像処理回路20は複数の画像を処理していることを意識することなく、処理を実行することができる。
なお、以上に説明した第5の実施の形態では、復号テーブルをSDRAM14に退避させるようにしたが、テーブル24,25cの容量を大きくしてこれらを格納可能とし、退避に係る処理時間を短縮するようにしてもよい。そのような実施の形態によれば、処理を高速化することができる。
また、以上に説明した第5の実施の形態では、2つの画像を処理対象としたが、例えば、3つ以上の画像を同時に処理可能とすることも可能である。
また、以上に説明した第5の実施の形態では、バッファリング処理に関しては、詳細には説明していないが、例えば、前述の第1〜第4の実施の形態に示したいずれかのバッファリング処理を実行するようにしてもよい。
第6の実施の形態.
つぎに、本発明の第6の実施の形態について説明する。図21は、本発明の第6の実施の形態に係る印刷装置の構成例を示している。印刷装置としては、例えば、インクジェットプリンタ等のプリンタがあり、ホストコンピュータと接続されて動作するプリンタまたはホストコンピュータと接続することなく画像の印刷が可能ないわゆるスタンドアロンプリンタや、プリンタ、ファックス、コピー、および、スキャナ等の機能を有するいわゆる複合機としてのプリンタがある。なお、図21に示す実施の形態において、図1と対応する部分には同一の符号を付してその説明を省略する。
図21に示す第6の実施の形態では、図1の場合と比較して、プリンタエンジン15および印刷ヘッド16が新たに追加され、ハフマン処理部22が制御部30に置換され、また、JPEG処理部25が復号手段としてのJPEG処理部31に置換されている。
プリンタエンジン15は、後述するように、SDRAM14に格納されているハーフトーン処理が施された画像データを読み出し、印刷ヘッド16用の駆動信号に変換し、印刷ヘッド16に供給する。印刷ヘッド16は、印刷用紙に対向する位置に複数のノズルを有しており、プリンタエンジン15から供給された駆動信号に応じて当該ノズルから微細なインク粒を吐出し、印刷用紙に所望の画像を印刷する。
制御部30は、画像処理回路20の各部を制御するとともに、内蔵されているハフマン処理部30aによって、SDRAM14またはメモリカード12に格納されているJPEG画像データに施されているハフマン符号を復号処理する。
図22は、図21に示すJPEG処理部31の詳細な構成例を示している。この図に示すように、JPEG処理部31は、CPUI/F31a、レジスタ31b、テーブル31c、入力バッファコントロール部31d、ハフマン処理部31e、逆量子化部31f、IDCT部31g、および、出力バッファコントロール部31hによって構成されている。
ここで、CPUI/F31aは、CPU10との間で情報を授受する際のインタフェースである。レジスタ31bは、動作モードを示す情報、現在のステータスを示す情報等を保持するための内部メモリである。入力バッファコントロール部31d、ハフマン処理部31e、逆量子化部31f、IDCT部31g、および、出力バッファコントロール部31hは、レジスタ31bに格納されているデータを参照しており、データに応じた処理をこれらが実行する。したがって、レジスタ31bに所定のデータを書き込むことにより、これらの所望の動作を実行させることができる。
テーブル31cは、画像データの復号に必要な、ハフマンテーブル、量子化テーブル、画像情報、および、MCU情報等を有している。
入力バッファコントロール部31dは、SDRAM14から情報を読み出す際の入力バッファを制御する。更新手段の一部としてのハフマン処理部31eは、入力バッファコントロール部31dを介して入力された画像データに対して、テーブル31cに格納されているハフマンテーブルを参照し、ハフマン復号処理を施す。逆量子化部31fは、ハフマン処理部31eから供給された画像データに対して、テーブル31cに格納されている逆量子化テーブルを参照し、逆量子化処理を施す。IDCT部31gは、逆量子化部31fから供給された画像データに対して、IDCT処理を施す。出力バッファコントロール部31hは、外部に対して画像データを出力するための出力バッファを制御する。なお、JPEG処理部31は、CPUI/F31aを介してレジスタ31bに書き込まれたデータに応じて各部が動作を行うように構成されている。
次に、本発明の第6の実施の形態の動作について説明する。なお、第6の実施の形態では、第2の実施の形態と同様のバッファ処理を行い、画像データをメモリカード12から読み出して処理する。
図23は、本発明の第6の実施の形態に係る印刷装置の処理の流れを説明するための図である。なお、この図において、JPEG50は画像処理回路20によって実行され、色変換処理51、APF(Auto Photo Fine)処理52、リサイズ処理53、レイアウト処理54、色変換処理55、MW(Micro Weave)処理56、および、IMBCU(Image Buffer Control Unit)57はCPU10によって所定のプログラムが実行されることにより実現される処理である。なお、これらの処理を必要に応じてハードウエアによって実現してもよい。
まず、CPU10は、メモリカード12からメモリカードI/F11を介して画像データを所定の単位(例えば、512バイト単位)で読み込み、SDRAMコントローラ13を介してSDRAM14にFile Cash14aとして格納する。CPU10は、File Cash14aから画像データを読み出し、画像処理が円滑に実行できるようにデータを適宜並べ換えてJPEG14bとしてSDRAM14に格納する。このようにしてSDRAM14に格納された画像データは、画像処理回路20によって読み出され、JPEG処理50が施されて、YCbCrデータに復号され、SDRAM14にYCbCr14cとして格納される。なお、この処理の詳細については後述する。
復号によって得られたYCbCr14cは、色変換処理51が施され、RGBデータに変換されてRGB14dとしてSDRAM14に格納される。ここで、色変換処理51としては、例えば、YCbCrデータにγ(ガンマ)補正処理および逆γ補正処理を施して明るさに対する映像信号の振幅の変化の関係を補正する。色変換処理51が施されたRGBデータ14dは、APF処理52が施され、RGB14eとしてSDRAM14に格納される。ここで、APF処理52としては、例えば、露出時間が長い場合に発生する偽色を除去するためのノイズ除去処理、ホワイトバランスおよび色調の調整のために実行されるトーンカーブ補正処理、人が記憶している色に合わせるための記憶色補正処理、画像の鮮やかさを調整するための彩度補正処理、および、輪郭を強調するためのシャープネス処理等がある。
APF処理52が施された画像データとしてのRGB14eは、印刷用紙のサイズに合わせて画像データをリサイズするためのリサイズ処理53が施され、RGB14fとしてSDRAM14に格納される。リサイズ処理53が施されたRGB14fは、印刷用紙に対するレイアウトを決定するためのレイアウト処理54(例えば、印刷用紙上における印刷位置の設定処理または複数枚画像を重ねる等の処理)が施され、RGB14gとしてSDRAM14に格納される。レイアウト処理54が施されたRGB14gは、RGB表色系からプリンタの表色系であるCMYK表色系に変換する色変換処理55が施され、CMYK14hとしてSDRAM14に格納される。色変換処理55が施されて得られたCMYK14hは、マイクロウィーブ印刷を行うためのMW処理56が施され、MWBUF(Micro Weave Buffer)14iに格納される。MWBUF14iに格納されたCMYKデータは、IMBCU57によって読み出され、ハーフトーン処理等が施され、IMGBUF14jに格納される。IMGBUF14jによって格納されたデータは、プリンタエンジン15によって順次読み出され、プリンタの印刷ヘッド用信号に変換された後、印刷ヘッド16に供給され、印刷用紙に画像が印刷される。
つぎに、図22に示すJPEG処理50の詳細について説明する。
図24は、メモリカード12に格納されている所定の画像データが指定されて印刷が指示された場合に実行される処理を説明するフローチャートである。このフローチャートの処理が開始されると、以下のステップが実行される。
ステップS80:CPU10は、処理対象として指定された画像ファイルから各種復号テーブルを読み出す。ここで、画像ファイル40は、前述した図5に示すように、ヘッダ情報41、テーブル42、および、圧縮データ43によって構成されている。ここで、ヘッダ情報41は、例えば、ファイル名、圧縮方式、画像サイズ、密度単位等の情報を有している。テーブル42は、例えば、ハフマンテーブル、および、量子化テーブル等によって構成されている。圧縮データ43は、JPEG方式により圧縮された画像データによって構成されている。画像処理回路20は、図5に示す画像ファイル40のテーブル42から各種テーブルを抽出する。
図6は、本発明の第6の実施の形態において処理の対象となる画像データの一例を示している。図6(A)に示すように、画像データは縦N画素、横M画素によって構成されるデータがY,Cb,Crのそれぞれについて1枚ずつ存在する。画像処理回路20は、8×8画素によって構成されるMCUが5つ横方向に配列されて構成される「処理ブロック」を1回の処理単位として処理する。なお、処理ブロックは、図6(B)に示すように、印刷装置において、画像データが回転された後に印刷される際に、印刷ヘッド16が1走査で印刷することが可能なバンド幅に対応して設定される。
ステップS81:画像処理回路20は、ステップS80において抽出した各種復号テーブルをテーブル24およびテーブル31cにそれぞれ設定する。具体的には、テーブル24にはハフマンテーブルを格納する。また、テーブル31cにはハフマンテーブルおよび量子化テーブルを格納する。なお、画像情報(縦×横のサイズを示す情報)およびMCU情報(MCUのサイズを示す情報)についてもヘッダ情報41から読み出してレジスタ23,31bにそれぞれ格納する。
ステップS82:画像処理回路20は、画像データの解析処理を開始する。すなわち、画像処理回路20は、CPU10に画像ファイル40の読み出しを要求するとともに、要求に応じて読み出されてSDRAM14に格納された画像データを順次読み出し、ハフマン処理部30aによってハフマン復号処理を施すことによりDCT係数を得る。そして、得られたDCT係数と、画像情報(画像サイズを示す情報)とを対比することにより、画像データのどの位置に存在する処理ブロックであるかを解析する。そして、画像データの始点(左端)に位置する処理ブロック(図6(A)のハッチング施された領域に含まれている処理ブロック)に関する情報(AC成分のアドレス情報およびDC成分の値等の情報)を取得する。
ステップS83:画像処理回路20の制御部30は、ステップS82における解析の結果に基づいて解析テーブルを構成するアドレスおよびビットを算出する。ここで、図25は、解析テーブルの一例を示している。この図に示すように、解析テーブルは、図25(A)に示すように、処理ブロックの行数を示す「No.」、Y,Cb,CrそれぞれのDC成分を示す「Y」、「Cb」、「Cr」、画像ファイル内においてAC成分が格納されている位置を示す相対アドレスとしての「アドレス」、および、アドレスで示される位置から実際にデータが含まれているビット位置を示す「ビット」、画像データがSDRAM14に設けられたバッファ(詳細は図26を参照して後述する)に格納されている際の先頭の絶対アドレスとしての物理アドレスを示す「Sアドレス」、および、図25(B)に示すように、当該バッファの最小の残量を示す「残バッファ量」を有している。なお、「Y」、「Cb」、「Cr」はそれぞれ2バイトのデータであり、「アドレス」および「ビット」は双方で4バイトのデータ(ビットは3ビットのデータ)であり、「Sアドレス」は4バイトのデータであり、「残バッファ量」は、2バイトのデータである。なお、「No.」は説明の便宜のために記載しているもので、この部分は解析テーブルには実際には含まれていない。
ステップS83では、図25に示す解析テーブルのうち、「アドレス」および「ビット」が計算される。すなわち、始点に位置する処理ブロックのファイル内における相対的な位置を示すアドレスと、アドレスで示される位置から実際にデータが含まれているビット位置を求める。なお、Y、Cb、Crについては、始点の処理ブロックでは、前の処理ブロックが存在しないことから、すべて“0”となる。
ステップS84:画像処理回路20の制御部30は、ステップS83において生成された解析テーブルを、SDRAM14の対応する行に格納する。その結果、図25に示す解析テーブルにY、Cb、Cr、アドレス、および、ビットが1行分格納される。
ステップS85:CPU10は、画像データのすべての行に対する処理が完了したか否かを判定し、終了した場合にはステップS86に進み、それ以外の場合にはステップS82に戻って同様の処理を繰り返す。
ステップS86:CPU10は、SDRAM14に設けられた画像データを格納するためのバッファにおいて、画像データの読み出し位置を示すSアドレスを算出する。図26は、SDRAM14に設けられているバッファと、当該バッファに格納されるデータとの関係の概要を示す図である。この図に示すように、符号化前の画像データg0を8×8の画素からなるMCUに分割して符号化すると、画像g0の始点(左端)および終点(右端)に存在するMCU群が符号化されて生成されるビットストリーム群が得られる。これらのビットストリームは、その一部が行毎にバッファに格納される。なお、この図において、DijはMCUが5つ集まって構成されるデータが符号化されて得られた処理ブロックを示しており、iは行を示し、jは列を示す。
図27は、バッファの更に具体的な例を示す図である。この図に示すように、バッファは、SDRAM14の所定のアドレス(この例ではアドレス“0xA0000”)を先頭とする領域に設けられており、各行に対応するビットストリームが所定量(例えば、8キロバイト)ずつ格納されている。このように各行に対応するビットストリームは、処理ブロック単位で読み出されて画像処理回路20に供給されて処理される。このとき、画像処理回路20に供給される(読み出される)ビットストリームの先頭位置を示すのがSアドレスである。一方、残バッファ量は、後述するように、1〜nのうち、残りが最小であるバッファの残量をいう。
例えば、図27に示すバッファの場合、第1行目については先頭アドレス“0xA0000”から格納されているので、初期状態ではSアドレスは“0xA0000”となる。また、第2行目以降は、“0xA0000”にバッファのサイズである“0x2000”を加算した値となる。これらのデータは、解析テーブルの所定の領域に書き込まれる。なお、書き込む位置については、レジスタ23に、解析テーブルの先頭アドレスが格納されているので、当該先頭アドレスと、目的とする行によって定まるオフセット値とを参照して決定する。
ステップS87:CPU10は、残バッファ量を図25に示す解析テーブルに格納する。この例では、バッファのサイズは8キロバイトであり、画像データの読み出しはまだ行われていないので、残量として8キロバイトに対応する16進数である“0x2000”が格納される。
以上の処理により、図25に示す解析テーブルが完成する。この図の例では、Y、Cb、Crにはすべて“0”が格納され、アドレスおよびビットには画像データの始点に存在する処理ブロックの位置を示す情報が格納されている。また、Sアドレスとしては、図27に示すバッファの先頭アドレスが格納されている。さらに、残バッファ量としては、バッファのサイズである8キロバイトに対応する“0x2000”が初期値として格納されている。
ステップS88:CPU10は、図25に示す解析テーブルのアドレスおよびビットを参照し、メモリカード12に格納されている画像ファイルの各始点(図26参照)から8キロバイト分の画像データを抽出し、図27に示すバッファに格納する。その結果、図27に示すように、アドレス“0xA0000”を先頭とする8キロバイトには処理ブロックD11〜D14のデータが格納され、アドレス“0xA2000”を先頭とする8キロバイトには処理ブロックD21〜D24のデータが格納され、以下同様にして、各アドレスに処理ブロックデータが格納される。
以上の処理により、解析テーブルが生成されてSDRAM14に格納されるとともに、バッファに画像データが格納される。
つぎに、以上のようにして生成された解析テーブルを参照して画像データを復号する処理について説明する。図28は、画像データを復号する際に実行される処理を説明するためのフローチャートである。図28に示すフローチャートの処理が実行されると、以下のステップが実行される。
ステップS90:画像処理回路20のJPEG処理部31は、CPU10から処理の開始が指示されると、画像データの切り出し処理を開始する。すなわち、画像処理回路20のJPEG処理部31は、解析テーブルのSアドレスを参照して、SDRAM14のバッファに格納されている画像データから処理の対象となる処理ブロックをアドレス単位で読み出し、さらに、「ビット」を参照して所定のビットを抽出し、ハフマン処理部31e、逆量子化部31f、および、IDCT部31gに順次供給する。例えば、図3に示すように画像g0を時計方向に90度回転させる場合、画像g0のハッチングが施されている部分の下から上に復号して並べ換えすれば、画像g1は左から右へ再生されることになる。したがって、このような場合には、図25に示す解析テーブルの第n番目の要素から第1番目の要素に向かう方向でバッファに格納されているデータを復号処理すればよい。この結果、解析テーブルのY,Cb,Crの値をそれぞれ参照し、処理ブロックの先頭のMCUのDC成分が計算され、その後に続く4つのMCUについても先頭のMCUのDC成分の値を参照して順次DC成分が計算される。また、AC成分についてもそれぞれのMCU単位で計算がなされる。
ステップS91:画像処理回路20のJPEG処理部31は、ステップS90において切り出し処理の対象となった処理ブロックを参照して、DC成分であるY、Cb、Crを求める。すなわち、JPEG処理部31は、処理ブロックの末尾に位置するMCUのDC成分を参照してY、Cb、Crを算出する。この結果得られたY、Cb、Crは、つぎの処理ブロックのDC成分を生成するための情報となる。
ステップS92:画像処理回路20のJPEG処理部31は、解析テーブル用のアドレスおよびビットを計算する。具体的には、JPEG処理部31は、処理が完了した画像データのデータ量に応じた値をアドレスに加算するとともに、ビットの値を調整する。その結果、アドレスおよびビットは、画像ファイルにおけるつぎの処理ブロックの位置を示すことになる。
ステップS93:画像処理回路20のJPEG処理部31は、Sアドレスを求める。具体的には、ステップS92の場合と同様に、処理が完了した画像データのデータ量に応じた値をSアドレスに加算する。
ステップS94:画像処理回路20のJPEG処理部31は、SDRAMI/F26を介して、SDRAM14に格納されている解析テーブルの対応する行を、ステップS91〜ステップS93において算出された情報によって更新(上書き)する。
ステップS95:画像処理回路20は、1列分のデータの処理が終了したか否かを判定し、終了していない場合にはステップS90に戻って同様の処理を繰り返し、それ以外の場合にはステップS96に進む。例えば、第1回目の処理では、図3(A)に示す列c1の処理が完了したか否かが判定される。
図29は、画像データの1列目の処理が終了した場合における解析テーブルの一例を示している。この例では、1列目の処理ブロックに対する処理が完了しているので、DC値であるY、Cb、Crに対してそれぞれDC値が格納されている。また、アドレスおよびビットには、2列目の処理ブロックの先頭アドレスと、先頭ビットを示す情報が格納されている。また、Sアドレスとしては、図10(A)に示す2列目の処理ブロック(D12〜Dn2)の先頭アドレスがそれぞれ格納されている。また、残バッファ量としては、図10(A)に示すRに対応する値が格納されている。
ステップS96:CPU10は、残バッファ量Rを算出する。すなわち、CPU10は、例えば、図10(A)に示すように、1列分の処理ブロックの処理が完了した場合、最も残量が少ない行のバッファ残量を求め、これを残バッファ量Rとする。図10(A)の例では、第2行目のバッファの残量が最も少ないので、これが残バッファ量Rとなる。
ステップS97:CPU10は、残バッファ量Rが所定の下限値L(図10および図27参照)よりも小さいか否かを判定し、小さい場合にはステップS98に進み、それ以外の場合にはステップS101に進む。なお、下限値Lとは、データ化けを起こさずに安全に画像データを読み出すことができる下限を決める値である。例えば、バッファのサイズが8キロバイトである場合には、下限値Lを1キロバイト程度に設定することにより、これを超えて読み出しがなされ、画像データ以外のデータが誤って読み込まれることを防止することができる。なお、下限値はバッファサイズに応じて適宜設定する。
ステップS98:CPU10は、バッファを更新する処理を実行する。具体的には、CPU10は、解析テーブルのアドレスおよびビットを参照し、つぎの処理の対象となるビットストリームを8キロバイトだけ各行からそれぞれ取得し、図27に示すバッファに格納する。その結果、図10(B)に示すように、残バッファ量Rが下限値Lを下回った場合には、図10(C)に示すように、新たな処理ブロックのデータがメモリカード12から読み出されてSDRAM14のバッファに格納される。
ステップS99:CPU10は、Sアドレスを求める。具体的には、図27に示すバッファの先頭アドレスが求められる。
ステップS100:CPU10は、ステップS99で求めたSアドレスを格納するとともに、残バッファ量を解析テーブルに格納する。具体的には、図27に示す先頭アドレスと、残バッファ量として9キロバイトに対応する“0x2000”が格納される。
ステップS101:画像処理回路20は、全ての列データに対する処理が終了したか否かを判定し、終了していない場合にはステップS90に戻って同様の処理を繰り返し、それ以外の場合には処理を終了する。
以上のようにして復号処理が施された画像データは、図23に示す後段の処理によって、色変換処理51等が施され、プリンタエンジン58を介して印刷ヘッド16に供給され、印刷用紙に画像が印刷される。
以上のような処理を繰り返すことにより、画像データを回転して復号することができる。
なお、以上に示した第6の実施の形態では、バッファに関する処理としては、第2の実施の形態と同様の処理を行うようにしたが、例えば、第1の実施の形態または第3〜第5の実施の形態と同様の処理を行うようにしてもよい。
なお、以上の各実施の形態は、一例であって、これ以外にも種々の変形実施態様が存在する。例えば、以上の各実施の形態では、画像データを時計方向に90度回転させる場合を例に挙げて説明したが、例えば、反時計方向に90度回転させたり、時計方向または反時計方向に180度または270度回転させたりすることも可能であることはいうまでもない。回転させる方向および角度に応じて起点ブロックおよび切り出す順序を変更すればよい。
また、以上の各実施の形態では、図6(A)に示すように、5つのMCUが行方向に並んだ処理ブロックを例に挙げて説明を行ったが、本発明はこのような場合に限定されるものではなく、例えば、処理ブロックが1〜4つまたは6つ以上のMCUによって構成されるようにしてもよい。
また、以上の実施の形態では、画像データを解析する際に(例えば、ステップS12の処理で)、メモリカード12に格納されている画像データをSDRAM14に一旦読み込んでからハフマン処理部22で解析するようにしたが、メモリカード12から直接読み込んで解析することも可能である。本発明の各実施の形態では、画像データをSDRAM14に一旦格納してから解析を行うようにしたが、これは、メモリカード12からの読み込み速度が低速であるので、SDRAM14にまとめて読み込んで一括して処理した方が処理速度が向上すること、および、SDRAM12を使用することで、一旦読み込んだデータを再利用することが可能である(キャッシュとしての作用を期待できる)ことに基づいている。
また、図1および図2に示す回路は一例であって、本発明がこのような場合にのみ限定されるものではないことはいうまでもない。
また、図1および図2に示す回路のうち、メモリカード12を除く部分については、単一の半導体装置として構成することも可能であるし、また、複数の半導体装置として構成することも可能である。
また、以上に示す第1〜第5の実施の形態に示す画像処理装置を、例えば、インクジェットプリンタ等の印刷装置に利用することができる。その場合、復号処理がなされた画像データを構成するMCUに含まれている画素を並べ換える処理部と、並べ換えが終了した画素を印刷する印刷部とを有するようにすればよい。適用可能な印刷装置としては、例えば、ホストコンピュータを接続することなく画像の印刷が可能ないわゆるスタンドアロンプリンタや、プリンタ、ファックス、コピー、スキャナ等の機能を有するいわゆる複合機がある。このような印刷装置に本発明を適用することにより、画像を高速に印刷することが可能になる。
また、印刷装置のみならず、例えば、ディジタルカメラ等のディジタル機器に対しても本発明を適用することができる。例えば、ディジタルカメラに本発明を適用した場合には、画像を少ないメモリで効率良く回転させて出力することができる。
14 SDRAM(バッファ)、22 ハフマン処理部(生成手段)、25,31 JPEG処理部(復号手段)、25e,31e ハフマン処理部(更新手段の一部)、26 SDRAMI/F(抽出手段、更新手段の一部)