基于Gradio实现的AI扩图(Outpainting)

本文介绍了Outpainting,一种图像处理技术,通过扩展图像范围并保持一致性。借助Gradio和StableDiffusion的InpaintingPipeline,文章展示了如何快速创建Mask图片,调整尺寸,预览效果,并在实际案例中展示了将一位老人与狗的场景进行Outpainting的过程。
摘要由CSDN通过智能技术生成

1 什么是Outpainting

Outpainting(图像外部填充)是一种图像处理技术,与Inpainting(图像内部填充)相反,可以根据现有图像的内容、风格和上下文,合成与原始图像相协调的新内容,从而扩展图像的视觉范围。通俗地说,Outpainting也属于图像编辑,只是把Mask区域改成往外扩展而已。通过以下例子直观感受两者的相似与区别:

内部填充(Inpainting)

原始图片

MASK

结果
提示词:Face of a yellow cat, high resolution, sitting on a park bench

外部填充(Outpainting)

原始图片
MASK
结果
提示词:A girl sitting in a library full of books

上述例子验证了对于Outpainting而言,只是把mask区域改成往外扩展而已,说明背后原理是一样的,那就可以用StableDiffusion的InpaintingPipeline来做图像的Outpainting。

2 基于Gradio快速实现Outpainting

无论是Inpainting还是Outpainting,除了初始图片外,还需要一张Mask图片。 之前的文章写过可以用Gradio的ImageEditor来实现图像的编辑功能(涂鸦),进而获取Inpainting的Mask图片。 对于Outpainting而言,需要做的是一张底片即可,不需要在这张底片上进行涂鸦。但是对这张底片有要求,尺寸不超过所需Outpainting的尺寸。如果已有底片尺寸比所需Outpainting的尺寸小,可以直接用这种底片做Mask,否则需要用ImageEditor的裁剪功能,但是ImageEditor的裁剪只能在原图基础上裁剪出正方形,如果需要裁剪成长宽可以用resize把图片尺寸修改为指定的长宽,这样不受原始图片长宽比例的限制。对于更加复杂的边缘,建议使用其他工具进行裁剪。

一般情况下,需要用Js写一个组件来实现Mask图片的尺寸、位置变换,以及预览。但这里提供一个更简便的方法,不用去写Js,直接用Gradio提供的组件稍微优化一下即可实现所需功能。

def make_outpaint_img(cropped_image, target_width, target_height, x, y):
    
    black_img = Image.new('RGB', (target_width, target_height), (0, 0, 0))
    cropped_width, cropped_height = cropped_image.size
    black_img.paste(cropped_image, (x, y, x + cropped_width, y + cropped_height))
    return black_img

使用过程

在这里插入图片描述
使用resize修改图片尺寸为96*96。实现方法可以看Stable Diffusion中的图像修改尺寸和编辑工具实现
在这里插入图片描述
复制图片
在这里插入图片描述
ImageEditor支持从剪贴板粘贴图片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过调整水平和垂直方向,实现Outpainting后的图像效果预览。

在这里插入图片描述
使用InpaintingPipeline进行图像填补,提示词:An old man hold the dog in his hands

在这里插入图片描述
Outpainting最终效果

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值