1
0
Fork 0

attempt gradient blending of tiles

This commit is contained in:
Sean Sube 2023-06-03 09:51:44 -05:00
parent 6317094c5f
commit a19bf06003
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
1 changed files with 44 additions and 6 deletions

View File

@ -35,6 +35,31 @@ def complete_tile(
return source
def get_tile_grads(
left: int,
top: int,
tile: int,
width: int,
height: int,
) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float]]:
grad_x = [1, 1, 1, 1]
grad_y = [1, 1, 1, 1]
if left > 0:
grad_x[0] = 0
if top > 0:
grad_y[0] = 0
if (left + tile) < width:
grad_x[3] = 0
if (top + tile) < height:
grad_y[3] = 0
return (grad_x, grad_y)
def process_tile_grid(
source: Image.Image,
tile: int,
@ -45,7 +70,7 @@ def process_tile_grid(
) -> Image.Image:
width, height = source.size
adj_tile = tile * overlap
adj_tile = int(float(tile) * overlap)
tiles_x = ceil(width / adj_tile)
tiles_y = ceil(height / adj_tile)
total = tiles_x * tiles_y
@ -68,15 +93,28 @@ def process_tile_grid(
tiles.append((left, top, tile_image))
scaled_size = (width * scale, height * scale, 3)
count = np.zeros_like(scaled_size)
value = np.zeros_like(scaled_size)
ref = tiles[0][2]
count = np.zeros(scaled_size)
value = np.zeros(scaled_size)
ref = np.array(tiles[0][2])
for left, top, tile_image in tiles:
equalized = match_histograms(tile_image, ref, channel_axis=-1)
# histogram equalization
equalized = np.array(tile_image)
equalized = match_histograms(equalized, ref, channel_axis=-1)
# gradient blending
grad_x, grad_y = get_tile_grads(left, top, tile, width, height)
mult_x = [np.interp(i, [0, adj_tile, tile - adj_tile, tile], grad_x) for i in range(tile)]
mult_y = [np.interp(i, [0, adj_tile, tile - adj_tile, tile], grad_y) for i in range(tile)]
mask = np.ones_like(equalized) * mult_x
mask = (mask.T * mult_y).T
equalized *= mask
# accumulation
value[
top * scale : (top + tile) * scale, left * scale : (left + tile) * scale, :
] += np.array(equalized)
] += equalized
count[
top * scale : (top + tile) * scale, left * scale : (left + tile) * scale, :
] += 1