インデックス付きの色

コンピューティングでは、インデックス付きのカラーは、コンピュータのメモリとファイルストレージを節約し、ディスプレイのリフレッシュとファイル転送を高速化するために、限定的な方法でデジタルイメージの色を管理するテクニックです。これは、ベクトル量子化圧縮の一形態です。

画像がこのように符号化されるとき、色情報は画像ピクセルデータによって直接運ばれるのではなく、色要素の配列であるパレットと呼ばれる別個のデータピースに格納される。配列内のすべての要素は、配列内の位置によってインデックスされた色を表します。個々のエントリは、カラーレジスタと呼ばれることもあります。イメージピクセルには、色の完全な仕様は含まれていませんが、パレットのインデックスのみが含まれています。この技法は、色が間接的に扱われるため、擬似色または間接色と呼ばれることがあります。

おそらく、パレットカラーをサポートした最初のデバイスは、Kajiya、Sutherland and Cheadleによって1975年に記述されたランダムアクセスフレームバッファでした。これは、256個の36ビットRGBカラーのパレットをサポートしていました。

パレットサイズ
パレット自体には限られた数の色が格納されています。 4,16または256が最も一般的なケースです。これらの制限は、ターゲットアーキテクチャのディスプレイアダプタハードウェアによって課されることがよくあります。したがって、これらの数値が2の正確な累乗(2進数)であるということは偶然ではありません:22 = 4,24 = 16,28 = 256です。 (4ビット、ニブル)またはそれより少ない色のピクセルインデックスを1つのバイトにパックすることができます(2つのニブルごとに1つの8ビットバイトにフィットします) 16色を使用する場合は1バイト、4色を使用する場合は1バイト当たり4ビットの2ビットピクセル)。場合によっては、1ビット(2色)の値を使用することができ、1バイトに最大8ピクセルをパックすることができます。そのような画像は、2値画像(ビットマップまたは2値画像とも呼ばれる)であり、インデックス付きカラー画像ではないと考えられる。

単純なビデオオーバーレイが透明な色を介して意図されている場合、この目的のために1つのパレットエントリが特別に予約され、利用可能な色として割引されます。 MSXシリーズなどの一部のマシンでは、ハードウェアによって透過色が予約されていました。

256エントリを超えるパレットサイズのインデックス付きカラーイメージはほとんどありません。実用上の限界は、約12ビット/ピクセル、4,096の異なるインデックスです。インデックス付き16bppまたはそれ以上を使用すると、バイト単位のカラーパレットサイズが生画像データ自体よりも大きいため、インデックス付きカラー画像の性質の利点は得られません。また、15 bpp以上で直接RGBハイカラーモードを使うこともできます。

画像に微妙な色合いが多い場合は、色の量子化を使用して画像を近似するために限られた色のレパートリーを選択する必要があります。このようなパレットは、画像を正確に表現するにはしばしば不十分である。グラデーションのような再現しにくいフィーチャーは、ぼんやりとした帯状や帯状(カラーバンディング)に見えます。そのような場合、周囲のピクセルを一緒にぼかす人間の視覚の傾向を利用し、結果を視覚的に元のものに近づける傾向を利用して、異なる色のピクセルをパターンにミックスするディザリングを使用するのが普通です。

色とパレット
特定のインデックス付きカラー画像のカラーパレットマップ内で色がどのようにエンコードされるかは、ターゲットプラットフォームによって異なります。

初期カラー技術
多くの初期のパーソナルコンピュータや家庭用コンピュータには非常に限られたハードウェアパレットがあり、非常に小さな色のセットを生成する可能性がありました。これらの場合、各ピクセルの値はこれらの色の1つに直接マッピングされます。よく知られている例としては、Apple II、Commodore 64、IBM PC CGAなどがあり、これらには16色の固定セットを生成できるハードウェアが含まれています。これらの場合、画像は4ビットで各ピクセルを符号化し、使用する色を直接選択することができる。しかし、ほとんどの場合、ディスプレイハードウェアは、これらの色のサブセットのみを単一の画像で使用できる追加のモードをサポートします。これは、メモリを節約するための便利なテクニックです。たとえば、CGAの320×200解像度モードでは、一度に16色のうち4色しか表示できませんでした。パレットは完全に所有権があるため、あるプラットフォームで生成された画像を別のプラットフォームで正しく見ることはできません。

