滤镜艺术---新海诚滤镜特效的实现解密

最近新海诚滤镜特效很火,Camera360为此还专门开发了相应的app,天天P图等等也是争先恐后,今天,本人来给大家解密一下。

先给大家看下本人程序实现的效果图:

原图

效果图

下面本人来详细说明一下如何程序实现这个滤镜特效:

1,天空检测与分割

这个滤镜中最主要的就是天空区域的分割与替换,关于天空分割,本人给出一篇参考文献:

Sky detection by effective context inference. Neurocomputing.2016

该文章是基于训练学习来实现天空分割的,大概流程如下:

2,天空MASK

通过1得到天空的精确分割区域后,我们需要对这个区域进行二值化,黑色为非天空区域,白色为天空区域,然后对这个二值图进行一个适当半径的高斯滤波,使得天空与非天空之间的边界线有足够的过度,也就是PS中的羽化。这里以下图为例:

3,天空融合

使用2中的Mask,将原图和天空图进行融合,这一步使用PS中的正常模式进行融合即可,白色区域显示天空图,黑色区域显示原图;这里使用的天空图像如下图所示:

(c)天空图像

效果图如下:

4,调色

调色这一步很关键,你需要什么样风格的漫画,就需要针对调出什么样风格的颜色色调。本人在这里参考的是如下的风格(点击打开链接):

5,光晕

调色之后,我们需要给图片上添加一定的光晕,这一步,我们直接使用光晕模版,与原图做滤色的图层混合,即可。

本人使用的光晕模版如下:

4-5两步骤的结果图如下:

关于滤色图层混合的计算,代码如下:

        int ModeFilterColor(int basePixel, int mixPixel)
        {
            int res = 0;
            res = 255 - (255 - mixPixel) * (255 - basePixel) / 255;
            return Math.Min(255, Math.Max(0, res));
        }

6,饱和度和亮度调节

最后,对图像进行一个饱和度和亮度的简单调节,调出一种明亮清新的感觉,调节步骤如下:

效果图如下:

(g)新海诚滤镜效果图

如果需要边界的加强感觉,可以在1之前,对图像进行一个照亮边缘的操作,得到照亮边缘图A,然后讲A和原图进行叠加处理,效果会更好一点。

叠加处理的代码如下:

int ModeOverlay(int basePixel,int mixPixel)
{
    int res = 0;
    res = ((basePixel <= 128) ? (mixPixel * basePixel / 128):(255 - (255 - mixPixel) * (255 - basePixel) / 128));
    return CheckRange(res);
}

最后附上调用的逻辑代码:

private void specialFilterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (pictureBox1.Image != null)
            {
                //获取由1天空分割得到的天空图像
                Bitmap sky = new Bitmap(Application.StartupPath + "\\sky.png");
                //获取由2得到的天空Mask图像
                Bitmap mask = new Bitmap(Application.StartupPath + "\\mask_6.jpg");
                //天空融合
                curBitmap = SpecialFilter(srcBitmap, sky, mask);
                //调色与光晕
                Bitmap map = new Bitmap(Application.StartupPath + "\\map.png");
                Bitmap light = new Bitmap(Application.StartupPath + "\\light.png");
                curBitmap = MapFilter(curBitmap, light, map);
               //亮度与饱和度调节
                Bitmap anMap = new Bitmap(Application.StartupPath + "\\anmap.png");
                curBitmap = AnMapFilter(curBitmap, anMap);
                pictureBox1.Image = curBitmap;
            }
        }

以上就是新海诚滤镜的程序实现方案,至于详细代码,这里设计公司机密,不便透露,原理已经写清楚了,大家可以尝试一下!如果有疑问,可以交流:QQ1358009172

时间: 2024-10-12 17:10:55

滤镜艺术---新海诚滤镜特效的实现解密的相关文章

图像滤镜艺术--Toaster滤镜

根据Instagram CEO的说法,Toaster滤镜是Instagram所有滤镜中最复杂的滤镜,这个滤镜给人一种新奇的红色烘烤感,很能让人联想起这个Toaster单词的本意呵呵,今天我将用C#实现这个滤镜,当然我也只是探索,如何逼近它的效果,差异的存在在所难免,大家勿怪哦. 按照之前的说法,还是先使用Photoshop进行模拟,然后根据模拟步骤,进行C#代码编写. 首先,看下效果图: (a)PS效果图 (b)Instagram效果图 (c)C#代码效果图 效果怎么样我说了不算呵呵,下面介绍P

图像滤镜艺术---Wave滤镜

