stable-diffusion icon indicating copy to clipboard operation
stable-diffusion copied to clipboard

Repeated inpainting leads to saturated pixels

Open matigekunstintelligentie opened this issue 2 years ago • 0 comments

Repeated inpainting leads to saturated pixels. Quick and dirty example:

import subprocess
import os
import numpy as np
from PIL import Image, ImageDraw
import shutil

directory = lambda x: "./Diffusion/Diffusion_{}/".format(x)

for i in range(240):
	if i!=0:
		if os.path.exists(directory(i)):
			shutil.rmtree(directory(i))
for i in range(240):
	im = Image.new('RGB', (512, 512), (0, 0, 0))
	draw = ImageDraw.Draw(im)

	x = np.random.randint(512-128)
	y = np.random.randint(512-128)

	draw.rectangle([(x,y),(x+128,y+128)], fill=(255, 255, 255))
	im.save('{}Diffusion_mask.png'.format(directory(i)))

	os.mkdir(directory(i+1))
	subprocess.run('python scripts/inpaint.py --steps 20 --indir {} --outdir {}'.format(directory(i),directory(i+1)), shell=True)
	
	im = Image.open('{}Diffusion.png'.format(directory(i+1)))
	
	# pixels = 2
	# im = im.crop((pixels, pixels, 512-pixels, 512-pixels))
	# im = im.resize((512,512), resample=Image.BICUBIC, box=None, reducing_gap=None)
	# im.save('{}Diffusion.png'.format(directory(i+1)))
	im.save('./DiffusionOut/{0:06d}.png'.format(i))
	if i!=0:
		shutil.rmtree(directory(i))

Add folders/files: ./Diffusion/Diffusion_0/Diffusion.png ./DiffusionOut/

In scripts/inpainting changing

inpainted = inpainted.cpu().numpy().transpose(0,2,3,1)[0]*255

To

inpainted = np.round(inpainted.cpu().numpy().transpose(0,2,3,1)[0]*255)

Fixes the issue I think