索引图像处理的一些心得

来自:http://bbs.csdn.net/topics/110048102

感谢laviewpbt的分享。

总结:索引图像像素点存放的是调色板中的下标,颜色不容易失真,存储文件小的优势。索引图像对于反色,颜色平衡,去色,颜色替代非常方便,直接修改调色板即可。但是索引图像在滤镜,通道混合,透明叠加,旋转,缩放等通过对指定区域像素操作产生新像素值的的方法效果比较差;这种情况下例如旋转锯齿,其实可以通过从索引图像生成真彩色图像,对真彩色图像变换,然后转换为索引图像保存;用这种相互->方便操作->转换回来的思路可以脱离图像格式的限制,得到满意的图像处理结果。

    我不知道索引图像在实际中用的多不多,不过,最经对索引图像有所涉及,总结了一些小经验,让大家来看看对不对。

    索引颜色图像最多只能含用256种颜色,当图像模式转为索引颜色时,PS会构建一个索引色彩表(CLUT),用来存放索引图像中的颜色。如果原图像中的颜色超出色彩表中的颜色范围,PS会自动选取色彩表中最相近的颜色或使用已有的颜色模拟该种颜色。索引颜色模式可以减小文件大小,同时保持视觉上的品质基本不变。 
    
    因此, 索引图像的实际数据只是对应颜色表中的一个索引,而并不是实际的像素值,这个与灰度图像不同,灰度图像是同样是最多含有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位色的两倍啊,为什么,字节,位,对齐等等。     

     总之, 索引图像中的最重要的概念就是颜色表,由于这个颜色表的存在,我们有很多功能都不可以实现,比如透明叠加,图像的实现等等,不过由于其颜色的失真较小以及保存后的文件大小比较小等优势,索引图像还是有很大的用处的。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值