-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Add median image filter as a transform #5264
Copy link
Copy link
Closed
Description
Is your feature request related to a problem? Please describe.
One problem is explained in #3178.
Describe the solution you'd like
Add a median filter based on @ebrahimebrahim's medianblur_with_gpu
Describe alternatives you've considered
#3178 mentions some alternatives, such as mean filtering. Those are suboptimal for many use cases.
Additional context
Model it after GaussianSmooth:
MONAI/monai/transforms/intensity/array.py
Lines 1139 to 1171 in ef68f16
| class GaussianSmooth(Transform): | |
| """ | |
| Apply Gaussian smooth to the input data based on specified `sigma` parameter. | |
| A default value `sigma=1.0` is provided for reference. | |
| Args: | |
| 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. | |
| approx: discrete Gaussian kernel type, available options are "erf", "sampled", and "scalespace". | |
| see also :py:meth:`monai.networks.layers.GaussianFilter`. | |
| """ | |
| backend = [TransformBackends.TORCH] | |
| def __init__(self, sigma: Union[Sequence[float], float] = 1.0, approx: str = "erf") -> None: | |
| self.sigma = sigma | |
| self.approx = approx | |
| def __call__(self, img: NdarrayTensor) -> NdarrayTensor: | |
| img = convert_to_tensor(img, track_meta=get_track_meta()) | |
| img_t, *_ = convert_data_type(img, torch.Tensor, dtype=torch.float) | |
| sigma: Union[Sequence[torch.Tensor], torch.Tensor] | |
| if isinstance(self.sigma, Sequence): | |
| sigma = [torch.as_tensor(s, device=img_t.device) for s in self.sigma] | |
| else: | |
| sigma = torch.as_tensor(self.sigma, device=img_t.device) | |
| gaussian_filter = GaussianFilter(img_t.ndim - 1, sigma, approx=self.approx) | |
| out_t: torch.Tensor = gaussian_filter(img_t.unsqueeze(0)).squeeze(0) | |
| out, *_ = convert_to_dst_type(out_t, dst=img, dtype=out_t.dtype) | |
| return out |
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels