简介
本项目是以matlab为主语言并设计GUI界面的一款简易美图秀秀,包含基础的图像处理和一些常见美颜算法
对于一些matlab较难实现的算法采用C++或python来实现
⭐️ github地址:https://github.com/mibbp/MeituShow
里面有我完整的代码,你想直接运行记得看readme配置一下环境,本博客更多的是讲解原理
具体功能包括:
- 增加图像亮度,对比度
- 美白人像
- 采用双边滤波算法磨皮
- 采用液化算法并用dlib提取特征点实现瘦脸
- 基于液化算法并用dlib提取特征点实现大眼
- 采用dlib提取特征点,采用Andrew求凸包并用BFS实现唇彩
- 采用SRCNN超分辨率算法实现提升照片像素
- 采用Beauty-GAN算法实现彩妆迁移
美白算法
这个很简单,网上资源也很多,这里讲一下3A算法之一的白平衡(AWB)
YCbCr空间
YUV空间是以前为了解决同时兼容黑白和彩色电视机提出来的,Y指亮度,UV代表颜色分量,黑白电视只显示Y亮度通道就行,而彩色电视则加入颜色分量就行,这里的YCbCr就是如此,其中Y表示亮度,Cb,Cr表示蓝色和红色分量,RGB颜色空间可以和YCbCr互转乘一个矩阵就好了
这里之所以采用YCbCr空间是因为RGB空间里人脸的肤色受亮度影响相当大,所以肤色点很难从非肤色点中分离出来,也就是说在此空间经过处理后,肤色点是离散的点,中间嵌有很多非肤色,这为肤色区域标定(人脸标定、眼睛等)带来了难题。如果把RGB转为YCrCb空间的话,可以忽略Y(亮度)的影响,因为该空间受亮度影响很小,肤色会产生很好的类聚。这样就把三维的空间降为二维的CrCb,肤色点会形成一定得形状,如:人脸的话会看到一个人脸的区域,手臂的话会看到一条手臂的形态,对处理模式识别很有好处,根据经验某点的CrCb值满足:133≤Cr≤173,77≤Cb≤127 那么该点被认为是肤色点,其他的就为非肤色点。
灰色世界算法
灰色世界假设:任意一副图像,当它有足够的色彩变化,则它的RGB分量的均值会趋于相等
这是一个假设,灰色世界算法就是基于这个假设的,写起来也是真的简单
∵Rmean=Gmean=Bmean以G为基准算法R,B的增益∴Rgain=GmeanRmean∴Bgain=GmeanBmean∴R′=R⋅Rgain∴B′=B⋅Bgain \because R_{mean} = G_{mean} = B_{mean} \\ 以G为基准算法R,B的增益 \\ \therefore R_{gain} = \frac{G_{mean}}{R_{mean}} \\ \therefore B_{gain} = \frac{G_{mean}}{B_{mean}} \\ \therefore R' = R\cdot R_{gain} \\ \therefore B' = B\cdot B_{gain} ∵Rmean=Gmean=Bmean以G为基准算法R,B的增益∴Rgain=RmeanGmean∴Bgain=BmeanGmean∴R′=R⋅Rgain∴B′=B⋅Bgain
完美反射算法
完美反射算法基于这样一种假设,一幅图像中最亮的像素相当于物体有光泽或镜面上的点,它传达了很多关于场景照明条件的信息。如果景物中有纯白的部分,那么就可以直接从这些像素中提取出光源信息。因为镜面或有光泽的平面本身不吸收光线,所以其反射的颜色即为光源的真实颜色,这是因为镜面或有光泽的平面的反射比函数在很长的一段波长范围内是保持不变的。完美反射法就是利用用这种特性来对图像进行调整。算法执行时,检测图像中亮度最高的像素并且将它作为参考白点。基于这种思想的方法都被称为是完美反射法也称镜面法。
Rgain=max(Rmax,Gmax,Bmax)RmaxGgain=max(Rmax,Gmax,Bmax)GmaxBgain=max(Rmax,Gmax,Bmax)Bmax R_{gain} = \frac{max(R_{max},G_{max},B_{max})}{R_{max}} \\ G_{gain} = \frac{max(R_{max},G_{max},B_{max})}{G_{max}} \\ B_{gain} = \frac{max(R_{max},G_{max},B_{max})}{B_{max}} Rgain=Rmaxmax(Rmax,Gmax,Bmax

本文介绍了一款基于MATLAB的简易美图秀秀软件中的美白算法,重点讲解了YCbCr颜色空间的应用及三种白平衡算法:灰色世界算法、完美反射算法和动态阈值法。
1014

被折叠的 条评论
为什么被折叠?



