Improve Extend Image node with some mirroring to avoid border artifacts
This commit is contained in:
@@ -676,6 +676,34 @@ class InpaintExtendOutpaint:
|
||||
new_image = torch.zeros((one_image.shape[0], new_height, new_width, one_image.shape[3]), dtype=one_image.dtype)
|
||||
new_image[:, up_padding:up_padding + orig_height, left_padding:left_padding + orig_width, :] = one_image.squeeze(0)
|
||||
|
||||
start_y = up_padding
|
||||
start_x = left_padding
|
||||
initial_height = orig_height
|
||||
initial_width = orig_width
|
||||
|
||||
# Mirror image so there's no bleeding of black border when using inpaintmodelconditioning
|
||||
available_top = min(start_y, initial_height)
|
||||
available_bottom = min(new_height - (start_y + initial_height), initial_height)
|
||||
available_left = min(start_x, initial_width)
|
||||
available_right = min(new_width - (start_x + initial_width), initial_width)
|
||||
# Top
|
||||
new_image[:, start_y - available_top:start_y, start_x:start_x + initial_width, :] = torch.flip(image[:, :available_top, :, :], [1])
|
||||
# Bottom
|
||||
new_image[:, start_y + initial_height:start_y + initial_height + available_bottom, start_x:start_x + initial_width, :] = torch.flip(image[:, -available_bottom:, :, :], [1])
|
||||
# Left
|
||||
new_image[:, start_y:start_y + initial_height, start_x - available_left:start_x, :] = torch.flip(new_image[:, start_y:start_y + initial_height, start_x:start_x + available_left, :], [2])
|
||||
# Right
|
||||
new_image[:, start_y:start_y + initial_height, start_x + initial_width:start_x + initial_width + available_right, :] = torch.flip(new_image[:, start_y:start_y + initial_height, start_x + initial_width - available_right:start_x + initial_width, :], [2])
|
||||
# Top-left corner
|
||||
new_image[:, start_y - available_top:start_y, start_x - available_left:start_x, :] = torch.flip(new_image[:, start_y:start_y + available_top, start_x:start_x + available_left, :], [1, 2])
|
||||
# Top-right corner
|
||||
new_image[:, start_y - available_top:start_y, start_x + initial_width:start_x + initial_width + available_right, :] = torch.flip(new_image[:, start_y:start_y + available_top, start_x + initial_width - available_right:start_x + initial_width, :], [1, 2])
|
||||
# Bottom-left corner
|
||||
new_image[:, start_y + initial_height:start_y + initial_height + available_bottom, start_x - available_left:start_x, :] = torch.flip(new_image[:, start_y + initial_height - available_bottom:start_y + initial_height, start_x:start_x + available_left, :], [1, 2])
|
||||
# Bottom-right corner
|
||||
new_image[:, start_y + initial_height:start_y + initial_height + available_bottom, start_x + initial_width:start_x + initial_width + available_right, :] = torch.flip(new_image[:, start_y + initial_height - available_bottom:start_y + initial_height, start_x + initial_width - available_right:start_x + initial_width, :], [1, 2])
|
||||
|
||||
|
||||
# Expand mask
|
||||
new_mask = torch.ones((one_mask.shape[0], new_height, new_width), dtype=one_mask.dtype)
|
||||
new_mask[:, up_padding:up_padding + orig_height, left_padding:left_padding + orig_width] = one_mask.squeeze(0)
|
||||
|
||||
Reference in New Issue
Block a user