def processImage(self, index, data):
# get the image
raw_image = CommonFunctions.preprocessImage(data["image"],
self.scale_factor,
interpolation=cv2.INTER_CUBIC)
image_dimension = raw_image.shape
# create output image as numpy array with upscaled image size
processed_image = np.zeros(image_dimension, np.float32)
# align all tiles
for tile, transform_matrix in zip(self.tiles, data["transform_matrix"]):
tile_slice_raw_image = np.s_[tile["y"][0]:tile["y"][1],
tile["x"][0]:tile["x"][1]]
raw_image_tile = raw_image[tile_slice_raw_image]
tile_aligned = cv2.warpAffine(raw_image_tile,
transform_matrix,
(raw_image_tile.shape[1],raw_image_tile.shape[0]),
flags=cv2.INTER_CUBIC + cv2.WARP_INVERSE_MAP);
# Insert the inner area of tile_aligned (so without margins) into
# the appropriate area in the processed image
min_x = tile["x"][0] + tile["margin_x"][0]
min_y = tile["y"][0] + tile["margin_y"][0]
max_x = tile["x"][1] - tile["margin_x"][1]
max_y = tile["y"][1] - tile["margin_y"][1]
tile_slice_processed_image = np.s_[min_y:max_y,
min_x:max_x]
max_y_aligned = tile_aligned.shape[0] - tile["margin_y"][1]
max_x_aligned = tile_aligned.shape[1] - tile["margin_x"][1]
tile_aligned_slice = np.s_[tile["margin_y"][0]:max_y_aligned,
tile["margin_x"][0]:max_x_aligned]
tile_aligned_without_margin = tile_aligned[tile_aligned_slice]
processed_image[tile_slice_processed_image] = tile_aligned_without_margin
return processed_image
评论列表
文章目录