説明

画像処理装置、画像処理方法、及びプログラム

【課題】JPEGデータからMCUを単位として指示されたサイズでの画像の切り出しや複数のJPEGデータの接合処理を軽い処理負荷で実行可能な画像処理装置及び画像処理方法を提供することである。
【解決手段】JPEGデータを入力し、これをハフマン符号化するとともに、入力されたJPEGデータに対する切り出し或は接合を指示する。この切り出し或は接合の指示により、切り出された或は接合されたJPEGデータでは端の部分となるMCUを判別する。そして、各MCUに関し前記JPEGデータのDC成分値を計算し、端の部分となると判別されたMCUに関しては、切り出された或は接合されたJPEGデータにおいて2つの連続するMCUのDC成分の差分を計算する。さらに、計算された差分値を、切り出される前記接合される前の元のJPEGデータのDC成分ハフマンテーブルに従って符号語に変換し、その変換された符号語で2つの連続するMCUの一方のMCUのDC成分の符号語を書き換える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は画像処理装置及び画像処理方法に関する。本発明は、特に、画像原稿を光学的な読込んで画像処理を行う、例えば、マルチファンクションプリンタ装置のような画像処理装置及び画像処理方法に関する。
【背景技術】
【0002】
画像圧縮のアルゴリズムとして、JPEGのベースライン規格がよく使われている。図8はRGBデジタル画像データをベースライン規格のJPEGデータに変換するために用いられるアルゴリズムのフローチャートである。
【0003】
このフローチャートによると、ステップS101では、各画素のRGB画素値を、YCbCr(輝度・色差)データに変換する。ステップS102では、変換した輝度・色差データを、x×y画素(x,y=8或は16)のブロックに分割する。ステップS103ではステップS102で得られた各ブロックに対し、色差データに関しては、8×8画素になるように縮小処理を行う(サブサンプリング)。輝度データは元のブロックを1つまたは複数の8×8画素のブロックに分割する。このようにして得られた、輝度(1〜4個)、色差(1個×2成分)の8×8画素のブロックの組をMCU(Minimum Coded Unit:最小符号化ユニット)と呼ぶ。
【0004】
さらに、ステップS104では、ステップS303で得られた8×8画素の各ブロックに対し離散コサイン変換(DCT演算)処理を行い、周波数成分に変換して8×8個の二次元係数値を得る。ステップS105では、得られた二次元係数の各値を、輝度・色差ごとに異なる量子化テーブルを用いて量子化する。ステップS106では、量子化後のデータを、DC成分とAC成分とに分けてハフマンコードに割り当てる符号化を行う。この際、DC成分に関しては一つ前のMCUまたはブロックのDC成分値との差分値を符号化する。AC成分に関しては、量子化後のデータ列において、量子化値とその前に続く“0”の数(ゼロラン)との組で符号を割り当てる。
【0005】
そして、ステップS107では各ブロックで得られた符号データ列を、それぞれジグザグ順で輝度・色差の順に並べる。さらに、ステップS108ではステップS107における処理を各MCU単位で行い、最後にMCUごとの符号データ列を並べる。
【0006】
JPEGデータを伸張してRGBデータに戻す場合は、図8に示すフローチャートの処理を逆にたどる。
【0007】
ここで、ステップS106において、DC成分に関しては各色成分について一つ前のMCUでの値を参照している。このため、一般には任意位置のMCUからJPEGの伸張処理を開始することはできず、JPEGデータの先頭からMCU単位で順次伸張処理を行う必要がある。このように、JPEGデータは、上記のように、各MCUの各色成分のDC成分値について、以前のMCUでの値を参照している。このため、画像の一部を符号のままMCU単位で切り出したり、複数のJPEGデータを符号のまま接合して1枚のJPEGデータにまとめることは困難である。
【0008】
ただし、JPEG規格によれば、JPEG符号化の処理時に、所定数のMCUごとに、MCU−MCU間にリスタートマーカという特殊なデータを挿入することで、その位置から伸張処理を行うことを可能にしていでる。リスタートマーカのある個所では、DC成分に関して前のMCUでの値を参照せず、差分でない本来の値を用いて符号化が行われる。このため、リスタートマーカの前でJPEGデータを符号のまま切断したり、リスタートマーカを用いて複数の(同じ大きさの)JPEGデータを接合することができる。例えば、特許文献1は、複数のJPEG画像に対し、おのおのの末尾のEOIマーカをリスタートマーカに書き換えてから結合し、1つのJPEG画像にまとめる方法を開示している。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】特開2006−129295号公報
【発明の概要】
【発明が解決しようとする課題】
【0010】
上述のように、リスタートマーカを用いると、比較的容易にJPEGデータの切断や接合を行うことができる。しかしながら、JPEG規格上、リスタートマーカは、1枚のJPEGデータ内では一定数のMCU毎にしか挿入することができず、任意の位置のMCU間に挿入することはできない。全MCU間に入れることは規格上可能だが、その場合はマーカによるサイズ増加が元の符号データ量に対して非常に大きくなってしまうという問題がある。
【0011】
図9は従来例の課題を説明するための図である。
【0012】
例えば、一度大きなJPEGデータを作成後、図9(a)に示す画像を図9(b)に示す画像のように、そこから任意の位置の画像データをMCU単位で切り出すような処理を行う場合を考える。ここで、図9(c)は元画像が48個(MCU1〜MCU48)のMCUを有し、切り出す画像が20個(MCU10〜14、18〜22、26〜30、34〜38)のMCUを有していることを示している。この場合、切り出し位置のMCU間にリスタートマーカが挿入されていなければ、いったんJPEGデータをすべて伸張して圧縮前の画像に戻し、その画像に対してMCU単位の切り出しの処理を実行後、切り出された画像を再圧縮するという処理が必要になる。
【0013】
この処理を行うには、伸張および圧縮でハフマン復号化/符号化、DCT演算、量子化/逆量子化の処理が必要なため、長い処理時間や膨大な処理資源(ハードウェアなど)が必要である。加えて、再圧縮のために元のJPEGデータからの画質劣化も生じる。
【0014】
また、特許文献1のように、同じ条件(サンプリング比、量子化係数)で圧縮された複数のJPEGデータを接合して1枚のJPEGデータを作成するようなニーズもあるが、その他のニーズもある。例えば、接合される複数のJPEGデータの大きさが異なる場合には、一般にはリスタートマーカとリスタートマーカの間のMCU数を一定にできないため、接合後のJPEGデータはJPEG規格を満足することができない。
【0015】
この点を図10を参照して説明する。
【0016】
例えば、図10(a)に示すようなMCU数が横3×縦4のJPEGデータと、図10(b)に示すようなMCU数が横5×縦4のJPEGデータを左右に接合する場合を考える。この場合、各画像の右端のMCUのデータの後にリスタートマーカーを挿入してあれば、特許文献1が開示する技術によりデータ的に接合することは可能である。しかしながら、図10(c)に示すような接合後の画像データはリスタートマーカ間のMCU数(リスタートインターバル)が一定でないためJPEG規格を満足しない。
【0017】
本発明は上記従来例に鑑みてなされたもので、JPEGデータからMCUを単位として指示されたサイズでの画像の切り出しや複数のJPEGデータの接合処理を軽い処理負荷で実行可能な画像処理装置及び画像処理方法を提供することを目的としている。
【課題を解決するための手段】
【0018】
上記目的を達成するために本発明の画像処理装置は、次のような構成からなる。
【0019】
即ち、JPEGデータを入力しMCU単位で処理する画像処理装置であって、前記JPEGデータをハフマン符号化する符号化手段と、前記入力されたJPEGデータに対する切り出し或は接合を指示する指示手段と、前記指示手段による切り出し或は接合の指示により、前記切り出された或は前記接合されたJPEGデータでは端の部分となるMCUを判別する判別手段と、各MCUに関し前記JPEGデータのDC成分値を計算する第1の計算手段と、前記判別手段により端の部分となると判別されたMCUに関し、前記切り出された或は接合されたJPEGデータにおいて2つの連続するMCUのDC成分の差分を計算する第2の計算手段と、前記第2の計算手段により計算された差分値を前記切り出されるか或は前記接合される前の元のJPEGデータのDC成分ハフマンテーブルに従って符号語に変換する変換手段と、前記変換手段により変換された符号語で前記2つの連続するMCUの一方のMCUのDC成分の符号語を書き換える書き換え手段とを有することを特徴とする。
【0020】
また他の発明によれば、JPEGデータを入力しMCU単位で処理する画像処理装置の画像処理方法であって、前記JPEGデータをハフマン符号化する符号化工程と、前記入力されたJPEGデータに対する切り出し或は接合を指示する指示工程と、前記指示工程における切り出し或は接合の指示により、前記切り出された或は前記接合されたJPEGデータでは端の部分となるMCUを判別する判別工程と、各MCUに関し前記JPEGデータのDC成分値を計算する第1の計算工程と、前記判別工程において端の部分となると判別されたMCUに関し、前記切り出された或は接合されたJPEGデータにおいて2つの連続するMCUのDC成分の差分を計算する第2の計算工程と、前記第2の計算工程により計算された差分値を前記切り出されるか或は接合される前の元のJPEGデータのDC成分ハフマンテーブルに従って符号語に変換する変換工程と、前記変換工程において変換された符号語で前記2つの連続するMCUの一方のMCUのDC成分の符号語を書き換える書き換え工程とを有することを特徴とする画像処理方法を備える。
【発明の効果】
【0021】
従って本発明によれば、比較的少ない処理で1枚のJPEGデータから画質劣化なくMCU単位の切り出しを行ったり、複数のJPEGデータを画質劣化なく接合して1枚のJPEGデータと生成することができるという効果がある。
【図面の簡単な説明】
【0022】
【図1】本発明の代表的な実施例であるマルチファンクションプリンタ(MFP)装置の概観斜視図である。
【図2】図1で示したMFP装置の上部に備え付けられた画像読取装置の断面図である。
【図3】画像読取装置の制御回路の構成を示すブロック図である。
【図4】入力JPEGデータからMCU単位で切り出し処理を行った際の各ハフマン符号語の状態変化について示す図である。
【図5】実施例1に従う画像処理部の構成を示すブロック図である。
【図6】実施例2において、2つのJPEGデータを左右接合する様子を示す図である。
【図7】実施例2に従う画像処理部の構成を示すブロック図である。
【図8】一般的なJPEG符号化処理を示すフローチャートである。
【図9】JPEG画像切り出し処理を示す図である。
【図10】JPEGデータを接合する場合の不具合について説明する図である。
【発明を実施するための形態】
【0023】
以下添付図面を参照して本発明の好適な実施例について、さらに具体的かつ詳細に説明する。なお、既に説明した部分には同一符号を付し重複説明を省略する。
【0024】
なお、この明細書において、「記録」(「プリント」という場合もある)とは、文字、図形等有意の情報を形成する場合のみならず、有意無意を問わない。また人間が視覚で知覚し得るように顕在化したものであるか否かを問わず、広く記録媒体上に画像、模様、パターン等を形成する、または媒体の加工を行う場合も表すものとする。
【0025】
最初に共通実施例として用いるマルチファンクションプリンタ装置(以下、MFP装置)の構成について説明する。
【0026】
<MFP装置>
図1は本発明の代表的な実施例であるMFP装置100の概観斜視図である。
【0027】
MFP装置は、接続されたホスト(不図示)からの画像データに基づいて、記録用紙などの記録媒体に画像を記録する以外に、メモリカードなどに格納された画像データに基づいた記録や画像原稿を光学的に読取って複写することができる。
【0028】
図1において、(a)は原稿カバー103が閉じられた状態を示しており、(b)は記録媒体の載置トレー101、排紙トレー102、及び原稿カバー103が開けられた状態を示している。
【0029】
また、コンタクトイメージセンサ(CIS)ユニットを搭載する読取部8は画像原稿を読取り、R成分、G成分、B成分のアナログ輝度信号を出力する。カードインタフェース9は、例えば、デジタルスチルカメラ(不図示)で撮影された画像ファイルを記録したメモリカードなどを挿入して、操作部4の所定の操作に従い、そのメモリカードから画像データを読み込むのに使用される。また、MFP装置100にはLCD110のような表示部が設けられている。LCD110は操作部4による設定内容の表示や機能選択メニューの表示や画像の表示などのために用いられる。
【0030】
図2は図1で示したMFP装置の上部に備え付けられた画像読取装置の断面図である。
【0031】
図2に示すように、画像読取装置200は本体部210と読取対象となる原稿220を押さえつけ外部からの光を遮光する圧板230とから構成される。圧板230は原稿カバー103の裏面にセットされている。本体部210には光学ユニット240、光学ユニット240と電気的に接続された回路基板250、光学ユニット240を走査させる際のレールとなるスライディングロッド260、原稿台ガラス270が備えられる。光学ユニット240には原稿220に光を照射し、その反射光を受光して電気信号に変換するするコンタクトイメージセンサ(CIS)ユニット300が内蔵される。画像読取の際には原稿台ガラス270上に置かれた原稿220を光学ユニット240が矢印Bの方向(副走査方向)に走査することにより原稿220に記録された画像の読取を行う。
【0032】
図3は画像読取装置(スキャナ)の制御回路の構成を示すブロック図である。
【0033】
なお、図3において、既に図1〜図2において説明した構成要素には同じ参照番号を付し、その説明は省略する。
【0034】
CISユニット300はLED駆動回路403において1ライン毎に各色のLED303〜305を切り替えて点灯させることにより、線順次にカラー画像を読み取る。LED303〜305は原稿への照射光量を変化させることが可能な光源である。また、LED駆動回路403はLED303〜305を任意に点灯させることが可能である。
【0035】
即ち、LED303〜305を1つずつ順次点灯させることも、2つずつ順次点灯させることも、場合によっては3つ全て点灯させることも可能である。増幅器(AMP)404はCISユニット300より出力された信号を増幅し、A/D変換回路405はその増幅された電気信号をA/D変換して、例えば、各画素各色成分16ビットのデジタル画像データを出力する。 画像処理部600は、A/D変換回路405によって変換されたデジタル画像データを処理する。インタフェース制御回路406は画像処理部600から画像データを読み込んで、外部装置412との間で制御データの授受や画像データの出力を行う。また、画像処理部600からの画像データは画像記録部にも出力することができる。外部装置412とは、例えば、パーソナルコンピュータ(不図示)、デジタルカメラ、メモリカードなどである。
【0036】
また、画像処理部600では外部装置から入力した画像データ、或は、画像読取装置(スキャナ)200が画像原稿を読取ることにより生成した画像データを画像処理して画像記録部700に出力することができる。
【0037】
画像記録部700は、インタフェース制御回路406からの画像データを画素毎に「記録する」「記録しない」の2値データに変換し、記録媒体に記録剤を用いて画像を記録する。この実施例では、画像記録部700には、インクジェットプリンタを用いている。しかしながら、この他にも、例えば、電子写真方式を用いたレーザビームプリンタ、或は昇華型プリンタなどを用いることができる。これらのプリンタについては公知なので、ここではその詳細な説明は省略する。
【0038】
次に、以上のような構成のMFP装置の画像処理部の構成と動作について説明する。
【実施例1】
【0039】
画像処理部600は入力した画像データを一時的に格納するためのバッファメモリを備え、画像処理を行うことができる。その処理を実行するに当り、ユーザは操作部4を操作して指示を与えることもできる。例えば、以下に示すような、JPEGデータから一部を切り出す場合の切り出し箇所の指定などを行うことができる。
【0040】
ここでは、図8に示すように、1枚のJPEGデータから、MCU単位で部分的にJPEGデータ矩形画像として切り出し、切り出した結果を画質劣化なく1枚のJPEGデータとして生成する機能を持つ画像処理装置について説明する。
【0041】
まず、JPEGデータの構造について説明する。簡単のため、サンプリング比が4:4:4(サブサンプリングしない)で、リスタートマーカーが存在しない例について説明する。また、符号データの“0×FF”の後に挿入される“0×00”(スタッフバイト)はすでに除かれていてここでは考えないものとする。
【0042】
1つのMCUはY、Cb、Crの3つの色成分からなり、各色成分は8×8画素のブロックを表す。JPEG圧縮処理時に各色成分の8×8画素のブロックに対して、DCT演算および量子化の処理を行って8×8の係数列を得た後、この系数列をジグザグスキャンし、DC成分値(8×8の左上端)とAC成分値(残り63個の係数列)で別々の符号化を行う。DC成分値は、前のMCUでの同じ色成分のDC成分値の本来の値との差分を計算し、その値を1個のハフマン符号に割り当てる。AC成分値については、63個の係数値のうちゼロの個数が多くなる。このため、「ゼロの連続数+非ゼロの数値」の組を1個のハフマン符号語に割り当てる。最後までゼロが続く場合は、EOB(End of Block)という特殊なハフマン符号語を割り当てる。よって、1MCUの1成分のハフマン符号語列は、「DC成分値のハフマン符号語1つ」と「AC成分値の複数のハフマン符号語」がこの順に並んだものとして構成される。これが3色成分並ぶことで1つのMCUの符号を形成し、それがさらに元画像を形成する総MCU分並ぶことで、1枚のJPEG画像データの符号部分を形成する。
【0043】
図4は1枚の画像を形成するJPEGデータの符号部分の構造をハフマン符号語の1個単位で示す様子を示す図である。
【0044】
ここでは、図4(a)に示すような16×16画素のサンプリング比4:4:4のカラーJPEGデータを例とする。MCU数は横2×縦2となる。説明の便宜上、個々のMCUには図4(a)のようにMCU0、MCU1、MCU2、MCU3という番号を付す。
【0045】
MCUiはYCbCr色成分から構成され、各色成分はDC/AC成分値を示す符号語から構成され、うちDC成分値は1個のハフマン符号語で表現され、AC成分値は複数個のハフマン符号語で表現される。これを符号語の単位で示すと図4(b)に示すようになる。
【0046】
ここで、Yi_DC、Cbi_DC、Cri_DC(i=0〜3)はそれぞれ、MCUiの各色成分のDC成分値を表すハフマン符号語である。Yi_AC[k]、Cbi_AC[k]、Cri_AC[k]はそれぞれ、MCUiの各色成分のAC成分値を示すハフマン符号語のうちk番目であることを示す。また、MCUiの各色成分のAC成分値を示すハフマン符号語の数は、Y、Cb、Cr成分についてそれぞれpi,qi,riであるとする。
【0047】
さて、Yi_DC、Cbi_DC、Cri_DCの各符号語を元のJPEGデータの各色成分のDC成分ハフマンテーブルに従って複号化して数値に換算する。この場合、その換算値はそれぞれ、Dec[Yi_DC]、Dec[Cbi_DC]、Dec[Cri_DC]になるものとする。MCUiの各色成分のDC成分値の伸張後の値をそれぞれDY[i]、DCb[i]、DCr[i]とすると、JPEG符号化時に前のMCUでのDC成分値との差分値をハフマン符号語に置き換えているため、これらDC成分値は以下のようになる。
【0048】
即ち、i=0のとき
DY[0] =Dec[Y0_DC]、
DCb[0]=Dec[Cb0_DC]、
DCr[0]=Dec[Cr0_DC]
である。
【0049】
一方、i≠0のとき
DY[i] =DY[i−1] +Dec[Yi_DC]、
DCb[i]=DCb[i−1]+Dec[Cbi_DC]、
DCr[i]=DCr[i−1]+Dec[Cri_DC]
となる。
【0050】
ここで、図4(a)に示すような4つのMCUからなるJPEG画像データから、図4(c)に示すようなMCU1とMCU3だけからなるJPEG画像データを切り出す処理について考える。
【0051】
この場合、MCU1とMCU3のAC成分を表す符号語群は、切り出した後のJPEGデータにおいても同じものを使うことができる。ただしDC成分値については、MCU1のDC成分値がMCU0のDC成分値との差分値を、同じくMCU3ではMCU2との差分値を参照して符号化されている。このため、単純に符号語をMCU単位で切り出しただけでは、切り出した後のJPEG符号データを正常に伸張することができない。つまり、切り出された後の左端のMCU毎に、各色成分のDC成分値を計算(=各MCUで差分値を積算)し、切り出された画像でその前に存在するMCUのDC成分値との差分を計算して、その差分値を符号化しなければならない。
【0052】
図4(c)に示す例でいうと、MCU1,3のDC成分値は
DY[1] =DY[0] +Dec[Y1_DC]
DCb[1]=DCb[0]+Dec[Cb1_DC]
DCr[1]=DCr[0]+Dec[Cr1_DC]
DY[3] =DY[2] +Dec[Y3_DC]
DCb[3]=DCb[2]+Dec[Cb3_DC]
DCr[3]=DCr[2]+Dec[Cr3_DC]
となる。
【0053】
ある値xをDC成分値のハフマンテーブルに従って符号化するとEnc[x]という符号語になるものとする。また、MCU1,3のDC成分のハフマン符号語をY’j_DC、Cb’j_DC、Cr’j_DC(j=1,3)とすると、これらは次のようになる。
【0054】
即ち、
Y’1_DC =Enc[DY[1]] =
Enc[DY[0]+Dec[Y1_DC]]
Cb’1_DC=Enc[DCb[1]]=
Enc[DCb[0]+Dec[Cb1_DC]]
Cr’1_DC=Enc[DCr[1]]=
Enc[DCr[0]+Dec[Cr1_DC]]
Y’3_DC =Enc[DY[3]−DY[1]]
=Enc[DY[2]+Dec[Y3_DC]
−(DY[0]+Dec[Y1_DC]) ]
Cb’3_DC=Enc[DCb[3]−DCb[1]]=
Enc[DCb[2]+Dec[Cb3_DC]
−(DCb[0]+Dec[Cb1_DC])]
Cr’3_DC=Enc[DCr[3]−DCr[1]]=
Enc[DCr[2]+Dec[Cr3_DC]
−(DCr[0]+Dec[Cr1_DC])]
として得られる。
【0055】
このようにして得られた切出し後のMCU1,3のDC成分値のハフマン符号語を用いて図4(d)のように符号語を並べ、その最初にJPEGヘッダ、最後にEOIマーカを付加する。このようにすることで、図4(c)のMCU1,3のみからなる画像のJPEGデータを生成することができる。
【0056】
つまり、切り出されたMCU群について、左端のMCUと右端のMCUのDC成分値とその差分値を計算し、左端のMCUについては、そのDC成分符号語を、その差分値から得られる符号語に置き換える。このようにすることで、切出し後のMCU群の符号群が1枚のJPEGデータとして扱えるようになる。
【0057】
このように、JPEGデータからMCU単位で符号データを切り出す際に、切り出された画像の左端のMCUにおいて、そのDC成分値を計算し、DC成分値を示す符号語のみを書き換え、他の符号語はもとのJPEGデータのものをそのままコピーする。このようにすることで、切り出された結果もまたJPEGデータとすることができる。この切り出し処理においては、量子化・逆量子化、およびDCT演算処理が不要なため、ハードウェア資源(論理回路のゲート数またはCPU処理能力)をさほど必要とせず、また画質劣化を伴うこともない。
【0058】
図5は、画像処理部600の内部構造を示すブロック図である。この画像処理部ではスキャナから画像原稿を読取って得られたRGB画像データにYCbCrに色空間変換してJPEG符号化し内部のバッファメモリに格納されたJPEGデータを扱う。JPEG符号化そのものについては公知なのでその説明は省略する。なお、この図に示す各ブロックは、ASICなどのハードウェア回路またはソフトウェア処理モジュール(プログラム)のどちらで実現しても良い。また、画像処理部600では、外部装置からJPEGデータを入力した場合には、そのまま処理を実行する。
【0059】
図5において、DMAコントローラ(DMAC)601がメモリからJPEGデータを読み出し、スタッフバイト除去部602では読み出したJPEGデータから、スタッフバイト(0×FFのあとの0×00)を除去する。次に、ハフマン符号化器603はJPEGデータのハフマン符号化を行い、各符号語に分解する、符号語数カウンタ604は各符号語を解析およびカウントし、MCUの切れ目、YCbCrの各色成分の切れ目、DC/AC成分値の切れ目を判別する。MCU数カウンタ605は符号語数カウンタ604での切れ目の判別結果に従い、入力された符号データのMCU数をカウントする。そして、DC成分値計算ブロック606は各MCUの各色成分のDC成分値を計算する。
【0060】
またさらに、MCU切り出し部607はカウントされたMCU数に基づき、ハフマン符号化器603で変換された符号語群に対し、削除するMCUに含まれる符号語と切り出して残すMCUに含まれる符号語を弁別する。そして、DC差分値計算部608は、切り出されたMCUについて、計算された各MCUのDC成分値から、切り出された後のMCU群の右端と左端(JPEGデータの接合部)のMCUの各色成分のDC成分値の差分値を計算する。
【0061】
その後、このようにして計算されたDC差分値について、DC成分値符号語生成部609はその差分値に対応するハフマン符号語を生成する。さらに、バイトパッキング部610では、切り出されたAC成分の符号語と、DC成分値符号語生成部609で書き換えられたDC成分の符号語を合わせ、バイト単位にまとめる。このようにバイト単位にまとめられたJPEGデータの符号語に対し、スタッフバイト挿入部611は、JPEG規格に従って、1バイトが“0×FF”になっているバイトの次に“0×00”のバイトを挿入し、ワードバッファ612に出力する。ワードバッファ612では、出力される符号データ列を一時的にある程度の容量まで貯めることができる。
【0062】
その後、DMAコントローラ(DMAC)613はワードバッファ612にある程度の容量の符号語データ列がたまった時点で、そのデータをDMA出力する。
【0063】
なお、DMAC601〜DC成分値計算部606についてはJPEG方式に従う通常の伸張装置内で、バイトパッキング部610〜DMAC613についてはJPEG方式に従う通常の圧縮装置内で行われている処理と同じ機能を持つ。
【0064】
次に、この画像処理部の各部の動作について説明する。
【0065】
まず、DMAC601で、JPEGデータを入力する。ここで入力されるJPEGデータにリスタートマーカはなく、またJPEGヘッダとEOIマーカは事前に除去されているものとする。
【0066】
スタッフバイト除去部602は、入力JPEGデータをバイト単位に分解し、“0×FF”のあとに挿入されている0×00を取り除く。こうすることで、以降のブロックでは、入力データを純粋なハフマン符号語群として扱うことができる。ハフマン符号化器603では、入力されたハフマン符号語群を解析し、符号語ひとつずつに分離する。ハフマン符号化器603からの出力は各MCUの各色成分について、DC成分差分値を表す符号語1つと、AC成分の「ゼロラン+非ゼロ数値」の組み合わせを表す符号語が複数である。
【0067】
符号語数カウンタ604で、ハフマン符号化器603から出力された符号語を復号し、かつAC成分とDC成分それぞれをカウントする(第1のカウント手段)。AC成分値の符号語群について、ゼロの数+非ゼロ数値の数の合計が“63”になるか、途中でEOBを表す符号語が現れた時点で、MCUの各色成分の切れ目と判断する。DC成分とAC成分の各符号語はそのままMCU切り出し部607へ送られる。
【0068】
MCU数カウンタ605は、符号語数カウンタ604で分解された符号語群をMCU単位でカウントする(第2のカウント手段)。DC成分値計算部606は、入力された全MCUの全色成分に関するDC成分値を計算し、差分値についてはMCU、各色成分ごとに積算する(第1の計算手段)。
【0069】
MCU切り出し部607は、カウントされたMCU数に基づいて、ハフマン符号化器603から出力された符号語群のうち、切り出されるMCU以外の符号語とDC成分値を切り捨てる。そして、DC成分値はDC差分値計算部608に、DC符号語はDC成分値符号語生成部609に、AC符号語はバイトパッキング部610へ転送する。なお、どの部分を切り出すのかの切り出し指示は操作部4からユーザが指示しても良いし、外部装置からJPEGデータとともに転送される命令に含まれていてもよい。
【0070】
DC差分値計算部608では、切り出されるMCUの右端と左端のDC成分値の差分値を得る(第2の計算手段)。図9(c)に示した例でいうと、MCU10,14,18,22,26,30,34について、MCU14と18、MCU22と26、MCU30と34でのDC成分値の差分を、色成分ごとにそれぞれ計算する。MCU10については、その値を差分値とする(=0との差分)。
【0071】
DC成分値符号語生成部609では、DC差分値計算部608で計算されたMCU(図9(c)の例ではMCU10,18,26,34)についてはそのDC成分差分値について、元のJPEGデータのDC成分ハフマンテーブルに従って符号語に変換する。残りのMCU(MCU11〜14、19〜22、27〜30、35〜38)のDC成分値の符号語についてはそのままとする。その後、すべてのMCUのDC成分符号語をバイトパッキング部610へ出力する。
【0072】
バイトパッキング部610では、DC成分値符号語生成部609で計算された各MCUのDC成分符号語と、MCU切り出し部607で切り出されたAC成分符号語群を統合し並べる。そして、各MCUについて、Y成分のDC成分符号語、Y成分のAC成分符号語群、Cb成分のDC成分符号語、Cb成分のAC成分符号語群、Cr成分のDC成分符号語、Cr成分のAC成分符号語群の順に並べビット単位で連結する。
【0073】
スタッフバイト挿入部611で、バイトパッキング部610で生成された符号列を1バイト単位に分割し、そのバイトが“0×FF”になった場合は次のバイトに“0×00”を挿入する。あと、出力の最後のMCUのデータについては、バイト境界までビット1を埋め、最後にEOIマーカ(0×FFD9)を付加する。出力ワードバッファ612は、DMAに都合のいい単位(例えば、32バイト)になるまで出力データを溜め込む。最後に、DMAC613では、出力ワードバッファに蓄積したデータをDMA出力する。
【0074】
上述の処理を行うことで、入力JPEGデータから、必要な部分だけをMCU単位で切り出し、JPEG規格に合致した画像データとして出力することができる。
【0075】
従って、以上説明した実施例に従えば、画像劣化を伴うことなく、JPEGデータのMCU単位での切り出しや接合を行うことができる。また、量子化/逆量子化やDCT演算処理を行わないため、以上の処理をハードウェアで実現する場合には論理回路のゲート数を削減したり、ソフトウェアで実現する場合はその処理時間など短縮するなど、処理資源を節約することができる。
【実施例2】
【0076】
この実施例では、図6に示すように、複数のJPEGデータをMCU単位で接合し、接合した結果の画像を画質劣化なく1つのJPEGデータとして生成する機能を持つ画像処理装置について説明する。接合する複数のJPEGデータは、色成分数、サンプリング比、ハフマンテーブル、量子化テーブルがすべて同一でなければならない。
【0077】
説明を簡単にするため、この実施例では図6(a)(b)のように同じ高さの2枚のJPEGデータを左右に接合する場合について説明する。しかしながら、予め1MCU分の白画像JPEGデータを用意しておくことで、同様の手法を用いて任意のサイズのJPEGデータを任意の位置(MCU単位)に接合することが可能である。3つ以上のJPEGデータを接合する場合は、2つずつ接合する処理を繰り返せばよい。なお、どの部分を接合するのかの接合指示は操作部4からユーザが指示しても良いし、外部装置からJPEGデータとともに転送される命令に含まれていてもよい。
【0078】
図7はこの実施例に従う画像処理部の構成を示すブロック図である。この図に示す各ブロックはそれぞれ、ハードウェアで実現しても良いし、ソフトウェアで実現しても良い。この点は実施例1の画像処理部と同様である。また、図6において、601a〜606aと601b〜606bはそれぞれ図5の601〜606と同じ構成要素である。この例では、2枚のJPEG画像を扱うため、入力JPEGデータが2つあり、これらをそれぞれ独立に処理する必要があるので、図6に示すような構成となっている。前者をパスA、後者をパスBと呼ぶ。ここでは、入力画像データが図6の(a)、(b)である場合を例として説明する。(a)に示すJPEGデータはパスAを通り、(b)に示すJPEGデータはパスBを通すものとする。その他、図5で示したのと同じ構成要素には同じ参照番号を付し、その説明は省略する。
【0079】
なお、図7ではこの実施例の機能を説明するために2つのパスを明示し、そのパスを通過する構成要素を601a〜606aと601b〜606bとして明記したが、必ずしもパスの数に対応する構成要素が必要な訳ではない。例えば、図5に示すような構成要素601〜606が2つのパス(2つのデータストリーム)を並列処理可能な構成であっても良い。
【0080】
この実施例の画像処理部に特徴的な構成は符号語データマージ部614であり、接合する2つ画像を表わすJPEGデータの符号語群をマージする。
【0081】
符号語データマージ部614は、パスAを通る図6(a)に示すJPEGデータのMCU1,2,3について、符号語数カウンタ604aからDC成分とAC成分の符号語群と、DC成分値計算部606aからDC成分値を入力する。そして、DC成分値、DC符号語、AC符号語をそれぞれ、DC差分値計算部608,DC成分値符号語生成部609,バイトパッキング部610へ転送する。
【0082】
次にパスAの処理をいったん止め、パスBを通る図6(b)に示すJPEGデータのMCU13〜17についても、符号語数カウンタ604bとDC成分値計算部606bとから符号語群とDC成分値を受信する。そして、同様にDC成分値、DC符号語、AC符号語をそれぞれ、DC差分値計算部608,DC成分値符号語生成部609,バイトパッキング部610へ転送する。
【0083】
ここでパスBの処理を止め、パスAを通る図6(a)に示すJPEGデータのMCU4,5,6の処理を行う。以降同様の処理を繰り返す。
【0084】
DC差分値計算部608では、図6(a)と(b)に示すJPEGデータに関し、互いが接合するブロックにおいて、DC差分値を再計算する。図6の例では、図6(c)の斜線が施されたブロックに関してこの処理を行う。つまり、MCU13ではMCU3のDC成分値との差分を取る。以降同様に、MCU4とMCU17、MCU18とMCU6、MCU7とMCU22、MCU23とMCU9、MCU10とMCU27、MCU28とMCU12の間においてDC成分値の差分値を計算する。このようにして計算された差分値に基づき、DC成分値符号語生成部609はDC成分値の符号語に変換する。
【0085】
これ以降は実施例1と同様に、MCUが接合された境界部分(MCU13,4,18,7,23,10,28)におけるDC成分符号語のみを書き換える。そして、それ以外のDC成分、と全てのAC成分の符号語は、図6(a)(b)に示す該当MCUのものをそのまま用いて図6(c)に示すMCU順にデータを並べる。
【0086】
このように並べられたJPEGデータに対してバイトパッキング部610でバイトパッキングを、スタッフバイト挿入611ではスタッフバイト挿入を実行し、出力ワードバッファ612にデータを出力し一時的に保存する。最後に、DMAC613から処理されたJPEGデータをDMA出力する。このようにして、図6(a)(b)に示す2つのJPEGデータが接合された図6(c)に示すJPEGデータを得ることができる。
【0087】
従って、以上説明した実施例に従えば、複数のJPEGデータをMCU単位で接合し、接合した結果の画像を画質劣化なく1つのJPEGデータとして生成することができる。
【0088】
以上説明したようにこれらの実施例によれば、JPEGデータを入力として、ハフマン符号化とMCU単位のDC成分値の計算を行い、JPEGデータの切り出しや接合が起きた場所でのDC成分値の相対値を再計算する。そして、該当するDC成分値の符号語のみを書き換える処理を行ってから、それ以外(AC成分値)の符号語群を入力から出力にコピーする。
【0089】
なお、これらの場合、JPEGデータの符号部のみを対象とし、画像サイズやサンプリング比や量子化テーブルを含むJPEGヘッダ部については処理の対象としない。画像の切り出しや接合処理において、処理後の画像のヘッダ部については、別の処理部で適当に処理されることを想定している。

