🎨 DeepFill v2 智能去水印工具

使用 AI 模型智能去除图片水印和文字,支持精细涂抹选区

提示: 请先上传图片,然后使用笔刷工具涂抹水印区域,最后点击"开始AI修复"进行处理。

使用说明:

  1. 上传包含水印的图片
  2. 选择笔刷工具,调整笔刷大小
  3. 在图片上涂抹水印区域(红色区域表示选中的水印)
  4. 可以使用橡皮擦工具擦除误选的区域
  5. 点击"开始AI修复"使用 DeepFill v2 模型进行智能修复
  6. 查看修复结果并下载
📤
点击或拖拽上传图片
支持 JPG、PNG 格式,建议图片大小不超过 2048x2048px

🔬 算法原理与步骤详解

1. DeepFill v2 深度学习算法

核心思想:上下文感知的图像修复

DeepFill v2 是一种基于深度学习的图像修复算法,它能够理解图像的整体上下文,智能地填充缺失区域。

步骤 1:特征提取

使用卷积神经网络(CNN)从输入图像中提取多层次的视觉特征,包括:

  • 低级特征:边缘、线条、颜色
  • 中级特征:纹理、形状、模式
  • 高级特征:语义信息、物体识别
步骤 2:ExtractImagePatches(局部区域提取)

这是 DeepFill v2 的关键步骤:

  • 从图像的已知区域提取多个局部区域(patches)
  • 每个 patch 是一个固定大小的图像块(如 32×32 像素)
  • 这些 patches 包含了图像的纹理、颜色和结构信息
技术细节:
ExtractImagePatches 操作符从输入图像中提取不重叠的固定大小区域。 例如,从 512×512 的图像中提取 32×32 的 patches,可以得到多个候选区域。 这些 patches 用于后续的相似度计算和内容选择。
步骤 3:注意力机制

使用注意力机制找到最相关的 patches:

  • 计算每个 patch 与缺失区域的相似度
  • 相似度基于特征向量的距离(如余弦相似度)
  • 选择相似度最高的 patches 作为修复参考
步骤 4:内容生成

基于选中的 patches 生成修复内容:

  • 使用生成对抗网络(GAN)生成新的图像内容
  • 确保生成的内容与周围区域自然融合
  • 保持颜色、纹理和光照的一致性
完整工作流程:
输入图像 + 掩码特征提取网络ExtractImagePatches注意力计算内容生成网络输出修复图像
⚠️ 兼容性说明:
DeepFill v2 模型包含 ExtractImagePatches 操作符,但 ONNX Runtime Web(浏览器版本)不支持此操作符。 如果模型加载失败,系统会自动切换到 OpenCV 传统算法。

2. OpenCV 传统修复算法(Navier-Stokes)

当 AI 模型不可用时,系统会自动使用 OpenCV 的传统修复算法作为回退方案。

Navier-Stokes 算法原理

该算法基于流体动力学的 Navier-Stokes 方程,将图像修复问题转化为偏微分方程求解:

步骤 1:边界检测

识别缺失区域的边界,确定需要修复的像素点。

步骤 2:等照度线传播

从已知区域向缺失区域传播等照度线(相同亮度的曲线),保持图像的光照连续性。

步骤 3:颜色插值

使用拉普拉斯算子进行颜色插值,确保修复区域与周围区域平滑过渡。

步骤 4:迭代优化

通过多次迭代优化,逐步填充缺失区域,直到达到收敛条件。

数学公式(简化):
ΔI = 0 (拉普拉斯方程)
其中 I 是图像强度,Δ 是拉普拉斯算子。
这个方程确保修复区域的光照变化最小,从而产生平滑的修复结果。
算法流程:
输入图像 + 掩码边界检测等照度线传播颜色插值迭代优化输出修复图像

3. 算法对比

