図1は、画像符号化システム20を示すブロック図である。画像符号化システム20は、画像符号化装置30と、画像復号化装置40とを備える。
画像符号化装置30は、コンピューターである。画像符号化装置30は、記録媒体32と、CPU34と、第1無線通信部36とを備える。記録媒体32は、RAM、ROM等を含む。記録媒体32は、プログラム33を記録する。プログラム33は、後述する画像符号化処理等を実行するためのプログラムである。
画像復号化装置40は、プリンターである。画像復号化装置40は、復号部400と、第2無線通信部500と、印刷部600とを備える。第2無線通信部500は、画像符号化装置30に含まれる第1無線通信部36と無線通信する。
本実施形態においては、画像がモノクロであり、階調数が8ビット/画素である。このため、画素データは、輝度値によって表される。但し、本実施形態においては、輝度値を「色」とも表現する。他の実施形態においては、RGB画像の24ビット/画素に適用してもよいし、YMCKの32ビット/画素に対しても適用してもよい。
図2は、印刷処理を示すフローチャートである。まず、画像符号化装置30が、画像符号化処理を実行する(S100)。次に、画像符号化装置30が画像復号化装置40に符号データを転送する(S300)。S300には、第1無線通信部36及び第2無線通信部500による無線通信が用いられる。
次に、画像復号化装置40が、画像復号化処理を実行する(S400)。最後に、画像復号化装置40が、印刷部600を用いて、復号した画像を印刷する(S500)。
図3は、S100としての画像符号化処理を示すフローチャートである。まず、CPU34は、ブロックデータを取得する(S110)。ブロックとは、本実施形態においては8×8の画素の塊のことである。ブロックデータとは、ブロックに含まれる各画素の輝度値のことである。
なお、画像全体において、縦方向や横方向の画素数が8の倍数でない場合、画像の端において8×8画素に満たないブロックが発生する。この場合、S110では、8×8画素になるようにダミーの画素を補うことによって、8×8のブロックの画像データを出力する。別の実施形態では、ブロックが16×16画素でもよいし、4×4画素でもよいし、他の画素数でもよい。
次に、CPU34は、記録媒体32を用いて、辞書(後述)をバックアップする(S120)。辞書のバックアップは、後述するように、辞書が更新されても、更新前の状態に復元できるようにすることを目的として実行される。
次に、CPU34は、着目画素を更新する(S125)。着目画素とは、ブロックを構成する画素のうち、着目している画素のことである。CPU34は、S125において、ブロックを構成する64画素から1画素ずつ着目する。
次に、CPU34は、辞書符号化を実行する(S130)。図4は、辞書インデックス、可変長符号および符号ビット長の関係を示すテーブルである。本実施形態における辞書インデックスは、説明を簡単にするため、0〜3の4つとする。但し、辞書インデックスの数は、これに限定されるものではなく自然数であればよい。
CPU34は、S130において、着目画素の色が、辞書インデックス0に登録されている色である場合、可変長符号として1を出力する。この場合、符号ビット長は1である。つまり、符号のデータ量は1ビットである。
CPU34は、S130において、着目画素の色が、辞書インデックス1に登録されている色である場合、可変長符号として01を出力する。この場合、符号ビット長は2である。つまり、符号のデータ量は2ビットである。
CPU34は、S130において、着目画素の色が、辞書インデックス2に登録されている色である場合、可変長符号として001を出力する。この場合、符号ビット長は3である。つまり、符号のデータ量は3ビットである。
CPU34は、S130において、着目画素の色が、辞書インデックス3に登録されている色である場合、可変長符号として0000を出力する。この場合、符号ビット長は4である。つまり、符号のデータ量は4ビットである。
CPU34は、S130において、着目画素の色が、辞書に登録されていない色である場合、可変長符号として0001を出力する。この場合、符号ビット長は4である。つまり、符号のデータ量は4ビットである。CPU34は、可変長符号として0001を出力する場合、色を示す非圧縮データ(つまり可逆的な符号化データ)を可変長符号に続けて出力する。本実施形態における非圧縮データは、輝度値を示す8ビットのデータである。
次に、CPU34は、辞書を更新する(S135)。図5及び図6は、辞書の更新の例を示す。図5に示すように、辞書インデックス0に色C0、辞書インデックス1に色C1、辞書インデックス2に色C2、辞書インデックス3に色C3が登録されている例を示す。
この例において、着目画素の色が色C2である場合、先頭の辞書インデックス0に色C2が登録される。さらに、着目画素の色が登録されていた辞書インデックスよりも上位の辞書インデックスは、1つずつ繰り下げられる。つまり、辞書インデックス1に色C0が登録され、辞書インデックス2に色C1が登録される。着目画素の色が登録されていた辞書インデックスよりも下位の辞書インデックスは、変更されない。つまり、図5に示す場合であれば、辞書インデックス3は変更されない。
図6は、着目画素の色が、辞書に登録されていない場合における辞書の更新の様子を示す。図6に示すように、更新前の辞書に登録されている色は、図5と同じである。このため、着目画素の色が色Cxである場合、着目画素の色は辞書に登録されていない。
着目画素の色が辞書に登録されていない色Cxである場合、先頭の辞書インデックス0に色Cxが新規に登録される。さらに、辞書インデックス0,1,2は、1つずつ繰り下げられる。つまり、辞書インデックス1に色C0が登録され、辞書インデックス2に色C1が登録され、辞書インデックス3に色C2が登録される。最も下位の辞書インデックス3に登録されていた色C3は、削除される。
上記のようにして辞書が更新されるため、辞書に登録されている色は、過去に辞書に登録された実績がある色のうち、直近に辞書に登録された各々異なる4つの色である。また、上記のようにして辞書が更新されるため、辞書インデックス0に登録されている色を符号化する場合、辞書は更新されない。
なお、上記のように、直近に符号化した色を先頭の辞書インデックス0に移動させるのは、辞書インデックス0に対応付けられている符号ビット長が最も短いからである。他の実施形態において、先頭ではない辞書インデックス(例えば辞書インデックス1)に最も短い符号ビット長が対応付けられていれば、その辞書インデックスに、直近に符号化した色を登録してもよい。
次に、CPU34は、図6と共に説明したように、1ブロックデータ分の符号化において、新規に辞書に登録された色の数(以下、新規登録色数)が基準値Nより大きくなったかを判定する(S140)。基準値Nは、後述する基準値Nの制御処理(S200)で決定される整数である。
新規登録色数が基準値N以下である場合(S140,NO)、CPU34は、ブロック内の全画素を符号化したかを判定する(S150)。符号化していない画素が残っている場合(S150,NO)、CPU34は、S125に戻る。このようにして、S125〜S150が繰り返されると、S140及びS150の何れかでYESと判定される。
新規登録色数が基準値N以下であることが満たされているうちに、ブロック内の全画素が符号化された場合(S150,YES)、CPU34は、基準値Nの制御処理を実行する(S200)。基準値Nの制御処理については、図7と共に後述する。なお、S150においてYESと判定された場合に、新規登録色数がM(≦N)だったとき、ブロックデータを取得した段階において、辞書に登録されていない色の数(以下、未登録色数)がMだったことになる。
基準値Nの制御処理を終えると、CPU34は、タグ信号を、辞書符号化を示す値に決定する。辞書符号化は、具体的には、タグ信号を1に決定する。続いてCPU34は、タグ信号としての符号と、S130で作成した符号とを、圧縮ストリームに出力する。タグ信号は、先頭に付される。
次に、CPU34は、印刷対象を構成する全ブロックデータを取得したかを判定する(S298)。取得していないブロックデータ(つまり、符号化していないブロックデータ)が残っている場合(S298,NO)、CPU34は、S110に戻る。
ここで図7を用いて、基準値Nの制御処理を説明する。CPU34は、まず、1のブロックデータを辞書符号化した結果、新規登録色数がゼロだったかを判定する(S210)。なお、他の実施形態におけるS210の判定は、新規登録色数が所定数以下だったか、という基準でもよい。本実施形態は、上記の所定数がゼロの場合である。
新規登録色数が1以上だった場合(S210,NO)、CPU34は、現状の基準値Nから新規登録色数を減算した値を、新たな基準値Nの値として採用して(S220)、基準値Nの制御処理を終える。
一方、新規登録色数がゼロだった場合(S210,YES)、CPU34は、現状の基準値NがNmax未満であるかを判定する(S230)。Nmaxは、予め定められた基準値Nの上限値である。
現状の基準値NがNmaxに等しい場合(S230,NO)、CPU34は、基準値Nの値を維持して、基準値Nの制御処理を終える。一方、現状の基準値NがNmax未満である場合(S230,YES)、CPU34は、現状の基準値Nに1を加算した値を、新たな基準値Nの値として採用して(S240)、基準値Nの制御処理を終える。
一方、図3に示すように、ブロック内の全画素が符号化される前に、新規登録色数が基準値Nよりも大きくなった場合(S140,YES)、CPU34は、S120でのバックアップを利用して、辞書を復元する(S280)。なお、S140においてYESと判定された場合、ブロックデータを取得した段階において、未登録色数はNよりも大きかったことになる。
次に、CPU34は、タグ信号を、非可逆符号化を示す値に設定する(S290)。具体的には、タグ信号を0に決定する。なお、他の実施形態においては、非可逆符号化を示す値が1であり、辞書符号化を示す値が0でもよい。続いてCPU34は、非可逆符号化を実施し(S295)、その後、S298に進む。
本実施形態においては、非可逆符号化としてハールウェーブレット変換を採用する。図8は、ハールウェーブレット変換および逆変換の演算を示す。本実施形態においてはブロックが8×8画素であるので、入力画素データは8×8画素であるが、図8では説明を簡単にするために、入力画素データが2×2画素の場合を示している。演算は加減算およびシフト演算のみである。入力画素データとしてのA0〜A3の4画素は、これらのDC成分(LL)と、水平エッジ成分(HL)と、垂直エッジ成分(LH)と、斜めエッジ成分(HH)との4つに変換される。
図9は、本実施形態における実際のハールウェーブレット変換の様子を示す。図9に示すように、CPU34は、DC成分(LL)を対象に、階層的に3回、変換を実行する。これによって、入力画素データは、10のサブバンドに分割される。なお、他の実施形態として、ブロックが4×4画素の場合は、2回の実行によって7つに分割されてもよい。
なお、変換後における情報量としてのエントロピーの低下幅は、写真のような自然画像では、一般的に偏りが生じる。具体的には、LL3のエントロピーの低下は少ない一方、高域成分(例えばHH1)のエントロピーは2〜4ビット程度、低下することが確認されている。
CPU34は、上記のように変換された各成分を量子化する。量子化は基本的に除算であるが、本実施形態では、ハードウエアで実施する形態も想定して、除算を使わないシフト演算で可能な値とした。具体的には、入力値がxである場合における量子化値Q(x)は下記の式で計算される。関数intは、小数点以下を切り捨てて整数部分のみを取る演算子である。
Q(x)=int{(x+QS/2)/QS}
周波数成分が高ければ高いほど、圧縮率を高くしてもヒトの視覚には知覚されにくいので、本実施形態においては、高域成分ほど量子化シフト値QSとして大きな値を採用する。QSの値の具体例を図10に示す。図10は、q0、q1、q2の3種類のテーブルを用意する場合の例を示す。q1は、q0に比べて、HL2,LH2,HH2及びHL1,LH1,HH1に対応付けられたQSの値が小さいので、画質が良好になる。同様に、q2は、q1に比べて、HL1,LH1,HH1に対応付けられたQSの値が小さいので、画質が良好になる。例えばq0を用いた場合、全体としてブロックデータの平均エントロピーは大幅に低下する傾向にあり、約1/6に減少する場合もある。
CPU34は、量子化後の各成分を、各々の生起確率に応じた可変長符号に変換して出力する。CPU34は、上記の可変長符号の先頭に、S290において設定したタグ信号を付与する。
上記に説明したように、CPU34は、ブロックデータ毎に辞書符号化および非可逆符号化の何れかによって符号化を実施し、全てのブロックデータを符号化すると(S298,YES)、符号データが完成するので、画像符号化処理を終える。
ここで、図2と共に述べた復号(S400)について説明する。図11は、復号部400の内部構成を示すブロック図である。本実施形態における復号部400は、ハードウエアによって構成される。復号部400は、符号化モード判定部410と、辞書復号部420と、非可逆復号部430と、復号画素選択部440と、ブロック/ラスター変換部450とを備える。
符号化モード判定部410は、符号データから符号化モード判定ビットとしてのタグ信号を検出する。この検出によって、符号化モード判定部410は、後続の符号データが、辞書符号化されたものか、非可逆符号化されたものかを判定する。符号化モード判定部410は、辞書符号化モードと判定した場合、辞書復号部420をイネーブル状態にすると共に、復号画素選択部440を制御して、辞書復号部420の復号画素ブロックデータをブロック/ラスター変換部450に送る。
一方、符号化モード判定部410は、非可逆符号化モードと判定した場合、非可逆復号部430をイネーブル状態にすると共に、非可逆復号部430の復号画素ブロックデータを、復号画素選択部440を介して、ブロック/ラスター変換部450に送る。
ブロック/ラスター変換部450は、復号画素ブロックデータをラスター変換して印刷部600に出力する。
以上に説明した本実施形態によれば、辞書符号化モードにおいて、直近に出現した色が辞書に登録されるので、色の構成が類似しているブロックデータが連続する場合、新規登録色数が少なくなることによって辞書符号化が選択される可能性が高くなるため、符号化の圧縮率が向上する。特に同じ色が連続する場合、1ビットの符号で連続して符号化できるので、圧縮率が特に向上する。
さらに、符号化モードを選択する際、辞書に登録されている色を除外し、8ビットの非圧縮データとしての符号の出力が必要な色のみの数で評価するため、可逆モードが符号化されるブロックが増加する。ひいては、復号画像の品質が向上する。
さらに、出現した色を辞書インデックスの先頭(つまり辞書インデックス0)に移動させ、且つ、辞書インデックスがより若い番号に、より短い符号を割り当てる可変長符号化を行うことによって、出現頻度が高い色ほど、短い符号によって符号化される。このため、符号データの情報量が削減されやすくなる。
さらに、基準値Nの制御処理によって、基準値Nを未登録色数(つまり新規登録色数)に応じて変更することによって、非可逆符号化による劣化が目立ちやすい色数の少ない線画、テキスト等の画像は可逆で符号化され、可逆符号化では圧縮率が悪化する自然画像等の色数の多い画像は非可逆で符号化されるため、辞書符号化と非可逆符号化とのバランスを取ることができる。つまり、圧縮率と画質とのバランスを取ることができる。
具体的には、新規登録色数が1以上だった場合(S210,NO)、新規登録色数の数が多ければ多いほど、辞書符号化による圧縮率は低下する。このため、次のブロックデータでは、非可逆符号化が選択されやすくなるように基準値Nを変更することが好ましい。本実施形態では、これをS220によって実現している。さらに、新規登録色数がゼロだった場合(S210,YES)、圧縮率および画質ともに良好な符号化が実現された訳であるので、引き続き辞書符号化が実行されることが好ましい。本実施形態では、これをS240によって実現している。但し、基準値Nが大きくなり過ぎた状態で、未登録色数が多いブロックデータを取得すると、圧縮率が大幅に低下する虞がある。このため、基準値Nには上限値としてNmaxが定められている。
実施形態2を説明する。実施形態2の説明は、実施形態1と異なる点を主な対象とする。特に説明しない点については、実施形態1と同じである。実施形態2においては、汎用のコンピューターではなく、ハードウエアによって実施形態1と同等の符号化を実現する。図12は、画像符号化装置30が備える符号部100を示すブロック図である。
符号部100は、画像データ取得部111と、ラスター/ブロック変換部112と、画像特性判定部113と、画素データ辞書114と、辞書符号化部115と、非可逆符号化部116と、符号データ選択部117と、多重化部118とを備える。
画像データ取得部111は、印刷対象となる画像データを取得する。ラスター/ブロック変換部112は、入力された画像データからブロックデータを作成する。作成されたブロックデータは、画像特性判定部113、辞書符号化部115および非可逆符号化部116に送られる。
画像特性判定部113は、ラスター/ブロック変換部112から出力されるブロックデータを受け取り、符号化モードを決定する。画像特性判定部113は、その結果をタグ信号として出力する。符号化モードとは、実施形態1で説明したように、辞書符号化モード及び非可逆符号化モードのことである。符号化モードの決定には、画素データ辞書114が用いられる。
具体的には、画像特性判定部113は、ブロックデータを構成する64画素に、何種類の色が含まれているかカウントする。但し、画素データ辞書114に登録されている色と同色値は、カウントから除外される。つまり、カウントされる色の数は、画素データ辞書114の未登録色数を示している。
符号データ選択部117は、上記のカウント値が基準値N以下である場合、辞書符号化部115の符号データを多重化部118に入力する。符号データ選択部117は、上記のカウント値が基準値Nよりも大きい場合、非可逆符号化部116の符号データを多重化部118に入力する。
辞書符号化部115について説明する。図13は、辞書符号化部115の構成例を示すブロック図である。辞書符号化部115は、入力画素データを1つずつ符号に変換する。
まず、辞書符号化部115は、入力ブロック画像の最初の画素データを符号化する前に、画素データ辞書114から画素データをシフトレジスター121にロードする。シフトレジスター121は、4段で構成され、異なる4つの色が格納される。図示の例では、レジスター0〜3に色C0、C1、C2、C3が格納されている。シフトレジスター121は、実施形態1で説明した辞書として機能する。
続いて、ブロックデータから色が1つ入力されると、比較部122は、レジスター0〜3の色と比較する。比較部122は、図5と共に説明した例と同様に、色が一致した場合は、その一致したレジスターの番号を辞書インデックスとして、可変長符号化部123に入力する。さらに、比較部122は、一致した色C2をレジスター0に移動し、レジスター0および1に格納されていた色C0、C1を、各々レジスター1,2に移動させる。
一方、入力された色が色Cxでレジスター0〜3に登録されていない場合、比較部122は、エスケープ符号を可変長符号化部123に入力する。本実施形態におけるエスケープ符号は、辞書インデックス0〜3と重複しないように、4として定められている。さらに、図5と共に説明した例と同様に、入力色Cxをレジスター0に格納し、レジスター0,1,2に格納されていた色C0,C1,C2を、各々レジスター1,2,3に移動させる。
可変長符号化部123は、図4に示したように、入力された辞書インデックスに対応する可変長符号を出力する。可変長符号化部123は、辞書インデックス4が入力された場合、可変長符号として0001を出力する。
上記のように入力色が辞書にない場合は、復号部400の辞書復号部420に登録させるため、符号多重化部124が、色Cxの可逆符号をエスケープ符号の直後に続けて出力する。この符号パッキングを符号多重化部124が実行する。
非可逆符号化部116について説明する。図14は、非可逆符号化部116の構成例を示すブロック図である。非可逆符号化部116は、ハール変換部131と、量子化部132と、第2可変長符号化部133とを備える。ハール変換部131は、実施形態1で説明したハールウェーブレット変換を実行する。量子化部132は、実施形態1で説明した量子化を実行する。第2可変長符号化部133は、量子化後の各成分を、各々の生起確率に応じた可変長符号に変換して出力する。
以上に説明した本実施形態によれば、符号化をハードウエアで実現できるので、高速な符号化が可能になる。
本開示は、本明細書の実施形態に限られるものではなく、その趣旨を逸脱しない範囲において種々の構成で実現できる。例えば、発明の概要の欄に記載した各形態中の技術的特徴に対応する実施形態中の技術的特徴は、先述の課題の一部又は全部を解決するために、或いは、先述の効果の一部又は全部を達成するために、適宜、差し替えや、組み合わせができる。その技術的特徴が本明細書中に必須なものとして説明されていなければ、適宜、削除できる。例えば、以下の実施形態が例示される。
非可逆符号化の手法は、ベクトル量子化やウェーブレット変換を用いた手法でもよいし、ADCTでもよい。ADCTは、Adaptive Discrete Cosine Transformの頭字語であり、適応型離散コサイン変換のことである。
画像復号化装置は、プリンターでなくてもよい。例えば、画像や動画を画面に表示する表示装置でもよい。また、画像符号化装置と画像復号化装置との通信に有線を用いてもよい。
実施形態においては、符号データが完成してから、符号データの送信を実施していたが、1つのブロックデータの符号化が済み次第、順次、符号データを送信するようにしてもよい。
基準値Nの制御処理は、実施しなくてもよい。この場合、基準値Nは、予め定められた固定値にしてもよい。
上記実施形態において、ソフトウエアによって実現された機能及び処理の一部又は全部は、ハードウエアによって実現されてもよい。また、ハードウエアによって実現された機能及び処理の一部又は全部は、ソフトウエアによって実現されてもよい。ハードウエアとしては、例えば、集積回路、ディスクリート回路、又は、それらの回路を組み合わせた回路モジュールなど、各種回路を用いてもよい。