文档章节

索引图像的那些事啊

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:41
字数 1894
阅读 0
收藏 0

  索引图像在目前看来,需要应用的场合比真彩图像少的多,但是,在某些特殊的领域(比如游戏)和应用(比如屏幕传输)索引图像依旧发挥这重要的作用。本文将简单的描述下索引图像的有关事啊。

     索引图像最多只可含有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位色的两倍啊,为什么,字节,位,对齐等等。    

     总之,索引图像中的最重要的概念就是颜色表,由于这个颜色表的存在,我们有很多功能都不可以实现,比如透明叠加,图像的实现等等,不过由于其颜色的失真较小以及保存后的文件大小比较小等优势,索引图像还是有很大的用处的。

本文转载自:http://www.cnblogs.com/Imageshop/archive/2011/11/11/2246059.html

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
开源桌面搜索引擎 Terrier 和 imgSeek

开源桌面搜索引擎的好处 过去,寻找正确的内容十分容易,从鞋盒里找到正确的软盘就可以了。但那样的日子早已一去不返了。如今,普通的桌面计算机都会包含数千兆、甚至 数太字节的数据!如此多...

IBMdW
2011/06/03
1K
0
神经网络平常都在做些啥?可视化特征解释了一下

雷锋网:喜欢机器学习和人工智能,却发现埋头苦练枯燥乏味还杀时间?油管频道 Arxiv Insights 每周精选,从技术视角出发,带你轻松深度学习。 翻译/ 龙翔 校对/ 凡江 整理/ 廖颖 有人说,机器...

雷锋字幕组
01/08
0
0
教程 | 从零开始PyTorch项目:YOLO v3目标检测实现(下)

  选自Medium   作者:Ayoosh Kathuria   机器之心编译   参与:Panda      前几日,机器之心编译介绍了《从零开始 PyTorch 项目:YOLO v3 目标检测实现》的前 3 部分,介绍了 ...

机器之心
04/26
0
0
[swift]-Operation和OperationQueue体验优化

原文 Operation和OPerationQueue这两个类是iOS系统中并发执行任务的一种方式。 我们将以一个没用并发的例子开始,它会非常的卡顿,然后你将逐步加入并发操作,使之变得流畅。 Begin: 我们的例...

xiaoLoo
08/01
0
0
BCGControlBar中文教程之Ribbon Designer(2/4)

BCGControlBar Pro for MFC最新试用版下载请猛戳>>> Ribbon Designer允许用户轻松地创建实际的应用程序原型。这里需要现有的MFC项目作为输入并生成一个带有RC文件的Ribbon元素的输出。当您使...

Miss_Hello_World
2016/09/22
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

es6

在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys(),该方法返回一个数组 传入对象,返回属性名 var obj = {'a':'123','b':'345'};console.l...

不负好时光
8分钟前
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

全部原谅
10分钟前
0
0
web.xml容器加载顺序

容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

Aeroever
12分钟前
1
0
Docker容器日志查看与清理

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日...

muzi1994
13分钟前
0
0
J2Cache 和普通缓存框架有何不同,它解决了什么问题?

不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!...

红薯
16分钟前
365
9

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部