图像滤镜艺术---美颜相机之高级柔焦效果实现

简介: 原文:图像滤镜艺术---美颜相机之高级柔焦效果实现 今天给大家讲解一下,如何实现美颜相机中的高级柔焦效果,首先先看下美颜相机中这个功能的效果图:图1 原图(图片来自网络,如有侵权敬请告知)图2 美颜相机高级柔焦模版图3 马赛克效果图4,动感模糊效果以上图3和4是两种柔焦的效果,很不错,今天我将用C来实现这个算法。
原文: 图像滤镜艺术---美颜相机之高级柔焦效果实现

今天给大家讲解一下,如何实现美颜相机中的高级柔焦效果,首先先看下美颜相机中这个功能的效果图:



图1 原图(图片来自网络,如有侵权敬请告知)


图2 美颜相机高级柔焦模版


图3 马赛克效果


图4,动感模糊效果

以上图3和4是两种柔焦的效果,很不错,今天我将用C来实现这个算法。

这个算法的流程如下:

1,前景抠图(自动抠图或者手动抠图)

美颜相机使用的是先手动涂抹出前景目标区域,然后使用自动抠图将该区域准确抠图;

实际上,目前有很多基于深度学习的抠图算法,效果相当不错,比如最近比较火的实时视频抠图技术等等。这里,本人还是给出一些方法的汇总如下:

Interactive graph cuts for optimal boundary and region segmentation of objects in N-D images》

Shared Sampling for Real-Time Alpha Matting》

A Closed Form Solution to Natural Image Matting》

A Bayesian Approach to Digital Matting》

Learning Based Alpha Matting using Support Vector Regression》

Natural Image Matting using Deep Convolutional Neural Networks》

Deep Image Matting》

本文主要介绍方法,这里给出白百合测试图前景抠图的效果:


图5 白百合前景MASK

2,背景特效

大家可以看到图3和图4的效果区别,主要是背景的区别,一个是马赛克,一个是放射模糊;

因此,我们需要对背景图片进行相应的马赛克和放射模糊处理,本人效果图如下:


图6 马赛克效果


图7 放射模糊效果

这里可以参考本人博客里的各种滤镜特效,实际上都可以用来做背景处理,进而得出各种不同的效果;

3,图像融合

有了前景背景之后,我们可以根据前景的MASK(区域的二值MASK),对前景和背景进行alpha融合,公式如下:

Output = F*Mask+(255-Mask)*B

其中F表示前景,B表示背景,其中MASK中白色表示前景,黑色表示背景;

最后本人的效果图如下:


图8 马赛克柔焦效果图


图9 放射模糊柔焦效果图


以上三点就是柔焦效果的具体算法实现过程,最后,给出代码逻辑(我这里实现了四个柔焦的效果):

int f_Focus(unsigned char* srcData, int width, int height, int stride, unsigned char* mask, int intensity, int mode)
{
	//background effects
	int ret = 0;
	int i, j;
	unsigned char* gaussData = (unsigned char*)malloc(sizeof(unsigned char) * stride * height);
	int radius = intensity * 20 / 100;
	switch(mode)
	{
		case  0://gauss blur effect
		    ret = f_TFastestGaussFilter(srcData, width, height, stride, gaussData, radius);
		    break;
		case 1://moscia effect
			memcpy(gaussData, srcData, sizeof(unsigned char) * stride * height);
			ret = f_TMosaic(gaussData, width, height, stride, intensity / 2);
			break;
		case 2://diffusion effect
			memcpy(gaussData, srcData, sizeof(unsigned char) * stride * height);
			ret = f_TDiffusion(gaussData, width, height, stride, intensity / 2);
			break;
		case 3://zoom blur effect
			memcpy(gaussData, srcData, sizeof(unsigned char) * stride * height);
			ret = f_TZoomBlur(gaussData, width, height, stride, width / 2, height / 2, 10, intensity);
			break;
	    default:
		break;
	}	
	//alpha blend
	unsigned char* pMask = mask;
	unsigned char* pSrc = srcData;
	unsigned char* pGauss = gaussData;
	int k, nk;
	for(j = 0; j < height; j++)
	{
		for(i = 0; i < width; i++)
		{
			k = pMask[0];
			nk = 255 - k;
			pSrc[0] = CLIP3((pSrc[0] * k + pGauss[0] * nk) >> 8, 0, 255);
			pSrc[1] = CLIP3((pSrc[1] * k + pGauss[1] * nk) >> 8, 0, 255);
			pSrc[2] = CLIP3((pSrc[2] * k + pGauss[2] * nk) >> 8, 0, 255);
			pSrc += 4;
			pGauss += 4;
			pMask += 4;
		}
	}
	free(gaussData);
	return ret;
};
int f_Test(unsigned char *srcData, int width, int height, int stride, unsigned char* mask, int intensity, int mode)
{
	int ret = 0;
	//Process
    ret = f_Focus(srcData, width, height, stride, mask, intensity, mode);
	return ret;
};

