AI 局部色彩调整:只改衣服颜色不动其他部分——区域感知的色彩编辑

你有没有试过在修图软件里给一件衣服换颜色?

AI technology illustration

选中衣服区域,打开色相/饱和度面板,拖动滑块。十秒后你发现:衣服边缘多了一圈灰白色的光晕,褶皱里的阴影变成奇怪的灰紫色,袖口蹭到皮肤的地方泛着一层青色。你可能觉得是自己选区画得不够精细,但真正的原因比这深得多——颜色从来不是独立存在的东西。它跟光照、材质、周围环境搅在一起。你要"只改颜色",等于要从一团纠缠的信号里单独抽出一根线,这件事的难度远超"把红色变成蓝色"这句话给人的直觉。

为什么"换个色相"会翻车

先看看颜色在计算机里是怎么存的。最常见的 RGB——红、绿、蓝——三个数字决定一个像素。红色衬衫在阳光直射下是 (220, 60, 60),在阴影里变成 (90, 25, 25),在荧光灯下可能偏紫。三个值的比例变了,但人眼依然认为它是"红衬衫"。

人眼的颜色识别依赖两个独立信息:亮度告诉你看上去多亮,色度告诉你看上去是什么颜色。阴影里的红衬衫亮度低、色度不变,所以你依然认得出来。而 RGB 恰恰把两者搅在一起。

直接"把红像素改成蓝像素"的朴素做法,会连亮度一起改掉。结果就是:褶皱的阴影被抹平、高光被压暗,衣服看上去像一块塑料布。专业办法是切换到 LAB 颜色空间——L 通道单独存亮度,a、b 通道存绿-红和蓝-黄的色度。换色时只动 a、b,保留 L,阴影的明暗起伏就还在。

这个道理传统修图软件早有。真正的瓶颈在别处:你怎么知道哪些像素属于衣服?

AI 找到衣服,靠的不是颜色,是"理解"

早期做法是"按颜色选":衣服是红的,就把接近红色的像素圈起来。听起来合理,但现实中衣服颜色经常和皮肤、背景接近,边缘又有模糊产生的过渡色,魔术棒在这种场景基本失灵。

深度学习的思路完全不同。语义分割网络把每个像素分类——这是衣服、那是皮肤、那是背景。它靠的不是像素本身,而是从大量标注数据里学到的结构知识:衣服有领口、有袖子、覆盖在躯干上。像素级算法看不到的全局结构,网络能看到。

2023 年 Meta 开源的 Segment Anything Model 把这件事彻底工具化:在 1100 万张图、10 亿个掩膜上训练之后,你只需点一下衣服,它就给出物体的完整轮廓——包括你画不准的袖口和衣摆。区域感知的色彩编辑终于有了可靠的"区域"来源。但分割只是第一步,拿到掩膜之后怎么换色又不破坏纹理和光影,才是真正见功夫的地方。

高级换色不是"覆盖",而是"平移分布"

最直观的方法:把掩膜内每个像素的颜色往目标色方向移动。但直接移动会毁掉质感——一件有印花或织纹的 T 恤,深浅不一的图案会被抹成单色块。

我最早也以为,换色就是把目标色"盖"上去,像刷油漆。后来才想通,高质量的换色是做统计分布平移:把掩膜内所有像素的颜色看成一个分布,记录均值和方差。换色时把均值移到目标色附近,方差——也就是颜色波动——保持原样。除了底色变了,深浅变化、纹理起伏、渐变关系全都保留。这样换出的颜色才"长"在衣服上,而不是浮在表面。

换色的本质,不是把 A 颜色变成 B 颜色,而是把"A 颜色的分布"整体搬到以 B 为中心的位置。搬的时候,分布的形状不能变。

接下来是最容易被忽略、却直接决定专业度的环节:边界处理。掩膜边缘只要差一个像素,就会在物体周围留下一圈白边,术语叫 halo 效应。解决办法是羽化甚至 alpha matting,让边缘像素的换色强度在几个像素宽度内平滑过渡到 0。专业修图师和"一键换装 App"的区别,一半在这里。

扩散模型:从"改颜色"到"重新生成"

