用局部重绘换掉人物手里的物品,结果新物体和原图交界处有一圈明显的色差和硬边。

真正麻烦的地方在于,几个原因的现象几乎一样。遮罩边缘没有羽化,直接硬切;重绘区域太小,模型缺少上下文;重绘强度过高,整块区域被完全重画;解码后没有做颜色匹配。

先把遮罩向外扩张并做羽化

python -c "import cv2;m=cv2.dilate(mask,None,iterations=8);m=cv2.GaussianBlur(m,(21,21),0)"

适当扩大重绘区域给足上下文

python -c "print(mask.mean())"

然后把重绘强度调到中等档位

image = pipe(prompt, image=img, mask_image=mask, strength=0.6).images[0]

剩下的就是对结果做一次颜色匹配

python -c "print('match histogram to original')"

改之前先确认了最近有没有人动过配置,避免白查一遍。

这次没动代码,只在配置和运行环境上找原因。

改完先别撤,确认这几项。新内容与周围自然过渡,看不出硬边,同一区域多次重绘也稳定。

容易忽略的是,羽化范围过大时模型会把周围也改掉,边界反而更乱,通常扩张几个像素配合中等强度效果最好。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189