以下、本発明の一実施の形態について、図面を参照して説明する。
第1の実施の形態.
図1は、本発明の第1の実施の形態に係る画像処理装置の構成例を示す図である。この図に示すように、本発明の第1の実施の形態に係る画像処理装置は、CPU(Central Processing Unit)10、メモリカードI/F(Interface)11、メモリカード12、画像処理回路20、SDRAM(Synchronous Dynamic Random Access Memory)コントローラ13、SDRAM14、プリンタエンジン15、および、印刷ヘッド16を主要な構成要素としている。
ここで、格納手段および中央処理回路としてのCPU10は、装置の各部を制御する制御装置である。メモリカードI/F11は、メモリカード12が装着された場合に、当該メモリカード12に格納されている情報を読み出したり、新たな情報を書き込んだりする際の制御を行うインタフェースである。外部の記憶手段としてのメモリカード12は、フラッシュメモリ等によって構成されており、図示せぬディジタルカメラ等に着脱自在に装着されて、撮影された画像データが格納されるとともに、メモリカードI/F11に接続することにより、当該格納された画像データを読み出すことができる。なお、USB(Universal Serial Bus)を介してDSC(Digital Still Camera)を接続し、DSCに格納されている画像情報を直接読み込むことができるようにしてもよい。
生成手段、復号手段、および、更新手段としての画像処理回路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は、画像処理回路20の各部を制御するとともに、内蔵されているハフマン処理部22aによって、SDRAM14またはメモリカード12に格納されているJPEG画像データに施されているハフマン符号を復号処理する。
レジスタ23は、動作モードを示す情報、現在のステータスを示す情報、および、後述する解析テーブルのSDRAM14上の格納位置を示す情報等を保持する内部メモリである。テーブル24は、ハフマン復号に必要な情報等を格納しているメモリである。JPEG処理部25は、図2を参照して後述するように、JPEG処理を実行するための回路であり、例えば、画像処理回路20の一部として構成される。
SDRAMI/F26は、SDRAM14に格納されている情報を読み出したり、SDRAM14に情報を格納したりする際のインタフェースである。
SDRAMコントローラ13は、SDRAM14を制御するためのインタフェースである。内部の記憶手段および内部記憶回路としてのSDRAM14は、例えば、CPU10または画像処理回路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に戻って、SDRAM14は、メモリカード12から画像データを読み込む際のキャッシュであるファイルキャッシュ14a、画像データを所定の順序で格納するバッファ14b(詳細は後述する)、および、画像データから所望のMCUを取得するための情報を有する解析テーブル14kを有している。
プリンタエンジン15は、画像処理回路20によって復号された画像を印刷するための処理を実行するエンジンである。印刷ヘッド16は、例えば、インクジェット方式のヘッドであり、紙等の記録媒体に対してインクを吐出して所望の画像を印刷する。
次に、本発明の実施の形態の動作の概要について説明する。
図3は、本発明の実施の形態の動作の概要を説明するための図である。本発明の実施の形態では、JPEG方式によって圧縮された圧縮画像データ(以下、単に「画像データ」と称する)を、所定の方向に回転して(例えば、時計方向に90度回転して)出力する。ところで、図3(A)に示す画像データg0を時計方向に90度回転させて画像データg1を生成する場合、画像データの左端の列データc1(ハッチングが施されている部分)から回転処理後の画像データの行データr1(ハッチングが施されている部分)を生成する必要がある。また、左端の回転処理が終了した場合には、図3(B)に示すように、左端の列データc1の右隣の列データc2(ハッチングが施されている部分)から回転処理後の画像データの行データr2(ハッチングが施されている部分)を生成し、続いて、同様の処理を続く列データに施す必要がある。
ところで、JPEG符号化された画像データは、図4(A)に示すように、画像データg0の左上端に位置するMCU(処理の最小単位)から順に右方向に符号化され、1行目が終了すると2行目の左端に戻ってジグザグに符号化され、ひとつづきのビットストリームデータ(画像ファイル)となる。ここで、図4(B)に示すように、画像データg0の列データc1の各MCUを符号化すると、得られる符号化後のビットストリームとしてのデータd11〜d32・・・は、それぞれ長さが異なっている。したがって、図3(A)に示すように、左端の列データc1に含まれるMCU(以下、「起点ブロック」と称する)をビットストリームから取得するためには、当該起点ブロックのビットストリーム(画像ファイル)中の位置を予め知っていなければならない。
また、図4(C)に示すように、画像ファイルをメモリカード12から読み込む際のアクセス単位と、各MCUのデータサイズとは必ずしも一致せず、各MCU間のデータサイズも異なることから、各MCUが複数のアクセス単位にまたがることがある。したがって、画像ファイルから所望のMCUを読み出すためには、当該MCUがどのアクセス単位に含まれているかを知るとともに、当該アクセス単位のどこからMCUが始まっているかを知る必要がある。本実施の形態では、前者をアドレス情報として、また、後者をビット情報として予め取得し、図3に示す解析テーブル14kに格納し、これを参照して画像データの回転処理を実行する。
また、JPEG方式の画像ファイルでは、量子化DCT係数の量子化DC成分についてはMCU間の差分値がハフマン符号化されているから(隣接するDC成分値をDPCM(Differential Pulse Code Modulation)により符号化されているから)、量子化DC成分を取得するためには、ハフマン解凍により得られる量子化DC成分の差分値を累計する必要がある。本実施の形態では、量子化DC成分を累計するための情報をY,Cb,CrそれぞれのDC成分として解析テーブル14kに保持し、これを参照してDC成分を算出する。
さらに、画像処理回路20が画像データを回転する際に、画像データを一時的に格納するバッファとしてのSDRAM14は、その容量が限られており、一般的に画像ファイルの一部しか格納することができない。そこで、本実施の形態では、起点ブロックを含む一定量(本実施の形態では8キロバイト)の画像データをメモリカード12から読み込んでSDRAM14のバッファ14bに格納するとともに、格納されている画像データの復号の開始位置と残量とを解析テーブル14kに格納し、これに基づいてバッファリングの制御を行う。
すなわち、本発明の実施の形態においては、画像データの回転処理をする場合、まず、画像データ全体を画像処理回路20によって処理することにより、画像データの起点ブロックを含むアクセス単位のアドレスと、起点ブロックの開始位置を示すビットとを取得し、解析テーブル14kを生成する。つぎに、画像処理回路20は、解析テーブル14kに格納されているアドレスとビットを参照し、画像データの左端の列c1に対応するデータを取得してAC成分を復号するとともに、DC成分の値を復号して出力する。画像処理回路20の出力は、画像処理回路20の後段に存在する回路(図5を参照して後述する)によって並べ換え処理が施され、回転後の行データr1が得られる。この処理に際して、画像処理回路20は、各MCUを処理する毎に、2列目の列データc2の開始アドレスと、得られたDC成分の値値とによって解析テーブル14kを更新する。その結果、1列目の列データc1の復号処理が完了すると、2列目の列データを復号するための解析テーブル14kが完成する。
1列目の列データの復号が終了すると、画像処理回路20は、解析テーブル14kを参照しながら、2列目の列データc2を行データr2に変換する処理を開始する。このときも、前述の場合と同様に、3列目の列データc3を行データr3に変換する処理を行うための解析テーブル14kを各行の処理毎に生成する。したがって、2列目の処理が完了した時点で、3列目の解析テーブル14kが完成する。
なお、このとき、画像データは、後で詳細に説明するように、メモリカード12から読み出されてSDRAM14に設けられたバッファ14bに格納され、順次読み出されて復号処理が施される。解析テーブル14kでは、当該バッファ14bに格納されている画像データの読み出し位置であるSアドレスと、バッファ14bの残量Wとを管理しており、残量Wが所定の下限値Lを下回った場合には、バッファ14bの更新が実行され、画像データが効率よく読み出されて復号処理が実行される。
以上のような処理を繰り返すことにより、画像データg0を時計方向に90度回転させた画像データg1に変換することができる。
このように、解析テーブル14kを参照しながら回転処理を実行すると同時に、次の解析テーブル14kを生成するようにしたので、ソフトウエアによって処理を実行する場合に比較して、処理を高速化することができる。また、例えば、処理をパイプライン化することにより、処理を更に高速化することができる。さらに、画像処理回路20が復号処理と並行して解析テーブル14kを生成する処理を実行するようにしたので、システムを管理するCPUの負荷が軽減され、システム全体としての処理速度を向上させることができる。
次に、本発明の実施の形態の詳細な動作について説明する。
図5は、本発明の第1の実施の形態に係る画像処理装置の全体の処理の流れを説明するための図である。なお、この図において、JPEG50は画像処理回路20によって実行され、色変換処理51、APF(Auto Photo Fine)処理52、リサイズ処理53、レイアウト処理54、色変換処理55、MW(Micro Weave)処理56、および、IMBCU(Image Buffer Control Unit)57はCPU10によって所定のプログラムが実行されることにより実現される処理である。なお、これらの処理を必要に応じてハードウエアによって実現してもよい。
画像を回転して印刷する際には、まず、解析テーブル14kの作成処理が実行される。すなわち、CPU10は、メモリカードI/F11を介してメモリカード12から画像データを読み出し、File Cash14aとして格納する。CPU10は、File Cash14aから画像データを読み出し、データを適宜並べ換えてバッファ14bに格納する。画像処理回路20は、SDRAM14のバッファ14bに格納された画像データを適宜読み出し、JPEG復号処理を施すことにより、起点ブロックを特定するとともに、DC成分を抽出して解析テーブル14kを作成する。
解析テーブル14kの作成が完了すると、CPU10は、メモリカード12からメモリカードI/F11を介して画像データを所定の単位(例えば、512バイト単位)で読み込み、SDRAMコントローラ13を介してSDRAM14にFile Cash14aとして格納する。CPU10は、File Cash14aから画像データを読み出し、データを適宜並べ換えてバッファ14bに格納する。このようにしてSDRAM14に格納された画像データは、画像処理回路20によって読み出され、JPEG処理50が施されて、YCbCrデータに復号され、SDRAM14にYCbCr14cとして格納される。なお、SDRAM14のバッファ14bの制御の詳細については、後述する。
復号によって得られた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に供給され、印刷用紙に画像が印刷される。
つぎに、図5に示すJPEG処理50の詳細(解析テーブル14kを生成し、当該解析テーブル14kに基づいて画像データをJPEG復号する処理)について説明する。
図6(A)は、メモリカード12に格納されている所定の画像データが指定されて印刷が指示された場合に実行される処理を説明するフローチャートである。このフローチャートの処理が開始されると、以下のステップが実行される。
ステップS1:CPU10は、画像を回転して印刷する必要があるか否かを判定する。その結果、画像を回転して印刷する必要がないと判定した場合には、ステップS2に進み、それ以外の場合にはステップS3に進む。
ステップS2:CPU10は、画像を通常に印刷する「通常印刷処理」を実行する。具体的には、CPU10は、メモリカード12から所定量の画像データを読み込んで、SDRAM13にFile Cash14aに格納する。つぎに、CPU10は、画像処理回路20に対してJPEG復号処理を実行するように指示をする。その結果、画像処理回路20は、File Cash14aに格納されている画像データを読み込み、JPEG処理50を施して、YCbCr14cとしてSDRAM14に格納する。それ以降は、図5に示す処理が実行され、バンド単位の印刷データがプリンタエンジン15に供給されて、印刷ヘッド16により印刷される。
すなわち、ハードウエア(例えば、ASIC(Application Specific Integrated Circuits)等)によって構成される画像処理回路20は、中央処理回路としてのCPU10によって外部の記憶手段としてのメモリカード12から読み出され、内部記憶回路としてのSDRAM14に設けられたバッファとしてのファイルキャッシュ14aに格納されている圧縮画像データを、所定の順序で読み出して復号する。そして、ファイルキャッシュ14aのデータの残量が少なくなった場合には画像処理回路20は、CPU10に通知する。当該通知を受けたCPU10は、メモリカード12に格納されている圧縮画像データから少なくとも一部のデータを取得し、ファイルキャッシュ14aに所定の順序で格納する。このような処理を繰り返すことにより、圧縮画像データの容量がSDRAM14の容量を上回る場合であっても、画像データを効率よく復号することができる。また、画像処理回路20は、ハードウエアによって構成されているので、プログラムに基づいて処理した場合に比較して、復号処理を迅速に実行することができる。さらに、圧縮画像データのメモリカード12からSDRAM14への読み込みについては、CPU10が実行し、SDRAM14に読み込まれた圧縮画像データの復号処理については、画像処理回路20が実行するようにした。このため、役割を分担することにより、処理を高速化することができる。
なお、図1の例では、本装置に装着されたメモリカード12から圧縮画像データ読み込むようにしたが、メモリカードを有する電子機器(例えば、ディジタルカメラ)と、本装置とを、例えば、USB(Universal Serial Bus)接続ケーブルによって接続し、当該電子機器が有するメモリカードから圧縮画像を読み込んで処理することも可能である。電子機器が接続された場合には、CPU10は接続ケーブルを介して当該電子機器が有するメモリカードに予めアクセスし、圧縮画像ファイルにアクセスが可能であることを確認してから復号処理を実行する。また、電子機器とメモリカード12の双方が利用可能である場合には、例えば、ユーザにいずれのメモリカードに格納されている圧縮画像データを処理の対象とするかを予め選択させ、選択を受けたメモリカードから圧縮画像データを読み出すようにしてもよい。
ステップS3:CPU10は、印刷の対象となっている画像ファイルを読み込んで、解析することにより、解析テーブル14kを生成する処理を実行する。なお、この処理の詳細については、図6(B)を参照して後述する。
ステップS4:CPU10は、ステップS3において生成された解析テーブル14kを参照し、画像を回転させて印刷する処理を実行する。なお、この処理の詳細については、図12を参照して後述する。
以上の処理によれば、画像ファイルの印刷が指示された場合であって画像を回転させる必要がない場合には通常処理が実行され、回転させる必要がある場合には解析テーブル14kを生成するとともに、回転印刷処理が実行され、所望の画像が印刷される。
つぎに、図6(B)を参照して、図6(A)のステップS3に示す解析テーブル作成処理の詳細について説明する。このフローチャートが開始されると、以下のステップが実行される。
ステップS10:CPU10は、処理対象として指定された画像ファイルから各種復号テーブルを読み出す。ここで、画像ファイル60は、図7に示すように、ヘッダ情報61、テーブル62、および、圧縮データ63によって構成されている。ここで、ヘッダ情報61は、例えば、ファイル名、圧縮方式、画像サイズ、密度単位等の情報を有している。テーブル62は、例えば、ハフマンテーブル、および、量子化テーブル等によって構成されている。圧縮データ63は、JPEG方式により圧縮された画像データによって構成されている。画像処理回路20は、図7に示す画像ファイル60のテーブル62から各種テーブルを抽出する。
図8は、本発明の第1の実施の形態において処理の対象となる画像データの一例を示している。図8(A)に示すように、画像データは縦N画素、横M画素によって構成されるデータがY,Cb,Crのそれぞれについて1枚ずつ存在する。画像処理回路20は、8×8画素によって構成されるMCUが5つ横方向に配列されて構成される「処理ブロック」を1回の処理単位として処理する。なお、処理ブロックは、図8(B)に示すように、印刷装置において、画像データが回転された後に印刷される際に、印刷ヘッド16が1走査で印刷することが可能なバンド幅に対応して設定される。
ステップS11:画像処理回路20は、ステップS10において抽出した各種復号テーブルをテーブル24およびテーブル25cにそれぞれ設定する。具体的には、テーブル24にはハフマンテーブルを格納する。また、テーブル25cにはハフマンテーブルおよび量子化テーブルを格納する。なお、画像情報(縦×横のサイズを示す情報)およびMCU情報(MCUのサイズを示す情報)についてもヘッダ情報41から読み出してレジスタ23,25bにそれぞれ格納する。
ステップS12:画像処理回路20は、画像データの解析処理を開始する。すなわち、画像処理回路20は、CPU10に画像ファイル40の読み出しを要求するとともに、要求に応じて読み出されてSDRAM14のFile Cash14aに格納された画像データを順次読み出し、ハフマン処理部22aによってハフマン復号処理を施すことによりDCT係数を得る。そして、得られたDCT係数の個数と、画像情報(画像サイズを示す情報)とを対比することにより、画像データのどの位置に存在する処理ブロックであるかを解析する。そして、画像データの始点(左端)に位置する起点ブロック(図8(A)のハッチング施された領域に含まれている処理ブロック)に関する情報(AC成分のアドレス情報およびDC成分の値等の情報)を取得する。
ステップS13:画像処理回路20の制御部22は、ステップS12における解析の結果に基づいて解析テーブル14kを構成するアドレスおよびビットを算出する。ここで、図9は、解析テーブル14kの一例を示している。この図に示すように、解析テーブル14kは、処理ブロックの行数(すなわち、画像の行方向の位置)を示す「No.」、Y,Cb,CrそれぞれのDC成分を示す「Y」、「Cb」、「Cr」、画像ファイル内においてAC成分が格納されている位置を示す相対アドレスとしての「アドレス」、および、アドレスで示される位置から実際にデータが含まれているビット位置を示す「ビット」、画像データがSDRAM14に設けられたバッファ14b(詳細は図10を参照して後述する)に格納されている際の先頭の絶対アドレスとしての物理アドレスを示す「Sアドレス」、および、当該バッファ14bの残量を示す「残量W」を有している。なお、「Y」、「Cb」、「Cr」はそれぞれ2バイトのデータであり、「アドレス」および「ビット」は双方で4バイトのデータ(ビットは3ビットのデータ)であり、「Sアドレス」は4バイトのデータであり、「残量W」は2バイトのデータである。したがって、これらすべてを合わせたデータ量は、16バイトとなる。なお、「No.」は説明の便宜のために記載しているもので、この部分は解析テーブル14kには含まれていない。
ステップS13では、図9に示す解析テーブル14kのうち、「アドレス」および「ビット」が計算される。すなわち、始点に位置する処理ブロックのファイル内における相対的な位置を示すアドレスと、アドレスで示される位置から実際にデータが含まれているビット位置を求める。なお、Y、Cb、Crについては、始点の処理ブロックでは、前の処理ブロックが存在しないことから、すべて“0”となる。
ステップS14:CPU10は、SDRAM14に設けられた画像データを格納するためのバッファ14bにおいて、画像データの読み出し位置を示すSアドレスと、未処理の画像データの容量を示す残量Wとを算出する。図10は、SDRAM14に設けられているバッファ14bと、当該バッファ14bに格納されるデータとの関係の概要を示す図である。この図に示すように、符号化前の画像データg0を8×8の画素からなるMCUに分割して符号化すると、画像g0の始点(左端)および終点(右端)に存在するMCU群が符号化されて生成されるビットストリーム群が得られる。これらのビットストリームは、その一部が行毎にバッファ14bに格納される。なお、この図において、DijはMCUが5つ集まって構成されるデータが符号化されて得られた処理ブロックを示しており、iは行を示し、jは列を示す。図11は、バッファ14bの更に具体的な例を示す図である。この図に示すように、バッファ14bは、SDRAM14のアドレス0xA0000(「0x」は16進数を示す)を先頭とする領域に設けられており、各行に対応するビットストリームがそれぞれ8キロバイトずつ格納されている。このように各行に対応するビットストリームは、処理ブロック単位で読み出されて画像処理回路20に供給されて処理される。このとき、画像処理回路20に供給される(読み出される)ビットストリームの先頭位置を示すのがSアドレスである。一方、残量Wは、8キロバイトから処理済みの画像データの容量を減算することにより得られる値であり、未処理の画像データの容量を示す。
ステップS15:画像処理回路20の制御部22は、ステップS13およびステップS14において生成された解析テーブル14kを、SDRAM14の対応する行に格納する。例えば、図11に示すバッファ14bの場合、第1行目についてはアドレス“0xA0000”から格納されているので、初期状態ではSアドレスは“0xA0000”となり、残量Wは“0x2000”となる。また、Y,Cb,Crは、前の処理ブロックが存在しないことからすべて“0”となる。さらに、アドレスはファイルの先頭であるので“0x00000”となり、ビットについても“0b000”(「0b」は2進数を示す)となる。これらのデータは、16バイトのデータとして一括して解析テーブル14kの所定の領域に書き込まれる。なお、書き込む位置については、レジスタ23に、解析テーブル14kの先頭アドレスが格納されているので、当該先頭アドレスと、目的とする行によって定まるオフセット値とを参照して決定する。
ステップS16:CPU10は、画像データのすべての行に対する処理が完了したか否かを判定し、終了した場合にはステップS17に進み、それ以外の場合にはステップS12に戻って同様の処理を繰り返す。
以上の処理を繰り返すことにより、図9に示す解析テーブル14kが完成する。この図の例では、Y、Cb、Crにはすべて“0”が格納され、アドレスおよびビットには画像データの始点に存在する処理ブロックの位置を示す情報が格納されている。また、Sアドレスとしては、図11に示すバッファ14bの先頭アドレスが格納されている。さらに、残量としては、バッファ14bのサイズである8キロバイトに対応する“0x2000”が格納されている。
ステップS17:CPU10は、図9に示す解析テーブル14kのアドレスおよびビットを参照し、メモリカード12に格納されている画像ファイルの各始点(図10参照)から8キロバイト分の画像データを抽出し、図11に示すバッファ14bに格納する。その結果、図11に示すように、アドレス0xA000を先頭とする8キロバイトには処理ブロックD11〜D14のデータが格納され、アドレス0xA200を先頭とする8キロバイトには処理ブロックD21〜D24のデータが格納され、以下同様にして、各アドレスに処理ブロックデータが格納される。
以上の処理により、解析テーブル14kが生成されてSDRAM14に格納されるとともに、バッファ14bに画像データが格納される。
つぎに、図6(A)のステップS4に示す回転印刷処理について説明する。すなわち、以上のようにして生成された解析テーブル14kを参照して画像データを復号し、回転して出力する処理について説明する。図12は、画像データを復号する際に実行される処理を説明するためのフローチャートである。図12に示すフローチャートの処理が実行されると、以下のステップが実行される。
ステップS30:画像処理回路20のJPEG処理部25は、CPU10から処理の開始が指示されると、画像データの切り出し処理を開始する。すなわち、画像処理回路20のJPEG処理部25は、解析テーブル14kのSアドレスを参照して、SDRAM14のバッファ14bに格納されている画像データから処理の対象となる処理ブロックを抽出し、さらに、「ビット」を参照して所定のビットを抽出し、ハフマン処理部25e、逆量子化部25f、および、IDCT部25gに順次供給する。例えば、図3に示すように画像g0を時計方向に90度回転させる場合、画像g0のハッチングが施されている部分の上から下に復号して並べ換えすれば、画像g1は右から左へ再生されることになる。したがって、このような場合には、図9に示す解析テーブル14kの第1番目の要素から第n番目の要素に向かう方向でバッファ14bに格納されているデータを復号処理すればよい。この結果、解析テーブル14kのY,Cb,Crの値をそれぞれ参照し、処理ブロックの先頭のMCUのDC成分が計算され、その後に続く4つのMCUについても先頭のMCUのDC成分の値を参照して順次DC成分が計算される。また、AC成分についてもそれぞれのMCU単位で計算がなされる。
ステップS31:画像処理回路20のJPEG処理部25は、ステップS30において切り出し処理の対象となった処理ブロックを参照して、DC成分であるY、Cb、Crを求める。すなわち、JPEG処理部25は、処理ブロックの末尾に位置するMCUのDC成分を参照してY、Cb、Crを算出する。また、この結果得られたY、Cb、Crは、つぎの処理ブロックのDC成分を生成するための情報となる。
ステップS32:画像処理回路20のJPEG処理部25は、解析テーブル14k用のアドレスおよびビットを計算する。具体的には、JPEG処理部25は、処理が完了した画像データのデータ量に応じた値をアドレスに加算するとともに、ビットの値を調整する。その結果、アドレスおよびビットは、画像ファイルにおけるつぎの処理ブロックの位置を示すことになる。
ステップS33:画像処理回路20のJPEG処理部25は、Sアドレスおよび残量Wを求める。具体的には、ステップS32の場合と同様に、処理が完了した画像データのデータ量に応じた値をSアドレスに加算する。また、処理が完了した画像データのデータ量に応じた値を残量Wから減算する。
ステップS34:画像処理回路20のJPEG処理部25は、SDRAMI/F26を介して、SDRAM14に格納されている解析テーブル14kの対応する行を、ステップS31〜ステップS33において算出された情報によって更新(上書き)する。なお、このとき、解析テーブル14kに書き込む情報は16バイトのデータとして一括して更新処理がなされる。すなわち、16バイトに設定することにより、複数回のアクセスが実行されて、更新処理に時間がかかることを防止できる。
ステップS35:画像処理回路20は、1列分のデータの処理が終了したか否かを判定し、終了していない場合にはステップS30に戻って同様の処理を繰り返し、それ以外の場合にはステップS36に進む。例えば、第1回目の処理では、図3(A)に示す列c1の処理が完了したか否かが判定される。
ステップS36:CPU10は、全ての残量Wを参照し、最小の残量Wminを取得する。すなわち、バッファ14bのうち処理済みのデータが最も多い行に対応する残量Wが取得される。
ステップS37:CPU10は、Wminが所定の下限値L(図11参照)よりも小さいか否かを判定し、小さい場合にはステップS38に進み、それ以外の場合にはステップS41に進む。なお、下限値Lとは、データ化けを起こさずに安全に画像データを読み出すことができる下限を決める値である。例えば、バッファ14bのサイズが8キロバイトである場合には、下限値Lを1キロバイト程度に設定することにより、これを超えて読み出しがなされ、画像データ以外のデータが誤って読み込まれることを防止することができる。なお、下限値はバッファサイズに応じて適宜設定する。
ステップS38:CPU10は、バッファ14bを更新する処理を実行する。なお、この処理は、ステップS37においてYと判定された場合に、画像処理回路20からの割り込みによって実行される。具体的には、CPU10は、解析テーブル14kのアドレスおよびビットを参照し、つぎの処理の対象となるビットストリームを8キロバイトだけ各行からそれぞれ取得し、図11に示すバッファ14bに格納する。なお、この処理の詳細については、後述する。
ステップS39:CPU10は、Sアドレスを求める。具体的には、図11に示すバッファ14bの先頭アドレスが求められる。
ステップS40:CPU10は、ステップS39で求めたSアドレスと、残量Wとを格納する。具体的には、図11に示す先頭アドレスと、残量Wとして0x2000が格納される。
ステップS41:画像処理回路20は、全ての列データに対する処理が終了したか否かを判定し、終了していない場合にはステップS30に戻って同様の処理を繰り返し、それ以外の場合には処理を終了する。
以上のようにして復号処理が施された画像データは、回転処理が施された後、図5に示す後段の処理によって、色変換処理51等が施され、プリンタエンジン58を介して印刷ヘッド16に供給され、印刷用紙に画像が印刷される。
図13〜図17は、バッファ14bからデータが読み出されてバッファ14bが更新されるまでの様子を示す図である。図13は、ハッチングが施されている先頭の処理ブロックD11〜Dn1が読み出されて画像処理回路20によって処理された状態を示す図である。この結果、解析テーブル14kのSアドレスは、処理ブロックD12〜Dn2の先頭であるS1〜Snとなる。また、残量W1〜Wnは、バッファ14bの各行の長さである0x2000から先頭の処理ブロックD11〜Dn1の容量を除いた値となる。
図14は、図13に示す1列目の処理が完了した状態における解析テーブル14kの一例を示す図である。この例では、Y、Cb、Crとしては、1列目の処理ブロックを処理することによって得られたDC値がそれぞれ格納されている。また、アドレスおよびビットについては、処理が完了した処理ブロックのサイズに対応して値が変更されている。また、Sアドレスおよび残量Wについても同様に処理が完了した処理ブロックのサイズに対応して値が変更されている。
図15は、第2番目の処理ブロックの処理が終了した後のバッファ14bの状態を示す図である。第2番目の処理ブロックの処理が完了すると、Sアドレスは第3番目の処理ブロックの先頭であるS1〜Snとなり、また、残量W1〜Wnは、バッファ14bの各行の長さである0x2000から先頭の処理ブロックD11〜Dn1および第2番目の処理ブロックD12〜Dn2の容量を除いた値となる。
図16は、第3番目の処理ブロックの処理が終了した後のバッファ14bの状態を示す図である。第3番目の処理ブロックの処理が完了すると、Sアドレスは第4番目の処理ブロックの先頭であるS1〜Snとなり、また、残量W1〜Wnは、バッファ14bの各行の長さである0x2000から先頭の処理ブロックD11〜Dn1、第2番目の処理ブロックD12〜Dn2、および、第3番目の処理ブロックD13〜Dn3の容量を除いた値となる。このとき、残量W4は、下限値Lを下回っている(W4<L)ので、図12のステップS37でYESと判定され、ステップS38に進んでバッファ14bの更新処理が実行される。バッファ14bの更新処理が実行されると、図17に示すように、第4番目の処理ブロックD14〜Dn4がバッファ14bの先頭に配置され、第5番目以降の処理ブロックがそれに続いて配置されている。また、Sアドレスは、バッファ14bの先頭に復元されるとともに、残量W1〜Wnがバッファ14bの長さである0x2000に復元され、ビットは更新されず直前の値が保存される。したがって、図17に示すバッファ14bでは、図11の場合と同様の処理が実行される。
以上のような処理を繰り返すことにより、画像データを復号することができる。
以上に説明したように、本発明の実施の形態によれば、画像処理回路20が解析テーブル14kを参照しながら画像切り出し処理を実行するとともに、次の列データ用の解析テーブル14kを生成するようにしたので、画像の回転処理を高速に実行することができる。
また、本発明の実施の形態では、画像処理回路20が切り出し処理と、解析処理とを自動的に実行するようにしたので、例えば、処理ブロックの処理が完了するたびに、割り込みを発生してCPU10に事後の処理を担当させる場合に比較して、割り込み処理に係るオーバヘッドを省略することにより処理を高速化することができる。また、CPU10の負担を軽減することにより、システム全体としての処理速度を向上することができる。なお、必要に応じて、割り込みを発生してCPU10に事後の処理を担当させることも可能である。
また、本発明の実施の形態では、図11に示すようなバッファ14bを設け、処理の開始位置をSアドレスで表し、また、バッファ14bの更新時期を残量Wによって判定するようにしたので、処理開始位置と更新時期を確実に知ることができる。また、Sアドレスおよび残量Wの計算処理にかかるコストを削減することができる。すなわち、Sアドレスについては、画像処理回路20において処理が完了したデータ量に応じた値を加算することで得られる。また、残量Wについては、バッファ14bの長さである0x2000から画像処理回路20において処理が完了したデータ量に応じた値を減算することにより得られる。したがって、加減算によってこれらの値を簡単に計算することができる。
また、本実施の形態では、図9に示すように、解析テーブル14kのY、Cb、Crをそれぞれ2バイトに設定し、アドレスおよびビットを4バイトに、Sアドレスを4バイトに、また、残量Wを2バイトに設定して合計16バイト(128ビット)とした。このため、データ量がバス幅として頻繁に用いられる16ビット、32ビット、64ビットの倍数となるので、バス線をいっぱいに使用して、少ない回数で解析テーブル14kに格納された情報を読み出すことができる。
第2の実施の形態.
次に、本発明の第2の実施の形態について説明する。本発明の第2の実施の形態は、第1の実施の形態と構成は略同様であるが、図18に示すように、複数の画像データ(図18では2枚の画像データ)を同時に回転して出力することができるように、テーブルに関する処理が異なっている。以下では、テーブルに関する処理を中心に説明する。
図19は、第2の実施の形態の処理の流れを説明するためのフローチャートである。このフローチャートの処理が開始されると、以下のステップが実行される。
ステップS60:画像処理回路20は、図18に示す第1の画像に対応する画像データのテーブル情報をメモリカード12から読み込み、第1の復号テーブルとして、テーブル24,25cに設定する。
ステップS61:画像処理回路20は、第1の画像に対応する画像データを読み込み、解析することにより、第1の画像の解析テーブルである第1の解析テーブルを生成する。
ステップS62:CPU10は、第1の解析テーブルを参照して、第1のバッファを生成する。なお、第1のバッファとしては、図11と同様のバッファが得られる。
ステップS63:画像処理回路20は、テーブル24,25cに格納されている第1の復号テーブルをSDRAM14の所定の領域に退避させる。
ステップS64:画像処理回路20は、図18に示す第2の画像に対応する画像データのテーブル情報をメモリカード12から読み込み、第2の復号テーブルとして、テーブル24,25cに設定する。
ステップS65:画像処理回路20は、第2の画像に対応する画像データを読み込み、解析することにより、第2の画像の解析テーブルである第2の解析テーブルを生成する。
ステップS66:CPU10は、第2の解析テーブルを参照して、第2のバッファを生成する。なお、第2のバッファとしては、図11と同様のバッファが得られる。なお、第1のバッファと第2のバッファはSDRAM14の異なる領域に格納される。
ステップS67:画像処理回路20は、テーブル24,25cに格納されている第2の復号テーブルをSDRAM14の所定の領域に退避させる。
ステップS68:CPU10は、第1の画像を印刷するために、レジスタ23およびレジスタ25bに対して第1の復号テーブルおよび第1の解析テーブルの先頭アドレスを書き込むとともに、復号処理を実行するように画像処理回路20に要求する。その結果、画像処理回路20は、SDRAM14に退避されている第1の復号テーブルをテーブル24,25cに書き戻す。
ステップS69:画像処理回路20は、第1の復号テーブルおよび第1の解析テーブルを参照して、第1のバッファに格納されている第1の画像データの所定の列に対する切り出し処理を実行する。すなわち、画像処理回路20は、図12に示すフローチャートのステップS30〜ステップS40の処理を実行することにより、第1の解析テーブルを更新しながら、第1のバッファに格納されている画像データの復号処理を実行する。
ステップS70:CPU10は、第2の画像を印刷するために、レジスタ23およびレジスタ25bに対して第2の復号テーブルおよび第2の解析テーブルの先頭アドレスを書き込むとともに、復号処理を実行するように画像処理回路20に要求する。その結果、画像処理回路20は、SDRAM14に退避されている第2の復号テーブルをテーブル24,25cに書き戻す。
ステップS71:画像処理回路20は、第2の復号テーブルおよび第2の解析テーブルを参照して第2のバッファに格納されている第2の画像データの所定の列に対する切り出し処理を実行する。すなわち、画像処理回路20は、図12に示すフローチャートのステップS30〜ステップS40の処理を実行することにより、第2の解析テーブルを更新しながら、第2のバッファに格納されている画像データの復号処理を実行する。
ステップS72:CPU10は、すべての列データに対する処理が完了したか否かを判定し、完了していない場合にはステップS68に戻って同様の処理を繰り返し、それ以外の場合には処理を終了する。
図20は、以上の処理における動作の概要を示す図である。この図に示すように、画像処理回路20は、第1の画像を処理する場合には、第1の解析テーブルを参照し、第1のバッファから画像データを切り出し、また、第2の画像を処理する場合には、第2の解析テーブルを参照して第2のバッファから画像データを切り出す。また、テーブル24,25cは、第1の画像を処理する場合には、第1の復号テーブルが書き戻され、第2の画像を処理する場合には、第2の復号テーブルが書き戻されて処理が実行される。その結果、図18に示すように、第1および第2の画像データを回転させることができる。
以上に説明したように、本発明の第2の実施の形態では、列単位で解析テーブル、バッファ、および、復号テーブルを切り換えて復号処理を行うようにしたので、複数の画像データを同時に回転させることができる。
また、本発明の第2の実施の形態では、CPU10から使用するテーブル(復号テーブルおよび解析テーブル)を指示し、復号処理を実行するようにしたので、画像処理回路20は複数の画像を処理していることを意識することなく、処理を実行することができる。
なお、以上に説明した第2の実施の形態では、復号テーブルをSDRAM14に退避させるようにしたが、テーブル24,25cの容量を大きくしてこれらを格納可能とし、退避に係る処理時間を短縮するようにしてもよい。そのような実施の形態によれば、処理を高速化することができる。
また、以上に説明した第2の実施の形態では、2つの画像を処理対象としたが、例えば、3つ以上の画像を同時に処理可能とすることも可能である。
なお、以上の各実施の形態は、一例であって、これ以外にも種々の変形実施態様が存在する。例えば、以上の各実施の形態では、画像データを時計方向に90度回転させる場合を例に挙げて説明したが、例えば、反時計方向に90度回転させたり、時計方向または反時計方向に180度または270度回転させたりすることも可能であることはいうまでもない。回転させる方向および角度に応じて起点ブロックおよび切り出す順序を変更すればよい。
また、以上の各実施の形態では、図8(A)に示すように、5つのMCUが行方向に並んだ処理ブロックを例に挙げて説明を行ったが、本発明はこのような場合に限定されるものではなく、例えば、処理ブロックが1〜4つまたは6つ以上のMCUによって構成されるようにしてもよい。
また、以上の実施の形態では、画像データを解析する際に(例えば、ステップS12の処理で)、メモリカード12に格納されている画像データをSDRAM14に一旦読み込んでからハフマン処理部22aで解析するようにしたが、メモリカード12から直接読み込んで解析することも可能である。本発明の各実施の形態では、画像データをSDRAM14に一旦格納してから解析を行うようにしたが、これは、メモリカード12からの読み込み速度が低速であるので、SDRAM14にまとめて読み込んで一括して処理した方が処理速度が向上すること、および、SDRAM12を使用することで、一旦読み込んだデータを再利用することが可能である(キャッシュとしての作用を期待できる)ことに基づいている。
また、図1および図2に示す回路は一例であって、本発明がこのような場合にのみ限定されるものではないことはいうまでもない。
また、図1および図2に示す回路のうち、メモリカード12を除く部分については、単一の半導体装置として構成することも可能であるし、また、複数の半導体装置として構成することも可能である。
また、図12に示す処理では、ステップS36,37の処理については、CPU10が実行するようにしたが、例えば、画像処理回路20が実行するようにしてもよい。そのような実施の形態によれば、ステップS37においてYと判断されるまでは、CPU10は処理に関与する必要がなくなり、1列分のMCUの処理が終了する毎にCPU10が関与する図12の場合に比較して、CPU10の負担を軽減し、処理を高速化することができる。
また、以上の各実施の形態に示す画像処理装置を、例えば、インクジェットプリンタ等の印刷装置に利用することができる。適用可能な印刷装置としては、例えば、ホストコンピュータを接続することなく画像の印刷が可能ないわゆるスタンドアロンプリンタや、プリンタ、ファックス、コピー、スキャナ等の機能を有するいわゆる複合機がある。このような印刷装置に本発明を適用することにより、画像を高速に印刷することが可能になる。
また、以上の各実施の形態では、メモリカード12を本体が有するメモリカードI/F11に直接接続するようにしたが、例えば、メモリカード12が内蔵または接続された電子機器(例えば、ディジタルカメラ)を接続ケーブル(例えば、USB接続ケーブル)によって接続し、当該電子機器に内蔵または接続されたメモリカード12から圧縮画像データを読み出して前述の処理を実行するようにしてもよい。その場合、メモリカードI/F11を介してメモリカード12が接続されても、接続ケーブルを介して電子機器が接続されても双方に対応可能としておき、それらのいずれの接続形態を選択するかを、ユーザインタフェースによって指示を受けるようにしてもよい。具体的には、ディジタルカメラを接続する様子を示すアイコンまたは内蔵のスロットにメモリカードを挿入する様子を示すアイコンの2種類を表示装置に表示し、これらのいずれが選択されたかによって接続形態を選択するようにすることができる。
また、接続ケーブルを介してメモリカードが内蔵または接続された電子機器が接続された場合には、本装置側の操作部が操作されて画像が選択されて上述の処理が実行されるようにしてもよいし、電子機器側の操作部が操作されて画像が選択されて上述の処理が実行されるようにしてもよい。すなわち、いわゆるピクトブリッジ規格に基づいて画像を処理するようにしてもよい。
また、印刷装置のみならず、例えば、ディジタルカメラ等のディジタル機器に対しても本発明を適用することができる。例えば、ディジタルカメラに本発明を適用した場合には、少ないメモリで効率よく画像データを回転させることができる。
また、以上の各実施の形態では、画像処理回路20が圧縮画像データを読み込んで解析テーブル14kを作成する際には、解析テーブル14kを作成する処理のみを実行するようにしたが、例えば、図5に示すAPF処理52において必要なサンプリングデータ、ヒストグラムデータ、および/または、補正用パラメータを併せて生成するようにしてもよい。すなわち、APF処理52では、まず、復号処理によって得られた画像データを所定の割合でサンプリングしてサンプリングデータを生成し、当該サンプリングデータに対して統計処理を施すことで、ヒストグラムデータ(例えば、RGBの各色の輝度の分布を示す情報)を得る。そして、得られたヒストグラムデータと、ユーザによる設定情報(ユーザによって直接指示された補正に関する情報)、および、EXIF(Exchangeable Image File Format)情報(撮影時の状況(露光等)を示す情報)等を参照して、補正用パラメータを生成する。APF処理52では、補正用パラメータに基づいて画像データに補正処理を施し、所望の画像となるように補正する。したがって、解析テーブル14kを作成する際に併せてサンプリングデータ、ヒストグラムデータ、および/または、補正用パラメータを作成しておけば、その後に実行される印刷処理において再度これらを作成する必要がなくなるので、処理速度を向上させることができる。なお、サンプリングデータ、ヒストグラムデータ、補正用パラメータの順にデータ量が少ないので、SDRAM14の容量が少ない場合には、後者のデータを選択する程、必要な記憶容量が節約できる。また、後者のデータを選択する程、印刷処理の際のデータ処理量が節約できるので、一層の高速化が期待できる。なお、補正用パラメータについては、ユーザによる設定情報が変更された場合には、再度算出する必要があるため、補正用パラメータのみならず、サンプリングデータまたはヒストグラムデータを併せて保存しておき、設定の変更があった場合にはこれらのデータから補正用パラメータを再度算出するようにしてもよい。
なお、第2の実施の形態のように、複数の画像を対象として処理する場合には、それぞれの画像の解析テーブルを作成する際に併せてサンプリングデータ等を作成してそれぞれの画像に対応付けして格納しておき、APF処理52の際には対応するサンプリングデータ等を参照して補正処理を施すようにすればよい。この場合も、前述の場合と同様に処理速度を向上させることができる。
10 CPU(格納手段、中央処理回路)、12 メモリカード(外部の格納手段)、14 SDRAM(内部の記憶手段、内部記憶回路)、20 画像処理回路(生成手段、復号手段、更新手段)