用局部重绘换掉人物手里的物品,结果新物体和原图交界处有一圈明显的色差和硬边。
真正麻烦的地方在于,几个原因的现象几乎一样。遮罩边缘没有羽化,直接硬切;重绘区域太小,模型缺少上下文;重绘强度过高,整块区域被完全重画;解码后没有做颜色匹配。
先把遮罩向外扩张并做羽化
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')"
改之前先确认了最近有没有人动过配置,避免白查一遍。
这次没动代码,只在配置和运行环境上找原因。
改完先别撤,确认这几项。新内容与周围自然过渡,看不出硬边,同一区域多次重绘也稳定。
容易忽略的是,羽化范围过大时模型会把周围也改掉,边界反而更乱,通常扩张几个像素配合中等强度效果最好。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。