美颜滤镜中的磨皮功能主要是通过使用保边滤波器对脸部非器官区域进行平滑,达到脸部皮肤区域光滑的效果。在开发过程中,常用的保边滤波器主要有双边滤波、导向滤波、表面模糊滤波、局部均值滤波等。但考虑到性能和效果平衡,一般都采用双边滤波或者导向滤波。

下面小编将介绍下美颜滤镜中的双边滤波和导向滤波,以及增强磨皮效果的方法,供各位开发者参考。

一、双边滤波

双边滤波考虑了窗口区域内像素的欧式距离和像素强度差异这两个维度,使得其在进行平滑时具有保护边缘的特性。但缺点是无法去除色差较大的孤立点,如痘痘、黑痣等,且磨皮后的效果较为生硬。

二、导向滤波

导向滤波则根据选定区域纹理的复杂程度来进行平滑程度的调节,在平坦区域趋近于均值滤波,在纹理复杂区域则趋近于原图,窗口区域内纹理的复杂程度跟均值和方差强相关。这样既能够很好的处理平坦区域的各种噪点,又能比较完全的保存好轮廓区域的信息。在磨皮这种情况下,导向滤波的引导图即为原图本身,并且其均值滤波的中间结果可以用于后续的锐化处理以提升性能。

  • (void)configureUI {

    NSArray arr = @[@“美颜”,@“美型”/,@“滤镜”*/];
    if (_segmentControl) {
    return;
    }
    _segmentControl = [[WNSegmentControl alloc] initWithTitles:arr];
    CGFloat bottom = _slider.frame.origin.y + _slider.frame.size.height;
    _segmentControl.frame = CGRectMake(0, bottom+20, window_width, MHStickerSectionHeight);
    ///修改MHUI
    _segmentControl.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:MHBlackAlpha];
    [_segmentControl setTextAttributes:@{NSFontAttributeName: Font_12, NSForegroundColorAttributeName: FontColorBlackNormal}
    forState:UIControlStateNormal];
    [_segmentControl setTextAttributes:@{NSFontAttributeName: Font_12, NSForegroundColorAttributeName: FontColorSelected}
    forState:UIControlStateSelected];
    _segmentControl.selectedSegmentIndex = 0;
    _segmentControl.widthStyle = WNSegmentedControlWidthStyleFixed;
    [_segmentControl addTarget:self action:@selector(switchList:) forControlEvents:UIControlEventValueChanged];
    [self addSubview:_segmentControl];
    [self addSubview:self.lineView];
    [self addSubview:self.beautyView];
    self.lastView = self.beautyView;
    ///修改MHUI
    [self addSubview:self.bottomView];
    self.slider.maximumValue = 9;
    NSInteger currentIndex = [self.beautyView currentIndex];
    if(currentIndex == 0 || currentIndex == -1){
    self.slider.hidden = YES;
    }
    随着技术的提升,目前,市面上大多数美颜滤镜都采用导向滤波作为磨皮首选算法,而且,为了解决磨皮效果的精度和质量,还诞生出了很多增强算法。

    一、人脸ROI处理

为了解决磨皮效果的精度和质量,在选定区域标定一个人脸美颜的遮罩图片,图片的rgb三个通道分别对应3个脸上的小区域,通过人脸关键点检测,对平滑后的图像和原图进行融合处理。在非脸部区域通过肤色检测实现对肤色区域磨皮,不是肤色区域则拒绝被平滑,从而实现对正整图的磨皮处理。

二、纹理增强

磨皮后的图像在整体上被模糊处理,使得整个图像不够通彻透亮,所以需要再对其进行锐化处理。结合导向滤波过程中的均值滤波结果和人脸ROI区域,采用近似USM锐化的方式对图像进行增强,从而实现对纹理细节的凸显。

三、肤色映射

肤色美白通过采用颜色查找表的方式来将肤色映射到理想的颜色范围。其本质上相当于一个离散函数,给定任意的rgb颜色值,可以在颜色查找表图片中找到对应的颜色值内插出相应的转换结果。

[self.faceView configureFaceData];
NSString *type = [[NSUserDefaults standardUserDefaults] objectForKey: @"MHSDKVersion"];
_viewsArray =  @[self.beautyView,self.faceView,self.filtersView];

}

  • (void)configureSlider{
    // self.slider.maximumValue = 9;
    }
    #pragma mark - Action

  • (void)switchList:(WNSegmentControl *)segment {
    UIView *view = [self.viewsArray objectAtIndex:segment.selectedSegmentIndex];
    self.slider.hidden = [view isEqual:self.filtersView];
    self.assembleType = segment.selectedSegmentIndex;
    if ([view isEqual:self.beautyView]) {
    NSInteger current = [self.beautyView currentIndex];
    if (current == 0 || current == -1){
    self.slider.hidden = YES;
    }else{
    self.slider.hidden = NO;
    }
    NSString *faceKey = [NSString stringWithFormat:@“beauty_%ld”,(long)self.beautyType];
    NSInteger currentValue = [[NSUserDefaults standardUserDefaults] integerForKey:faceKey];
    [self.slider setValue:currentValue animated:YES];
    self.slider.maximumValue = 9;
    } else {
    self.slider.maximumValue = 100;
    }
    if ([view isEqual:self.faceView]) {
    NSInteger current = [self.faceView currentIndex];
    if (current == 0 || current == -1){
    self.slider.hidden = YES;
    }else{
    self.slider.hidden = NO;
    }
    [self.faceView configureFaceData];
    NSString *faceKey = [NSString stringWithFormat:@“face_%ld”,(long)self.faceType];
    NSInteger currentValue = [[NSUserDefaults standardUserDefaults] integerForKey:faceKey];
    [self.slider setValue:currentValue animated:YES];
    }

    if (![view isEqual:self.lastView]) {
    [self.lastView removeFromSuperview];
    }
    [self addSubview:view];
    self.lastView = view;
    ///修改MHUI
    [self bringSubviewToFront:self.bottomView];
    }