这里本人给出自己的DEMO,这个DEMO中包含了四种效果(高斯模糊柔焦特效,马赛克柔焦特效,扩散模糊柔焦特效和放射模糊柔焦特效),下载地址:点击打开链接

本人QQ1358009172,欢迎交流学习!


目录
相关文章
|
3月前
|
图形学 C# 开发者
Unity粒子系统全解析:从基础设置到高级编程技巧,教你轻松玩转绚丽多彩的视觉特效,打造震撼游戏画面的终极指南
【8月更文挑战第31天】粒子系统是Unity引擎的强大功能,可创建动态视觉效果,如火焰、爆炸等。本文介绍如何在Unity中使用粒子系统,并提供示例代码。首先创建粒子系统,然后调整Emission、Shape、Color over Lifetime等模块参数,实现所需效果。此外,还可通过C#脚本实现更复杂的粒子效果,增强游戏视觉冲击力和沉浸感。
139 0
|
算法
图像滤镜艺术---最新美颜算法研究
原文:图像滤镜艺术---最新美颜算法研究 本文所讲的美颜算法主要指磨皮+美白+肤色+清晰度; 磨皮算法主要有两大类:①基于高反差保留的磨皮算法;②基于保边滤波器的磨皮算法; 对于高反差保留磨皮算法,具体过程如:点击打开链...
4219 0
|
算法 C#
图像滤镜艺术---霓虹、浮雕、木刻滤镜
原文:图像滤镜艺术---霓虹、浮雕、木刻滤镜  图像特效往往可以将普通的照片呈现出一种令人耳目一新的效果,特效的种类繁多,比如各种流行的 滤镜特效等等,今天,我们介绍几种最简单的滤镜:霓虹效果,浮雕效果和木刻效果。
1716 0
|
算法
图像滤镜艺术---水彩画滤镜
原文:图像滤镜艺术---水彩画滤镜水彩画滤镜 水彩画滤镜算法如下: 1,假设原始图像为F(x,y),灰度化得到G(x,y); 2,构建一个半径为Radius的正方形模板M,边长为2*Radius+1; 3,将M在F上依次遍历每个像素,对于当前像素P(x,y): 设置一个油漆桶数N,由于图像灰度值范围为0-255,因此我们油漆桶的数量N要小于255,这个油漆桶是用来盛放不同类别的像素。
1174 0
|
C#
图像滤镜艺术---暗调滤镜
原文:图像滤镜艺术---暗调滤镜本文介绍暗调滤镜的实现过程,这个滤镜主要是呈现一种暗调,对比度明显的效果,原理很简单,公式如下: newR = R*R/255; newG = G*G/255; newB = B*B/255; 实现代码如下:  private Bitmap Filte...
907 0
|
C# 计算机视觉
图像滤镜艺术---Swirl滤镜
原文:图像滤镜艺术---Swirl滤镜Swirl Filter Swirl 滤镜是实现图像围绕中心点(cenX,cenY)扭曲旋转的效果,效果图如下: 原图 效果图 代码如下:         //         ///     ...
914 0
|
C#
图像滤镜艺术---连环画滤镜
原文:图像滤镜艺术---连环画滤镜 小时候我们都喜欢看连环画,虽然是黑白色的,但是也能让我们看的津津有味。 今天,我在这里介绍一种连环画特效的实现方法,带你回到那个记忆的年代。
954 0
|
C#
图像滤镜艺术---怀旧风格滤镜
原文:图像滤镜艺术---怀旧风格滤镜怀旧风格滤镜 本文介绍一款怀旧风格滤镜特效的代码实现,这个滤镜效果跟前面我们介绍的老照片滤镜效果相比,听起来感觉没太大差,实际上老照片不仅 有怀旧的风格,更多了一些怀旧的痕迹,比如照片的褶皱,裂纹等等,而怀旧风格,只是一种发黄的颜色风格而已。
1126 0
|
算法 vr&ar
图像滤镜艺术---漫画滤镜
原文:图像滤镜艺术---漫画滤镜 漫画滤镜 所谓漫画滤镜就是通过复杂的算法来模拟漫画的特点,从而使真实照片呈现出漫画的风格。要实现漫画的效果,首先要了解漫画的特点,漫画具有几个比较明显的特点如下: 1,颜色泛用 漫画中,使用的颜色比较单一,一般不会超过7种颜色,不像真实照片那样,具有丰富的...
1381 0
|
C# 计算机视觉
图像滤镜艺术--大雾效果滤镜
原文:图像滤镜艺术--大雾效果滤镜 今天给大家介绍一款大雾效果的滤镜,先看下效果图:                                                               ...
1107 0