分割加色彩映射的管线上限很明确:只能改颜色,改不了语义。你没法对着照片说"把卫衣换成皮衣质感",那是语义级修改。

扩散模型换了一条路。Stable Diffusion 从噪声逐步还原一张图,你的文字描述指导还原过程。输入 "make the shirt blue",模型通过交叉注意力机制把 "shirt" 这个 token 与画面中对应区域的像素锁在一起,在生成时改写那片区域。

但这里有个根本矛盾:扩散模型生成的是整张图,它没有"只改这里"的操作,只有"重新生成一张最接近的描述"的操作。于是你让它改衣服,它顺手把背景变干净了、人脸微妙地变年轻了、天空更蓝了。生成式模型太想"理解"你的意图,而你的意图恰恰是:不理解,只改颜色。

研究者给出过不少精巧的解法。Blended Diffusion 让掩膜内用噪声初始化、掩膜外保持原图,生成时让两个区域自然融合;Prompt-to-Prompt 直接操控交叉注意力图——把 "shirt" 区域的注意力替换成新描述,其他区域保持原样,从生成过程内部实现"只改该改的地方"。这条路仍在快速迭代。

两条路线的真实差距,一张表说清

维度 分割+色彩映射 扩散模型局部编辑
区域来源 语义分割/手动掩膜 文本提示/点击选目标
边界质量 可精细控制,依赖 matting 自然,但爱"顺手改边界"
光影保持 好(只动 ab 通道) 大体保持,复杂光照会漂移
纹理与图案 完整保留 可能被重画或扭曲
语义编辑能力 强(换材质、换风格)
可控性 高,结果可复现 低,每次生成有随机性

现实里的三堵墙

现在的主流产品——Photoshop 的生成式填充、Adobe Firefly——基本都是两条路线的工程化集成:先分割出目标,再用扩散模型在掩膜内参考环境光照重新生成颜色。体验比两年前强太多,但真实使用中仍有三堵墙。

第一堵墙:毛发与透明材质。毛衣的绒毛、纱裙的半透明边,换色后经常出现灰边或色斑。这些位置不存在干净的物体边界,只有渐变的 alpha 通道,而颜色替换天然跟 alpha 通道打架。

第二堵墙:纹理与 logo。条纹衫的条纹、胸前的字母印花,在扩散模型的重生成里经常被改得歪歪扭扭。模型知道"这是衣服",但不知道"这个 logo 的形状很重要,请原样保留"。

第三堵墙:颜色与材质在潜空间里是绑定的。想只改材质不动颜色很难,反过来只改颜色不动材质同样难——扩散模型的潜空间里两者耦合,动一个常牵连另一个。

我的判断:两条路线会走向融合

区域感知色彩编辑正处在一个岔路口。传统方法在精确控制上不可替代——专业修图师用它处理商业大片,因为它可计算、可复现、不产生意外。扩散模型在自然度上胜出,代价是可控性:你无法精确预测生成器会怎么处理条纹衫上的 logo。

我倾向认为未来是两者的融合:用分割和 matting 圈定严格边界,用扩散模型在边界内生成符合语义的纹理与反光,再用精细的 alpha 通道缝合回去。技术栈本身已经成熟,难的是"只改颜色"这个约束——它要求模型既有视觉理解能力,又要克制自己的理解欲。这比"改得更好"难得多,但也正是专业工具和玩具的分界线。

用 AI 工具换色,接缝处总有一圈亮边,是我的操作问题吗?

不是。那是 halo 效应,本质是掩膜边界把背景像素也算进了换色区域。传统方法靠羽化,扩散方法靠掩膜融合过渡带。如果工具的 matting 模型不够好,再聪明的颜色转换也救不回来。

保持 L 通道不动,就不会破坏阴影吗?

大方向对,但不完全。人眼对色度的感知受周围亮度影响,同一块蓝色放在亮背景和暗背景上看起来不一样。严格的局部换色还会做感知补偿,比如 Helmholtz-Kohlrausch 效应——这也是为什么"按像素换色"和"按视觉换色"是两回事。

进阶阅读

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/589.html

(0)
上一篇 1天前
下一篇 1天前

相关推荐