画像処理において用いられる量子化は、値の範囲を単一の量子(離散)値に圧縮することで実現される非可逆圧縮技術です。与えられたストリーム内の離散シンボルの数を減らすと、ストリームの圧縮率が高くなります。例えば、デジタル画像を表現するために必要な色の数を減らすことで、ファイルサイズを小さくすることが可能になります。具体的な応用例としては、JPEGにおけるDCTデータ量子化や、JPEG 2000におけるDWTデータ量子化などが挙げられます。
色量子化は、画像で使用される色の数を削減します。これは、限られた色の数しかサポートしていないデバイスで画像を表示する場合や、特定の種類の画像を効率的に圧縮する場合に重要です。ほとんどのビットマップエディタと多くのオペレーティングシステムには、色量子化のサポートが組み込まれています。一般的な最新の色量子化アルゴリズムには、最も近い色アルゴリズム(固定パレット用)、メディアンカットアルゴリズム、およびオクツリーに基づくアルゴリズムなどがあります。
色の量子化とディザリングを組み合わせることで、より多くの色を表現しているように見せたり、バンディング現象を解消したりすることが一般的です。
グレースケール量子化(グレーレベル量子化とも呼ばれる)は、デジタル画像処理において、画像の基本的な視覚情報を保持しながら、画像内の固有の輝度レベル(グレーの濃淡)の数を減らすプロセスです。この技術は、画像を単純化し、ストレージ要件を減らし、処理操作を容易にするためによく使用されます。グレースケール量子化では、Nの輝度レベルを持つ画像が、通常Lレベル(L < N )の、レベル数を減らした画像に変換されます。このプロセスでは、各ピクセルの元の輝度値を新しい輝度レベルのいずれかにマッピングします。グレースケール量子化の最も単純な方法の 1 つは均一量子化で、輝度範囲が等しい間隔に分割され、各間隔が単一の輝度値で表されます。輝度レベルが 0 から 255 まで(8 ビットグレースケール)の画像があるとします。これを4段階に量子化する場合、区間は[0-63]、[64-127]、[128-191]、[192-255]となります。各区間は中間値の強度値で表され、それぞれの強度レベルは31、95、159、223となります。
均一量子化の公式は次のとおりです。
どこ:
元の強度値147を3段階の強度レベルに量子化してみましょう。
元の強度値: x = 147
希望する強度レベル:L = 3
まず、各量子化間隔のサイズを計算する必要があります。
均一量子化式を用いると:
191.25を最も近い整数に丸めると、
したがって、147を3段階に量子化した強度値は191です。
人間の目は、比較的広い領域におけるわずかな明るさの違いを識別する能力に優れていますが、高周波(急速に変化する)明るさの変化の正確な強さを識別する能力はそれほど高くありません。この事実を利用して、高周波成分を無視することで必要な情報量を減らすことができます。これは、周波数領域における各成分をその成分に対応する定数で割り、最も近い整数に丸めることで実現されます。これが、処理全体における主な情報損失操作です。この結果、通常、高周波成分の多くはゼロに丸められ、残りの多くは小さな正または負の数になります。
人間の視覚は色度よりも輝度に対してより敏感であるため、2つを分離する非RGBカラースペース(例えばYCbCr)で作業し、チャネルを個別に量子化することで、さらなる圧縮を実現できます。[ 1 ]
一般的なビデオコーデックは、画像を離散ブロック(MPEGの場合は8×8ピクセル[ 1 ])に分割することで機能します。これらのブロックは、離散コサイン変換(DCT)によって水平方向と垂直方向の両方の周波数成分を計算することができます。[ 1 ]結果として得られるブロック(元のブロックと同じサイズ)は、量子化スケールコードで乗算され、量子化行列で要素ごとに除算され、結果の各要素が丸められます。量子化行列は、知覚しやすい周波数成分に知覚しにくい成分よりも高い解像度を提供するように設計されており(通常は高周波よりも低周波)、さらに、最も効率的にエンコードできる成分をできるだけ多く0に変換します。多くのビデオエンコーダ(DivX、Xvid、3ivxなど)と圧縮規格( MPEG-2やH.264/AVCなど)では、カスタム行列を使用できます。量子化器スケールコードを変更することで削減の程度を変えることができ、完全な量子化器マトリックスよりもはるかに少ない帯域幅で済みます。[ 1 ]
これはDCT係数行列の例です。
一般的な量子化行列は次のとおりです。
DCT係数行列をこの量子化行列で要素ごとに除算し、整数に丸めると、次の結果が得られます。
例えば、−415(DC係数)を使用し、最も近い整数に丸める
通常、このプロセスでは、値が主に左上隅(低周波数)にある行列が生成されます。非ゼロ要素をジグザグ順序でグループ化し、ランレングス符号化を使用することで、量子化された行列は非量子化バージョンよりもはるかに効率的に格納できます。[ 1 ]