五官調(diào)整
五官調(diào)整包括如下效果

最常見的大眼瘦臉效果實(shí)現(xiàn)方法有很多,包括局部調(diào)整算法,圖片變形算法和基于深度學(xué)習(xí)的妝容遷移算法
局部平移算法
瘦臉及眼睛放大的前提是需要檢測到人臉,提取特征點(diǎn)后進(jìn)行相應(yīng)的圖像變形處理得到最終效果

由拉伸中心向某一點(diǎn)拉伸,以上圖為例,點(diǎn)位18和點(diǎn)位25向點(diǎn)位30收縮,可以達(dá)到瘦臉效果,點(diǎn)位21和點(diǎn)位23向點(diǎn)位57收縮可以達(dá)到瘦下巴的效果
vec2 stretchFun(vec2 textureCoord, vec2 originPosition, vec2 targetPosition, float delta) {
vec2 offset = vec2(0.0);
vec2 result = vec2(0.0);
vec2 direction = (targetPosition - originPosition) * delta;
float radius = distance(vec2(targetPosition.x, targetPosition.y / aspectRatio), vec2(originPosition.x, originPosition.y / aspectRatio));
float ratio = distance(vec2(textureCoord.x, textureCoord.y / aspectRatio), vec2(originPosition.x, originPosition.y / aspectRatio)) / radius;
ratio = 1.0 - ratio;
ratio = clamp(ratio, 0.0, 1.0);
offset = direction * ratio;
result = textureCoord - offset;
return result;
}
最終實(shí)現(xiàn)效果

局部縮放算法

眼睛放大的時候只有圓形區(qū)域內(nèi)的圖像才進(jìn)行變形,越靠近圓形,變形越大,反之變形越小,這樣保證不改變臉部的整體信息

假設(shè)當(dāng)前點(diǎn)為(x,y),手動指定變形區(qū)域的中心點(diǎn)為C(cx,cy),變形區(qū)域半徑為r,手動調(diào)整變形終點(diǎn)(從中心點(diǎn)到某個位置M)為M(mx,my),變形程度為strength,當(dāng)前點(diǎn)對應(yīng)變形后的目標(biāo)位置為U。
1、只有圓形選區(qū)內(nèi)的圖像才進(jìn)行變形
2、越靠近圓心,變形越大,越靠近邊緣的變形越小,邊界處無變形
3、圓外像素不發(fā)生偏移
vec2 warpPositionToUse(vec2 centerPostion, vec2 currentPosition,
float radiusEye, float scaleRatio, float aspectRatio) {
vec2 positionToUse = currentPosition;
vec2 currentPositionToUse = vec2(currentPosition.x,
currentPosition.y * aspectRatio + 0.5 - 0.5 * aspectRatio);
vec2 centerPostionToUse = vec2(centerPostion.x,
centerPostion.y * aspectRatio + 0.5 - 0.5 * aspectRatio);
float r = distance(currentPositionToUse, centerPostionToUse);
if (r < radiusEye) {
/// r 越大則 alpha 越接近于 1 (基本不變)
/// r 越小,則放大效果越明顯(顯示中心處的顏色)
float alpha = 1.0 - scaleRatio * pow(r / radiusEye - 1.0, 2.0);
positionToUse = centerPostion + alpha * (currentPosition - centerPostion);
}
return positionToUse;
}
最終效果

美膚效果
美白
美白方式一般分為兩種,一種是不考慮皮膚區(qū)域,全圖美白,一種是僅針對皮膚區(qū)域美白
美白算法有多種,總結(jié)來分為兩種,LUT調(diào)色法和圖層混合法
LUT法
通過類似PS軟件中調(diào)節(jié)亮度,對比度,曲線,色彩平衡等方式生成LUT表,優(yōu)點(diǎn)是使用顏色濾鏡LUT速度快
圖層混合法
通過使用PS中的圖層混合模式達(dá)到美白效果,具體思想是:將原圖中的皮膚區(qū)域像素與純白色像素進(jìn)行“柔光”圖層混合,然后調(diào)節(jié)不透明度達(dá)到美白效果
磨皮
圖像保邊濾波算法
磨皮算法,實(shí)際上就是平滑皮膚區(qū)域,將人像皮膚區(qū)域中一些皺紋,斑點(diǎn)以及痘痘等平滑掉,讓皮膚看起來更光滑。要達(dá)到這種效果,需要一種濾波器,他既能對平坦的皮膚區(qū)域進(jìn)行一定的平滑,又能較好的保留邊緣信息,這種濾波器就是保邊濾波器
保邊濾波器算法,包括雙邊濾波、表面模糊、導(dǎo)向?yàn)V波等
膚色檢測
待補(bǔ)充。。。

磨皮算法
磨皮算法劃分了多種算法:
● 通用磨皮算法
● 通道磨皮算法
● 高反差磨皮算法
● 細(xì)節(jié)疊加算法
● 其他算法
通用磨皮算法
- 輸入原圖S
- 對S進(jìn)行膚色檢測得到Mask
- 對Mask進(jìn)行高斯濾波得到平滑的Mask A
- 對S進(jìn)行保邊濾波得到T,T是丟失了部分細(xì)節(jié)的平滑圖像
- 計算效果圖,D = S x (1 - A) + T x A
細(xì)節(jié)疊加磨皮算法
- 對原圖S進(jìn)行較大半徑的保邊濾波,得到濾波圖A
- 對原圖S進(jìn)行較小半徑的保邊濾波,得到濾波圖B
- 對B進(jìn)行膚色檢測得到膚色Mask圖C
- 根據(jù)原圖和圖A得到細(xì)節(jié),E = S - A
- 根據(jù)圖B和圖A技術(shù)細(xì)節(jié),F(xiàn) = A - B
- 根據(jù)可調(diào)程度R, 細(xì)節(jié)控制參數(shù)K技術(shù)磨皮效果
K0 = C x R
D = A + K0 x F + (1 - K0 x K) x E
最終實(shí)現(xiàn)效果


