Beispiel #1
0
def _label_objects_wrapper(mask, splitting_scalar, remove_at_edge=False):
    if remove_at_edge:
        raise NotImplementedError

        def _remove_at_edge(object_labels):
            mask_edge = np.zeros_like(mask)
            mask_edge[:, :,
                      1] = True  # has to be k==1 because object identification codes treats actual edges as ghost cells
            mask_edge[:, :, -2] = True
            cloud_identification.remove_intersecting(object_labels, mask_edge)

    if mask.shape != splitting_scalar.shape:
        raise Exception("Incompatible shapes of splitting scalar ({}) and "
                        "mask ({})".format(splitting_scalar.shape, mask.shape))
    assert mask.dims == splitting_scalar.dims
    for d in mask.dims:
        assert np.all(mask[d].values == splitting_scalar[d].values)

    object_labels = cloud_identification.number_objects(
        splitting_scalar.values, mask=mask.values)

    # if remove_at_edge:
    # _remove_at_edge(object_labels)

    return object_labels
Beispiel #2
0
def label_objects(mask, splitting_scalar=None, remove_at_edge=True):
    def _remove_at_edge(object_labels):
        mask_edge = np.zeros_like(mask)
        mask_edge[:, :,
                  1] = True  # has to be k==1 because object identification codes treats actual edges as ghost cells
        mask_edge[:, :, -2] = True
        cloud_identification.remove_intersecting(object_labels, mask_edge)

    if splitting_scalar is None:
        splitting_scalar = np.ones_like(mask)
    else:
        assert mask.shape == splitting_scalar.shape
        assert mask.dims == splitting_scalar.dims
        # NB: should check coord values too

    object_labels = cloud_identification.number_objects(splitting_scalar,
                                                        mask=mask)

    if remove_at_edge:
        _remove_at_edge(object_labels)

    return object_labels