Stable Diffusion进阶篇:Inpainting完整指南
带你了解Inpainting能力
Inpainting(图像补清)是Stable Diffusion中一项重要功能,应用于图像的局部修正、添加细节或清除不需要的元素。
Inpainting的主要应用场景
- 图像编辑:重构损坏的区域或补充一部分缺失的内容。
- 局部清除:移除照片中不想要的元素。
- 绘画进阶:在原有图像基础上进行编辑,增加该图像的细节或分局修改。
如何使用Stable Diffusion的Inpainting功能
1. 环境准备
确保已安装并配置Stable Diffusion环境。以使甯文本、GUI或安装软件举例:
环境安装
# 先安装必要的包
pip install torch torchvision diffusers transformers matplotlib
# 从Hugging Face下载Stable Diffusion核心相关文件
huggingface-cli login
调用Inpainting模型
Stable Diffusion在Hugging Face中提供了为Inpainting特化的模型,如stabilityai/stable-diffusion-2-inpainting
。
from diffusers import StableDiffusionInpaintPipeline
import torch
# 初始化Inpainting模型
pipe = StableDiffusionInpaintPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-inpainting",
torch_dtype=torch.float16
).to("cuda")
2. 创建使用模型的实战指南
应用场景:删除图像中的不要元素
以删除一张图像中不要的一部分举例:
完整代码
from PIL import Image
import numpy as np
# 加载图像
init_image = Image.open("input_image.jpg").convert("RGB")
# 创建一个应用于删除的mask
mask = np.zeros((init_image.height, init_image.width), dtype=np.uint8)
mask[50:150, 100:200] = 255 # 设置要清除区域
mask_image = Image.fromarray(mask)
# 调用模型
result = pipe(
prompt="Fill the removed area with suitable background",
image=init_image,
mask_image=mask_image
).images[0]
# 保存结果
result.save("output_image.jpg")
解析代码
- 初始图像:输入需要修改的图像。
- Mask:使用于指定要补充或清除的区域,用白色表示。
- Prompt:输入甚么内容来描述清除后进行补充的背景。
- Result:生成结果图像,展示清除区域之后补充成功。
3. 双图比较:清除前后的相对展示
在完成图像修改后,可以通过图片展示进行相比:
import matplotlib.pyplot as plt
# 展示原图和结果
fig, axs = plt.subplots(1, 2, figsize=(10, 5))
axs[0].imshow(init_image)
axs[0].set_title("Original Image")
axs[0].axis("off")
axs[1].imshow(result)
axs[1].set_title("Inpainted Image")
axs[1].axis("off")
plt.tight_layout()
plt.show()