[AIGC] 基于StableDiffusion的图像自动去水印

151 阅读1分钟

0x00 开源链接

github.com/huzpsb/DeWm…

0x01 原理讲解

首先,通过加载预训练的模型,对图片的任意颜色通道进行特征提取,生成一个水印检测的概率图。概率图中每个像素的值表示该像素属于水印的可能性。可以通过设置 threshold 来决定水印检测的敏感度。

网络的简要结构如下:

graph TD
    A[Input: 1 Channel] --> B[Conv2d: 1->16, 7x7, Padding=3]
    B --> C[LeakyReLU]
    C --> D[Conv2d: 16->32, 7x7, Padding=3]
    D --> E[LeakyReLU]
    E --> F[Conv2d: 32->128, 7x7, Padding=3]
    F --> G[LeakyReLU]
    G --> H[Conv2d: 128->4, 11x11, Padding=5]
    H --> I[LeakyReLU]
    I --> J[Conv2d: 4->1, 3x3, Padding=1]
    J --> K[Output: 1 Channel]

这种结构适合处理输入特征较少,但需要逐步提取高层次特征并回归为单通道输出的任务,例如图像特征提取、语义分割或深度估计等任务。

然后进行形态学处理(Erosion 和 Dilation):使用数学形态学操作对生成的Mask进行优化。Erosion(腐蚀)减小Mask范围,去除可能的误标记区域。Dilation(膨胀)增大Mask范围,确保水印区域完全覆盖。
传统理论认为Erosion + Dilation可以共同构成图像开运算。然而当噪声较大时,当噪声较大时,Dilation 的模板略大于 Erosion 的模板,可以更有效地平滑噪声,同时保留目标结构的完整性。在噪声较多的情况下,Erosion 会导致目标边缘部分变薄或断裂,而随后的 Dilation 使用较大的模板能够填补这些缺失部分,恢复结构的连续性,避免目标形态因噪声而被过度削弱。

最后使用Stable Diffusion进行局部重绘。

0x02 效果展示

image.png