以上,就是美颜滤镜中常见的磨皮算法。如果您对美颜滤镜接入有需求,欢迎咨询官方客服。

声明:本文由美狐原创,未经允许禁止转载,谢谢合作。

美颜SDK磨皮功能算法以及代码分析相关推荐

  1. 美颜sdk动态贴纸技术、代码分析

    目前,美颜sdk动态贴纸已经成了各大直播平台主播的必备"直播伴侣",在其他的视频拍摄场景动态贴纸的热度同样很高,本篇文章小编将为大家深度盘点一下美颜sdk动态贴纸的技术实现以及代码 ...

  2. 直播和短视频美颜sdk的开发流程、代码分析

    目前,美颜技术是提高视频质量的重要手段之一,特别是短视频和直播两个行业.本文将介绍其开发流程和代码分析. 一.美颜SDK的开发流程 1.需求分析 首先我们需要明确的一点就是"需求" ...

  3. 美颜sdk磨皮与瘦脸功能代码分析

    随着科技的不断发展,美颜sdk已经成为众多线上直播平台中不可缺少的标配.换句话说,主播的颜值对平台生产力有着举足轻重的影响,将直接影响主播及平台的收入.那么美颜sdk中的两大功能:磨皮和瘦脸分别是怎样 ...

  4. 美颜sdk磨皮算法代码解析

    美颜sdk发展到今天,已经成了大家生活中必备的拍摄"助手",目前市面上绝大多数的美颜sdk算法依旧停留在传统的图像算法阶段,仅有少数的美颜AI算法,也尚属于探索研究阶段.其中的磨皮 ...

  5. 美颜滤镜sdk常用的图形处理算法、代码分析

    美颜滤镜sdk目前在视频.图文社交平台中的使用率是非常高的,特别是短视频平台和直播平台.今天小编就为大家讲解一下美颜滤镜sdk经常用到的算法和代码. 一.预处理算法.检测算法 在采集完图像后,首先会对 ...

  6. 美颜sdk常用功能的实现原理

    如今,人们的审美能力正在不断提高,对于美的认知也在不断加强,就拿当下的互联网平台来说吧,短视频和直播这种需要露脸的场景,无论在哪个模块,高颜值的主播总会受到"优待",用户对高颜值赞 ...

  7. keras优化算法_目标检测算法 - CenterNet - 代码分析

    代码出处 吃水不忘打井人,分析github上的基于keras的实现: xuannianz/keras-CenterNet​github.com 代码主体结构 模型训练的主函数流程如下所示,该流程也是使 ...

  8. 1640_MIT 6.828 fork函数的功能以及相关代码分析

    全部学习汇总: GitHub - GreyZhang/g_unix: some basic learning about unix operating system. 继续分析之前看到的一段代码,先梳 ...

  9. 人像磨皮美颜sdk是什么?磨皮技术详解

    每当讨论起美颜sdk的功能,"磨皮"肯定首当其冲,从一开始,这个功能就受到了很多人的欢迎,尤其是当它与美白.美颜结合在一起的时候,更是发挥出了最大的作用,时至今日它的热度依然不减. ...

最新文章

  1. 基于Leaflet实现路径轨迹回放功能
  2. vue aixos请求json
  3. 《软件工程导论》课后习题解答
  4. ssh连接不上linux虚拟机
  5. [转载] Java静态绑定与动态绑定
  6. Array.forEach
  7. Linux下内存使用率、CPU使用率、以及运行原理-转
  8. 枚举基类Enum详解
  9. lesson - 1 - IP /DNS /cat !$ /putty 知识扩充
  10. 4款FTP搜索引擎比专业
  11. python封装成jar包_将Python代码打包为jar软件的简单方法
  12. (w10)Prtsc截图键无法正常使用——解决办法
  13. opnet之Aloha
  14. PHP 每小时抽奖,项目3:PHP抽奖程序 ,抽奖规则代码 分时间段
  15. 腾讯云服务器被攻击了怎么办?
  16. 手机微信中的文档存放位置
  17. Ubuntu 22.04.1 配置 LXR 阅读Linux kernel源码
  18. springSecurity 登陆失败前台显示账号密码登录错误
  19. 托福100分什么水平
  20. 傅立叶变换在图像处理中的作用

热门文章

  1. 《惢客创业日记》2019.06.29(周六)尼尔森十大交互原则(二)
  2. pyqt5-图片游览界面
  3. 如何使用jmeter进行接口测试?jmeter接口测试流程是怎样的
  4. 中医治疗耳鸣也讲究辩证分型
  5. 在delphi Form窗体的panel 中嵌入 Fmx窗体
  6. word2vec中的skipgram和CBOW的比较
  7. VOTtoolkit的使用【3.调试方法】
  8. mysql未定义_以mysql_开始的未定义引用错误
  9. 谷粒商城skuId远程调用查询库存功能总结
  10. linux学习记录-coredump segment fault