赞
踩
Outpainting(图像外部填充)是一种图像处理技术,与Inpainting(图像内部填充)相反,可以根据现有图像的内容、风格和上下文,合成与原始图像相协调的新内容,从而扩展图像的视觉范围。通俗地说,Outpainting也属于图像编辑,只是把Mask区域改成往外扩展而已。通过以下例子直观感受两者的相似与区别:
提示词:Face of a yellow cat, high resolution, sitting on a park bench
提示词:A girl sitting in a library full of books
上述例子验证了对于Outpainting而言,只是把mask区域改成往外扩展而已,说明背后原理是一样的,那就可以用StableDiffusion的InpaintingPipeline来做图像的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最终效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。