def worker(tile_key): if len(tiles_map[tile_key]) == 1: return image = np.zeros((width, height, bands), np.uint8) x, y, z = map(int, tile_key) for i in range(len(tiles_map[tile_key])): root = os.path.join(splits_path, str(i)) _, path = tile_from_xyz(root, x, y, z) if not args.label: split = tile_image_from_file(path) if args.label: split = tile_label_from_file(path) split = split.reshape((width, height, 1)) # H,W -> H,W,C assert image.shape == split.shape image[np.where(image == 0)] += split[np.where(image == 0)] if not args.label and is_nodata(image, args.nodata, args.nodata_threshold, args.keep_borders): progress.update() return tile = mercantile.Tile(x=x, y=y, z=z) if not args.label: tile_image_to_file(args.out, tile, image) if args.label: tile_label_to_file(args.out, tile, palette, image) progress.update() return tile
def worker(tile_key, nodata): if len(tiles_map[tile_key]) == 1: return image = np.zeros((args.ts, args.ts, bands), np.uint8) x, y, z = map(int, tile_key) for i in range(len(tiles_map[tile_key])): root = os.path.join(splits_path, str(i)) _, path = tile_from_xyz(root, x, y, z) if not args.label: split = tile_image_from_file(path) if args.label: split = tile_label_from_file(path) split = split.reshape( (args.ts, args.ts, 1)) # H,W -> H,W,C assert image.shape == split.shape image[:, :, :] += split[:, :, :] if not args.label and skip_nodata(image, nodata["border"], nodata["value"], nodata["threshold"]): progress.update() return tile = mercantile.Tile(x=x, y=y, z=z) if not args.label: ret = tile_image_to_file(args.out, tile, image) if args.label: ret = tile_label_to_file(args.out, tile, palette, image) if not ret: sys.exit("Error: Unable to write tile {}.".format( str(tile_key))) progress.update() return tile
def worker(tile_key): if len(tiles_map[tile_key]) == 1: return image = np.zeros((args.ts, args.ts, bands), np.uint8) x, y, z = map(int, tile_key) for i in range(len(tiles_map[tile_key])): root = os.path.join(splits_path, str(i)) _, path = tile_from_xyz(root, x, y, z) if not args.label: split = tile_image_from_file(path) if args.label: split = tile_label_from_file(path) split = split.reshape( (args.ts, args.ts, 1)) # H,W -> H,W,C assert image.shape == split.shape image[np.where(image == 0)] += split[np.where(image == 0)] if not args.label and is_nodata(image, threshold=args.nodata_threshold): progress.update() return tile = mercantile.Tile(x=x, y=y, z=z) if not args.label: ret = tile_image_to_file(args.out, tile, image) if args.label: ret = tile_label_to_file(args.out, tile, palette, image) assert ret, "Unable to write tile {} from raster {}.".format( str(tile_key)) progress.update() return tile
def __getitem__(self, i): tile = None mask = None image = None for channel in self.config["channels"]: image_channel = None bands = None if not channel["bands"] else channel["bands"] if tile is None: tile, path = self.tiles[channel["name"]][i] else: assert tile == self.tiles[ channel["name"]][i][0], "Dataset channel inconsistency" tile, path = self.tiles[channel["name"]][i] image_channel = tile_image_from_file(path, bands) assert image_channel is not None, "Dataset channel {} not retrieved: {}".format( channel["name"], path) image = np.concatenate( (image, image_channel), axis=2) if image is not None else image_channel if self.mode == "train": assert tile == self.tiles["labels"][i][ 0], "Dataset mask inconsistency" mask = tile_label_from_file(self.tiles["labels"][i][1]) assert mask is not None, "Dataset mask not retrieved" image, mask = to_normalized_tensor(self.config, self.shape_in[1:3], self.mode, image, mask) return image, mask, tile if self.mode == "predict": image = to_normalized_tensor(self.config, self.shape_in[1:3], self.mode, image) return image, torch.IntTensor([tile.x, tile.y, tile.z])