所谓滤镜,最初是指安装在相机镜头前过滤天然光的附加镜头,用来实现调色和添加效果。咱们作的滤镜算法又叫作软件滤镜,是对大部分镜头滤镜进行的模拟,固然,偏差也就再所不免,咱们的宗旨只是无限逼近。也是这个缘由,咱们没法再现真实的拍摄场景,没法复原照片中未包含的信息,进而也难以实现某些特殊滤镜效果,诸如偏光镜和紫外线滤色镜(UV)的效果等等。php
目前滤镜已经成为各类图像处理软件中必备功能,不一样的滤镜效果,让咱们的娱乐生活更加丰富多彩,对于任何一款软件滤镜效果的实现,咱们能够归结为如下几个部分:css
1,基本变换html
这是滤镜效果的第一步,咱们能够根据喜爱,设计各类图像效果,这里全部的图像效果能够统一使用以下公式表示:算法
F(r,g,b,a)=f(r,g,b,a);网络
这个公式包含四个变换,即RGB颜色空间中RGB三个份量的变换以及透明度Alhpa的变换,这里咱们简写为A的变换。post
举个灰度变换的例子,它对应的F——f变换以下:网站
F(r) = b * 0.114 + g * 0.587 + r * 0.299;google
F(g) = b * 0.114 + g * 0.587 + r * 0.299;spa
F(b) = b * 0.114 + g * 0.587 + r * 0.299;.net
F(a) = a;
这个灰度化也就是一个基本变换。有了这个基本变换,图像也就达到了必定的效果,可是,一些复杂的滤镜,并不是简单的基本变换,而是一些复杂的效果叠加,于是也就有了 下面几个步骤。
2,晕影材质模板叠加
打开Instagram应用,咱们会发现好多效果都有一些晕影,主要表现为图像四个角偏暗,中间正常或者偏亮,这个其实就是叠加了必定的材质的缘由,这里咱们介绍Instagram中经典的晕角材质模板,以下图所示:
像这样的材质咱们如何叠加呢?这里就会使用一些叠加的算法,其中最经常使用的仍是Photoshop中的混合图层算法,这些混合算法我在前面开始的博客中已经介绍,你们能够仔细研究,这一步主要是使用这些混合图层算法将材质模板和咱们第一步基本变换获得的效果图进行混合,从而得出各类晕角效果。固然,这些混合算法并不是惟一 ,你彻底可本身尝试设计本身喜欢的混合图层算法。
这里给出Photoshop混合图层算法的连接http://blog.csdn.net/trent1985/article/details/40891661
3,风格模板叠加
这里的风格叠加与2中的材质叠加算法差很少,这里是说主要是个步骤问题,举个例子,为了实现老照片这个效果,咱们第一步经过颜色基本变换,能够达到老照片的泛黄效果,可是还不逼真,由于老照片每每还有一些图像噪声,以及裂纹裂痕,这些效果若是你的算法没法实现,那么,你能够把这些经过PS作成一个模板,在这一步中叠加到图像上面,这样也就实现了更为逼真的效果。这里放上一个Instagram滤镜的风格模板图像以下所示:
4,相框模板叠加
有了1-3的步骤,一款滤镜效果就已经基本完成了,但有时候,你还会想要更加美观,那么你可使用PS制做一些 精美的相框模板,叠加到滤镜效果上面,岂不是更加美观呢?
上面4个步骤也就是一款滤镜开发的步骤,固然这几个步骤不必定是一款滤镜必须的,能够是其中一个步骤,或者多个步骤,可是,归根结底,任何一款软件 滤镜的实现,应该都逃不出这几个步骤了吧。 只要咱们掌握了这 几个步骤 ,那么屡次尝试以后 ,总会开发出你 所 喜欢的滤镜效果的。
5,针对第一个步骤,介绍个快速实现方法:
对于任何一款滤镜,若是有基本变换这个步骤,那么咱们均可以经过颜色映射构建一个映射表,而后经过查表来快速实现该变换效果,这样能够大大提升滤镜的速度,提高用户的体验。
颜色映射查表法的基本原理:在一张表中为每种颜色记录一个对应的映射目标颜色,当用查表法对一张照片作颜色映射时,只须要遍历照片的每一个像素点,而后在表中找到该像素颜色对应的目标颜色,最后将该像素设置为目标颜色便可。查表法实现的前提是颜色的映射与周围的颜色无关,即一种颜色不管周围的颜色为什么、不管其位于照片的哪一个位置,其目标颜色都应该是相同的。
好比,RGB 能够表示的颜色数量为 256*256*256 = 16,777,216
,若是要记录每种颜色的映射结果,那么颜色表须要 一千六百多万条记录,这显然没法应用到实际的工程中。为了简化起见,Lev Zelensky发表了一个基准颜色表,将每相近的 4 种颜色采用一条记录存储,这样颜色表只须要64 * 64 * 64 = 262,144
条记录。这个表以下:
注意:上表将 262,144 种颜色分为 8 个块,每块 64 * 64
格,每一格的颜色都不一样。进行颜色映射时,首先使用数字图像处理软件对该基准颜色表应用要模拟的滤镜来生成映射表(以下图),而后对要处理的照片的每一个像素,从基准颜色表中找到该像素颜色的位置,而后在映射表的相应位置就能够获得目的颜色。
使用这种方法,你的滤镜速度能够大大提高。
以上5个步骤就是我结合网络资源和我的总结的部分,喜欢滤镜开发的朋友们能够试试。
最后,介绍一个万能滤镜破解方法:
对于一款滤镜,咱们构建一个模板,这个模板大小自定,能够看到滤镜效果便可,好比Instagram,它指定的图像大小是530*530,那么咱们构建一个530*530大小的空白模板图像,假如咱们要破解Hudson效果,那么,通过 咱们分析,这个效果不只包括基本变换,并且还有 晕影 ,甚至有 与位置相关的梯度模板,这个是破解的 难点,如何 破解,咱们可使用以下步骤:
1,构建256个530*530大小的模板,分别填充0-255种颜色,即灰度颜色;
2,将每一个模板 进行Hudson效果处理,获得相应的映射模板库,这个库也就记录了全部的Hudson效果设置,包括基本变换,晕影,梯度等;
3,对于任何一张530*530大小的原始图像,咱们只要从2中的模板库中找到对应颜色,对应位置的像素值,那么 这个值就是Hudson的效果;
这1-3步,示意图以下所示:
你们仔细想一下是否是这个道理,有得必有失,这话一点不错,这个方法能够破解 任何 一款滤镜,可是,牺牲的倒是滤镜的效率,想一下,是否是呢?
好了 ,今天的介绍就到此结束了,你们有什么疑问能够联系我 :
本人邮箱dongtingyueh@163.com, QQ: 1358009172