Stable Diffusion 项目:修复旧照片

摄影已经有一百多年的历史了。如今存在着许多老照片,您的家人可能也珍藏着一些。受当时相机和胶片技术的限制,您手中的照片可能分辨率低、模糊,或者有折痕和划痕。将这些老照片修复如新,就像用今天的相机拍摄的一样,是一项挑战性的任务,但即使是您,也可以通过 Photoshop 等照片编辑软件来完成。

在这篇文章中,您将看到如何使用 Stable Diffusion 来修复老照片,并为它们注入新的生命。读完这篇文章,您将学会:

  • 如何清理扫描照片中的缺陷
  • 如何为黑白照片上色

立即开始您的项目,阅读我的书籍《用 Stable Diffusion 精通数字艺术》。书中提供了自学教程可运行的代码

让我们开始吧。

Stable Diffusion 项目:修复旧照片
照片来源:Antonio Scant。部分权利保留。

概述

本教程分为三个部分;它们是

  • 项目构想
  • 超分辨率
  • 重建

项目构想

让我们来看一张纽约公共图书馆的老照片

“年轻的牡蛎去壳工”照片。来自纽约公共图书馆数字馆藏。

如果您下载它,您会注意到这张照片的分辨率很低。它带有轻微的胶片颗粒噪点(不明显)。照片是黑白的。这个项目的目标是将其修复成一张高分辨率的彩色照片,再现照片中的人物。

超分辨率

原始照片分辨率较低。放大分辨率称为超分辨率,为此已经开发了多种机器学习模型。

处理老照片的第一步是进行超分辨率。通常,老照片分辨率较低,但这并非唯一原因。即使分辨率很高(例如,您以高分辨率扫描老照片),您仍然可能想将其降采样并运行超分辨率,因为它还具有去除噪点和胶片颗粒的副作用。

在 Stable Diffusion Web UI 中,您可以将照片上传到“Extra”(额外)选项卡。此选项卡允许您执行许多操作,但没有一项与扩散过程相关。相反,它是将图像应用于各种现有的机器学习模型。在这里,您可以启用“Upscale”(放大),并设置“Scale by”(缩放比例)为一个合理的系数。对于这张特定的照片,您可以将系数设置为 2。然后您应该选择一个放大器,例如“R-ESRGAN 4x+”。

在 Extra 选项卡中您可以做的下一件事是 CodeFormer。它是一个用于修复人脸的模型。启用它并设置权重。较低的权重使 CodeFormer 更自由地改变人脸,而较高的权重则倾向于保留原始面部表情。最佳权重应取决于原始照片的质量。如果人脸上有更多划痕或污迹,您需要较低的权重以方便重建。

超分辨率是处理老照片的第一步。

您应该下载放大后的输出以供下一步使用。

重建

要重建老照片,您将使用 txt2img。您不应使用 img2img,因为将老照片作为起点会对其输出产生过大的影响,而您将看不到预期的校正。

但首先,您应该使用 img2img 选项卡,上传放大后的输出,然后点击“CLIP interrogator”的回形针图标。这将根据上传的图像自动填充正面提示。您将在 txt2img 选项卡中根据 CLIP interrogator 的结果构建您的提示。

您可以使用 img2img 选项卡中的 CLIP interrogator

现在转到 txt2img 选项卡。让我们使用 SD1.5 模型进行照片级写实生成,例如 Realistic Vision v6。设置正面提示,例如:

一群孩子们站在一起,手里拿着水桶,戴着帽子,穿着连衣裙,背景是建筑,August Sander,彩色照片,wpa,美国巴比松画派,最佳质量,8k 原生照片,细节丰富的人脸

最后几个关键词用于控制输出的风格。您可以使用一个样板负面提示,例如:

绘画,油画,蜡笔画,素描,石墨画,印象派,噪点,模糊,柔和,变形,丑陋,低分辨率,糟糕的解剖结构,糟糕的手,裁剪,最差质量,低质量,普通质量,jpeg 伪影,签名,水印,单色,灰度,老照片

