美图祛斑算法实战——雀斑消除
美图祛斑算法实战——雀斑消除
本文主要根据这篇博文的思路,由于原博文没有放出完整代码,我这里尝试根据作者的思路实现人脸祛斑算法的代码完整版,本代码针对特定图像使用了一些trick,不是通用算法,仅做参考。
算法流程主要为:
- 灰度化
- 对比度增强
- 阈值处理
- 梯度极大值查找
- 连通域分析
- 皮肤排除
- 图像修复 inpaint
本代码用到的图片如下,从这篇博文直接下载得到,我们的目标是去除任务颈肩部位的祛斑。
导入用到的库
import cv2
import matplotlib.pyplot as plt
import numpy as np
import skimage
from skimage import morphology
from skimage.io import imread
读取图像,转为灰度图,然后进行对比度增强
img = cv2.imread('./face.png')
src = img.copy()
src = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) # 转为灰度图
con = skimage.exposure.adjust_sigmoid(src,0.4) # 0.4这个阈值就比较trick了。。。
使用sobel算子进行边缘检测
x_gray = cv2.Sobel(con, cv2.CV_32F, 1, 0, ksize=3)
y_gray = cv2.Sobel(con, cv2.CV_32F, 0, 1, ksize=3)
x_gray = cv2.convertScaleAbs(x_gray)
y_gray = cv2.convertScaleAbs(y_gray)
dst = cv2.add(x_gray, y_gray, dtype=cv2.CV_16S)
dst = cv2.convertScaleAbs(dst)plt.imshow(dst)
可视化dst后发现边缘都已经被成功识别了,包括雀斑和人脸的边缘。接着对梯度做二值处理,选取一个阈值,大于阈值的设为255,小于阈值的设为0
a = dst.copy()
thres = 40
a[a>thres]=255
a[a<=thres]=0
plt.show(a)
到了这一步,雀斑的轮廓已经很清晰的展示在我们面前了,然而左边脸部有一些很多阴影也被提取进来了,要想办法去掉它们。
为了能用连通域去掉脸部的阴影,先用闭运算处理一下二值图,把阴影散点连成一片,在用连通域分析,去掉面积大于某个阈值的连通域
labels = ((morphology.closing(a, skimage.morphology.disk(7))>0)*255).astype(np.uint8)
num_labels,labels,stats,centers = cv2.connectedComponentsWithStats(labels, connectivity=4,ltype=cv2.CV_32S)
for t in range(1, num_labels, 1):x, y, w, h, area = stats[t]if area>300:index = np.where(labels==t)labels[index[0], index[1]] = 0mask = (labels>0).astype(np.uint8)*255
plt.imshow(mask)
利用闭运算+连通域处理,成功把大部分人体边缘去除,留下了雀斑的mask,如下图
有时候祛斑比较大,轮廓中间有空洞,这里用一个函数填充雀斑轮廓的空洞,使它变成实心mask
def remove_holes_in_region(mask_scar):cnts, _ = cv2.findContours(mask_scar.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)for cnt in cnts:cnt = cnt.transpose(1,0,2) # (1,N,2) N:points numbercv2.fillPoly(mask_scar, cnt, 1)return mask_scar
mask = remove_holes_in_region(mask)
最后利用 cv2.inpaint 函数,输入原始图像img和我们得到的雀斑mask,修补图像
dst_TELEA = cv2.inpaint(img,mask,3,cv2.INPAINT_TELEA)
plt.imshow(dst)
效果还蛮不错的!大概现实了祛斑的功能
总结
不能说这个算法不好,可以说是完全没用
引用
思路来源博客
美图专利
注:如要转载,请联系作者
美图祛斑算法实战——雀斑消除相关推荐
- Python预测之美 数据分析与算法实战(一)
Python预测之美 数据分析与算法实战 声明:本文旨在对这本书进行简单的整理,列出大致得内容框架,不做具体而又深入的分析.想要深入了解的小伙伴们,自行解决吧. 第一篇 预测入门 第二篇 预测算法 第 ...
- Python预测之美 数据分析与算法实战(二)
Python预测之美 数据分析与算法实战 第一篇 预测入门 第一章到第四章 第二篇 预测算法 第五章 参数优化 在使用选定算法进行建模时设定或得到的参数很可能不是最优或接近最优的,这时需要对参数进行优 ...
- MATLAB美图软件算法研究,【网络多媒体学】matlab实现美图秀秀基本功能.ppt
[网络多媒体学]matlab实现美图秀秀基本功能 ;;PPT模板下载:/moban/ ;PPT模板下载:/moban/ ;PPT模板下载:/moban/ ;角度旋转; B = imrotate(A,a ...
- 2021 美图CV算法一面面经
记录下来,主要是给自己查漏补缺,也给大家一个面试的借鉴. 面试时长90分钟,面试60min+算法题和反问30min,面试官很nice,在面试过程中能感受到他的技术深度和见识广度. 实习相关 我实习主要 ...
- 美图笔试算法题(两个人拿石头判断输赢)
刚做完美图的笔试,两道编程题,第一道比较简单:找出一串用逗号隔开的字符串中不重复的那个数. 以下是第二道,时间有限,很多地方没来得及优化,整体逻辑应该没错. question: You are pla ...
- 美图回应与华为合作:华为没有使用美图的任何影像技术
针对市场上美图与华为合作的误解,美图公司发布声明称,美图可以使用华为多媒体能力提升美图秀秀App相机功能在华为手机上的表现,华为没有使用美图的任何影像技术. 日前,有报道称,美图秀秀应用宣布与华为合作 ...
- 美图AI绘画机器人上线,小姐姐们,新一轮头像可以换起了
本文来自AI新媒体量子位(QbitAI) 你是不是也想要一张插画风格的头像?又要像你,又要插画风格.彩绘色系? OK,美图AI绘画机器人Andy上线了. 之前美图专门给Angelababy打造的&qu ...
- 【赠书】基于鲲鹏的大数据挖掘算法实战:清华华为倾力出品!
新年快到了,特地安排一期送书活动,感谢大家这一年的关注!大家有需要的这本书的可以参与这次活动哟!(具体参与方式见文末!) 计算机企业核心技术是企业的立身之本,更是企业把握市场主动权.扩大自身竞争优势的 ...
- 换发型算法_如何用手机美图秀秀换发型
展开全部 美图秀秀目前没有换发62616964757a686964616fe4b893e5b19e31333365666136型的功能,美图旗下的美颜相机有换发型的功能. 拓展资料 在美颜相机上换发型 ...
最新文章
- 如何让Moodle中所连结的flash等媒体事先呈现在画面上?
- 即时通讯音视频开发(三):视频编解码之编码基础
- Maya mayapy.exe 安装 Cython,编译 pyd
- 玩转html5(五)---月球绕着地球转,地球绕着太阳转(canvas实现,同样可以动哦)...
- (转)javascript匿名函数
- python学习(八)定制类和枚举
- ArcEngine中使用上下左右键移动地图
- 边工作边刷题:70天一遍leetcode: day 67-1
- linux静态和动态路由英文,静态路由和动态路由的特点
- oracle学习总结1
- 大家推荐一下开源的博客和论坛整合在一起的.net系统
- (转)VeraCrypt : 怎么加密不被发现?
- 学生签到系统c代码_学生信息管理系统C代码
- 《王阳明心学及其当代意义》观后总结
- 在Vue中使用video.js播放器组件(vue-video-player)
- 手把手带你从0开始搭建个人网站,小白可懂的保姆级教程
- 中南大学青年志愿者协会电脑维修部
- 烟台大学计算机学院王文学,杨玉军-烟台大学 数学与信息科学学院
- 《ffmpeg basics》中文版 -- 16.数字音频
- 提薪必看 | 这5个提加薪最容易得罪人的坑,千万别踩雷