Categories: 学术物理

索引颜色

在计算中,索引颜色(Indexed color)是一种以有限的方式管理数字图像颜色的技术,以节省计算机内存和文件存储空间,同时加速显示刷新和文件传输。它是矢量量化压缩的一种形式。

当以这种方式对图像进行编码时,颜色信息不直接由图像像素数据携带,而是存储在称为调色板的单独数据片段中:颜色元素阵列。数组中的每个元素表示一种颜色,由它在数组中的位置进行索引。单个条目有时被称为颜色寄存器。图像像素不包含其颜色的完整规范,但仅包含其在调色板中的索引。这种技术有时被称为伪彩色或间接彩色,因为颜色是间接处理的。

也许支持调色板颜色的第一种设备是1975年由Kajiya,Sutherland和Cheadle描述的随机访问帧缓冲器。这支持256个36位RGB颜色的调色板。

调色板大小
调色板本身存储有限数量的不同颜色; 4,16或256是最常见的情况。这些限制通常是由目标体系结构的显示适配器硬件强加的,所以这些数字是两个精确的幂(二进制代码)并不是巧合:22 = 4,24 = 16和28 = 256。虽然256个值可以是适合单个8位字节(然后单个索引彩色像素也占用一个字节),具有16个(4位,半字节)或更少颜色的像素索引可以打包在一起形成单个字节(每个两个半字节如果采用16种颜色,或者如果使用4种颜色,则每个字节采用4个2位像素)。有时,可以使用1位(2色)值,然后可以将最多8个像素打包为单个字节;这样的图像被认为是二值图像(有时被称为位图或双层图像)而不是被索引的彩色图像。

如果简单视频叠加通过透明色彩打算,则一个调色板条目专门用于此目的,并且作为可用颜色打折。某些机器(如MSX系列)具有硬件保留的透明色彩。

调色板大小超过256的索引彩色图像很少见。实际限制大约是每像素12位,4096个不同的指数。由于颜色调色板的字节大小大于原始图像数据本身,因此使用索引16 bpp或更多不能提供索引彩色图像的性质。另外,有用的直接RGB Highcolor模式可以在15 bpp以上使用。

如果图像具有许多细微的色调,则有必要选择有限的颜色库来使用颜色量化来近似图像。这样的调色板常常不足以精确地表示图像;难以重现的特征(如渐变)将显示为块状或条状(色带)。在这些情况下,通常使用抖动,其将不同颜色的像素混合成图案,利用人类视觉的趋势将附近的像素模糊在一起,从而使得视觉上更接近原始像素。

颜色和调色板
如何在给定索引彩色图像的调色板图中对颜色进行编码取决于目标平台。

早期的色彩技巧
许多早期的个人和家庭电脑都具有非常有限的硬件调色板,可以产生非常小的颜色。在这些情况下,每个像素的值直接映射到这些颜色之一。众所周知的例子包括Apple II,Commodore 64和IBM PC CGA,所有这些都包括可生成16种固定颜色的硬件。在这些情况下,图像可以用4位对每个像素进行编码,直接选择要使用的颜色。但是,在大多数情况下,显示硬件支持其他模式,其中只有这些颜色的子集可用于单个图像,这是一种节省内存的有用技术。例如,CGA的320×200分辨率模式一次只能显示16种颜色中的四种。由于调色板是完全专有的,因此在一个平台上生成的图像无法直接在另一个平台上正确查看。

这个时代的其他机器有能力生成更大的颜色集合,但通常只允许在任何一个图像中使用这些颜色的子集。示例包括Atari 8位机器上的256色调色板或ReGIS图形模式下VT241终端的4,096色。在这些情况下,图像通常只允许一次显示颜色总数的一小部分,在Atari和VT241上一次最多显示16个。一般来说,这些系统与其色彩鲜艳的弟兄一样工作,但一个关键的区别是调色板中的颜色太多,无法在给定有限的视频内存的情况下直接对像素数据进行编码。相反,他们使用了一个颜色查找表(CLUT),其中每个像素的数据指向CLUT中的一个条目,并且CLUT在程序控制下被设置。这意味着图像CLUT数据必须与原始图像数据一起存储,以便能够正确地重新生成图像。

