# AI Image Watermark Removal

> 去除 AI 生成图角落的"XXAI生成"半透明/白色角标水印。像素级验证不自我欺骗、双信号交叉定位抗幻觉、多候选客观指标投票覆盖。当用户要求去除图片水印、清理 AI 生成角标、去"豆包/即梦/Kolors 生成"水印时使用。

- Skill: `lingyu9495-source/ai-image-watermark-removal` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add lingyu9495-source/ai-image-watermark-removal`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lingyu9495-source/ai-image-watermark-removal/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: lingyu9495-source (https://skillmd.com/u/lingyu9495-source)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/lingyu9495-source/ai-image-watermark-removal

---


# AI图片去水印 · 像素级验证版

去AI生成图（豆包/即梦/Kolors等）角落的"XXAI生成"白色/半透明角标水印。核心卖点：**像素级验证不自我欺骗、双信号交叉定位抗幻觉、多候选客观指标投票覆盖**——别人只会"调AI修图然后肉眼说好了"，这套是算出来的。

## 适用场景
- AI生成图角落的"XXAI生成"白字/半透明角标（豆包/即梦/Kolors等）
- 水印压在相对均匀背景上（平整色块/天空/海水/渐变）
- 水印在画面角落而非主体上

## 完整链路（接力链降错误相关性）

去水印是一条四跳接力链：`定位 → 采样背景 → 覆盖 → 验证`。每跳独立只错一点，多跳后正确率急剧衰减；同源方法会一起栽同一个坑。彻底版 = 关键节点单独加校验 + 跨原理信号交叉 + 多候选投票。

### ① 定位（两信号交叉，必须不同原理）
- **信号A 网格放大法**：候选区放大画 10x10 红色网格（标 x0-x9/y0-y9），让视觉模型只报"水印在 x几-x几,y几-y几"——**只信格子范围**，不信它的百分比/像素描述，换算回原图坐标后再像素精扫。
- **信号B 像素密度聚类**：不做任何依赖视觉模型的像素分析。白色/半透明色（r>180,g>180,b>180，半透明降到140-150）按行求和找文字密集行段，连续列白像素>3找文字 x 范围。
- **A、B都要定位到才锁定水印区域；只有A或只有B → 重新审视，别急着覆盖**（跨原理交叉，避免同一视觉模型一起栽坑）。
- 水印可能在角落（如蓝色海水区）而非主体——先全图扫白色/半透明像素密集簇再定坐标。

### ② 覆盖（多候选投票，不拍脑袋）
生成多个候选人，用**客观指标投票**选最优：
- 候选1：水印正上方（或左侧）同宽背景条带，垂直拉伸到水印区域（LANCZOS）——复杂背景最自然
- 候选2：左侧/四周均值色填充 + mask 高斯羽化边缘（GaussianBlur 2px）——均匀背景
- 候选3：多向插值
- **投票指标**：区域纹理连续性（边缘梯度）+ 颜色统计方差 + 与周围像素欧氏距离。指标最优者胜出，不靠"我觉得哪个好"。
- 覆盖区域加 pad 6-8px，防文字边缘残留。

### ③ 验证（像素级裁决，隔离视觉误报）
- 像素级 ground truth 跑 `scripts/verify_watermark_removed.py`：比较原图 vs 处理图在目标区域白色像素数。原图 856 → 处理 2 = 清除✅
- **视觉模型不参与裁决，只报粗定位**。它"还有水印"的误报（复杂背景白毛发/水花/火焰亮区）被像素diff隔离在节点外，不拖延进度。
- 残留判断：目标区处理图白色 < 原图 5% 即视为清除。

### 整链（当分布式系统管）
- 每跳输入输出定死：bbox 字典 / 候选列表 / 指标，可单独测试复原。
- 端到端看：成功率（像素达标率）+ 成本（轮次）+ 可排查性，跟单跳基线比——收益扣掉税仍是正，才真上线。

## 关键坑（实战踩过）
1. **视觉模型会幻觉"还有水印"**：复杂背景（白色毛发/水花/火焰亮区）下反复误报"右下角有豆包AI生成"，即使像素级证明已清除。**像素 diff 才是裁决者**——数值达标后别被视觉模型带着重做。
2. 视觉模型说"右下角"可能指整个右下 1/4 区域，精确坐标必须靠像素分析（行/列白色密度聚类）。
3. 画面本身亮色（老虎白毛/瀑布白浪）会干扰白色检测——"原图白且处理图也白"遍布全图时，那不是水印是画面内容。
4. 背景复杂时上方背景拉伸覆盖比纯色更自然；纯色只用于均匀背景（如海水）。
5. 验证残留判断：目标区域处理图白色 < 原图 5% 即视为清除。

## 脚本
- `scripts/verify_watermark_removed.py` — 像素级验证水印是否清除（原图vs处理图白色像素对比）

## 依赖
- Python 3，`PIL` + `numpy`（`pip install pillow numpy`）

## 局限（诚实告知）
- 覆盖这环用"周围像素拉伸/均值"填，本质是**伪修复**。水印若压住真实内容（人脸/产品logo/复杂纹理），覆盖会失真——需接真·AI修复（inpainting/Lama）。
- 本 skill 擅长：AI生成图角标、相对均匀背景、像素级兜底验证。定位+验证最硬。

---

## 🙋 关于作者

**九品锦锂e** ｜ 把踩过的坑封装成"拿来就能跑"的 skill，不写教科书。

这个 skill 是我自己每天在用的版本。**用的时候卡住了、想要进阶玩法、或者有别的场景想让我封装成 skill**，直接加我微信说，加时备注「SkillHub」我优先通过：

![九品锦锂e 微信二维码](https://jinli-vault-1372591613.cos.ap-guangzhou.myqcloud.com/skillhub/hook-wechat-jiupinjinlie.png)

> 扫码添加作者微信 · 备注「SkillHub」优先通过

