Skip to content

Commit

Permalink
Merge pull request #14709 from AUTOMATIC1111/improve-get_crop_region
Browse files Browse the repository at this point in the history
improve get_crop_region
  • Loading branch information
AUTOMATIC1111 authored Jan 21, 2024
2 parents 3a5196d + e36827a commit 8a6a4ad
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 35 deletions.
43 changes: 9 additions & 34 deletions modules/masking.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,40 +3,15 @@

def get_crop_region(mask, pad=0):
"""finds a rectangular region that contains all masked ares in an image. Returns (x1, y1, x2, y2) coordinates of the rectangle.
For example, if a user has painted the top-right part of a 512x512 image", the result may be (256, 0, 512, 256)"""

h, w = mask.shape

crop_left = 0
for i in range(w):
if not (mask[:, i] == 0).all():
break
crop_left += 1

crop_right = 0
for i in reversed(range(w)):
if not (mask[:, i] == 0).all():
break
crop_right += 1

crop_top = 0
for i in range(h):
if not (mask[i] == 0).all():
break
crop_top += 1

crop_bottom = 0
for i in reversed(range(h)):
if not (mask[i] == 0).all():
break
crop_bottom += 1

return (
int(max(crop_left-pad, 0)),
int(max(crop_top-pad, 0)),
int(min(w - crop_right + pad, w)),
int(min(h - crop_bottom + pad, h))
)
For example, if a user has painted the top-right part of a 512x512 image, the result may be (256, 0, 512, 256)"""
mask_img = mask if isinstance(mask, Image.Image) else Image.fromarray(mask)
box = mask_img.getbbox()
if box:
x1, y1, x2, y2 = box
else: # when no box is found
x1, y1 = mask_img.size
x2 = y2 = 0
return max(x1 - pad, 0), max(y1 - pad, 0), min(x2 + pad, mask_img.size[0]), min(y2 + pad, mask_img.size[1])


def expand_crop_region(crop_region, processing_width, processing_height, image_width, image_height):
Expand Down
2 changes: 1 addition & 1 deletion modules/processing.py
Original file line number Diff line number Diff line change
Expand Up @@ -1562,7 +1562,7 @@ def init(self, all_prompts, all_seeds, all_subseeds):
if self.inpaint_full_res:
self.mask_for_overlay = image_mask
mask = image_mask.convert('L')
crop_region = masking.get_crop_region(np.array(mask), self.inpaint_full_res_padding)
crop_region = masking.get_crop_region(mask, self.inpaint_full_res_padding)
crop_region = masking.expand_crop_region(crop_region, self.width, self.height, mask.width, mask.height)
x1, y1, x2, y2 = crop_region

Expand Down

0 comments on commit 8a6a4ad

Please sign in to comment.