一种具有肤质保留功能的磨皮算法
基本原理
1、复制原图Src作为HighPass层:HighPass = Copy(Src)。
2、对HighPass层磨皮(就是进行保边滤波,可以选择表面模糊、导向滤波、双边滤波、各向异性扩散、BEEP、局部均方差、Domain transfer、 Adaptive Manifolds、 Local Laplacian Filters等任何具有保边效果的EPF-Filter):HighPass = EPF-Filter(HighPass)。
3、得到高频信息:HihgPass = HighPass - Src + 128。
4、对高频信息进行平滑:HighPass = GuassBlur(HighPass, Radius); 其中Radius为高斯模糊的半径。
5、进行图层混合,利用线性光混合:Dest =(Src * (100 - Opacity) + (Src + 2 * GuassBlur(EPFFilter(Src) - Src + 128) - 256) * Opacity) /100 ;
补充说明下线性光混合的计算公式。假定两个相邻图层X和Y,X在下方,Y在上方,X与Y混合,则X是基色,Y是混合色,X与Y混合得到的颜色是结果色Z,对于线性光混合模式,其计算公式为:
Z = X + 2 * Y - 256; (原先以为是 - 255,后用PS CS6验证是 - 256)
不透明度的计算公式就更为简单,如果Opacity表示Y的不透明度,则合成公式为:
Z = (X * (100- Opacity) + Y * Opacity ) / 100;
那么两个综合在一起的计算公式为:
Z = (X * (100- Opacity) + (X + 2 * Y - 256)* Opacity ) / 100;
其中关键的恢复皮肤质感的步骤是第四步的高斯模糊,这个模糊的半径一般越大,质感越强,但是太大,磨皮效果就没有了,因此,这里需要把握合适的度,一般半径在0.5-2之间比较合适。
示例演示
#include<opencv2/opencv.hpp>
#include <vector>
using namespace cv;int main(int argc, char *argv[])
{Mat image = cv::imread("1.jpg", 1);std::vector<cv::Mat> images;split(image, images);for (int i = 0; i < image.channels(); i++){Mat& img = images[i];img.convertTo(img, CV_32F, 1, 0);cv::Mat highPass;img.convertTo(highPass, CV_32F, 1, 0);cv::Mat EPFFilter;cv::bilateralFilter(highPass, EPFFilter, 15, 30, 60);//cv:imwrite("bilateralFilter.jpg", EPFFilter);EPFFilter = EPFFilter - img;EPFFilter = EPFFilter + 128.0;//cv::imwrite("GaussianBlur0.jpg", EPFFilter);cv::GaussianBlur(EPFFilter, highPass, cv::Size(5, 5), 0, 0);//cv::imwrite("GaussianBlur.jpg", highPass);double opacity = 90.0;cv::Mat dst = (img * (100.0 - opacity) + (img + 2.0 * highPass - 256.0) * opacity) / 100.0;//cv::imwrite("dst.jpg", dst);images[i] = dst;}Mat dst;merge(images, dst);cv::imwrite("dst.jpg", dst);waitKey(0);return EXIT_SUCCESS;
}
磨皮后
一种具有肤质保留功能的磨皮算法相关推荐
- 简单探讨可牛影像软件中具有肤质保留功能的磨皮算法及其实现细节。
在几年前写的一篇关于BEEP的文章时,我曾经说过Beep的去噪作用可以用于磨皮,并且给出了结论BEEP比可牛和美图等的效果要更为好,现在看来,那个结论确实是太为夸张和固定了.不同的人的审美观不同,同一 ...
- 简单探讨可牛影像软件中具有肤质保留功能的磨皮算法及其实现细节
本篇博文来自博主Imageshop,打赏或想要查阅更多内容可以移步至Imageshop. 转载自:https://www.cnblogs.com/Imageshop/p/4709710.html ...
- java opencv磨皮算法_使用OPENCV简单实现具有肤质保留功能的磨皮增白算法
在一个美颜高手那里发现一个美颜算法,他写出了数学表达式,没有给出代码,正好在研究OPENCV,顺手实现之.具体过程就是一系列矩阵运算,据说是从一个PS高手那里研究 出来的,一并表示感谢. 这是数学表达 ...
- 使用OPENCV简单实现具有肤质保留功能的磨皮增白算法
在一个美颜高手那里发现一个美颜算法,他写出了数学表达式,没有给出代码,正好在研究OPENCV,顺手实现之.具体过程就是一系列矩阵运算,据说是从一个PS高手那里研究 出来的,一并表示感谢. 这是数学表达 ...
- 怎么形容智能冰激凌机器人_一种人机交互型冰激凌多功能自动售卖机器人的制作方法...
本发明涉及智能机器人技术领域,具体为一种人机交互型冰激凌多功能自动售卖机器人. 背景技术: 冰淇淋(ice cream),是以饮用水.牛奶.奶粉.奶油(或植物油脂).奶油食糖等为主要原料,加入适量食品 ...
- ML:模型训练/模型评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练)
ML:模型训练/模型评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练) 目录 模型训练评估中常用的两种方法代码实现 T1.留一法一次性切分训练 T2.K折交叉验证训 模型训练评估中 ...
- 常用符号计算机输入法,九种常用输入法特殊符号功能揭密 【计算机与医学】...
九种常用输入法特殊符号功能揭密 [计算机与医学] Shift+Esc组合键快速调出软键盘,按住Shift键后按动Esc键,就会在多个软键盘之间切换,按Esc键即可关闭软键盘. 极点中文把特殊符号分为2 ...
- arduino智能闹钟_一种基于Arduino的多功能智能闹钟的制作方法
本实用新型涉及智能闹钟技术领域,具体为一种基于Arduino的多功能智能闹钟. 背景技术: 智能睡眠是款带有睡眠循环跟踪的闹钟,可以设置多组闹钟,添加不同的铃声,可以记录睡眠状态,自动改变屏幕亮度,帮 ...
- 几种换肤软件使用问题
几种换肤软件的使用和使用中的BUG ...
最新文章
- 硕士全年不开学?一批高校发布秋季学期返校时间!
- mysql删除重复文章标题_MySQL中查询、删除重复记录的方法大全
- POJ - 3189 Steady Cow Assignment(二分图多重匹配)
- Firefox 18周岁
- 图数据库与关系数据库的实验对比——意大利商会 InfoCamere 案例
- 计算机组成原理 第一章 计算机系统概述
- jenkins插件之Publish Over SSH
- 本篇文章使用vue结合element-ui开发tab切换vue的不同组件,每一个tab切换的都是一个新的组件。
- IEEE 研究类型 小木虫
- WAP网站制作(WAP网站建设)全攻略教程一
- R语言-主成分分析和聚类分析实操(包含源码)
- ARP报文及其工作过程
- Android变声(SoundTouch)
- Android Banner Indicator 轮播图指示器
- HDU-3605 Escape
- vscode代码格式化时属性不换行
- 微信小程序canvas绘制圆形头像
- Windows10系统内置的emoji表情
- 鲜为人知的火箭尾喷管黑科技 不是你想象的那样简单
- 2023每日发布行业及概念热点切换跟踪图!