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])
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
    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
Exemplo n.º 8
0
 def filter_windows(windows):
     if scene.aoi_polygons:
         windows = Box.filter_by_aoi(windows, scene.aoi_polygons)
     return windows