老照片重建的关键是使用 ControlNet。为了获得最佳效果,您需要两个 ControlNet 单元。

首先将放大后的图像上传到第一个 ControlNet 单元,并将类型设置为 Canny。请记住启用此单元并勾选“Pixel Perfect”。这有助于 ControlNet 预处理器使用最佳分辨率。将第一个单元的控制权重设置为 0.8。

然后启用第二个 ControlNet 单元。上传相同的图像,打开 Pixel Perfect,然后选择“Recolor”(重新着色)作为控制类型。这是一个为黑白照片上色的 ControlNet 模型。您应该使用“recolor_luminance”模型作为预处理器。将第二个单元的控制权重设置为 0.2。您可以选择性地调整伽马校正,以微调输出的亮度。

请记住在 txt2img 中将输出尺寸设置为与原始图像相似的宽高比,并接近 Stable Diffusion 模型的原生分辨率。在此示例中,我们使用 760×600 像素。点击生成,您将看到以下图像:

使用 Stable Diffusion 上色的老照片

您可以下载结果。让我们看看您得到了什么:

修复后的老照片。

这张照片有点过曝,但您可以看到一张老照片被复活了。所有细节都得以保留:所有人物的面部表情、衣服上的污迹等。

但这如何实现呢?这实际上是让 Stable Diffusion 重新绘制照片。因此,您需要一个提示来指导绘制的扩散过程。但是,为了精确控制形状和人物,您使用了 Canny 类型 ControlNet 来勾勒轮廓,并要求扩散过程适应轮廓。但是,这个轮廓并不完美,因为 Canny 边缘检测算法无法将图片转换为线描画。为了降低失真,您使用第二个 ControlNet 单元根据亮度重新为输入照片着色。所有原始颜色都被忽略(实际上也没有颜色),颜色是根据机器学习模型填充的。然而,您不希望照片中出现这些缺陷。因此,您为 Canny 设置了较高的权重,而为 Recolor 设置了较低的权重。

如果您再次单击生成按钮,您可能会看到人物穿着不同颜色衣服的照片。这是因为模型对其应穿着的颜色没有把握。您可能希望在提示中描述颜色以进行控制。您也可以尝试关闭其中一个 ControlNet 单元并观察结果。最佳结果只能在两者协同工作时获得。

关于人脸照片的注意事项:如果您的原始照片状况不佳,人物的面部特征不太清晰,您需要打开 ADetailer 来重建面部。但仅在必要时这样做!否则,您可能会发现照片描绘的是完全不同的人。

在上面,输出分辨率设置为 760×600 像素。但您可能需要比 Stable Diffusion 模型支持的更高分辨率。您可以使用 txt2img 中的“Hires. fix”(高分辨率修复)功能,在图像生成后运行一个放大器。选项与 Extra 选项卡中的非常相似。但请记住,在放大器中将去噪强度设置为较低值(例如 0.2),因为您不希望引入额外的失真。

进一步阅读

如果您想深入了解此主题,本节提供了更多资源。

总结

在这篇文章中,您清理了一张老照片。您去除了缺陷,并为黑白照片上了色,使其焕发新生。在此过程中,您使用了文本提示来驱动扩散过程以粗略级别生成图像。然后,您使用 ControlNet 对输出进行微调。您在粗略级别控制了氛围,并在精细级别保留了细节。Stable Diffusion 负责填补空白并重建照片。

立即开始用 Stable Diffusion 精通数字艺术!

Mastering Digital Art with Stable Diffusion

学习如何让 Stable Diffusion 为您服务

……通过学习图像生成过程中的一些关键要素

在我的新电子书中探索如何实现
使用 Stable Diffusion 精通数字艺术

本书提供自学教程,包含所有 Python可运行代码,引导您从新手成长为图像生成专家。它教您如何设置 Stable Diffusion、微调模型、自动化工作流程、调整关键参数等等……所有这些都将帮助您创作出令人惊叹的数字艺术。

通过实践练习,开启您的数字艺术之旅


查看内容

暂无评论。

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。