本帖最后由 jaysfing 于 2026-7-16 01:31 编辑
您的方案是正方形遮罩,覆盖范围是 100% 在边缘做颜色混合,SRC 肤色向 DST 靠拢。肤色差异小的时候还行 肤色差异大时会产生分界线,特别是额头顶部肤色不对 我试了怎么调halo_zone 阈值都难以消除 有点弊端。
我这个方案是切割的 是靠SAEHD模型去预测和计算边缘 进行切割 形成固定遮罩 弊端更大 不能体现full的优势
后来想了个两全其美的办法:
使用halo_fix_mask膨胀系数 不会削掉脸部边缘:
- expanded_mask = cv2.dilate(halo_fix_mask, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (output_size//3, output_size//8)))
复制代码
宽度膨胀到三分之一覆盖横向脸部边缘,高度只膨胀八分之一避免底部光晕。这个比例是基于人脸的一般比例
这样的效果虽然比不上正方形遮罩的完整覆盖,但遮罩覆盖范围足够大,保留了完整的脸部边缘,同时底部不溢出光晕 边缘过渡甚至更自然
总结就是用您的原创颜色混合逻辑,去处理遮罩边缘。 用模型轮廓膨胀后的遮罩,这个遮罩本身就已经贴合人脸,边缘光圈比正方形小得多。在这个基础上,颜色混合方法只作用于遮罩最边缘的极小范围,完成最后的肤色过渡。 遮罩形状解决了覆盖率问题,颜色混合解决了边缘融合问题。两者结合就同时具备了 full 的较完整覆盖和自然过渡。
|