美颜SDK磨皮功能算法以及代码分析

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

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

一、双边滤波

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

二、导向滤波

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

  • (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;
    }
    随着技术的提升,目前,市面上大多数美颜滤镜都采用导向滤波作为磨皮首选算法,而且,为了解决磨皮效果的精度和质量,还诞生出了很多增强算法。
    美颜SDK磨皮功能算法以及代码分析_第2张图片
    一、人脸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];
    }

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

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

你可能感兴趣的:(美颜算法,算法,腾讯云,音视频,android,开发语言)