def __call__( self, img: np.ndarray, label: Optional[np.ndarray] = None, sigma: Union[Sequence[float], float, Sequence[torch.Tensor], torch.Tensor] = 3.0, rescale_min: float = -1.0, rescale_max: float = 1.0, ): """ Args: img: the image that we want to add new channel to. label: label image to get extreme points from. Shape must be (1, spatial_dim1, [, spatial_dim2, ...]). Doesn't support one-hot labels. sigma: if a list of values, must match the count of spatial dimensions of input data, and apply every value in the list to 1 spatial dimension. if only 1 value provided, use it for all spatial dimensions. rescale_min: minimum value of output data. rescale_max: maximum value of output data. """ if label is None: raise ValueError("This transform requires a label array!") if label.shape[0] != 1: raise ValueError("Only supports single channel labels!") # Generate extreme points self.randomize(label[0, :]) points_image = extreme_points_to_image(points=self._points, label=label, sigma=sigma, rescale_min=rescale_min, rescale_max=rescale_max) return np.concatenate([img, points_image], axis=0)
def __call__(self, data): d = dict(data) label = d[self.label_key] if label.shape[0] != 1: raise ValueError("Only supports single channel labels!") # Generate extreme points self.randomize(label[0, :]) for key in self.key_iterator(d): img = d[key] points_image = extreme_points_to_image( points=self.points, label=label, sigma=self.sigma, rescale_min=self.rescale_min, rescale_max=self.rescale_max, ) d[key] = np.concatenate([img, points_image], axis=0) return d