RGB
基于诸如YPbPr之类的分量视频颜色的硬件调色板在20世纪80年代中期通常被更灵活的RGB颜色模型替代,其中通过混合不同量的三原色红色,绿色和蓝色。尽管不同颜色的总数取决于每个主级的数量级别,并且在给定的硬件实现(9位RGB提供512种组合,12位RGB提供4,096等等)的情况下, (DAC)可以生成颜色 – 简化了硬件设计 – 同时软件可以以抽象方式处理每个级别的数字,并以独立于设备的方式管理RGB颜色。在索引图像文件的调色板内以RGB格式存储的颜色,任何图像都可以在任何此类系统上显示(通过适当的转换),而不管硬件实现中使用的颜色深度。

今天,处理索引彩色图像的显示硬件和图像文件格式几乎只能管理RGB格式的色彩,事实上的标准编码是所谓的真彩色或24位RGB,具有16,777,216种不同的可能颜色。但是,索引彩色图像并不真正限制为24位RGB颜色编码;图像调色板可以保存任何类型的颜色编码。例如,PDF文件格式支持其他颜色空间中的索引颜色,特别是CMYK,默认情况下,Adobe®Distiller会在图像中的颜色总数等于或小于256时将图像转换为索引颜色。使用RGB时, TIFF和PNG文件格式可以选择以16位(每个组件65536个电平)的精度存储RGB三元组,每个像素总共产生48位。对TIFF标准提出的扩展允许使用非RGB颜色调色板,但由于技术原因,这从未在软件中实现。 BMP文件格式索引颜色模式的颜色映射表以BGR顺序存储其条目而不是RGB,并且在当前版本中有一个额外的未使用字节用于填充,以便在处理期间符合32位字对齐,但它是基本上仍然是24位RGB颜色编码。 (早期版本的BMP格式每个24位彩色映射表条目使用三个字节,并且该格式中的许多文件仍处于循环状态,因此许多读取BMP文件的现代程序都支持这两种变体。)

像素位排列
除了非常低分辨率的图形模式外,早期的家庭和个人电脑很少实现“全像素可寻址”设计 – 也就是说,能够将单个像素单独更改为任何可用颜色。它们的局限性来自于使用单独的颜色属性或颜色RAM区域,从而导致属性冲突效应。而且,视频存储器的像素位和/或扫描线通常以奇数方式布置,便于视频发生器硬件(从而在成本竞争的市场中节省硬件成本),但是有时会给编写图形程序的人造成困难。索引颜色,全像素可寻址图像中的像素位在视频存储器或图像文件中并不总是连续的(即不总是使用矮矮胖胖的组织)。一些视频硬件,如增强的16色图形模式用于IBM PC兼容机或Amiga视频缓冲器的图形适配器(EGA)和视频图形阵列(VGA)被排列为一系列位平面(在称为平面的配置中),其中单个像素的相关位被分成几个独立的位图。因此,像素位在概念上沿着3D Z轴对齐。 (这里的“深度”概念与像素深度不同。)

早期的图像文件格式(如PIC)只能存储给定机器的视频缓冲区的内存转储。

Related Post

一些索引彩色图像文件格式(如图形交换格式(GIF))允许图像的扫描线以交错方式(非线性顺序)排列,这允许图像的低分辨率版本在其仍在下载时出现在屏幕上,以便计算机用户可以在整个图像到达之前的几秒钟内获得其内容的概念。

如这里所看到的,图像被分成四组线:组A包含每四行,组B包含紧接在组A之后的行,组C包含紧接在组B之后的行,组D包含紧接在组B之后的行剩余的线路在C组线路之间(紧接在上面)和A组线路(紧接在下面)之间。它们按照A,C,B,D的顺序存储在文件中,以便当文件被传输时,第二个接收到的组(C)位于第一组的行的中间,产生空间最均匀和可识别的可能的图像,仅由两组线组成。相同的技术可以应用于更多的组(例如8个),在这种情况下,在每个步骤中,要发送的下一个组包含位于尚未用图像数据填充的剩余频带的中心处或附近的行。这种方法具有四到八组线条,在20世纪90年代后半期在早期的万维网上普遍使用。通过复制每行以填充下面的空间到下一个接收到的图像行,通常不在屏幕上显示背景(黑色),而是在屏幕上显示部分图像。最终结果是垂直分辨率降低的连续图像,随着图像数据的后期部分到达,会在几秒内增加至全分辨率。