特性 DeepFill v2 (AI) OpenCV Navier-Stokes
算法类型 深度学习(GAN) 传统算法(偏微分方程)
修复效果 ⭐⭐⭐⭐⭐ 优秀(理解语义) ⭐⭐⭐ 良好(平滑过渡)
处理速度 较慢(需要 GPU 加速) 较快(CPU 即可)
适用场景 复杂纹理、大区域修复 小区域、简单纹理修复
浏览器兼容性 ⚠️ 可能不兼容(ExtractImagePatches) ✅ 完全兼容
资源需求 高(模型文件较大) 低(无需模型)

4. 完整工作流程

阶段 1:图像预处理
  1. 用户上传图片
  2. 系统加载图片到 Canvas
  3. 初始化 OpenCV Mat 对象(用于图像处理)
  4. 创建掩码画布(用于标记修复区域)
阶段 2:区域选择
  1. 用户使用笔刷工具涂抹水印区域
  2. 系统实时更新掩码(红色半透明显示)
  3. 同步更新 OpenCV 掩码矩阵
  4. 检查是否有足够的选区(启用修复按钮)
阶段 3:模型加载(智能选择)
  1. 尝试加载 DeepFill v2 AI 模型
  2. 如果失败(ExtractImagePatches 不兼容),尝试加载 LaMa 模型
  3. 如果都失败,启用 OpenCV 传统算法回退
  4. 显示当前使用的算法(按钮文本会更新)
阶段 4:图像修复

如果使用 AI 模型:

  1. 预处理图像:转换为模型输入格式(归一化、调整尺寸)
  2. 预处理掩码:转换为单通道二值掩码
  3. 模型推理:运行 ONNX 模型进行修复
  4. 后处理:将模型输出转换回图像格式

如果使用 OpenCV 传统算法:

  1. 调用 cv.inpaint() 函数
  2. 使用 Navier-Stokes 算法(cv.INPAINT_NS
  3. 迭代优化直到收敛
  4. 输出修复结果
阶段 5:结果展示
  1. 将修复结果绘制到输出画布
  2. 显示原始图片和修复后图片的对比
  3. 显示处理统计信息(尺寸、时间、选区像素)
  4. 提供下载功能

5. 技术实现细节

图像预处理(AI 模型)
输入格式转换:
Canvas ImageDataOpenCV Mat (BGR, 8UC3)Float32Array (RGB, 归一化到 [0,1])ONNX Tensor [1, 3, H, W]
掩码预处理
掩码格式:
Canvas ImageData (RGBA)OpenCV Mat (单通道, 8UC1)Float32Array (归一化到 [0,1])ONNX Tensor [1, 1, H, W]
后处理
输出格式转换:
ONNX Tensor [1, 3, H, W]Float32Array反归一化 (×255)Canvas ImageData (RGBA)显示在 Canvas
执行后端
ONNX Runtime 后端优先级:
1. WASM - WebAssembly 后端(操作符支持最好)
2. WebGL - GPU 加速(如果支持)
3. CPU - CPU 后端(最后备选)

6. 性能优化策略

  • 图像尺寸限制:自动调整到 800×600 以内,减少计算量
  • 模型量化:使用量化模型(如果可用)减少内存占用
  • 异步处理:所有操作都是异步的,不阻塞 UI
  • 智能回退:自动选择最快的可用算法
  • 缓存优化:Canvas 上下文使用 willReadFrequently 优化

🧪 测试用例

DeepFill v2 / LaMa 算法测试

单色图测试

基础修复能力 - 单色背景 + 矩形块

渐变图测试

复杂颜色场景 - 对角线渐变背景

纹理测试

复杂纹理场景 - 棋盘格纹理

边缘位置测试

边缘处理能力 - 6个边缘场景

不规则形状测试

非矩形掩码 - 圆形、椭圆、L形等

多区域测试

多区域修复 - 多个独立区域

OpenCV 传统算法测试(对比)

单色图测试(OpenCV)

Navier-Stokes 算法

渐变图测试(OpenCV)

Navier-Stokes 算法