【特許請求の範囲】
【請求項1】
JPEGデータを入力しMCU単位で処理する画像処理装置であって、
前記JPEGデータをハフマン符号化する符号化手段と、
前記入力されたJPEGデータに対する切り出し或は接合を指示する指示手段と、
前記指示手段による切り出し或は接合の指示により、前記切り出された或は前記接合されたJPEGデータでは端の部分となるMCUを判別する判別手段と、
各MCUに関し前記JPEGデータのDC成分値を計算する第1の計算手段と、
前記判別手段により端の部分となると判別されたMCUに関し、前記切り出された或は接合されたJPEGデータにおいて2つの連続するMCUのDC成分の差分を計算する第2の計算手段と、
前記第2の計算手段により計算された差分値を前記切り出されるか或は前記接合される前の元のJPEGデータのDC成分ハフマンテーブルに従って符号語に変換する変換手段と、
前記変換手段により変換された符号語で前記2つの連続するMCUの一方のMCUのDC成分の符号語を書き換える書き換え手段とを有することを特徴とする画像処理装置。
【請求項2】
前記書き換え手段により書き換えられたDC成分の符号語と、前記切り出された或は接合されたJPEGデータに含まれ、前記書き換え手段により書き換えられいないDC成分の符号語とAC成分の符号語とを統合する統合手段と、
前記統合手段により統合されたJPEGデータを出力する手段とを有する請求項1に記載の画像処理装置。
【請求項3】
前記JPEGデータは各色成分からなり、前記符号化手段によるハフマン符号化、前記第1の計算手段による計算、前記第2の計算手段による計算、前記変換手段による変換、及び、前記書き換え手段による書き換えは前記各色成分ごとに行うことを特徴とする請求項1又は2に記載の画像処理装置。
【請求項4】
前記JPEGデータの入力と出力とはDMACにより行うことを特徴とする請求項1乃至3のいずれか1項に記載の画像処理装置。
【請求項5】
前記接合では、複数のJPEGデータに関し、色成分数、サンプリング比、ハフマンテーブル、量子化テーブルがすべて同一であることを特徴とする請求項1乃至4のいずれか1項に記載の画像処理装置。
【請求項6】
前記判別手段は、前記符号化手段から出力された符号語のうち、前記切り出されるMCU以外の符号語とDC成分値を切り捨てることを特徴とする請求項1乃至5のいずれか1項に記載の画像処理装置。
【請求項7】
請求項1乃至6のいずれか1項に画像処理装置を用いたマルチファンクションプリンタ装置であって、
外部装置とのインタフェースと、
画像原稿を光学的に読み取るスキャナとを備え、
前記JPEGデータは前記インタフェースを介して前記外部装置から、或は、前記スキャナから入力されることを特徴とするマルチファンクションプリンタ装置。
【請求項8】
JPEGデータを入力しMCU単位で処理する画像処理装置の画像処理方法であって、
前記JPEGデータをハフマン符号化する符号化工程と、
前記入力されたJPEGデータに対する切り出し或は接合を指示する指示工程と、
前記指示工程における切り出し或は接合の指示により、前記切り出された或は前記接合されたJPEGデータでは端の部分となるMCUを判別する判別工程と、
各MCUに関し前記JPEGデータのDC成分値を計算する第1の計算工程と、
前記判別工程において端の部分となると判別されたMCUに関し、前記切り出された或は接合されたJPEGデータにおいて2つの連続するMCUのDC成分の差分を計算する第2の計算工程と、
前記第2の計算工程により計算された差分値を前記切り出されるか或は接合される前の元のJPEGデータのDC成分ハフマンテーブルに従って符号語に変換する変換工程と、
前記変換工程において変換された符号語で前記2つの連続するMCUの一方のMCUのDC成分の符号語を書き換える書き換え工程とを有することを特徴とする画像処理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate