问题:AI 画出来的人物,边缘总有白纱
用本地 ComfyUI 生成鲸鱼娘立绘时遇到个怪事:输出的 PNG 明明是「透明背景」,但放到深色网页上一看,人物蒙着一层白纱,发丝间隙还有一块块白色残留。
放大看更明显:头顶的呆毛周围有灰白雾块,细发丝之间嵌着小白点。这不是「白底没抠干净」那么简单——检测了一下通道数据,发现:
人物区域的半透明像素占了 60%,完全实心的只有 6%。
也就是说,AI 输出的人像整体是「半透明叠加」的,混在深色背景上自然发灰。
排查:是谁动了我的图
翻开源工作流的节点图,链路一路正常,直到最后几个节点:
VAEDecode → RemoveBackground(BiRefNet) → InvertMask → JoinImageWithAlpha → 保存
原来工作流末尾挂了个自动抠图节点(BiRefNet 模型)。它很智能,但输出的是「软边 alpha」——人物大面积半透明,边缘还留着白边。之前折腾的「调阈值再抠一遍」都是在给它的残图擦屁股,治标不治本。
正解:绕过自动抠图,自己抠绿幕
思路一下清晰了:
第一步,让 AI 出绿幕原图。 把工作流的输出直接接到保存节点(去掉 RemoveBackground),提示词里加 solid green background, chroma key,负面词加 green spill, grass, plants。实测背景色干净得吓人:RGB ≈ (0, 217, 108) 的纯绿。
第二步,自己抠绿。 绿幕和鲸鱼娘的蓝白金配色零冲突,判定逻辑可以非常简单:
- 绿度 = 绿色通道 − max(红, 蓝),超过阈值就是背景
- 边缘做 0.8px 羽化,避免锯齿
- 反预乘去绿边:边缘像素 = 前景色 × alpha + 绿底 × (1 − alpha),按这个公式反解出真正的前景色,绿边就没了
效果
| 指标 | 自动抠图(BiRefNet) | 绿幕方案 |
|---|---|---|
| 完全实心占比 | 6% | 30%+ |
| 半透明占比 | 60% | 3% 左右 |
| 呆毛/发丝残留 | 有白块 | 干净 |
现在整站(主站 + 两个子站)19 张鲸鱼娘图片,全部走这套绿幕流水线重新产出:批量脚本直接调 ComfyUI 的 HTTP 接口出图,再自动抠绿、自动转 webp 就位,一条命令跑完。
一点心得
碰到「抠图质量不行」的问题,先回头看工作流的输出链路里有没有别人替你做的处理。如果有,绕过它、拿原始素材自己处理,通常比在残图上反复调参快得多。
(本文提到的脚本都躺在我的工作区里,感兴趣的可以在 GitHub 找我聊。)
