索引图像在目前看来,需要应用的场合比真彩图像少的多,但是,在某些特殊的领域(比如游戏)和应用(比如屏幕传输)索引图像依旧发挥这重要的作用。本文将简单的描述下索引图像的有关事啊。
索引图像最多只可含有256种颜色,当将图像由真彩转为索引模式时,首先需要构建一个索引色彩表,用于存放索引图像中的颜色。如果原图像中的颜色超出色彩表中的颜色范围,则需要自动选取色彩表中最相近的颜色或使用已有的颜色模拟该种颜色。索引颜色模式可以减小文件大小,同时保持视觉上的品质基本不变。
因此,索引图像的实际数据只是对应颜色表中的一个索引,而并不是实际的像素值,这个与灰度图像不同,灰度图像是同样是最多含有256中颜色的图像,但其颜色表的值是从0到255连续的值,所以灰度图像的数据我们即可以看成是实际的像素值,也可以看成是索引值。索引图像的这种特性使得我们在处理他的时候,一般不直接操作其索引数据。
为了将真彩色图像转换为索引图像,我们必须构建一个颜色表(PS的菜单中是这样叫的,我想就是调色板的意思吧),为了尽量较少图像在转换过程中的视觉损失,颜色表的构建一定要合理,现在有很多算法来寻找这样的颜色表,最为人知的就是流行色法,即图像中使用最多的256种颜色。对于不包含在这256种颜色中的值,则用距离其最近的颜色代替,系统的GetNearestPaletteIndex这个函数可以实现这个过程,我自己写过类似的函数,发现该过程内部应该用的欧式距离来计算两者的相似程度的。
在PS中,当我们将图像转换成索引模式后,我们会发现滤镜菜单不能用,调整菜单中也有很多不能用了,为什么?
首先,滤镜菜单不能用了,这是因为滤镜菜单中的大部分操作都涉及到图像的不同领域,这样就会产生新的颜色值,比如最简单的方框模糊(3*3的加权平均值)过程就会得到新的像素值,通常情况下这个新的像素值在颜色表中是不存在的,也许你想,我们可以把这个新的颜色值也隐射成颜色表中与其最近的值啊,但是,这样的操作本身就是对滤镜算法一种歪曲了,只能使得变换后的结果无法认可。
那么,调整菜单中的部分功能为什么不能用了呢,比如说通道混合器,自动颜色等等,其实这也是合理的,通道混合器是在不同通道中混合颜色值得到新的图像的,转换成索引图像后,索引图像只有一个通道,怎么混合。
当然,PS调整菜单中的大部分功能还是可以使用的,因为调整菜单中的功能基本上都是对单点像素进行处理的。前面已经说过,索引模式中图像的数据只是对应颜色表中的一个索引,那么如何进行单点处理呢,其实正式因为这个原因,使得索引图像在单点处理中有着独特的特性。
比如图像的反色,反色的原理是黑变白,白变黑,即x=255-x,索引图像如何操作,聪明的你很快就会想到,直接把调色板中的所有颜色值都改变为其互补色不就行了吗,的确,就是这么简单,那么诸如颜色平衡,去色,颜色替代啊等等都是类似的过过程,直接根据相关算法调整颜色表就可以了。当然这里面的色调均化还是会涉及到图像的数据的。正式因为这个原因,索引图像的大部分处理速度都要优于灰度图像。
这里顺便讲下灰度图像的上述过程的处理,比如反色,如果我们直接将灰度图像的颜色变中各颜色反色,则显示后的效果是正确的,但是这样的操作后你如果按照BMP的格式写入文件,然后用PS打开,PS就是认为其是索引图像了,就是因为灰度图像的颜色表是固定的。所以千万不要打灰度图像颜色表的主意。
我们再看看索引图像的旋转和缩放,打开一副真彩色图像,我们将其旋转10度,同样复制一份刚才的真彩色图像,转换为索引图像,我们也将其旋转10度,仔细比较两幅图片,你会发现真彩色图像旋转后没有失真,而索引图像则有锯齿产生,为什么呢,其实还是因为索引的缘故,如果要抗锯齿,旋转则会产生新的像素值,这就类似于上述滤镜的过程一样。如果我们在自己写抗锯齿的旋转算法时,不考虑这点,则你得到的结果将惨不忍睹(不抗锯齿的算法不会,他没有产生新的像素值)。同样,对于缩放除了最邻近插值外其他算法也有类似的过程,但是PS对索引图像也提供了几中缩放方法,我想,也许这里其有个转换过程吧,我自己也试多处理,首先我们记录下索引图像的颜色表,然后将其转换为真彩色图像,调用真彩色图像的缩放方法,完成后,在次利用刚才保存的颜色表将其转换为索引图像,因为缩放前后的图像在颜色值上差别不是很大,即通过插值计算的来的新的像素值和原来的像素值插补不大,这样在颜色表中寻找到其对应的索引值也应该相同。所以从视觉上我们并没有感到错乱。利用这个原理,我们也可以自己实现抗锯齿的索引图像的旋转。
另外,索引图像的颜色表不是一定要包含256中颜色的,其实我觉得在2到255之间都可以啊,如果小于16种索引色,则我们可以将其保存为4位色的,当然也可以保存为8位色的,要知道4位色的处理痛苦程度是8位色的两倍啊,为什么,字节,位,对齐等等。
总之,索引图像中的最重要的概念就是颜色表,由于这个颜色表的存在,我们有很多功能都不可以实现,比如透明叠加,图像的实现等等,不过由于其颜色的失真较小以及保存后的文件大小比较小等优势,索引图像还是有很大的用处的。