def test_filter_by_aoi(self): windows = [Box.make_square(0, 0, 2), Box.make_square(0, 2, 2)] aoi_polygons = [Box.make_square(0, 0, 3).to_shapely()] filt_windows = Box.filter_by_aoi(windows, aoi_polygons, within=False) self.assertListEqual(filt_windows, windows) filt_windows = Box.filter_by_aoi(windows, aoi_polygons, within=True) self.assertListEqual(filt_windows, windows[0:1])
def init_windows(self) -> None: """Pre-compute windows.""" windows = self.scene.raster_source.get_extent().get_windows( chip_sz=self.size, stride=self.stride, padding=self.padding) if len(self.scene.aoi_polygons) > 0: windows = Box.filter_by_aoi(windows, self.scene.aoi_polygons) self.windows = windows
def filter_windows(windows: Sequence[Box]) -> List[Box]: """Filter out chips that (1) are outside the AOI (2) only consist of null labels (3) have NODATA proportion >= chip_nodata_threshold """ total_windows = len(windows) if scene.aoi_polygons: windows = Box.filter_by_aoi(windows, scene.aoi_polygons) log.info(f'AOI filtering: {len(windows)}/{total_windows} ' 'chips accepted') filt_windows = [] for w in windows: chip = raster_source.get_chip(w) nodata_below_thresh = nodata_below_threshold( chip, chip_nodata_threshold, nodata_val=0) label_arr = label_source.get_labels(w).get_label_arr(w) null_labels = label_arr == class_config.get_null_class_id() if not np.all(null_labels) and nodata_below_thresh: filt_windows.append(w) log.info('Label and NODATA filtering: ' f'{len(filt_windows)}/{len(windows)} chips accepted') windows = filt_windows return windows
def get_train_windows(scene, chip_size): train_windows = [] extent = scene.raster_source.get_extent() stride = chip_size windows = extent.get_windows(chip_size, stride) if scene.aoi_polygons: windows = Box.filter_by_aoi(windows, scene.aoi_polygons) for window in windows: chip = scene.raster_source.get_chip(window) if np.sum(chip.ravel()) > 0: train_windows.append(window) return train_windows
def filter_windows(windows): if scene.aoi_polygons: windows = Box.filter_by_aoi(windows, scene.aoi_polygons) filt_windows = [] for w in windows: label_arr = label_source.get_labels(w).get_label_arr(w) null_inds = ( label_arr.ravel() == class_config.get_null_class_id()) if not np.all(null_inds): filt_windows.append(w) windows = filt_windows return windows
def filter_windows(windows): if scene.aoi_polygons: windows = Box.filter_by_aoi(windows, scene.aoi_polygons) if 0 in self.config.class_map.get_keys(): filt_windows = [] for w in windows: label_arr = label_source.get_labels(w).get_label_arr(w) ignore_inds = label_arr.ravel() == 0 if np.all(ignore_inds): pass else: filt_windows.append(w) windows = filt_windows return windows
def get_train_windows(scene: Scene, chip_size: int, chip_nodata_threshold: float = 1.) -> List[Box]: train_windows = [] extent = scene.raster_source.get_extent() stride = chip_size windows = extent.get_windows(chip_size, stride) total_windows = len(windows) if scene.aoi_polygons: windows = Box.filter_by_aoi(windows, scene.aoi_polygons) log.info(f'AOI filtering: {len(windows)}/{total_windows} ' 'chips accepted') for window in windows: chip = scene.raster_source.get_chip(window) if nodata_below_threshold(chip, chip_nodata_threshold, nodata_val=0): train_windows.append(window) log.info('NODATA filtering: ' f'{len(train_windows)}/{len(windows)} chips accepted') return train_windows
def filter_windows(windows): if scene.aoi_polygons: windows = Box.filter_by_aoi(windows, scene.aoi_polygons) return windows