美颜算法

美颜算法

美颜算法主要是以下两种技术进行组合:

  • 保边滤波:表面滤波、双边滤波、导向滤波等
  • 锐化:对眼睛等部分采用拉普拉斯算子、非锐化掩蔽等进行锐化

这些算法常用到两个基础的算法:积分图以及直方图,用于加速计算。

保边滤波算法

保边滤波算法一般需要使用到原图信息作为计算权重的一个重要因素。

表面模糊滤波(Surface Blur)

表面模糊滤波是PS里面的一个磨皮算法,但是是其原理并未公开,是由一个PS技术爱好者通过excel拟合出来的。其计算公式为:

其中$p_k$是当前的中心像素,$p_i$是中心像素邻域的像素点,$q_k$则是当前中心像素的转换结果,也称之为响应。可以看到,在平坦区域,$p_i-p_k\approx 0$,此时表面滤波就是一个均值滤波。对于非平坦区域,特别不平坦的外围像素,其$max(0, 1-\frac{|p_i-p_k|}{2.5Y})$结果一般为0,不为0的邻域像素,其权重也随着差别变大而获得较低的权重,从而很好地保护了中心像素。
O(1)效率的表面模糊算法 https://www.cnblogs.com/Imageshop/p/5995093.html

双边滤波(Bilateral Blur)

双边滤波是在高斯滤波上做了一定的改进,其邻域像素的权重不仅由距离中心点的空间距离决定,还由邻域像素与其中心点的像素差别而决定。邻域像素的权重为:

其中$w_i$是邻域像素i的权重,$loc_i, loc_k$分别是邻域像素i以及中心像素k的空间位置。在平坦区域,$p_i-p_k\approx 0$,此时双边滤波退化为高斯滤波。在非平坦区域,由于$|p_i-p_k|$较大,因此$G(p_i-p_k)$较小,从而拉低了这些差别较大的像素的整体权重。与表面模糊一样,实现了对非平坦区域的细节保留。

导向滤波

http://kaiminghe.com/eccv10/eccv10ppt.pdf
https://blog.csdn.net/baimafujinji/article/details/74750283
导向滤波也是非常类似的,其具体推导就不再重复了。其原理依然是,在平坦区域趋向于使用滑窗的均值,而在非平坦区域趋向于保留中心像素的值。它的精髓之处在于使用线性变换来计算响应,从而能够保证区域内guided image的梯度能够传导到响应中去,并且保持比例,避免了梯度翻转(就是响应中两个像素的大小关系与导向图或者原图不一致)。

guidedfilter

你可以想象一种情况来理解这种假设。II中的甲处和乙处都是区域,而丙处是边缘。那甲处的梯度和乙处的梯度应该不会相差太大,例如乙处的梯度是甲处梯度的1.5倍。但是由于丙处是边缘,所以丙处的梯度会比较大,例如可能是甲处的6倍,也就是乙处的4倍。如果I和q之间满足线性关系,那么甲乙丙的梯度大小和倍数关系就都不会被扭曲。否则,如果二者之间的关系是非线性的,那么可能的结果是在q中,尽管丙处的梯度仍然大于乙处的梯度,进而大于甲处的梯度,但是倍数关系可能会扭曲。例如,丙处的梯度是乙处的1.5倍,而是甲处的6倍(即乙处的梯度是甲处的4倍),这时你就会想象,甲处是区域,而乙处和丙处就变成了边缘。可见非线性关系会使得引导图像对于边缘和区域的指示作用发生错乱。

guidedfilter_gradient
看这个图,虽然响应(filterred)中,像素大小的偏序关系依然保留,但是由于映射比例不一致,导致与原图的差(上图的detail部分)存在波动。这时候将filter的结果应用回原图就会出现梯度翻转的现象(enhanced)。在非边缘处这样的现象不容易发生的,非边缘处主要是空间高斯起作用。在边缘处,主要是像素差高斯起主要作用,越靠近斜线的中心部分,也就是边界部分,邻域的像素波动就越大,而靠近两个平坦区域的像素,其波动相对较小,因此filtered曲线更加平缓,这就是上左图中filtered曲线先平缓后快速上升再平缓的原因。同时,guided filter更快,可以用于抠图,毛发模拟、去雾等一系列应用中去。

暗通道去雾算法

https://www.jianshu.com/p/df9c963a392a

这里不得不提一下暗通道去雾算法,这里讲得最清晰,其中最关键的一步就是对无雾图像的假设,即下面的公式(6):

https://blkstone.github.io/2015/08/20/single-image-haze-removal-using-dark-channel/

darkchannel

图像混合算法

线性光混合

假定两个相邻图层X和Y,X在下方,Y在上方,X与Y混合,则X是基色,Y是混合色,X与Y混合得到的颜色是结果色Z,对于线性光混合模式,其计算公式为:

不透明度混合

其中Opacity是0-100之间的数值,0代表上方的Y完全透明。

瘦脸宽脸之液化算法

液化类算法一般是和磨皮一起出现的,其作用就是能够改变脸型。

0%