この時代の他のマシンは、より大きな色のセットを生成する能力を持っていましたが、一般に、それらのサブセットをいずれか1つの画像で使用することしかできませんでした。例には、Atari 8ビットマシンの256色パレット、またはReGISグラフィックスモードのVT241ターミナルの4,096色が含まれます。このような場合、イメージではAtariとVT241で一度に合計16個までの色を表示することができます。一般的に、これらのシステムは、カラフルでない兄弟と同じように機能しましたが、重要な違いは、限られた量のビデオメモリが与えられているため、パレットに色が多すぎてピクセルデータを直接エンコードしないことでした。代わりに、各ピクセルのデータがCLUT内のエントリをポイントし、CLUTがプログラム制御下で設定されたカラールックアップテーブル(CLUT)を使用しました。これは、イメージを正しく再生成できるように、イメージCLUTデータを生のイメージデータとともに保存しなければならないことを意味していました。

RGB
YPbPrなどのコンポーネントビデオカラーに基づくハードウェアパレットは、1980年代半ばに、より柔軟なRGBカラーモデルによって置き換えられました。このモデルでは、赤、緑、および三原色の異なる量を混合することによって特定の色を得ることができます青。このモデルでは、異なる色の総数は、プライマリあたりのレベル数と特定のハードウェア実装(9ビットRGBは512の組み合わせを提供し、12ビットRGBは4​​,096などを提供します)に依存しますが、ソフトウェアは抽象的に使用されるレベルごとの数を処理し、デバイスに依存しない方法でRGBカラーを管理することができる一方で、ハードウェア設計を簡素化する色を生成することができます。インデックス付きイメージファイルのパレット内にRGB形式で格納された色を使用すると、ハードウェア実装で使用される色の深さに関係なく、任意のイメージをそのようなシステム上に(適切な変換を通じて)表示できます。