优点
索引颜色节省大量内存,存储空间和传输时间:使用真彩色,每个像素需要24位或3个字节。典型的640×480 VGA分辨率真彩色未压缩图像需要640×480×3 = 921,600字节(900 KiB)。将图像颜色限制为256,每个像素只需要8位或每个像素1个字节,因此示例图像现在只需要640×480×1 = 307,200字节(300 KiB),再加上256×3 = 768个附加字节来存储调色板映射本身(假设为RGB),约为原始大小的三分之一。较小的调色板(4位16色,2位4色)可以将像素打包得更多(达到六分之一或十二分之一),这显然是以色彩精度为代价的。

索引颜色被广泛用于早期的个人计算机和显示适配器的硬件以降低成本(主要是需要更少的昂贵的RAM芯片),而且用于使用功率受限的CPU进行方便的图像管理(大约4到8MHz ),文件存储(盒式磁带和低密度软盘)。 20世纪80年代广泛使用伪彩色调色板的着名计算机图形系统包括CGA,EGA和VGA(用于IBM PC兼容机),Atari ST和Amiga的OCS和AGA。

20世纪90年代早期在Compuserve网络上交换的图像文件被封装成GIF格式。后来,HTML网页使用GIF以及其他索引颜色支持文件格式(如PNG)来快速交换有限彩色图像并将其存储在有限的存储空间中。

支持索引彩色图像的大多数图像文件格式通常还支持一些压缩方案,从而增强了将图像存储在较小文件中的能力。

有趣的彩色和艺术效果可以很容易地通过改变索引彩色图像的调色板来实现,例如为了产生彩色的棕褐色调图像。由于索引彩色图像的关联调色板元素具有独立的性质,因此它们非常适合通过使用假彩色调色板将灰度图像重新映射为假彩色图像。

通过透明色彩技术可以轻松实现简单的视频叠加。

通过在索引彩色图形模式下操作显示适配器的彩色硬件寄存器(Color look-up table或CLUT),可以在不重绘图像的情况下实现全屏色彩动画效果 – 即以低CPU时间成本;一次改变寄存器值会影响整个屏幕。彩色地图动画也被称为彩色循环,广泛用于演示。 Windows 95,98,ME和2000 Professional(使用VGA 320x200x256彩色显示模式,因为它是所有PC上最常见的分母)中的Microsoft Windows启动徽标屏幕采用了此技术,用于横跨屏幕底部的滚动渐变条;该图片是静态图片,在最初显示后没有像素重写。自定义启动屏幕图像可以点击循环的颜色来激活图像的其他部分。

缺点
使用索引颜色的主要缺点是每个图像同时存在一组有限的颜色。对于小图像(图标)或非常简单的图形,小的4色或16色调色板仍然可以接受,但为了再现真实的生活图像,它们几乎变得毫无用处。一些技术,如颜色量化,抗锯齿和抖动组合在一起可以创建索引的256色图像,与原始图像相当,达到可接受的水平。

索引的彩色图像严重依赖于它们自己的调色板。除了一些众所周知的固定颜色调色板(例如彩色图形适配器-CGA)之外,原始图像数据和/或颜色映射表不能在不同的图像文件之间可靠交换,而无需某种中间映射。另外,如果给定索引图像的原始调色板丢失,恢复它几乎是不可能的。下面是一个当索引的彩色图像(前一个鹦鹉)与不正确的调色板关联时发生的情况的示例:

适用于显示适配器的索引彩色图形模式具有硬件强加的16或256色限制。带有丰富但不兼容的调色板的索引彩色图像只能一次精确显示一次,如在幻灯片中。如果需要一起显示多个图像(如缩略图的镶嵌图),常用的是常用或主调色板,它将尽可能多的不同色调包含在一个组中,从而限制了整体准确的颜色可用性。

以下图像是由6-8-5级RGB单独共享主调色板和16个附加灰色渲染的四种不同索引彩色图像的拼图。请注意,每个图像使用的颜色范围有限,有多少调色板条目未使用。

索引颜色样本马赛克未达到完整RGB调色板的24位限制。例如,用于IBM PC兼容机的VGA仅在16位和256位索引彩色图形模式下提供了一个18位RGB调色板,其中包含262,144种不同的可能颜色。
某些图像编辑软件允许将伽玛校正应用于索引彩色图像文件的调色板。一般来说,由于原始RGB颜色值丢失,所以直接将颜色映射应用于颜色映射是一种不好的做法。最好使用显示硬件(大多数现代显示适配器支持此功能)应用伽马校正,或通过色彩管理作为渲染软件的主动中间步骤,从而保留原始色彩值。只有当索引的彩色图像适用于缺乏任何颜色校准的系统,且它们不打算跨平台时,伽马校正可以应用于颜色表本身。

Share