Wave Filter水波滤镜 水波滤镜是通过坐标变换来模拟水波效果,使图像呈现出水波的特效.这个滤镜有一个可调参数:水波的扭曲程度. 代码如下; // /// /// Wave Filter /// /// Source image. /// The degree of wave,0-100. /// The result image. private Bitmap WaveFilterProcess(Bitmap srcBitmap, int degree) { Bitmap a = new

图像滤镜艺术---水彩画滤镜

水彩画滤镜 水彩画滤镜算法如下: 1,假设原始图像为F(x,y),灰度化得到G(x,y): 2,构建一个半径为Radius的正方形模板M,边长为2*Radius+1: 3,将M在F上依次遍历每个像素,对于当前像素P(x,y): 设置一个油漆桶数N,由于图像灰度值范围为0-255,因此我们油漆桶的数量N要小于255,这个油漆桶是用来盛放不同类别的像素. 3.1首先按照油漆桶数N将0-255的范围划分为等距的N个油漆桶,对于模板中对应的像素,我们按照其灰度值,依次将其放入相应的油漆桶中: 3.2统计

图像滤镜艺术--暴雨滤镜

    今天给大家介绍的是一款暴雨滤镜,可以将一些风和日丽的风景照片变换为暴雨效果的照片,废话不多说,先给大家看下效果: (a)原图 (b)PS效果图 (c)代码实现效果图 这个暴雨滤镜也比较简单,按照之前的步骤,我们依次介绍PS实现过程以及代码实现过程. PS实现过程如下: 1,暴雨模板图像生成: 这个过程我简单介绍一下我的实现,不过大家不需要自己制作模板了,我已经把模板放在了资源里,大家直接使用即可.模板制作步骤如下: 1.1 新建一个空白图像,大小按照自己的需要确定,我这里取的是1000*

图像滤镜艺术--大雪滤镜

今天给大家介绍一款大雪滤镜,可以使你夏天的照片瞬间幻化为大雪纷飞的场景哦!先看下效果图: 上面三张图像分别是(a)原始图像,(b)PS效果图,(c)C#代码效果图 这个大雪滤镜也比较简单,按照之前的步骤,我们依次介绍PS实现过程以及代码实现过程. PS实现过程如下: 1,打开原始图像,复制图层a,新建图层mask,填充为黑色: 2,滤镜--杂色--添加杂色: 3,模糊--进一步模糊: 4,调整色阶: 5,高斯模糊,与a进行混合,选择混合图层-滤色模式: 6,原图调出冷色调: 这样就出来了大雪效果

图像滤镜艺术---Swirl滤镜

Swirl Filter Swirl 滤镜是实现图像围绕中心点(cenX,cenY)扭曲旋转的效果,效果图如下: 原图 效果图 代码如下: // /// /// Swirl Filter /// /// Source image. /// The X position of Swirl. /// The Y position of Swirl. /// The degree of swirl,0-360. /// The result image. private Bitmap SwirlFil

图像滤镜艺术---图像滤镜晕影调节算法研究

本文对滤镜中常见的晕影,晕角效果的实现做了研究,具体如下: 1 晕影调整算法 所谓晕影就是给图像四个角添加暗影效果,这暗影向图像中心逐渐淡化.我们使用如下公式来实现: 假设图像宽度高度分别为w,h: double d = Math.Sqrt((i - w / 2) * (i - w / 2) + (j - h / 2) * (j - h / 2)); double dmax = 1.0 / Math.Sqrt(w * w / 4 + h * h / 4); double lum = 0.75 /

Atitit 图像处理之仿油画效果&#160;Oilpaint油画滤镜 水彩画 漫画滤镜&#160;v2

Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2 1.1. 具体源码参考1 2. ,油画 水彩画具有几个比较明显的特点如下:1 2.1. 明暗层次(灰度)较少  也就5级别够用了1 2.2. 颜色泛用   使用的颜色比较单一,一般不会超过7种颜色,不像真实照片那样,具有丰富的颜色种类:2 3. 水彩画滤镜算法如下:2 3.1. 这个其实就是灰度层次降低维度的过程.3 3.2. 模板半径Radius用来调节水彩画的水彩程度.即是颜色的降低维度的过程3 3.3.

图像滤镜艺术---ZPhotoEngine超级算法库

一直以来,都有个想法,想要做一个属于自己的图像算法库,这个想法,在经过了几个月的努力之后,终于诞生了,这就是ZPhotoEngine算法库. 这个算法库目前包含两个模块:基础图像算法模块+滤镜模块,使用C语言实现,现在免费分享给大家,可以适用于PC/Android/Ios三大平台. 1,基础图像算法模块 这个模块,本人以Photoshop基础算法为原形,模拟出了PS大部分的基础算法. 为什么选择Photoshop算法?这个也是我的算法库一个优势,目前开源算法库多如牦牛,但是,能和PS媲美的,少之