今日では、インデックス付きカラー画像を扱うディスプレイハードウェアおよび画像ファイルフォーマットは、ほぼトーンカラーまたは24ビットRGBであり、可能な異なる16,777,216色を有する事実上の標準エンコーディングであるRGBフォーマットのカラーをほぼ排他的に管理している。ただし、インデックス付きカラーイメージは、真に24ビットRGBカラーエンコーディングに制約されません。画像パレットは、あらゆる種類のカラーエンコーディングを保持できます。たとえば、PDFファイル形式では、他の色空間(特にCMYK)でインデックス付き色をサポートしています.Adobe Distillerでは、画像の総色数が256以下の場合、デフォルトでイメージをインデックス付き色に変換します。 TIFFおよびPNGファイル形式では、16ビット(コンポーネントあたり65,536レベル)の精度でRGBトリプレットを格納して、1ピクセルあたり合計48ビットを生成することができます。 TIFF規格への提案された拡張は非RGBカラーパレットを可能にするが、これは技術的な理由によりソフトウェアで決して実装されなかった。 BMPファイル形式のインデックス付きカラーモードのカラーマップテーブルは、そのエントリをRGBではなくBGRオーダに格納し、処理中に32ビットのワードアラインメントに適合するパディング用の追加の未使用バイトを(現在のバージョンでは)持っていますが、基本的にはまだ24ビットのRGBカラーエンコーディングです。 (以前のバージョンのBMPフォーマットは24ビットカラーマップテーブルエントリあたり3バイトを使用していましたが、そのフォーマットの多くのファイルが流通しています。

ピクセルビット配置
非常に低い解像度のグラフィックモードを除いて、初期の家庭用およびパーソナルコンピュータでは、単一画素を利用可能な色のいずれかに独立して変更することができる「全画素アドレス指定可能な」設計を実現することはめったになかった。その限界は、別の色属性またはカラーRAM領域を使用することから来ており、属性の衝突効果につながっています。また、ビデオメモリの画素ビットおよび/または走査線は、ビデオ生成ハードウェアに都合の良いように奇数に配置されていた(したがって、コスト競争の激しい市場ではハードウェアコストを節約する)が、グラフィックプログラムを書く人々にとって困難を生じさせる。索引付きの全画素アドレス指定可能な画像内のピクセルのビットは、常にビデオメモリまたは画像ファイル内で連続しているわけではありません(つまり、塊状組織は必ずしも使用されるわけではありません)。 IBM PC互換機またはAmigaビデオバッファ用のグラフィックスアダプタ(EGA)およびビデオグラフィックアレイ(VGA)は、1つのピクセルの関連するビットがいくつかのビットに分割された一連のビットプレーン(プレーンと呼ばれる構成)独立したビットマップ。したがって、ピクセルビットは、3D Z軸に沿って概念的に整列される。 (ここでの「深さ」の概念は、ピクセル深度の概念と同じではありません。)

PICのような初期のイメージファイルフォーマットは、与えられたマシンのビデオバッファの裸のメモリダンプを少ししか保存していませんでした。

Related Post

Graphics Interchange Format(GIF)などのインデックス付きカラーイメージファイルフォーマットの中には、イメージのスキャンラインをインターリーブ形式(線形ではない)に配置できるため、イメージの低解像度バージョンがまだダウンロード中に表示されるその結果、コンピュータユーザは、画像全体が到着する数秒前にそのコンテンツのアイデアを得ることができる。

ここでは、イメージは4つの行グループに分けられています。グループAには4行ごとに、グループBにはグループAの直後の行が、グループCにはグループBの直後の行が、グループDにはグループC線(直上)とグループA線(直下)の間の残りの線。これらは、A、C、B、Dの順番でファイルに格納されるので、ファイルが送信されるときに、第1のグループのラインの間の中心にある第2の受信グループ(C)が存在し、可能な画像は、ラインのグループのうちの2つだけで構成される。より多くのグループ(例えば8つ)で同じ技法を適用することができ、その場合、各ステップにおいて、次に送信されるグループは、まだ画像データで満たされていない残りのバンドの中心にまたはその近傍にあるラインを含む。 4つまたは8つのグループのグループを持つこの方法は、1990年代後半の初期World Wide Webで一般的に使用されていました。上の図のように背景(黒色)を残しておくのではなく、部分画像は、各行を複製して、その下のスペースを次の受け取った画像行まで塗りつぶすことによって、画面上に表示されることがよくありました。最終的な結果は、画像データの後半部分が到着したときに数秒にわたり完全な解像度に増加する垂直解像度が低下した連続画像であった。

利点
インデックス付きの色は、多くのメモリ、ストレージスペース、および送信時間を節約します。トゥルーカラーを使用すると、各ピクセルは24ビットまたは3バイト必要です。典型的な640×480のVGA解像度のトゥルーカラーの非圧縮画像は、640×480×3 = 921,600バイト(900KiB)を必要とする。イメージの色を256に制限すると、各ピクセルは8ビットまたはそれぞれ1バイトしか必要ないので、サンプルイメージは640×480×1 = 307,200バイト(300 KiB)、さらに256×3 = 768バイトパレットマップ自体は(RGBと仮定して)、元のサイズの約3分の1です。より小さいパレット(4ビット16色、2ビット4色)は、明らかに色精度を犠牲にしてピクセルをさらに(6分の1または12分の1に)パックすることができます。

インデックス化された色は、初期のパーソナルコンピュータやディスプレイアダプタのハードウェアで(主に高価なRAMチップの数を減らすことによって)コストを削減するだけでなく、限られたパワーのCPU(4〜8 MHz )、ファイルストレージ(カセットテープ、低密度フロッピーディスク)。 1980年代に疑似カラーパレットを使用した広範な(または独占的な)コンピュータグラフィックスシステムには、CGA、EGA、VGA(IBM PC互換機用)、Atari ST、AmigaのOCSおよびAGAなどがあります。

1990年代初期にCompuserveネット上で交換された画像ファイルは、GIF形式でカプセル化されていました。その後、HTML Webページでは、GIFをPNGなどの他のインデックス付きカラーサポートファイル形式とともに使用して、限られた色のイメージをすばやく交換し、限られたストレージスペースに格納しました。

インデックス付きカラーイメージをサポートするほとんどのイメージファイルフォーマットでは、一般的にいくつかの圧縮方式もサポートされているため、イメージを小さなファイルに保存する能力が向上します。

興味深い色付けされた芸術的効果は、例えばカラーセピア調の画像を生成するために、インデックスされたカラー画像のカラーパレットを変更することによって容易に達成することができる。インデックス付きカラー画像の関連するパレット要素の性質により、偽色パレットを使用してグレースケール画像を偽色に再マップするのが理想的です。

シンプルなビデオオーバーレイは、透明なカラー技術によって簡単に実現できます。

インデックス付きカラーグラフィックモードでディスプレイアダプタのカラーハードウェアレジスタ(カラールックアップテーブルまたはCLUT)を操作することにより、イメージを再描画せずに、つまりCPU時間のコストを抑えてフルスクリーンのカラーアニメーション効果を実現できます。レジスタ値の1回の変更は画面全体に一度に影響します。カラーサイクリングとも呼ばれるカラーマップアニメーションは、デモシエンで広く使用されています。 Windows 95,98、ME、および2000 ProfessionalのMicrosoft Windowsブートロゴ画面(これはすべてのPC上で最大の共通点であるため、VGA 320x200x256カラー表示モードを使用します)は、画面下部のスクロールグラデーションバーにこの技法を採用しています;画像は、最初に表示された後に画素が書き換えられない静止画像である。カスタムブートスクリーンイメージは、サイクルカラーをタップしてイメージの他の部分をアニメートすることができます。

短所
インデックス付きカラーを使用することの主な欠点は、画像あたりの同時カラー数が制限されていることです。小さな4色または16色のパレットは、小さな画像(アイコン)や非常にシンプルなグラフィックでは受け入れられますが、実際の画像を再現するにはほとんど役に立たなくなります。カラー量子化、アンチエイリアシング、ディザリングなどのいくつかの技法を組み合わせることで、元のレベルに匹敵するレベルの256色のインデックス付き画像を作成することができます。

インデックス付きカラーイメージは、独自のカラーパレットに大きく依存します。いくつかのよく知られた固定カラーパレット(例えば、カラーグラフィックアダプタ-CGAのもの)を除いて、ある種の中間マッピングなしに生画像データおよび/またはカラーマップテーブルを異なる画像ファイル間で確実に交換することはできない。また、指定されたインデックス画像の元のカラーパレットが失われた場合、それを復元することはほとんど不可能です。インデックス化されたカラー画像(前のオウム)が不適切なカラーパレットに関連付けられた場合の例を次に示します。

ディスプレイアダプタのインデックスカラーグラフィックモードでは、ハードウェアによって16または256色の制限が課されます。リッチで互換性のないパレットを含むインデックス付きカラー画像は、スライドショーのように、一度に1つだけ正確に表示できます。サムネイルのモザイクのように、複数の画像を一緒に表示する必要がある場合、可能な限り多くの異なる色相を含む共通またはマスタパレットがしばしば使用され、それによって全体的に正確な色の利用可能性が制限される。

次の画像は、6-8-5レベルのRGBと16の追加のグレーの共有マスターパレットでレンダリングされた4種類のインデックス付きカラー画像のモザイクです。すべての画像に使用される色の限定された範囲と、未使用のパレット項目の数に注意してください。

インデックス付きのカラーサンプルモザイクは、フルRGBパレットの24ビットの制限に達しません。たとえば、IBM PC互換のVGAは、16ビットおよび256インデックスカラーグラフィックスモードで262,144種類の異なる色を持つ18ビットRGBパレットのみを提供します。
画像編集ソフトウェアの中には、インデックス付きカラー画像ファイル用のパレットにガンマ補正を適用するものがあります。一般に、元のRGBカラー値が失われているため、カラーマップに直接ガンマ補正を適用するのは悪い方法です。ガンマ補正をディスプレイハードウェア(最新のディスプレイアダプタはこの機能をサポートしています)で、または元のカラー値を維持するカラーマネジメントによるレンダリングソフトウェアのアクティブな中間ステップとして適用する方が良いでしょう。索引付けされたカラー画像が、いかなる種類の色較正も欠いているシステムに対して意図されており、それらがクロスプラットフォームではないことが意図されている場合にのみ、カラーテーブル自体にガンマ補正を適用することができる。

Share