以下、本発明の実施形態を図面を参照して説明する。
実施形態1.
本発明の目標符号量算出装置は、画像データを符号化する処理における符号化後のデータ量の最大許容量を表す目標符号量を算出する。この目標符号量に応じて符号化されたデータは、通信ネットワークを介して画像データの受信側装置に向けて送信される。本発明の目標符号量算出装置は、1フレーム内の領域であって、通信ネットワークを介して画像データが送信される領域の画像データを符号化するときの目標符号量を、それぞれの領域毎に算出する。また、1フレーム内の領域であって、通信ネットワークを介して画像データが送信される領域とは、具体的には、1フレームの中で、画像が更新された領域を含む領域である。図1は、画像データが符号化され送信される領域の例を示す模式図である。フレーム81内の領域のうち、破線で示した領域82,83において画像が更新され、領域82,83以外の領域では画像が更新されていないとする。この場合、領域82,83の画像データが符号化され、受信側装置に送信される。この例において、本発明の目標符号量算出装置は、領域82,83それぞれに対して、個別に目標符号量を算出する。そして、領域82,83の画像データは、各領域毎に目標符号量に応じて符号化され、送信される。
なお、図1に示す例では、画像データが符号化され送信される領域を2つ示しているが、1フレーム内において、画像データが符号化され送信される領域の数は特に限定されず、1つであっても、3つ以上であってもよい。
図2は、本発明の目標符号量算出装置の第1の実施形態を示すブロック図である。本発明の目標符号量算出装置1は、全体目標符号量算出部(全体目標符号量算出手段)2と、圧縮率算出部(圧縮率算出手段)3と、領域別目標符号量算出部(領域別目標符号量算出手段)4とを備える。
全体目標符号量算出部2は、符号化された画像データが送信される通信ネットワークの通信帯域と、予め定められたフレームレートとに基づいて、全体目標符号量を算出する。全体目標符号量は、画像データが送信される各領域全体に対する目標符号量である。図1に示す例では、全体目標符号量は、画像データが送信される各領域81,82の画像データ全体を符号化するときにおける、許容し得る符号化後のデータ量の最大値(上限値)である。通信ネットワークの通信帯域は、例えば、外部から入力されればよい。また、フレームレートは、画像データの受信側装置のフレームレートであり、例えば、目標符号量算出装置1が備える記憶装置(図示せず。)に予め記憶させておけばよい。全体目標符号量算出部2は、通信ネットワークの通信帯域をフレームレートで除算することによって、全体目標符号量を算出する。
圧縮率算出部3は、画像データが送信される各領域の画像データを符号化するときの圧縮率を算出する。圧縮率算出部3は、全体目標符号量算出部2によって算出された全体目標符号量を、画像データが送信される各領域の符号化前の画像データの総データ量で除算して圧縮率を求める。例えば、図1に示す例では、全体目標符号量を、各領域81,82それぞれの符号化前の画像データ量の合計で除算することにより圧縮率を算出する。本実施形態において圧縮率算出部3が算出した圧縮率は、各領域の画像データを領域毎に符号化する際における共通の圧縮率である。
なお、画像データが送信される個々の領域における符号化前のデータ量は、外部から指定されてもよい。あるいは、目標符号量算出装置自身が、画像データが符号化され送信対象となる個々の領域(すなわち、1フレーム内において画像が書き換えられた領域)を特定し、各領域の画像データ量、およびその総データ量を計算してもよい。
領域別目標符号量算出部4は、画像データが送信される各領域毎に、それぞれの領域の画像データを符号化するときの目標符号量を算出する。領域別目標符号量算出部4は、画像データが送信される個々の領域をそれぞれ選択し、その領域の符号化前の画像データのデータ量に、圧縮率算出部3が算出した圧縮率を乗じることによって、領域毎の目標符号量を算出する。
全体目標符号量算出部2、圧縮率算出部3、領域別目標符号量算出部4は、例えば、プログラム(目標符号量算出プログラム)に従って動作するCPUによって実現されていてもよい。
次に、動作について説明する。図3は、本発明の目標符号量算出装置の処理経過の一例を示すフローチャートである。まず、全体目標符号量算出部2は、通信ネットワークの通信帯域を受信装置側のフレームレートで除算することによって、全体目標符号量を算出する(ステップS61)。既に説明したように、通信ネットワークの通信帯域は、例えば、外部から入力されればよい。また、フレームレートは、例えば、目標符号量算出装置1が備える記憶装置(図示せず。)に予め記憶させておけばよい。
次に、圧縮率算出部3は、ステップS61で算出された全体目標符号量を、画像データが送信される各領域の符号化前の画像データの総データ量で除算することによって、符号化の際の圧縮率を算出する(ステップS62)。
次に、領域別目標符号量算出部4は、画像データが送信される個々の領域をそれぞれ選択し、その領域の符号化前の画像データのデータ量にステップS62で求めた圧縮率を乗算することによって、それぞれの領域毎の目標符号量を算出する(ステップS63)。
以上の動作によって求めた各領域毎の目標符号量を用いて、それぞれの領域の画像データを順次、目標符号量以下に符号化すればよい。この処理は、目標符号量算出装置自身が行ってもよく、また他の装置が行ってもよい。
次に、本発明の動作について、具体例を挙げて説明する。以下に示す例では、通信ネットワークにおける通信帯域が3000kbpsであり、予め定められたフレームレートが30fpsであるとする。また、図4は、画像データが符号化され送信される領域の例を示す模式図であり、フレーム90内の領域のうち、破線で示した3つの矩形領域91〜93において画像が書き換えられ、矩形領域91〜93の画像データが符号されて送信されるものとする。以下、矩形領域91,92,93をそれぞれ、第1領域、第2領域、第3領域と記す。なお、図4に内に括弧で示した数値は、矩形領域の頂点部分の画素の座標である。
まず、全体目標符号量算出部2は、通信ネットワークの通信帯域3000kbpsをフレームレート30fpsで除算して、全体目標符号量を算出する(ステップS61)。本例では、全体目標符号量は、3000kbps/30fps=100kbitである。この全体目標符号量100kbitは、「第1領域91、第2領域92および第3領域93の画像データ全体を符号化するときには、符号化後のデータ量が100kbitを越えないように符号化する。」ということを表している。
次に、圧縮率算出部3は、ステップS61で算出された全体目標符号量100kbitを、画像データが送信される第1領域91、第2領域92および第3領域93の符号化前の画像データの総データ量で除算し、圧縮率を算出する(ステップS62)。
例えば、第1領域91に属する画素のx座標の範囲が100〜299であり、y座標の範囲が100〜299であり、第1領域91に属する画素数が200×200=40000であるとする。また、第2領域92に属する画素のx座標の範囲が400〜799であり、y座標の範囲が200〜599であり、第2領域92に属する画素数が400×400=160000であるとする。さらに、第3領域93に属する画素のx座標の範囲が900〜1023であり、y座標の範囲が700〜767であり、第3領域93に属する画素数が124×68=8432であるとする。また、符号化前における1画素当たりのデータ量が24bitであるとする。この場合、3つの矩形領域91〜93の符号化前における総データ量は、24×(40000+160000+8432)=5002368bit、すなわち、約5002kbitである。圧縮率算出部3は、全体目標符号量100kbitをこのデータ量5002kbitで除算し、圧縮率100/5002を求める。100/5002は約1/50であり、以下、求めた圧縮率を便宜的に1/50として説明する。
圧縮率算出後、領域別目標符号量算出部4は、各矩形領域91〜93をぞれぞれ選択し、領域毎の目標符号量を算出する(ステップS63)。例えば、第1領域91の画素数は40000であり、1画素当たりのデータ量は24ビットであるので、第1領域91のデータ量は24bit×40000=960kbitである。領域別目標符号量算出部4は、このデータ量に圧縮率1/50を乗じて、第1領域91の符号化時における目標符号量を計算する。よって、第1領域91の目標符号量は、19.2kbitとなる。同様に、第2領域92の画素数は160000であるので、データ量は24bit×160000=3840kbitである。領域別目標符号量算出部4は、このデータ量に圧縮率1/50を乗じて、第2領域92の符号化時における目標符号量を計算する。よって、第2領域92の目標符号量は76.8kbitである。同様に、第3領域93の画素数は8432であるので、データ量は24bit×8432=202kbit(202368bit)である。領域別目標符号量算出部4は、このデータ量に圧縮率1/50を乗じて、第3領域93の符号化時における目標符号量を計算する。よって、第3領域93の目標符号量は、4kbitである。
よって、第1領域91の画像データ960kbitを符号化するときには、符号化後のデータ量が19.2kbit以下になるように符号化すればよい。他の矩形領域92,93の画像データを符号化するときにも、符号化後のデータ量が矩形領域の目標符号量以下になるように符号化すればよい。
本発明によれば、圧縮率算出部3が、全体目標符号量を、各領域の符号化前の画像データの総データ量で除算して圧縮率を求める。そして、領域別目標符号量算出部4が、領域毎に、領域の符号化前のデータ量にその圧縮率を乗じて、個々の領域に応じた目標符号量を算出する。よって、圧縮率を共通にして領域毎の目標符号量を計算することになるので、同一フレーム内の各領域同士で符号化後の画像データの画質の差が少なくなるように、各領域の目標符号量を求めることができる。
実施形態2.
第1の実施形態の目標符号量算出装置は、画像データの圧縮率を領域間で共通化して目標符号量を定める。符号化後のデータ量が目標符号量以下になるように領域の画像データを符号化したとしても、符号化後のデータ量が目標符号量よりも大きくなってしまうことがある。この場合、各領域を全て符号化したときのデータ量を全体目標符号量以下に抑えるためには、他の領域における圧縮率を高める必要が生じる。また、符号化を行った結果、ある領域における符号化後のデータ量を、その領域の目標符号量よりも大幅に少なくすることができる場合もある。そのような場合、未だ符号化を行っていない領域の圧縮率を下げ、その領域の画質を高めることができる。
第2の実施形態の目標符号量算出装置は、画像データの符号化が完了した領域がある場合、画像データの符号化が完了していない各領域に対する圧縮率を再計算し、再計算後の圧縮率で、画像データの符号化が完了していない各領域の目標符号量を算出し直す。
図5は、本発明の目標符号量算出装置の第2の実施形態を示すブロック図である。本実施形態の目標符号量算出装置は、全体目標符号量算出部2と、圧縮率算出部3と、領域別目標符号量算出部4と、減算部(減算手段)5とを備える。第1の実施形態の構成要素と同様の構成要素については、図2と同一の符号を付し、詳細な説明を省略する。ただし、圧縮率算出部3および領域別目標符号量算出部4は、第1の実施形態で説明した処理に加え、画像データが送信される各領域のうち画像データの符号化が完了している領域(以下、符号化完了領域と記す。)がある場合には、後述の処理も実行する。
減算部5は、符号化完了領域がある場合、全体目標符号量から、符号化完了領域の符号化後の画像データの総量を減算する。全体目標符号量から符号化完了領域の符号化後の画像データの総量を減算した結果は、未だ符号化されていない各領域全体に対する目標符号量を意味する。
例えば、図4に示す例において、各矩形領域91〜93全体に対する全体目標符号量(Pとする。)を算出して、個々の矩形領域91〜93の目標符号量を算出したとする。さらに、その後、第1領域93の画像データを符号化したときに、符号化後のデータ量がD1であったとする。この場合、減算部5は、最初に求めた全体目標符号量Pから、符号化完了領域である第1領域91の符号化後のデータ量D1を減算し、P−D1を求める。このP−D1は、符号化されていない第2領域92および第3領域93全体に対する目標符号量であり、第2領域92および第3領域93の符号化後のデータ量がP−D1以下であれば、3つの矩形領域91〜93の符号化後のデータ量はP以下に抑えられることになる。
また、同様に、第1領域だけでなく、第2の領域の画像データの符号化も完了し、第2領域における符号化後のデータ量がD2であったとする。この場合、減算部5は、最初に求めた全体目標符号量Pから、符号化完了領域である第1領域91および第2領域92の符号化後の画像データの総量(D1+D2)を減算し、P−(D1+D2)を求める。このP−(D1+D2)は、符号化されていない第3領域93に対する目標符号量である。
このように、減算部5は、画像データが送信される各領域のうち、ある一つの領域における符号化処理が完了して、符号化完了領域が一つ増える度に、最初に求めた全体目標符号量から、符号化完了領域の符号化後の画像データの総量を減算する処理を行う。
第2の実施形態における圧縮率算出部3は、最初に圧縮率を算出するときには、第1の実施形態と同様に全体目標符号量算出部2によって導出された全体目標符号量を用いて圧縮率を算出する。また、圧縮率算出部3は、個々の領域毎に順次、符号化処理が行われ、画像データが送信される各領域のうち未だ画像データの符号化が行われていない領域がある場合、減算後の全体目標符号量を、符号化が行われていない各領域における符号化前の画像データの総量で除算して、圧縮率を算出し直す。すなわち、最初に求めた全体目標符号量から各符号化完了領域の符号化後の画像データ量を減算した結果を、符号化が行われていない各領域の画像データの総量で除算して、新たに圧縮率を計算する。
第2の実施形態における領域別目標符号量算出部4は、最初に各領域の目標符号量を算出するときには、第1の実施形態と同様に目標符号量を計算する。その後、画像データが送信される領域における符号化が行われ、圧縮率算出部3が圧縮率を計算し直したときには、その圧縮率を用いて、符号化が行われていない領域における目標符号量を、それぞれの領域毎に算出し直す。領域別目標符号量算出部4は、未だ画像データの符号化が行われていない個々の領域毎に、その領域の符号化前の画像データのデータ量に新たな圧縮率を乗じて、それぞれの領域の目標符号量を算出し直す。
減算部5は、例えば、全体目標符号量算出部2、圧縮率算出部3、領域別目標符号量算出部4として動作するCPUによって実現され、そのCPUがプログラムに従って減算部5としての処理を行ってもよい。
次に、動作について説明する。
最初に各領域の目標符号量を算出するまでの動作は、第1の実施形態と同様であり、ステップS61〜S63の処理を行う。その後、一つの領域の符号化が完了する毎に、以下に示す目標符号量再計算処理を繰り返す。ただし、画像データが送信される全ての領域について符号化が完了したときには、目標符号量再計算処理を行わなくてよい。
図6は、目標符号量再計算処理の例を示すフローチャートである。一つの領域の符号化が完了すると、減算部5は、最初に求めた全体目標符号量から、符号化完了領域の符号化後の画像データの総量を減算する(ステップS65)。
次に、圧縮率算出部3は、ステップS65における減算結果を、符号化が行われていない各領域における符号化前の画像データの総量で除算することによって、圧縮率を算出し直す(ステップS66)。
続いて、領域別目標符号量算出部4は、未だ画像データの符号化が行われていない個々の領域毎に、その領域における画像データ量に新たな圧縮率を乗じて、符号化が行われていない各領域の目標符号量を算出し直す(ステップS67)。
次に、本実施形態の動作について、具体例を挙げて説明する。以下に示す例では、第1の実施形態で例示した具体例と同様に、図4を用いて説明する。第1の実施形態で説明した具体例と同様に、ステップS61で全体目標符号量を100kbitと算出し、ステップS62,S63の処理を行って、各矩形領域61〜63の目標符号量を計算したとする。その後、第1領域91の画像データを、目標符号量(19.2kbit)以下になるように符号化した結果、第1領域91の符号化後のデータ量が16kbitであったとする。
このとき、減算部5は、最初に求めた全体目標符号量(100kbit)から号化完了領域の符号化後の画像データの総量を減算する。本例では、第1領域91のみを符号化しているので、100kbitから16kbitを減算し、減算結果として84kbitを得る(ステップS65)。
次に、圧縮率算出部3は、その減算結果(84kbit)を、符号化が行われていない第2領域92および第3領域93の符号化前の画像データの総量で除算し、圧縮率を算出し直す。第1の実施形態の具体例で述べたように、第2領域92、第3領域93の画素数がそれぞれ160000,8432であり、1画素のデータ量が24ビットであるとすると、第2領域92および第3領域93の符号化前のデータ量の合計は、24×(160000+8432)=4042368bit=4042.368kbitとなる。よって、圧縮率算出部3は、84/4042.368を計算し、新たな圧縮率を求める(ステップS66)。84/4042.368=約1/48であるので、以下、新たな圧縮率を便宜的に1/48として説明する。
次に、領域別目標符号量算出部4は、まだ符号化が行われていない第2領域92および第3領域93の目標符号量を計算する(ステップS67)。領域別目標符号量算出部4は、第2領域92のデータ量(3840kbit)に1/48を乗じて、新たな目標符号量を80kbitとする。同様に、領域別目標符号量算出部4は、第3領域93のデータ量(202kbit)に1/48を乗じて、新たな目標符号量を4.2kbitとする。
また、さらに第2領域92等を符号化したときにもステップS65〜S66の動作を行えばよい。
本実施形態によれば、一つの領域の符号化が完了する毎に圧縮率を算出し直し、新たな圧縮率に応じて、符号化の済んでいない領域の目標符号量を再計算するので、個々の領域を符号化するときの符号量制御を高精度化することができる。例えば、ある領域の画像が非常に単純であり、符号化の結果、圧縮率算出部3が計算した圧縮率よりも高い圧縮率で圧縮できたとする。すると、他の領域の圧縮率を低くして、他の領域の符号化後の画質を向上させることができる。また、例えば、ある領域の符号化の結果、目標符号量以下に符号化できなかったとする。この場合、他の領域の圧縮率を高くするように制御することができる。
第2の実施形態では、各領域の圧縮率が互いに異なる場合が生じるが、各領域の目標符号量を一律に定める場合に比べ、各領域間の符号化後の画質の差は少なくなる。よって、第2の実施の形態では、符号化後の画質の差を各領域間で少なくしつつ、個々の領域を符号化するときの符号量制御を高精度化できる。
以下、第1の実施形態および第2の実施形態の変形例について説明する。
第1の実施形態および第2の実施形態において、領域別目標符号量算出部4は、画像データの符号化が行われていない領域における符号化前の画像データのデータ量が所定の閾値以下であるならば、その領域の目標符号量を、目標符号量のとり得る最大値に定めてもよい。
目標符号量のとり得る最大値とは、画像データの符号化を行う装置において目標符号量の上限値として定められている値である。画像データの符号化を行う装置において、目標符号量を無限大に設定可能であれば、目標符号量のとり得る最大値は無限大となる。そのように目標符号量を大きな値(最大値)に定めれば、画像データが送信される領域に関する符号化を行う際、圧縮率は低くなり、その領域に関する画質は向上することになる。
また、符号化前の画像データのデータ量が所定の閾値以下となる領域は、面積が所定値以下の領域であるということができる。そのようなデータ量の少ない領域では、高い圧縮率で圧縮を行わなくても、各領域全体を符号化したときの符号化後のデータ量への影響は小さい。すなわち、各領域全体を符号化したときの符号量の増加が著しくなるわけではない。また、フレーム内において、そのような微少面積の画像更新は、例えば、カーソルやアイコン等のような精細度が重視されるオブジェクトの周辺で多く発生する。また、こうしたオブジェクトの精細度が大きく低下すると、フレームレートが維持できたとしても操作性に支障が生じることが多い。符号化前の画像データのデータ量が所定の閾値以下となる領域では目標符号量を最大値に定めることで、そのような微少面積の領域の符号化後の画質を一定以上維持することができる。
また、上記の各実施形態において、目標符号量算出装置自身が1フレーム内において画像が書き換えられた領域を判定し、画像データが送信される領域を特定してもよい。図7は、目標符号量算出装置が、1フレーム内において画像データが送信される領域を特定する領域特定部(領域特定手段)6を備える場合の構成例を示すブロック図である。上記の各実施形態と同様の構成要素は、図2、図5と同一の符号を付して説明を省略する。
領域特定部6は、1フレーム内において画像が更新された領域を含む矩形領域を、画像データが送信される領域として特定する。領域特定部6がそのような領域を特定する方法の例を説明する。
図8は、1フレーム内において画像が送信される領域の例を示す説明図である。図8において斜線で示した部分96は、フレーム95において画像が書き換えられた部分であり、白色で示した部分は画像が書き換えられていない部分である。領域特定部6は、画像が更新された部分96を含む矩形領域97を、画像データを符号化して送信する領域として特定する。
ここでは、フレームにおいて、x軸は右方向に伸び、右側の画素ほどx座標の座標値が大きいものとする。また、y軸は下方向に伸び、下側の画素ほどy座標の座標値が大きいものとする。
領域特定部6は、1行目から最終行目までを順に選択し、選択した行において書き換えられた画素があるか否かを判定する。以下、便宜的に、書き換えられた画素が存在する行を更新行と呼び、書き換えられた画素が存在しない行を非更新行と呼ぶ。領域特定部6は、直前の行が非更新行であり、選択した行が更新行である場合、その行を更新行の先頭とする。また、直前の行が更新行であり、選択した行が非更新行である場合、その直前の行を更新行の末尾とする。ただし、このような場合、連続する更新行の間に、わずかな行数の非更新行が存在すると、矩形領域97としてフレームから切り出される領域数が多くなりすぎる可能性がある。従って、領域特定部6は、更新行から非更新行に切り替わった場合、さらに行を選択して更新行か否かを判定する処理を続け、更新行から非更新行に変わった後、非更新行が所定数以上連続しているという条件が満たされる場合に、その更新行を更新行の末尾と判定してもよい。領域特定部6は、更新行の末尾を特定した後、再び、非更新行から更新行に切り替わったならば、再度、更新行の先頭および末尾を特定していく処理を繰り返す。図9は、更新行の先頭および末尾の例を示す説明図である。領域特定部6は、図9に例示するような更新行の先頭および末尾を特定していく。
続いて、領域特定部6は、更新行の先頭から末尾までの連続する更新行のグループ毎に、1列目(本例では最も左側の列とする。)から最終列(本例では最も右側の列とする。)までを順に選択し、選択した列において書き換えられた画素があるか否かを判定する。以下、便宜的に、書き換えられた画素が存在する列を更新列と呼び、書き換えられた画素が存在しない列を非更新列と呼ぶ。領域特定部6は、直前の列が非更新列であり、選択した列が更新列である場合、その列を更新列の左端とする。また、領域特定部6は、直前の列が更新列であり、選択した列が非更新列である場合、その直前の更新列を更新列の右端とする。ただし、このような場合、連続する更新列の間に、わずかな列数の非更新列が存在すると、矩形領域97としてフレームから切り出される領域数が多くなりすぎる可能性がある。従って、領域特定部6は、更新列から非更新列に切り替わった場合、さらに列を選択して更新列か否かを判定する処理を続け、更新列から非更新列に変わった後、非更新列が所定数以上連続しているという条件が満たされる場合に、その更新列を更新列の右端と判定してもよい。領域特定部6は、更新列の右端を特定した後、再び、非更新列から更新列に切り替わったならば、再度、更新列の左端および右端を特定していく処理を繰り返す。図10は、更新列の左端および右端の例を示す説明図であり、図10において破線で示した縦線が更新列の左端および右端を表している。領域特定部6は、図10に例示するような更新列の左端および右端を特定していく。
次に、領域特定部6は、更新行の先頭および末尾と、更新列の左端および右端に囲まれた範囲を順次1つずつ選択する。図10に示す例では、3つの範囲を順次1つずつ選択する。
領域特定部6は、選択した範囲内における各列を順に抽出し、個々の列における更新画素(更新された画素)の上端および下端を特定する。さらに、領域特定部6は、各列における更新画素の上端のうち最も上側の画素のy座標と、各列における更新画素の下端のうち最も下側の画素のy座標とを特定する。領域特定部6は、その最上部の画素のy座標から最下部の画素のy座標までの範囲と、更新列の左端のx座標から右端のx座標までの範囲の矩形領域を、画像データを送信する領域として特定する。
図11は、更新行の先頭および末尾と更新列の左端および右端とに囲まれた範囲の例を示す説明図である。例えば、図11に例示する範囲を選択した場合、領域特定部6は、図11に例示する列101,111等の各列を順に抽出し、各列の更新画素の上端および下端を特定する。例えば、列101を抽出した場合には、更新画素の上端として画素102を特定し、更新画素の下端として画素103を特定する。そして、領域特定部6は、各列の更新画素の上端102,112等のうち最も上側の画素(本例では画素112)のy座標を特定する。また、各列の更新画素の下端103,113等のうち最も下側の画素のy座標を特定する。そして、画素112のy座標から画素113のy座標までの範囲と、更新列の左端のx座標から右端のx座標までの範囲の矩形領域を、画像データが送信される領域として特定する。
以上の動作により、画像データが送信される各領域を特定した後、第1の実施形態や第2の実施形態等で説明した動作により、各領域毎の目標符号量を算出すればよい。
また、ここで説明した領域特定方法は例示であり、領域特定方法は上記の方法に限定されない。領域特定部6は、1フレーム内から高さおよび幅が一定の矩形領域(例えば、縦横それぞれの画素数が64画素の矩形領域)を順に取り出し、その矩形領域に更新画素が含まれていれば、その矩形領域を、画像データが送信される領域として特定してもよい。
領域特定部6は、例えば、全体目標符号量算出部2、圧縮率算出部3、領域別目標符号量算出部4として動作するCPUによって実現され、そのCPUがプログラムに従って領域特定部6としての処理を行ってもよい。
また、上記の各実施形態において、目標符号量算出装置自身が各領域における画像データの符号化を行ってもよい。図12は、目標符号量算出装置が領域毎に画像データを符号する領域符号化部(領域符号化手段)7を備える場合の構成例を示すブロック図である。上記の各実施形態と同様の構成要素は、図2、図5、図7と同一の符号を付して説明を省略する。なお、図12では、領域特定部6を示していないが、上述の領域特定部6を備えていてもよい。
領域符号化部7は、領域別目標符号量算出部4が定めた目標符号量以下の符号量に画像データを符号化する処理を、画像データが送信される各領域毎に行う。図13は、領域符号化部7の例を示すブロック図である。なお、以下では、領域符号化部7が画像データをハフマン符号に変換する場合を例にして説明する。領域符号化部7は、ウェーブレット変換部12と、中間符号生成部13と、第1の判定部14と、第2の判定部15と、再量子化部16と、符号化部17とを備える。
ウェーブレット変換部12は、1フレーム内の画像データが送信される個々の領域に対して、画像データを所定の分解レベル数までウェーブレット変換する処理を行う。この「所定の分解レベル数」を“N”と記す。また、図面中において、分解レベル数をRlevelと記す場合がある。図14は、ウェーブレット変換を模式的に示す説明図である。ウェーブレット変換部12は、領域の画像データ100をウェーブレット変換する。1回のウェーブレット変換により得られる係数の種類には、LL成分、LH成分、HL成分、HH成分があり、ウェーブレット変換部12は、LL成分に対して、再帰的にウェーブレット変換を行う。以下、LH成分、HL成分、HH成分をまとめてxxと記す。また、分解レベル数がkのときのLL成分、xx成分を、それぞれ「kLL成分」、「kxx成分」と記す。図14では、分解レベル数1のxx成分(1xx)と、分解レベル数2のLL成分(2LL)およびxx成分(2xx)とを示している。また、図14では、分解レベル数“2”までのウェーブレット変換を例示しているが、ウェーブレット変換部12がウェーブレット変換を行うときの分解レベル数は2に限定されず、3以上の分解レベル数までウェーブレット変換を行ってもよい。以下の説明では、ウェーブレット変換後の係数(ウェーブレット係数)がYUV形式で表され、Y,U,Vの各値を有するようにウェーブレット変換を行う場合を例にして説明する。
中間符号生成部13は、ウェーブレット変換によって得られた係数に対して所定の量子化ステップで量子化を行った値であるかまたはウェーブレット変換によって得られた係数自体である中間データ(以下、中間符号と記す。)を生成する。ここでは、ウェーブレット変換よって得られた係数に対して量子化を行った結果を中間符号とする場合を例にして説明する。よって、本例では、中間符号生成部13は、ウェーブレット係数に含まれるY,U,Vの値をそれぞれ所定の量子化ステップで量子化し、その量子化の結果を中間符号とする。以下、量子化ステップをQステップと記す。
中間符号生成部13による中間符号生成処理についてより詳しく説明する。1xx成分、2xx成分等の中間符号生成対象の成分毎に、中間符号生成時の所定のQステップおよびデッドゾーンが定められている。中間符号生成部13は、絶対値が所定のデッドゾーン以下である画像データの値を0に量子化する。例えば、1xx成分に含まれるあるYの絶対値がデッドゾーン以下であれば、そのYを0に量子化する。また、中間符号生成部13は、絶対値が所定のデッドゾーンを越える範囲を、所定のQステップ毎に区切る。そして、それらの各範囲に属する画像データの値を、その範囲の中央値に量子化する。例えば、デッドゾーンおよびQステップがいずれも2であるとする。この場合、絶対値が2を越える範囲(すなわち、−2未満の範囲および2より大きい範囲)を、Qステップである2毎に区切り、“−4〜−2”、“2〜4”、“4〜6”等の範囲を定める。そして、1xx成分に含まれるあるYが“2〜4”等の範囲に属していれば、Yの値をその範囲の中央値に量子化する。ここでは、1xx成分に含まれるYを例示したが、U,Vの量子化も同様に行う。また、1xx成分以外の成分に関する量子化処理も同様である。
また、中間符号生成部13は、連長解析を行った結果を中間符号の中に含めてもよい。すなわち、連長解析の結果も中間符号(中間データ)としてよい。連長解析は、同一のデータが連続して並んでいる場合にその連続数をカウントする処理である。連長解析の態様として、量子化後のY,U,Vの値がいずれも0である画素が連続する場合、その連続数をカウントする態様がある。あるいは、量子化後のY,U,Vの組み合わせが同一となる画素が連続する場合、その連続数をカウントしてもよい。図15は、ウェーブレット係数から生成した中間符号を模式的に示す説明図である。図15では連長解析によりカウントした連続数を“len”と表している。中間符号生成部13は、例えば、2LL成分、2xx成分、1xx成分に含まれるY,U,Vを上述の様に量子化し、2LL中間符号、2xx中間符号、1xx中間符号等を生成する。また、量子化後のY,U,Vに対して連長解析を行い、その結果(カウントした連続数“len”)を中間符号に含めてもよい。以下、中間符号にlenを含める場合を例にして説明する。
また、符号化データから得られる画像の最高画質を規定する分解レベル数(miとする。)が予め定められている。ここで、miは1以上N以下の整数である。中間符号生成部13は、分解レベル数mi〜NのLL成分、および分解レベル数1〜Nのxx成分を対象にして、中間符号を生成する。換言すれば、(mi)LL成分、(mi+1)LL成分、・・・、NLL成分、および1xx成分、2xx成分、・・・、Nxx成分を対象にして中間符号を生成する。
第1の判定部14は、定められた範囲の分解レベル数の中間データのうちxx成分(すなわちLL成分以外の成分)を符号化するか否かを判定する処理を行う。
第1の判定部14は、この判定を行うために、中間符号の生成対象となる上記の各成分(分解レベル数mi〜NのLL成分、および分解レベル数1〜Nのxx成分)毎に、量子化に用いる個々の範囲における中間符号の発生頻度(発生数)をカウントする。具体的には、第1の判定部14は、絶対値が所定のデッドゾーン以下となる範囲で量子化されたデータの発生頻度をY,U,V毎にカウントする。また、絶対値がそのデッドゾーンを越える範囲を所定のQステップ毎に区切った個々の範囲毎で量子化されたデータの発生頻度をY,U,V毎にカウントする。
図16は、各範囲において量子化されたデータの発生頻度をカウントした結果を示す情報(以下、頻度表と記す。)の例を示す説明図である。図16では、2LL中間符号のY,Uの頻度表の例を示している。図16に示す各頻度表の左側の列は、量子化された結果を示し、右側の列は、その値に量子化されたデータ(図16の例ではYまたはU)の発生頻度を表している。すなわち、図16に例示する2LL中間符号のYの例では、絶対値がデッドゾーン以下の範囲に属し0に量子化されたYのデータが230個あり、255を中央値とする範囲に属し255に量子化されたYのデータが44個あることを示している。
第1の判定部14は、各頻度表からハフマンテーブルを生成する。図17は、ハフマンテーブルの例を示す説明図である。図17では、2LL中間符号のYについてのハフマンテーブルを例示している。第1の判定部14は、2LL中間符号のYの頻度表から、図17に例示するようなハフマンテーブルを生成する。また、同様に、他の頻度表からもそれぞれハフマンテーブルを生成する。図17に示すように、ハフマンテーブルは、量子化された各値(図17に示す例では、0〜255)と、その値から変換される符号とを含む。第1の判定部14は、量子化された値と符号が一対一に対応し、かつ、発生頻度が大きい値ほど符号のビット長が短くなるように符号を定め、量子化後の値と符号とを対応付けたハフマンテーブルを生成する。ハフマン符号を生成することで、量子化された各データの値(図16に示す例では0〜255)毎のハフマン符号のビット長が定まる。第1の判定部14は、各ハフマン符号毎に、ハフマン符号のビット長と、対応する発生頻度との積を求め、その総和を計算する。また、中間符号にlenが含まれる場合、各lenを符号化したときのビット長(例えばガンマ符号化したときのビット長)も、上記の総和に加算する。第1の判定部14は、1xx成分から(N−1)xx成分までの各xx成分および(N−1)LL成分に関して、これらの総和を求める。その総計が、符号量の目標符号量となる閾値よりも大きい場合、第1の判定部14は、定められた範囲の各分解レベル数を大きい順に選択し、選択した分解レベル数の中間データのxx成分を符号化した時のデータ量を推定し、その推定されたデータ量に応じて、その中間データのxx成分を符号化するか否かを判定する。この判定の動作フローについては、図19および図20を用いて後述する。
第2の判定部15は、上記の定められた範囲の分解レベル数よりも小さい各分解レベル数の中間符号のxx成分(LL成分以外の成分)に対して、再量子化を行うか否かを判断する。再量子化を行うか否かの判断対象となる分解レベル数の最大値をmqとする。この場合、上述の定められた範囲の分解レベル数は、mq+1〜Nの範囲の分解レベル数である。
再量子化部16は、第2の判定部15が再量子化を行うと判定した場合、定められた範囲の分解レベル数(すなわちmq+1〜N)よりも小さい各分解レベル数(1〜mq)の中間符号のうちxx成分を再量子化する。
符号化部17は、中間符号および再量子化部16によって中間符号から再量子化された値をハフマン符号に符号化する。また、中間符号にlen(連長解析でカウントされた連続数)が含まれている場合、そのlenも符号化する。この場合、符号化部17は、例えば、lenをガンマ符号に符号化すればよい。lenを2進数で表したときのビット長をlとすると、符号化部17は、その2進数のビットの先頭に“l−1”個の0を付加することで、lenをガンマ符号に変換する。符号化部17が中間符号または再量子化の結果をハフマン符号に変換し、lenを例えばガンマ符号に変換することにより、画像データが符号化されることになる。
図18は、ハフマン符号化の結果の例を模式的に示す説明図である。図18では、2LL成分、2xx成分および1xx成分について符号化を行った場合を例示している。符号化前のデータにY,U,Vだけでなくlenも含まれる場合、Y,U,V,lenそれぞれの符号化データが2LL成分等の符号化結果に含まれる。
ウェーブレット変換部12と、中間符号生成部13と、第1の判定部14と、第2の判定部15と、再量子化部16と、符号化部17とを含む領域符号化部7は、例えば、全体目標符号量算出部2、圧縮率算出部3、領域別目標符号量算出部4として動作するCPUによって実現され、そのCPUがプログラムに従って領域符号化部7としての処理を行ってもよい。
次に、領域符号化部7の動作について説明する。図19および図20は、領域符号化部7の処理経過の一例を示すフローチャートである。なお、フローチャート中に記載した「出力」とは、「符号化処理」を表している。
まず、ウェーブレット変換部12が、画像が送信される領域の画像データに対して、分解レベル数Nまでウェーブレット変換を行う。
そして、中間符号生成部13は、分解レベル数mi〜NのLL成分、および分解レベル数1〜Nのxx成分を対象にして中間符号を生成する。すなわち、中間符号生成部13は、それらの成分に含まれるY,U,Vを、成分の種類に応じて定められるデッドゾーンおよびQステップに応じて量子化する。既に説明したように、中間符号生成部13は、絶対値が所定のデッドゾーン以下であるY,U,Vを0に量子化する。また、絶対値が所定のデッドゾーンを越える範囲をQステップ毎に区切り、各範囲に属するY,U,Vをその範囲の中央値に量子化する。また、例えば、Y,U,Vの組み合わせが同一となる画素が連続する場合、その連続数(len)をカウントする。中間符号生成部13は、このY,U,Vの量子化結果およびlenを中間符号として、目標符号量算出装置が備える記憶装置(図示せず。)に記憶させる。
また、第1の判定部14は、中間符号を生成した分解レベル数mi〜NのLL成分、および分解レベル数1〜Nのxx成分の中間符号を対象として、Y,U,Vそれぞれの頻度表を生成し、目標符号量算出装置が備える記憶装置(図示せず。)に記憶させる。第1の判定部14は、各成分に含まれるY,U,V毎に、デッドゾーンおよびQステップによって定まる各範囲での発生頻度をカウントすることによって頻度表を生成すればよい(以上、ステップS1)。
次に、第1の判定部14は、mi(符号化データから得られる画像の最高画質を規定する分解レベル数)を変数mに代入する(ステップS2)。ステップS2で設定されるmは、ステップS3〜S7の制御に用いられる。
ステップS2の後、第1の判定部14は、m<Nとなっているか否かを判定する(ステップS3)。変数mがN未満であれば(ステップS3のY)、第1の判定部14は、分解レベル数mのLL成分(mLL成分)および分解レベル数1〜mのxx成分(1xx〜mxx成分)の中間符号を符号化したときの符号量を推定する。このとき、第1の判定部14は、これらの各成分のY,U,Vそれぞれの頻度表からハフマンテーブル(図17参照)を生成し、各ハフマン符号毎に、ハフマン符号のビット長と、対応するY,UまたはVの発生頻度とを乗じ、その乗算結果の総和を計算する。さらに、本例では、lenが中間符号に含まれているので、中間符号に含まれる各lenを符号(例えばガンマ符号)に変換したときの符号量もその総和に加算する。第1の判定部14は、各成分毎にこの総和を求め、それらの合計を計算する(ステップS4)。この合計値は、mLL成分および1xx〜mxx成分の中間符号を符号化したときの推定符号量である。なお、推定符号量とは、中間符号を符号化した後のデータ量として推定される値である。
続いて、第1の判定部14は、その推定符号量が、符号化の対象としている領域の目標符号量より大きいか否かを判定する(ステップS5)。このように、領域別目標符号量算出部4が算出した目標符号量は、ステップS5において閾値として用いられる。また、後述のステップS13,S19においても閾値として用いられる。
推定符号量が目標符号量以下である場合(ステップS5のN)、ステップS9に移行する。ステップS9において、符号化部17は、mLLの中間符号をハフマン符号に変換する。符号化部17は、ステップS4で生成したmLL成分のY,U,Vに対応するハフマンテーブルを用いて、mLL中間符号のY,U,Vを、対応するハフマン符号に変換すればよい(ステップS9)。さらに、符号化部17は、mxx、(m−1)xx、・・・、1xxの各成分の中間符号もハフマン符号に変換する(ステップS10)。mxxから1xxまでの各中間符号のY,U,Vについても、ステップS4で生成したハフマンテーブルを用いて、対応するハフマン符号に変換すればよい。また、符号化部17は、ステップS9,S10において、各中間符号中のlenを例えばガンマ符号に符号化する。
推定符号量が目標符号量よりも大きい場合(ステップS5のY)、第1の判定部14は、変数mの値を1インクリメントし(ステップS7)、ステップS3以降の処理を繰り返す。変数mを1インクリメントして再度ステップS3からステップS4に移行した場合、以前のステップS4で符号量を求めた成分については再度、符号量を求め直す必要はなく、インクリメント後のmが示すmLL成分およびmxx成分を求めて、mLL成分および1xx〜mxx成分の総符号量を推定すればよい。
また、ステップS3において、m=Nであると判定した場合(ステップS3のN)、再量子化処理(ステップS8)を行う。図20に示すステップS11以降の処理は、このステップS8の再量子化処理を表している。すなわち、ステップS3でm=Nであるならば、ステップS11(図20参照)に移行する。
ステップS11に移行したということは、分解レベル数“N−1”の中間符号のLL成分および分解レベル数1から“N−1”までの中間符号のxx成分を符号化したときの符号推定量が目標符号量よりも大きい。このとき、第1の判定部14は、符号化部17にNLL成分を符号化させる(ステップS11)。符号化部17は、NLL中間符号のY,U,Vそれぞれの頻度表からハフマンテーブルを生成し、そのY,U,Vをそれぞれ対応するハフマン符号に変換する。また、符号化部17は、NLL中間符号に含まれる各lenを、例えばガンマ符号に符号化する。
次に、第1の判定部14は、Nを変数mに代入する(ステップS12)。ステップS12で設定されるmは、ステップS13〜S21の制御に用いられる。
ステップS12の後、第1の判定部14は、m≦mqとなっているか否かを判定する(ステップS13)。m≦mqが成立していなければ(ステップS13のN)、変数mが示す分解レベル数のxx成分(すなわち、mxx成分)の符号量を推定する(ステップS14)。ステップS14では、mxx成分のY,U,Vそれぞれの頻度表からハフマンテーブルを生成し、各ハフマン符号毎に、ハフマン符号のビット長と、対応するY,UまたはVの発生頻度とを乗じ、その乗算結果の総和を計算する。そして、各lenを符号化したときのビット長もその総和に加算すればよい。なお、ステップS4で、mxx成分の推定符号量を計算済であるならば、その推定符号量を参照してもよい。
続いて、第1の判定部14は、ステップS14で求めた符号推定量と、既に符号化した符号データのデータ量との合計が、目標符号量よりも大きくなっているか否かを判定する(ステップS15)。その合計が目標符号量よりも大きければ(ステップS15のY)、処理を終了する。また、その合計が目標符号量以下であれば(ステップS15のN)、符号化部17にそのmxx成分を符号化させる(ステップS16)。符号化部17は、ステップS14で符号量推定に用いたmxx成分のY,U,Vに対応するハフマンテーブルを用いて、mxx成分のY,U,Vを対応するハフマン符号に変換する。また、符号化部17は、mxx成分中のlenを例えばガンマ符号に符号化する。
続いて、第1の判定部14は、変数mの値を1減算し(ステップS17)、ステップS13以降の処理を繰り返す。ステップS13からステップS17のループ処理を繰り返すことで、第1の判定部14は、ステップS14に移行する毎に、定められた範囲の分解レベル数(すなわちmq+1〜N)を、大きい順に選択し、そのxx成分の符号量を推定することになる。
また、ステップS17で変数mの値を1減算した結果、ステップS13においてm≦mqであると判定したならば(ステップS13のY)、ステップS18に移行する。したがって、ステップS18以降では、mの値はmqとなっている。
ステップS18では、第2の判定部8は、ステップS18移行時のmが示す分解レベル数のxx成分(すなわちmxx成分)から、1xx成分までの各xx成分の中間符号を符号化したときの符号量を推定する。最初にステップS18に移行した場合(すなわち、まだステップS20の再量子化を行っていない場合)には、mxx〜1xxの各成分の中間符号を符号化したときの符号量を推定する。また、ステップS20の再量子化処理後にステップS18に移行した場合には、再量子化後のmxx〜1xxの各成分の中間符号の符号量を推定する。
各成分の中間符号の符号量を推定する場合には、各成分のY,U,Vそれぞれの頻度表からハフマンテーブルを生成し、各ハフマン符号毎に、ハフマン符号のビット長と、対応するY,UまたはVの発生頻度とを乗じ、その乗算結果の総和を計算し、さらに、各lenを符号化したときのビット長もその総和に加算すればよい。
なお、ステップS20の再量子化では、再量子化後のY,U,Vの頻度表も作成する。ステップS20からステップS18に移行した場合、その頻度表を用いてハフマンテーブルを生成すればよい。
ステップS18の後、第2の判定部8は、ステップS18で求めたmxx〜1xxを符号化したときの符号量および、既に符号化した符号データのデータ量との合計が、目標符号量よりも大きくなっているか否かを判定する(ステップS19)。
その合計が目標符号量よりも大きいならば、第2の判定部8は再量子化を行うと判定し、ステップS20に移行する(ステップS19のY)。
また、その合計が目標符号量以下であるならば、第2の判定部8は再量子化を行わないと判定し、ステップS21に移行する(ステップS19のN)。
ステップS21では、符号化部17は、ステップS18での符号量推定に用いたハフマンテーブルを用いて、mxx成分から1xx成分のY,U,Vを、対応するハフマン符号に変換する。また、符号化部17は、各成分中のlenを例えばガンマ符号に符号化する。
また、ステップS20では、再量子化部16は、1xx中間符号からmxx中間符号までのY,U,Vを再量子化する。ステップS18以降におけるmはmqであるので、1xx中間符号からmqxx中間符号までのY,U,Vを再量子化する。再量子化部16は、再量子化処理を行うときに、例えば、既に選択したQステップ以上のQステップや、既に選択したデッドゾーン以上のデッドゾーンを新たに定める。
ステップS20において、再量子化部16は、1xxからmqxxまでの各成分毎に、新たなデッドゾーンを定める。このとき、再量子化部16は、hを0以上の整数とし、ステップS1で中間符号を生成したときに用いたデッドゾーンおよびQステップをそれぞれdz,qsとすると、dz+h・qsを新たなデッドゾーンに定める。そして、再量子化部16は、絶対値がその新たなデッドゾーン以下である中間符号(Y,U,V)の値を0に再量子化する。
また、再量子化部16は、1xx〜mqxxまでの各成分毎に、新たなQステップを定める。このとき、再量子化部16は、nを0以上の整数とすると、上記のqsを用いて、qs・(2n+1)を新たなQステップに定めることが好ましい。そして、絶対値が上記の新たなデッドゾーンを越える範囲を新たなQステップ(qs・(2n+1))毎に区切り、範囲を定める。そして、各範囲に属する1xx〜mqxxまでの各成分の中間符号(Y,U,V)を、その範囲の中央値に量子化する。新たなQステップをqs・(2n+1)とすることが好ましい理由は、そのようにQステップを定めることで、新たに定める範囲の中央値が、ステップS1で量子化するときに用いた範囲の中央値と一致するので、符号化データの画質劣化を防止することができるためである。Qステップをqs・(2n+1)として定めた新たな範囲は、ステップS1量子化するときに用いた範囲を組み合わせた範囲となっている。
ただし、ステップS1で中間符号を導出する際のQステップが1である場合には、ステップS20では、任意の値(ただし、1以上の整数)を新たなQステップとしてよい。ステップS1におけるQステップが1であるならば、新たに定めるQステップの値によらず、新たに定める範囲の中央値が、ステップS1で量子化するときに用いた範囲の中央値と一致するためである。
また、ステップS20において、第2の判定部15は、中間符号を再量子化して得た新たなY,U,Vの頻度表をそれぞれ生成する。再量子化に用いた範囲は、絶対値がデッドゾーン以下の範囲と、その範囲以外を新たなQステップで区切って定めた個々の範囲である。これらの範囲はいずれも、ステップS1で中間符号を生成するときに用いた範囲を組み合わせたものであり、ステップS1での量子化に用いた範囲に対応する。そして、ステップS1における各範囲(例えば、0に量子化する範囲、1に量子化する範囲等)における頻度表は既にステップS1で導出されている。従って、第2の判定部15は、ステップS20での量子化のために定めた個々の範囲に対応する、ステップS1で用いた各範囲を特定し、その各範囲における発生頻度の和を、新たな範囲における発生頻度とすればよい。このように発生頻度を定めることにより、新たな範囲で量子化されたY,U,Vの発生頻度をカウントし直さなくて済む。
図21は、ステップS20における頻度表導出を模式的に示す説明図である。図21に示す上段のヒストグラムは、ステップS1で中間符号生成のための量子化において、各範囲の中央値に量子化されたデータ(例えばYとする。)の発生頻度を示している。また、図21に示す下段のヒストグラムは、ステップS20の再量子化において、各範囲の中央値に量子化されたデータの発生頻度を示している。また、図21において、A〜IおよびS〜Uは、量子化後の中央値の例示である。ステップS20の再量子化処理で、再量子化部16が、新たなQステップおよびデッドゾーンから範囲を区切った結果、A,B,Cそれぞれを中央値とする3つの範囲を組み合わせて、Sを中央値とする一つの範囲を定め、その範囲に属するデータ(Y)を中央値Sに量子化したとする。この場合、第2の判定部15は、図21の上段のヒストグラムのように表される頻度表において、値Aに量子化したデータ数、値Bに量子化したデータ数、および値Cに量子化したデータ数の和を計算し、その3つの範囲に対応する新たな範囲(Sを中央値とする範囲)に属し値Sに量子化したデータの発生頻度を計算すればよい。他の範囲における発生頻度も同様に計算すればよい。このように再量子化後の発生頻度を計算することにより、各範囲におけるデータの発生頻度をカウントし直さなくて済むので、処理を高速化することができる。
他の範囲におけるデータの発生頻度も同様である。なお、上記のように、新たなデッドゾーンをdz+h・qsとし、新たなQステップをqs・(2n+1)とすれば、新たな範囲における中央値は、中間符号生成時の量子化における中央値と等しくなる。例えば、図21に示す例では、S=B,T=E,U=Hとなる。
上記のステップS20の後、ステップS18以降の処理を繰り返す。第2の判定部15は、ステップS20で頻度表を新たに生成している。第2の判定部15は、その後のステップS18ではその頻度表を用いて、ステップS20で量子化された値の符号を示すハフマンテーブルを生成する。このとき、第2の判定部15は、ステップS1における量子化後の各値(すなわち、ステップS1で生成された各中間符号)を、それぞれ新たな頻度表から生成したハフマンテーブル内の新たな符号に対応づければよい。
図22は、中間符号の値と再量子化後に導出した符号との対応付けを示す説明図である。例えば、図22に例示する再量子化前の中間符号−1,0,1を、0に再量子化したとする。この場合、第2の判定部15は、再量子化後の0等の各値の頻度表からハフマンテーブルを導出する。このハフマンテーブルでは、中間符号0に対応する符号が0であったとする。すると、第2の判定部15は、元の中間符号−1,0,1それぞれに、新たな符号0を対応付ける。例えば、元の中間符号−1,0,1に応じた各符号“100”,“0”,“101”をそれぞれ新たな符号“0”に置換する。このように処理することにより、元の中間符号−1,1からも、0と同じ符号を参照することができる。そして、中間符号を書き換えることなく、再量子化後の値に応じたハフマン符号を生成することができる。
再量子化処理を行うことにより、ハフマン符号のビット数を減少させることができる。よって、ステップS18〜S20のループ処理を繰り返すことで、符号化後の総符号量を減少させることができる。そして、推定される総符号量が目標符号量以下となったときに、ステップS21に移行して符号化処理を行えばよい。
また、ステップS20の再量子化処理でデッドゾーンの値を大きくした結果、全ての中間符号(Y,U,V)を一つの値(0)に量子化する場合がある。この場合、符号化部17は、ステップS21において、符号化処理を禁止してもよい。すなわち、再量子化によって、全ての中間符号が0に量子化された場合、符号化部17は、再量子化後のY,U,Vの値をハフマン符号に変換することなく処理を終了してよい。また、lenを符号化する処理も実行しなくてよい。このように、全てのY,U,Vがいずれも0に量子化される場合には、符号化処理を行わないことによって、処理量を削減することができる。
以上のような符号化方法では、定められた範囲の分解レベル数(mq+1〜N)について、第1の判定部14がxx成分の符号化を行うと判定したときに、そのxx成分を符号化しておく。そして、その分解レベル数よりも低い分解レベル数(1〜mq)を符号化したときの符号量に応じて、その分解レベル数(1〜mq)の中間符号を再量子化する。よって、ウェーブレット変換によって得た各分解レベル数の一部について再量子化をするので、処理負荷を抑制しながら、符号量が目標符号量以下になるように制御することができる。
また、再量子化処理では、中間符号を導出する際に用いるデッドゾーンおよびQステップから定まる範囲を組み合わせた範囲を定め、その新たな各範囲内の値を範囲の中央値に量子化する。このように、新たな範囲を、中間符号導出時の範囲を組み合わせた範囲として求めるので、新たな頻度表を求める際に、中間符号導出時にカウントした結果の和を求めればよい(図21参照)。よって、処理負荷を抑制し、また、処理を高速化することができる。
また、再量子化処理におけるQステップを、qs・(2n+1)と定めることで、再量子化後の値を中間符号の値と一致させることができ、符号化データの画質劣化を防止することができる。
既に説明したように、領域別目標符号量算出部4は、画像が送信される領域における符号化前の画像データのデータ量が所定の閾値以下であるならば、その領域の目標符号量を、目標符号量のとり得る最大値に定めてもよい。この場合、上記のステップS5では必ず推定符号量が目標符号量以下であると判定され、ステップS9に移行することになる。この結果、データ量が所定の閾値以下となる小さな領域では、圧縮率を低めて、画質を向上させることとなる。
上記の説明では、中間データを生成するときに(例えばステップS1において)、ウェーブレット変換によって得られた係数に対して量子化を行った結果を中間符号とする場合を例にして説明したが、ウェーブレット変換によって得られた係数(ウェーブレット係数)自体を中間符号としてもよい。具体的には、予め決められた分解レベル数以上の成分に関しては、ウェーブレット係数自体を中間データとしてもよい。例えば、分解レベル数Nまでウェーブレット変換を行った場合、分解レベル数“N−T”以上N以下のウェーブレット係数をそのまま中間符号とし、分解レベル数“N−T”未満のウェーブレット係数についてはステップS1で説明したようにウェーブレット係数を量子化した結果を中間符号としてもよい。ウェーブレット係数をそのまま中間符号とする分解レベル数“N−T”〜“T”は、符号化後のデータに要求される画質や圧縮率に応じて予め決めておけばよい。また、LL成分についてはウェーブレット係数をそのまま中間符号とし、xx成分についてはウェーブレット係数をステップS1で説明したように量子化したデータを中間符号としてもよい。
既に説明した実施形態では、画像データが送信される各領域のうち画像データの符号化が完了している符号化完了領域がある場合に、符号化完了領域の符号化後の画像データの総量を全体目標符号量から減算する減算手段を備え、圧縮率算出手段が、減算手段による減算が行われ、画像データが送信される各領域のうち未だ画像データの符号化が行われていない領域がある場合に、減算手段による減算後の全体目標符号量を符号化が行われていない領域の符号化前の画像データの総量で除算することにより、圧縮率を算出し、領域別目標符号量算出手段は、符号化が行われていない領域の符号化前の画像データのデータ量に、圧縮率算出手段が算出したその圧縮率を乗算して、符号化が行われていない領域の画像データを符号化するときの目標符号量を算出する構成が開示されている。
また、上記の実施形態には、領域別目標符号量算出手段が、画像データの符号化が行われていない領域であって、符号化前の画像データのデータ量が所定の閾値以下である領域に対して、目標符号量を、目標符号量のとり得る最大値と定める構成が開示されている。
また、上記の実施形態には、画像データが送信される各領域毎に、領域別目標符号量算出手段が定めた目標符号量以下の符号量に画像データを符号化する領域符号化手段を備える構成が開示されている。
また、上記の実施形態には、1フレーム内の更新された領域を含む矩形領域を、画像データが送信される領域として特定する領域特定手段を備える構成が開示されている。