(57)【特許請求の範囲】
【請求項１】
符号化対象の画像データから所定サイズの画素ブロックを取得する取得部と、
既に定められている代表色それぞれと、前記画素ブロック内の対象画素の色との距離を算出し、前記距離が最小距離となる前記代表色を求める比較部と、
前記最小距離が第１の閾値よりも小さい場合には、前記最小距離の前記代表色と対応するインデックスを前記対象画素に割り当て、前記最小距離が前記第１の閾値よりも大きい場合には、前記対象画素の画素値を新たな代表色として追加し、そして前記新たな代表色と対応する前記インデックスを前記対象画素に割り当てる判定部と、
前記代表色と、前記対象画素に割り当てられたインデックスとを符号化する符号化部と、
を有する画像符号化装置。
【請求項２】
前記判定部は、前記最小距離が前記第１の閾値よりも大きい場合に、前記代表色の数が上限値に達しているかを判定し、前記上限値に達している場合には、前記対象画素の色を新たな代表色として追加せず、前記最小距離の前記代表色と対応する前記インデックスを前記対象画素に割り当てることを特徴とする請求項１記載の画像符号化装置。
【請求項３】
それぞれの前記対象画素に対してそれぞれの前記代表色が割り当てられた数を累積したヒストグラムを求めるヒストグラム算出部と、
前記ヒストグラムに基づいて、前記代表色毎に前記第１の閾値の大きさを調整する調整部と、をさらに備え、
前記判定部は、前記代表色それぞれに定められた前記第１の閾値を用いる
請求項１記載の画像符号化装置。
【請求項４】
前記調整部は、前記ヒストグラムにおいて、それぞれの前記代表色が割り当てられた数が第２の閾値以上であれば、その代表色に対する第１の閾値の値を小さくする、
請求項３記載の画像符号化装置。
【請求項５】
前記判定部は、前記最小距離が前記第１の閾値よりも大きい場合に、前記代表色の数が上限値に達しているかを判定し、
前記符号化部は前記上限値に達している場合には、符号化失敗として出力する、
請求項１記載の画像符号化装置。
【請求項６】
請求項１〜５記載の画像符号化装置であって、
前記画素ブロックのうち最初の対象画素はロスレスとなることを特徴する
請求項１記載の画像符号化装置。
【請求項７】
前記符号化部は、前記代表色を量子化して符号化することを特徴する請求項１〜６記載のいずれか一項記載の画像符号化装置。
【請求項８】
それぞれが異なる大きさの前記第１の閾値を有する複数の請求項１記載の画像符号化装置を備え、
得られた圧縮データのうち、最も第１の閾値の値が小さい圧縮データを出力する画像符号化装置。
【請求項９】
符号化対象の画像データから所定サイズの画素ブロックを取得し、
既に定められている代表色それぞれと、前記画素ブロック内の対象画素の色との距離を算出し、前記距離が最小距離となる前記代表色を求め、
前記最小距離が第１の閾値よりも小さい場合には、前記最小距離の前記代表色と対応するインデックスを前記対象画素に割り当て、前記最小距離が前記第１の閾値よりも大きい場合には、前記対象画素の画素値を新たな代表色として追加し、そして前記新たな代表色と対応する前記インデックスを前記対象画素に割り当て、
前記代表色と、前記対象画素に割り当てられたインデックスとを符号化する、
画像符号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、画像データをカラーパレットで表現することでデータを圧縮する画像符号化装置、及び画像符号化方法に関する。
【背景技術】
【０００２】
自然画像データを圧縮する場合、静止画であればＪＰＥＧ、動画像であればＭＰＥＧを用いることで効率的なデータ圧縮が可能である。一方で、ＰＣの画面のようなＣＧ画像データに対しては、上記手法よりも複数の代表色（パレット）で各画素を表現するカラーパレット画像符号化の方が効率的なデータ圧縮が可能な場合がある。
【０００３】
カラーパレット画像符号化では、対象となる画像をどのような代表色で表現するか、また各画素をどの代表色で表現するか、を決定することが重要である。
【０００４】
例えば、画像の色のヒストグラムを生成し、その分布に基づいて代表色を決定する技術がある。しかしながら、代表色を１つ生成するたびにヒストグラムを算出するため、計算量が非常に多かった。また、すべての色を対象としてヒストグラムを算出するため、ヒストグラムを算出するために非常に容量の大きなメモリが必要となるという問題があった。そのため、例えばＬＳＩなどのハードウェアで実装ことが非常に困難であった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−２４９９４７号公報
【非特許文献】
【０００６】
【非特許文献１】Ｐ.    Ｈｅｃｋｂｅｒｔ,    “Ｃｏｌｏｒ    Ｉｍａｇｅ    Ｑｕａｎｔｉｚａｔｉｏｎ    ｆｏｒ    Ｆｒａｍｅ    Ｂｕｆｆｅｒ    Ｄｉｓｐｌａｙ，”  Ｃｏｍｐｕｔｅｒ  Ｇｒａｐｈｉｃｓ，  ｖｏｌ．  １６，  ｎｏ．  ３，  ｐｐ．  ２９７−３０３，  １９８２．
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記従来技術では、すべての色を対象としてヒストグラムを算出するため、ヒストグラムを算出するために非常に容量の大きなメモリが必要という問題があった。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、実施形態に係る画像符号化装置は、取得部と、比較部と、判定部と、符号化部とを有する。取得部は、符号化対象の画像データから所定サイズの画素ブロックを取得する。比較部は、既に定められている代表色それぞれと、前記画素ブロック内の対象画素の色との距離を算出し、前記距離が最小距離となる前記代表色を求める。判定部は、前記最小距離が第１の閾値よりも小さい場合には、前記最小距離の前記代表色と対応するインデックスを前記対象画素に割り当て、前記最小距離が前記第１の閾値よりも大きい場合には、前記対象画素の画素値を新たな代表色として追加し、そして前記新たな代表色と対応する前記インデックスを前記対象画素に割り当てる。符号化部は、前記代表色と、前記対象画素に割り当てられたインデックスとを符号化する。
【発明の効果】
【０００９】
本発明の実施形態によれば、代表色を生成するためのヒストグラム算出に必要なメモリの消費を抑えながら、低処理量でのカラーパレット画像符号化が可能となる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態の画像符号化装置を表すブロック図。
【図２】第２の実施形態の画像符号化装置を表すブロック図。
【図３】符号化部の詳細な構成を表すブロック図。
【図４】第１の実施形態の画像符号化装置の変形例を表す図。
【図５】第１の実施形態の画像符号化装置の処理を表すフローチャート。
【図６】第１の実施形態の画像符号化装置の変形例１の処理を表すフローチャート。
【図７】第１の実施形態の画像符号化装置の変形例２の処理を表すフローチャート。
【図８】第２の実施形態の画像符号化装置の処理を表すフローチャート。
【図９】画素ブロックの例を示す図。
【図１０】インデックスが割り当てられた結果（８色パレット時）。
【図１１】インデックスが割り当てられた結果（４色パレット時、閾値Ａ＝９）。
【図１２】インデックスが割り当てられた結果（４色パレット時、閾値Ａ＝９６）。
【図１３】８色パレットの初期状態の例を示す図。
【図１４】８色パレットにおける代表色の例を示す図（１画素処理時）。
【図１５】８色パレットにおける代表色の例を示す図（２画素処理時）。
【図１６】８色パレットにおける代表色の例を示す図（１６画素処理時）。
【図１７】４色パレット初期状態。
【図１８】４色パレットにおける代表色の例を示す図（４画素処理時）。
【図１９】４色パレットにおける代表色の例を示す図（１２画素終了時、閾値Ａ＝９）。
【図２０】４色パレットにおける代表色の例を示す図（１６画素終了時、閾値Ａ＝９６）。
【図２１】データ構造の例を示す図（代表色の量子化を行っていない場合）。
【図２２】データ構造の例を示す図（代表色の量子化を行っている場合）。
【図２３】インデックス割り当て結果（１パス目、８色パレット時、閾値Ａ＝９６）。
【図２４】８色パレットにおける代表色追加と対応画素数。
【図２５】インデックス割り当て結果（２パス目、８色パレット時、閾値Ａ＝４８）。
【図２６】８色パレットにおける代表色追加（２パス目、閾値Ａ０＝４８）。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら本発明の実施形態の画像処理装置について詳細に説明する。なお、同一の符号を付した要素は同様の機能を有するものとして、重複する説明を適宜省略する。
【００１２】
（第１の実施形態）
第１の実施形態の画像符号化装置１は、符号化対象となる対象画素をどの代表色で表現するかを示すインデックスを割り当て、代表色と割り当てられたインデックスを符号化する。代表色（パレット）の生成の際に、ヒストグラム生成を行わないため処理に必要となるメモリを削減可能である。なお、代表色及び対象画素の色の情報は、ＲＧＢ、ＹＵＶ、ＹＣｂＣｒ、ＨＳＶなどどの表色系で表現されても良い。本実施形態では、ＲＧＢ空間で表現される例について述べる。本実施形態では、画素ブロック及び対象画素の処理（スキャン）を、ラスタースキャン順に行う動作について例示するが、そのほかの順番であっても構わない。
【００１３】
図１は、画像符号化装置１を表すブロック図である。画像符号化装置１は、取得部１０１と、比較部１０２と、判定部１０３と、記憶部１０４と、符号化部１０５とを備える。  
取得部１０１は、符号化対象の画像データから所定サイズの画素ブロックを取得する。比較部１０２は、既に定められている代表色それぞれと、画素ブロック内の対象画素の色との距離を算出し、距離が最小距離となる代表色を求める。
【００１４】
判定部１０３は、最小距離が閾値Ａよりも小さい場合には、最小距離の代表色と対応するインデックスを対象画素に割り当て、最小距離が閾値Ａよりも大きい場合には、対象画素の画素値を新たな代表色として追加し、そして新たな代表色と対応するインデックスを対象画素に割り当てる。記憶部１０４は、代表色を記憶する。なお本実施形態では、代表色と対応するインデックスは代表色が追加された順番に順じた値となるようにする。最初の代表色のインデックスは０番となり、順に１，２…と決定される。符号化部１０５は、代表色と、対象画素に割り当てられたインデックスとを符号化する。
【００１５】
図５は、画像符号化装置１の処理を表すフローチャートである。以下、本実施形態の画像圧縮装置が実行する処理のフローを説明する。  
取得部１０１は、符号化対象の画像データから所定サイズの画素ブロックを取得する（Ｓ１０１）。  
比較部１０２は、既に定められている代表色それぞれと、画素ブロック内の対象画素の色との距離を算出する（Ｓ１０２）。  
比較部１０２は、記憶部１０３に記憶されている全ての代表色に対して、対象画素と間の距離が算出されたかを判断する（Ｓ１０３）。全ての代表色との比較が終了したと判断した場合（Ｓ１０３，Ｙｅｓ）、距離が最小距離となる代表色の情報を判定部１０３に送り、Ｓ１０４に進む。  
判定部１０３は、最少距離と閾値Ａとの比較を行う（Ｓ１０４）。最小距離が閾値Ａよりも小さい場合（Ｓ１０４、Ｙｅｓ）、Ｓ１０７に進む。最小距離が閾値Ａよりも大きい場合（Ｓ１０４，Ｎｏ）、Ｓ１０５に進む。  
判定部１０３は、対象画素の色を最小距離となった代表色で表現することを決定する（Ｓ１０７）。  
判定部１０３は、記憶部１０４で保持されている代表色の数が、所定の上限値以上か否かの判定を行う（Ｓ１０５）。記憶部１０４で保持されている代表色の数が、上限値よりも少なければ（Ｓ１０５，Ｎｏ）、Ｓ１０６に進む。記憶部１０４で保持されている代表色の数が、上限値以上であれば（Ｓ１０５，Ｙｅｓ）、これ以上新たな代表色は追加できないものとしてＳ１０７に進む。
【００１６】
判定部１０３は、対象画素の色を新たな代表色として、記憶部１０４に追加して記憶させる（Ｓ１０６）。  
判定部１０３は、画素ブロック内の全ての対象画素に対して、代表色のインデックスが割り当てられているかを判定する（Ｓ１０８）。画素ブロック内の処理が終わっていない場合（Ｓ１０８，Ｎｏ）、Ｓ１０２に戻る。画素ブロック内の処理が終わった場合（Ｓ１０８，Ｙｅｓ）、Ｓ１０９に進む。  
符号化部１０５は、記憶部１０４に記憶されている、代表色、代表色と対応するインデックス、及び画素ブロック内の対象画素に割り当てられたインデックスを符号化して出力する（Ｓ１０９）。  
符号化部１０５は、符号化対象の画像データの全ての画素ブロックに対して、符号化が終わったかを判定する（Ｓ１１０）。符号化が終わっていない場合（Ｓ１１０，Ｎｏ）、Ｓ１０１に戻る。符号化が終わった場合（Ｓ１１０，Ｙｅｓ）、符号化を終了となる。
【００１７】
以降、各処理ステップに関する詳細説明を行う。  
取得部１０１が、Ｓ１０１で取得する画素ブロックの形状は、Ｎ×Ｎ画素の正方形、Ｍ×Ｎ画素の長方形、Ｍ×１画素のラインでいずれであっても良い（Ｎ，Ｍは自然数）。  
図９は、画素ブロックの例を示す図である。一つの矩形が各対象画素を示し、夫々の色をＲＧＢ空間（ダイナミックレンジは８ビット［０：２５５］）で表現した値が記載されている。以下の説明で図９を参照しながら具体例について説明する。
【００１８】
比較部１０２は、対象画素の色と、記憶部１０４に保持されている代表色の間の距離を算出する（Ｓ１０２）。図１３は、代表色の初期状態の例を示す図である。ｐａｌｅｔｔｅＸ（Ｘ＝０，１，・・・、７は各代表色のインデックスを示す）と、代表色とが対応して保持されている本実施形態では、代表色の上限値を８色（８パレット）とする。処理開始時の初期状態では、各代表色のＲ、Ｇ、Ｂの色情報はＮ／Ａ（ｎｏｔ  ａｖａｉｌａｂｌｅ）とする。ただし、代表色の初期状態は、例えばＲ＝０、Ｇ＝０、Ｂ＝０のように所定の値としても良い。また、事前にどの色が多く出現するかに関する事前情報があれば、頻度の高い色を代表色の初期状態とすることで効率が上がる可能性がある。  
画素ブロック内の対象画素の色と、代表色との距離の算出は、以下の式を用いる。  
【数１】
0005632431.tif 000002
【００１９】
αはＲに対する重み係数、βはＧに対する重み係数、γはＢに対する重み係数を示す。本実施形態では、α＝β＝γ＝１とする例について述べる。ただし、ベイヤー配列などを考慮し、α＝γ＝１、β＝２とＧを優先しても良い。  
また、ＹＵＶ表色系の場合でも上記と同様の式で距離を求めることができる。ＹＵＶの場合、例えばＹに対する重み係数をα、Ｕに対する重み係数をβ、Ｖに対する重み係数をγとする。色歪みが発生しないようにＵＶを優先して、α＝１、β＝γ＝２とする。また、客観画質であるＰＳＮＲを高める場合には、Ｙを優先して、α＝２、β＝γ＝１としても良い。
【００２０】
上記例では、８ビット精度で距離を算出しているが、変更例として、各色の下位数ビットを落として距離を求めてもよい。下位数ビットを落とす処理とは、例えば算術右シフトを用いる。最下位のビットを落とし、色情報を８ビットから７ビットにしてから差分を求めることで、差分を算出する際に増える１ビットの正負の情報と含めても、元の８ビットで処理が可能となる。それによって、ビット幅を増やさずに済むことが可能となる。
【００２１】
本実施形態では、対象画素の色（図９の画素ブロックの左上の画素の場合、Ｒ＝１２８、Ｇ＝１２８、Ｂ＝１２８）と図１３に示す初期状態の代表色（Ｎ／Ａ）との距離は、無限大として定義する。初期状態の代表色（Ｎ／Ａ）と対象画素との間の距離は、取りうる範囲の最大（色情報のダイナミックレンジが８ビットの場合は２５５）となる。α＝β＝γ＝１であれば、距離＝２５５×３＝７６５とする。
【００２２】
なお、比較部１０２が、記憶部１０４に保持されている代表色の内、Ｎ／Ａではない数（新たに代表色として追加された数）をカウントし、Ｎ／Ａではない代表色とだけ距離を算出することで、Ｎ／Ａと不必要に比較することがなくなる。それによって、ＨＷ実装の場合、各代表色との比較が終了したか否かを判定するステップ（Ｓ１０３）の数が減るため、処理量が削減可能である。なお、ＳＷ実装においても、各代表色との間の距離を求める処理量が削減可能となる。カウントしない場合は、全て（本実施形態では、８色）の代表色との距離を算出すれば良い。本実施形態では、追加された代表色の数をカウントするものとして、以降の説明を行っていく。なお、ＳＷによる実装の場合には、
判定部１０３は、対象画素の色が代表色で置き換わった際の歪量を、閾値Ａを用いて判定している。所定の歪量以上となった場合には（Ｓ１０４，Ｎｏ）、対象画素の色を代表色とする（Ｓ１０６）ことで、歪量が閾値Ａを超えた値とならないように制御している。閾値Ａの決定方法は様々あげられる。例えば各ＲＧＢの８ビットのダイナミックレンジの内、下位２ビットの歪量を許容する場合、２ビットの最大値＝３の歪量がＲＧＢそれぞれで発生したとして、閾値Ａ＝３＋３＋３＝９と設定することができる。なお、本実施形態では閾値Ａが９の場合について以下の説明を行う。
【００２３】
閾値Ａの値が小さいほど、歪量が少なくなり高画質になる。その一方で、代表色が多く追加されるため、符号化されたデータの量が増加する。逆に、閾値Ａの値を大きくするほど、歪量が大きくなり画質は下がる。その一方で、代表色が少ないため、符号化されたデータの量は減少する。したがって、判定部１０３が、符号化されたデータの量が所望の量になるよう閾値Ａを反復処理で試しても良い。反復処理とは、Ａの値を少しずつ変え、代表色の量と歪量との関係が所望の量になるＡを求める処理をいう。また、閾値Ａをフィードバック制御に基づいて調整しても良い。フィードバック制御とは、前回のデータ量とＡとの関係から、データ量とＡとの間の相関を予測し、次に演算するＡの大きさを決定する処理をいう。例えば、閾値がＡ０の場合、符号量が大きくなりすぎた場合、次の処理はＡ＝Ａ０×２で実行する。Ａ＝Ａ０×２の場合、符号量が少なすぎた場合、Ａ＝（Ａ０×２＋Ａ０）／２とし、徐々にＡを収束させていく。また、複数の閾値Ａの値を並列に実行して、符号化されたデータの量が所望の量に近くなる閾値Ａを選択することも可能である。この変形例については、後述する。
【００２４】
画素ブロック内の最初の対象画素に対する処理について説明する。記憶部１０４に保持されている代表色はすべてＮ／Ａである。最初の対象画素の色と代表色との距離はいずれも最大値（＝２５５×３＝７６５）となり、閾値Ａ（＝９）よりも大きい（Ｓ１０４、Ｎｏ）。また、代表色の上限値が８に対して、新たな代表色を追加したカウント数は０であるため（Ｓ１０５，Ｎｏ）、Ｓ１０６へと進む。判定部１０３は、記憶部１０４のｐａｌｅｔｔｅ０（インデックスは０）の代表色に、最初の対象画素のＲＧＢの色情報を追加する（Ｓ１０６）。図１４は、最初の対象画素の色を追加した後、記憶部１０４に記憶される代表色の情報を示す。そして、判定部１０３は、最初の対象画素にインデックス０を割り当てる（Ｓ１０７）。  
判定部１０３は、画素ブロック内の１６画素中で、１画素しか処理を終えていないと判定し（Ｓ１０８，Ｎｏ）、２番目の対象画素の色と代表色との距離を算出するステップ（Ｓ１０２）に戻る。
【００２５】
次に、画素ブロック内の２番目の対象画素に対する処理について説明する。比較部１０２は、図１４に示した記憶部１０４に保持されている代表色と、２番目の対象画素の色との距離を算出する（Ｓ１０２）。ｐａｌｅｔｔｅ０との距離が０＋６４＋６４＝１２８となる。他のｐａｌｅｔｔｅは全てＮ／Ａであり、距離が７６５となる。本実施形態では、追加された代表色との間でのみ距離を算出するため、ｐａｌｅｔｔｅ０との距離を求めた後（Ｓ１０３，Ｙｅｓ）、Ｓ１０４に進む。比較部１０２は、ｐａｌｅｔｔｅ０の１２８を最少距離として判定部１０３に送る（Ｓ１０４）。  
閾値Ａ（＝９）よりも最小距離が大きいため（Ｓ１０４，Ｎｏ）、Ｓ１０５へと進む。新たな代表色を追加したカウント数（＝１）は、上限値（＝８）よりも小さいので（Ｓ１０５，Ｎｏ）、Ｓ１０６に進む。判定部１０３は、記憶部１０４のｐａｌｅｔｔｅ１（インデックスは１）の代表色に２番目の対象画素のＲＧＢの色情報を追加する（Ｓ１０６）。図１５は、２番目の対象画素の色を追加した後、記憶部１０４に記憶される代表色の情報を示す。そして、判定部１０３は、２番目の対象画素にインデックス１を割り当てる。
【００２６】
図９に示した、画素ブロック内のすべての対象画素の処理が終わった結果について説明する。図１６は、図９のすべての対象画素の処理が終わった結果（Ｓ１０８，Ｙｅｓ）、記憶部１０４に保持されている代表色を示す図である。記憶部１０４には、５色の代表色が記憶されている。図１０は、図９の画素ブロック内の各対象画素に対して割り当てられたインデックスを示す図である。
【００２７】
符号化部１０５は、記憶部１０４に記憶されている、代表色、代表色と対応するインデックス、及び画素ブロック内の対象画素に割り当てられたインデックスを符号化して出力する（Ｓ１０９）。図２１は、符号化された画素ブロックのデータ構造の例を示す図である。図２１に示すように最初に記憶部１０４で保持可能な代表色の上限値（＝８）を３ビットで表現し符号化する。次に、使用したｐａｌｅｔｔｅ数を符号化し、続いて各ｐａｌｅｔｔｅの色情報（ＲＧＢ各８ビット×ｐａｌｅｔｔｅ数）を符号化し、最後に各対象画素がどの代表色で表現されているかを示すインデックスを５色のｐａｌｅｔｔｅを表現可能な３ビット×画素数で符号化する。  
上記説明ではすべての情報を固定長で符号化している。例えばインデックスを符号化する際に、出現頻度に応じて符号長を変えた可変長符号化方式（ハフマン符号化、算術符号化）を用いてもいい。あるいは連続するインデックスをまとめて符号化するランレングス符号化方式を利用しても良い。  
上記の説明で、図９に示した画素ブロックの符号化処理が終了する（Ｓ１１０，Ｎｏ）。これを符号化対象の画像データ内の全ての画素ブロックに対して繰り返す。
【００２８】
上記の実施形態では記憶部１０４が、上限値＝８のｐａｌｅｔｔｅを保持できる例について説明した。そのため、全て対象画素の圧縮後の歪量が、許容される歪量（閾値Ａ）以下となっており、本実施例では結果的に圧縮後のデータは歪みのないロスレス圧縮データとなっている。以下では、図９に示した画素ブロックをｐａｌｅｔｔｅの上限値＝４とした場合の動作について説明する。なお、記憶部１０４が保持する代表色の初期状態は、同様に図１７に示したＮ／Ａであるものとする。また、閾値Ａ（＝９）とする。その場合、画素ブロックの対象画素のうち１２画素までは上記の実施形態と同様の処理が繰り返さる。図１９は、１２画素まで処理が終わった段階で、記憶部１０４に追加されている代表色を示す図である。
【００２９】
１３番目の対象画素（Ｒ＝０、Ｇ＝０、Ｂ＝０）と、記憶部１０４に保持されている代表色（ｐａｌｅｔｔｅ１および３）との最小距離は１２８＋６４＋６４＝２５６となり、閾値Ａよりも大きいため（Ｓ１０４，Ｎ０）、Ｓ１０５に進む。判定部１０３は、代表色の数が上限値以上かを判定する（Ｓ１０５）。すでに上限値（＝４）まで新たに追加された代表色の数が到達しているため（Ｓ１０４，Ｙｅｓ）、Ｓ１０７へ進む。１３番目の対象画素の場合、複数の代表色（ｐａｌｅｔｔｅ１および３）で最小距離となる。その場合、例えば、インデックスの値が小さい方を優先しても良い。または、隣接する画素で用いられているインデックスを優先しても良い。本実施形態では、インデックスの値が小さい方を優先して割り当てることとする。判定部１０３は、１３番目の対象画素にインデックス１を割り当てる。以降、１４番目の対象画素、１５番目の対象画素も同様の処理でインデックス１が割り当てられる。最後の１６番目の対象画素は、ｐａｌｅｔｔｅ０の代表色との距離が最小で６４となる。そのため、判定部１０３は、１６番目の対象画素にインデックス０を割り当てる。図１１は、以上の処理をすべての画素ブロック内の対象画素に行った結果、対象画素に割り当てられたインデックスを示す図である。
【００３０】
続いて、閾値Ａが大きい値の場合の動作について説明する。以下、閾値Ａ＝９６、上限値＝４とした場合について説明する。画素ブロックの対象画素のうち４番目の対象画素までは上記のＡ＝９の場合と同様の処理が繰り返される。図１８は、４番目の対象画素まで処理が終わった段階で記憶部１０４に保持されているｐａｌｅｔｔｅを示す図である。代表色は２つ追加されている。次に、４番目の対象画素（Ｒ＝１２８、Ｇ＝９６、Ｂ＝１２８）と、記憶部１００４に保持されている代表色との最小距離はｐａｌｅｔｔｅ０で３２となり、閾値Ａ以下となる。判定部１０３は、４番目の対象画素に、インデックス０を割り当てる（Ｓ１０７）。５番目の対象画素も同様に、最小距離が閾値Ａ以下となるｐａｌｅｔｔｅ０のインデックス０が割り当てられる。７、８番目の対象画素はすでにある代表色と同一の色情報であり、最小距離が０でそれぞれインデックスが１、０と割り当てられることになる。
【００３１】
次に８番目の対象画素（Ｒ＝６４、Ｇ＝１２８、Ｂ＝６４）の最小距離は６４＋６４で１２８となり、閾値Ａより大きいため（Ｓ１０４，Ｎｏ）、Ｓ１０５へ進む。判定部１０３は、記憶部１０４に保持されている代表色の数が、所定の上限値以上か否かの判定を行う（Ｓ１０５）。記憶部１０４に保持されている代表色の数が２であるため、上限値＝４よりも小さいため（Ｓ１０５，Ｎｏ）、８番目の対象画素の色を新たな代表色としてｐａｌｅｔｔｅ２に追加する（Ｓ１０６）。図１２は、以上の処理をすべての画素ブロック内の対象画素に実行した後のインデックスの割り当て結果を示す図である。図２０は、記憶部１０４に保持される代表色を示す図である。
【００３２】
上記の実施形態における比較部１０２では、数式１に基づいた距離ａのみを算出していた。本変更例では、比較部１０２が複数の式に基づいて距離ｂ〜ｄを算出する例について説明する。判定部１０３は、それぞれに対する閾値に基づいて新たな代表色を追加するか否か判定しても良い。
【００３３】
例えば、以下に距離ｂ〜ｄを新たに追加した場合について説明する。
【数２】
0005632431.tif 000003
【００３４】
比較部１０２は、例えば距離ａをまず算出し、最小距離となる代表色を求める。最小距離が閾値αよりも大きいの場合には、対象画素の色を新たな代表色として追加する。最小距離が閾値α以下の場合には、最小距離となる代表色と、対象画素の色との距離ｂ〜ｄを算出する。判定部１０３は、算出された距離ｂ〜ｄそれぞれと閾値βとを比較する。すべての距離ｂ〜ｄが、閾値β以下の場合、距離ａが最小距離となる代表色のインデックスを対象画素に割り当てる。距離ｂ〜ｄのいずれかが閾値βより大きい場合、対象画素の色を新たな代表色として追加する。  
上記のように距離ａ〜ｄという複数の距離と、閾値αと閾値βという複数の閾値との間で代表値を求めるため、特定の色だけが大きく歪むことを抑制することができる。それによって、主観画質を向上することが可能となる。
【００３５】
本実施形態の変形例として、新たに追加された代表色の数が記憶部１０４で保持できる上限値に到達した際の処理ステップ（Ｓ１０５）が異なる場合について説明する。図６は、本変形例における処理を示すフローチャートである。図５に示した第１の実施形態とは異なる処理のみ説明する。本変形例では、判定部１０３が、ステップにおいて、上限値に到達していると判定した場合（Ｓ２０５，Ｙｅｓ）、符号化部１０５が、符号化失敗を出力する（Ｓ２１１）点が異なる。これにより、閾値Ａで設定された許容される歪量以上の圧縮データが生成されることがなくなる。一方で、閾値Ａの値によっては符号化失敗を出力するため、圧縮データを生成できない場合が存在する。このような場合に備えて、本変形例は、図４に示す画像符号化システムでの運用が有効となる。図４は、画像符号化装置１を複数持つシステムを示す図である。それぞれの画像符号化装置１は、異なる閾値Ａをそれぞれ設定して並列に動作する。符号化に成功して出力された圧縮データの中から最も閾値Ａの値が小さい圧縮データを選択装置３にて選択して出力する。それによって、高画質な圧縮データの生成が可能となる。さらに、例えば、ＪＰＥＧやＭＰＥＧなど他方式の圧縮方式を用いる画像符号化装置４を併用することで、グラフィック画像だけでなく、様々な特性をもつ画像に対して高効率な圧縮が可能となる。他方式の画像符号化装置４を併用する場合、例えば選択装置３は、画像符号化装置１，４から得られる歪量や圧縮データのサイズから、所望の圧縮データを選択すればよい。
【００３６】
さらなる変形例の処理を示すフローチャートを図７に示す。判定部１０３が、符号化に成功したか否かを判定するステップ（Ｓ２１２）が追加さている。符号化が失敗したと判定された場合（Ｓ２１２，Ｎｏ）、判定部１０３は、閾値Ａの値を大きくする（Ｓ２１３）。
【００３７】
図６のシステムにおいては、画像符号化装置１を並列に実行したが、閾値Ａの設定範囲によっては、非常に多くの画像符号化装置１を並列に配置する必要がある。本変形であれば、例えば、閾値Ａ＝０（すなわちロスレス圧縮）から開始して、閾値Ａを少しずつ大きくすることで画像符号化装置１が１つだけで最適な閾値Ａを設定することが可能となる。特に本変形は、ソフトウェアで実装した場合において特に有効である。
【００３８】
本実施形態の変形例として、記憶部１０４に記憶する代表色の初期状態をＮ／Ａにせずに、例えばｐａｌｅｔｔｅ０は画素ブロック内の最初の対象画素の色としても良い。図１４は、本変更例の代表色の初期状態を示す図である。初期状態のＮ／Ａとの距離が無限大であれば、必ず最初の画素は新たな代表色として追加されるが、例えば、Ｎ／Ａではなく、Ｒ＝０、Ｇ＝０、Ｂ＝０などの特定の値で初期状態を決定した場合でもｐａｌｅｔｔｅ０だけは別扱いとしても良い。最初の対象画素の色をｐａｌｅｔｔｅ０に設定することで、最初の対象画素に対するｉｎｄｅｘ情報は不要となる。それによって、図２１におけるｉｎｄｅｘ情報が画素ブロック内の画素数−１個分で済み、符号量の削減が可能となる。
【００３９】
本実施形態の変形例として、符号化部１０５がＳ１０９において、代表色を量子化することで、より圧縮率の高いデータ圧縮が可能となる。図３は、符号化部１０５の内部構造を示す図である。符号化部１０５は、代表色を量子化する量子化部１０５１と、量子化された代表色と、インデックス情報をエントロピー符号化するエントロピー符号化部１０５２を有する。インデックス情報は特殊な処理をせずにエントロピー符号化部１０５２へと入力され、代表色は量子化部１０５１を経由してからエントロピー符号化部１０５２へと入力される。代表色の量子化として、例えば、８ビットの情報の下位ビットを一律に落として、６ビットにする方法がある。図２２は、データ構造を示す図である。圧縮データ構造は、例えば代表色の上限値を４色とすると、図２２に示すデータ構造となる。第１の実施形態の図２１と比較して、より高い圧縮率が実現できる。
【００４０】
以上の実施形態によれば、全画素の色のヒストグラム算出を必要とすることなくカラーパレット画像符号化が実現可能である。それによって、処理に必要となるメモリが大幅に削減できる。さらに、逐次的に代表色を決定しながら処理を行えるため、画像スキャンを繰り返すこともない。そのため、特にハードウェア実装において有効である。
【００４１】
例えば、ＰＣの画面等のＣＧ画像データを扱う装置やシステムに、本実施形態の画像符号化装置組み込むことで、伝送速度の向上やＣＧ画像データを保存するＤＲＡＭなどの容量の削減が可能である。しかしながら、本実施形態の用途は、上記用途に限定されるものではない。
【００４２】
（第２の実施形態）  
第２の実施形態の画像符号化装置２は、代表色に対するヒストグラムを算出し、その分布に基づいて閾値Ａを調整する処理を行う点が第１の実施形態の画像符号化装置１と異なる。  
図２は、画像符号化装置２を表すブロック図である。画像符号化装置２は、ヒストグラム算出部２０６と、調整部２０７とをさらに備える。  
ヒストグラム算出部２０６は、それぞれの代表色が、画素ブロックの内いくつの画素に対して割り当てられたかを累積したヒストグラムを算出する。  
調整部２０７は、ヒストグラムに基づいて閾値Ａを調整する。
【００４３】
図８は、画像符号化装置２の処理を表すフローチャートである。画像符号化装置１と異なる処理についてのみ説明する。  
以下の説明では、図９に示した画素ブロックを符号化する動作について例示する。記憶部２０４で保持される代表色の上限値を８色とし、判定部２０３で用いられる閾値Ａｎ（ｎ＝０〜７）は、それぞれの代表色ｐａｌｅｔｔｅｎ（０〜７）に適用される閾値を示す。
【００４４】
Ａｎがすべて同じ９６を用いた場合、画像処理装置１と同様の動作（Ｓ３０１〜３０９）を行った段階で、画素ブロック内の対象画素には、図２３に示すような代表画素のインデックスが割り当てられる。また、図２４（ａ）に示すように、記憶部２０４に代表画素が保持される。
【００４５】
第１の実施形態とは異なり画像符号化装置２のヒストグラム算出部２０６は、画素ブロックの内いくつの画素に対して割り当てられたかを累積したヒストグラムを算出する（Ｓ３０８）。図２４（ｂ）は、ヒストグラム算出部２０６が求めたヒストグラムの例を示す図である。画素ブロック内の対象画素の座標をＸｎ、Ｙｎとして表現している。たとえば、画素ブロック内で最も右上の対象画素の座標はＸ０／Ｙ０と表現されている。ヒストグラムを求めた結果、ｐａｌｅｔｔｅ０の代表色が割り当てられた対象画素の数が最も多く、７画素である。次いでｐａｌｅｔｔｅ１、ｐａｌｅｔｔｅ３、ｐａｌｅｔｔｅ２の順に少なくなっている。
【００４６】
判定部２０３は、画素ブロック内のすべての対象画素に対して代表色が決定されたか判定する（Ｓ３０９）。調整部２０７は、算出されたヒストグラムに基づいて、閾値Ａｎを調整するか否かを判定する（Ｓ３１０）。調整部２０７は、最も多くの対象画素に割り当てられた代表色（ｐａｌｅｔｔｅｘ）をより精度の高い代表色で表現するために、閾値Ａｘの値を小さくする。  
例えば、平均的に各代表色に画素が割り当てられたとしたときの値（画素ブロックの画素数／代表色の数）を閾値Ｃとする。閾値Ｃよりも多く特定の代表色に対象画素が割り当てられている場合、閾値の調整が必要と判定する（Ｓ３１０，Ｎｏ）。図２４の例では、本実施形態では、ｐａｌｅｔｔｅ０が閾値Ｃ（１６画素／４パレット＝４）よりも多くの画素が割り当てられている。そのため、閾値Ａ０がＳ３１１の調整対象となる。上記例では、１つの代表色が選択された場合について説明したが、複数の代表色の調整を行う構成であっても良い。なお、Ｓ３１１を繰り返すことにより、画素ブロックのスキャンを繰り返すことになる。そのため、例えば、調整回数に上限を設け、繰り返し処理を制限しても良い。（たとえば、上限を２回とする等）
調整部２０７は、閾値Ａｘの値を現在の値より小さくなるように調整する。調整量に関してはいずれの方法であっても構わない。たとえば、単純に現在の値の半分にしても良いし、さらに追加可能な代表色の数（本実施形態であれば、８−４＝４色）に基づいて調整量を決定してもよい。その場合、例えば、Ａｘ＝Ａｘ／（１＋追加可能代表色数）とする。これによって、追加可能な代表色の数が多いほど、閾値がＡｘよりも小さくなる。本実施形態では、単純に半分（Ａ０＝９６→４８）としたが、ステップ（Ｓ３１０）による繰り返し回数によっては、自動的にＡ０の値は最適値に近づいていくため、単純な調整方式でも十分な効果が得られる。
【００４７】
比較部２０２は、Ａ０＝４８、その他Ａｎ＝９６として、再び代表色と対象画素との距離を算出する（Ｓ３０２）。この際、記憶部２０４の代表色は、すでに追加されている代表色を用いて行う。２回目の動作では、１５番目の対象画素までは最初の動作と同じ結果が得られる。１６番目の画素に対しては、最小距離となるｐａｌｅｔｔｅ０の代表色との距離（６４）よりも閾値Ａ０が小さくなる（Ｓ３０４，Ｎｏ）。判定部２０３は、ｐａｌｅｔｔｅ４に１６番目の対象画素の色を追加する新たな代表色として追加する（Ｓ３０５およびＳ３０６）。  
以上の処理を、図２５は、画素ブロック内のすべての対象画素に適用した場合のインデックスの割り当結果を示す図である。図２６は、記憶部１０４に保持される代表色を示す図である。
【００４８】
なお、画像符号化装置１は閾値Ａがすべての代表色に対して共通の閾値を用いていた。一方、画像符号化装置２は代表色それぞれに対して異なる値の閾値が設定可能である。たとえば、ｐａｌｅｔｔｅ０には閾値Ａ０、ｐａｌｅｔｔｅ１には閾値Ａ１、といった形となる。
【００４９】
第１の実施形態の変形例で説明した、閾値α、閾値βの例に関しても、代表色毎に設定することができる（例えば、ｐａｌｅｔｔｅ０には閾値α０、閾値β０、ｐａｌｅｔｔｅ１には閾値α１、閾値β０等）。  
また、複数の画像符号化装置１が並列に処理を行う変形例においては、それぞれの画像符号化装置１がそれぞれ異なる閾値を用いることができる（例えば、ｐａｌｅｔｔｅ０には閾値Ａ０、ｐａｌｅｔｔｅ１には閾値Ａ１を行う画像符号化装置と、ｐａｌｅｔｔｅ０には閾値Ａ’０、ｐａｌｅｔｔｅ１には閾値Ａ’１を行う画像符号化装置を用いる等）
上記の実施形態によれば、ヒストグラム算出に必要な使用メモリを削減しながら、閾値Ａｎを自動的に制御して、適切な代表色の生成可能が可能となる。
【００５０】
なお、上述の画像符号化装置は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、取得部、比較部、判定部、記憶部、調整部、ヒストグラム選択部、および選択装置は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、画像符号化装置は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、ＢおよびＣは、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【００５１】
これまで、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５２】
１、２・・・画像符号化装置
１０１、２０１・・・取得部
１０２、２０２・・・比較部
１０３、２０３・・・判定部
１０４、２０４・・・記憶部
１０５、２０５・・・符号化部
２０６・・・ヒストグラム算出部
２０７・・・調整部
３・・・選択装置
４・・・他方式の画像符号化装置
【図９】
0005632431.tif 000004
【図１０】
0005632431.tif 000005
【図１１】
0005632431.tif 000006
【図１２】
0005632431.tif 000007
【図１３】
0005632431.tif 000008
【図１４】
0005632431.tif 000009
【図１５】
0005632431.tif 000010
【図１６】
0005632431.tif 000011
【図１７】
0005632431.tif 000012
【図１８】
0005632431.tif 000013
【図１９】
0005632431.tif 000014
【図２０】
0005632431.tif 000015
【図２３】
0005632431.tif 000016
【図２４】
0005632431.tif 000017
【図２５】
0005632431.tif 000018
【図２６】
0005632431.tif 000019
【図１】
0005632431.tif 000020
【図２】
0005632431.tif 000021
【図３】
0005632431.tif 000022
【図４】
0005632431.tif 000023
【図５】
0005632431.tif 000024
【図６】
0005632431.tif 000025
【図７】
0005632431.tif 000026
【図８】
0005632431.tif 000027
【図２１】
0005632431.tif 000028
【図２２】
0005632431.tif 000029