Spaces:
Runtime error
Runtime error
| from typing import Tuple | |
| import torch | |
| import torch.nn as nn | |
| from .filter import filter2d, filter2d_separable | |
| from .kernels import get_gaussian_kernel1d, get_gaussian_kernel2d | |
| def gaussian_blur2d( | |
| input: torch.Tensor, | |
| kernel_size: Tuple[int, int], | |
| sigma: Tuple[float, float], | |
| border_type: str = 'reflect', | |
| separable: bool = True, | |
| ) -> torch.Tensor: | |
| r"""Create an operator that blurs a tensor using a Gaussian filter. | |
| .. image:: _static/img/gaussian_blur2d.png | |
| The operator smooths the given tensor with a gaussian kernel by convolving | |
| it to each channel. It supports batched operation. | |
| Arguments: | |
| input: the input tensor with shape :math:`(B,C,H,W)`. | |
| kernel_size: the size of the kernel. | |
| sigma: the standard deviation of the kernel. | |
| border_type: the padding mode to be applied before convolving. | |
| The expected modes are: ``'constant'``, ``'reflect'``, | |
| ``'replicate'`` or ``'circular'``. Default: ``'reflect'``. | |
| separable: run as composition of two 1d-convolutions. | |
| Returns: | |
| the blurred tensor with shape :math:`(B, C, H, W)`. | |
| .. note:: | |
| See a working example `here <https://kornia-tutorials.readthedocs.io/en/latest/ | |
| gaussian_blur.html>`__. | |
| Examples: | |
| >>> input = torch.rand(2, 4, 5, 5) | |
| >>> output = gaussian_blur2d(input, (3, 3), (1.5, 1.5)) | |
| >>> output.shape | |
| torch.Size([2, 4, 5, 5]) | |
| """ | |
| if separable: | |
| kernel_x: torch.Tensor = get_gaussian_kernel1d(kernel_size[1], sigma[1]) | |
| kernel_y: torch.Tensor = get_gaussian_kernel1d(kernel_size[0], sigma[0]) | |
| out = filter2d_separable(input, kernel_x[None], kernel_y[None], border_type) | |
| else: | |
| kernel: torch.Tensor = get_gaussian_kernel2d(kernel_size, sigma) | |
| out = filter2d(input, kernel[None], border_type) | |
| return out | |
| class GaussianBlur2d(nn.Module): | |
| r"""Create an operator that blurs a tensor using a Gaussian filter. | |
| The operator smooths the given tensor with a gaussian kernel by convolving | |
| it to each channel. It supports batched operation. | |
| Arguments: | |
| kernel_size: the size of the kernel. | |
| sigma: the standard deviation of the kernel. | |
| border_type: the padding mode to be applied before convolving. | |
| The expected modes are: ``'constant'``, ``'reflect'``, | |
| ``'replicate'`` or ``'circular'``. Default: ``'reflect'``. | |
| separable: run as composition of two 1d-convolutions. | |
| Returns: | |
| the blurred tensor. | |
| Shape: | |
| - Input: :math:`(B, C, H, W)` | |
| - Output: :math:`(B, C, H, W)` | |
| Examples:: | |
| >>> input = torch.rand(2, 4, 5, 5) | |
| >>> gauss = GaussianBlur2d((3, 3), (1.5, 1.5)) | |
| >>> output = gauss(input) # 2x4x5x5 | |
| >>> output.shape | |
| torch.Size([2, 4, 5, 5]) | |
| """ | |
| def __init__( | |
| self, | |
| kernel_size: Tuple[int, int], | |
| sigma: Tuple[float, float], | |
| border_type: str = 'reflect', | |
| separable: bool = True, | |
| ) -> None: | |
| super().__init__() | |
| self.kernel_size: Tuple[int, int] = kernel_size | |
| self.sigma: Tuple[float, float] = sigma | |
| self.border_type = border_type | |
| self.separable = separable | |
| def __repr__(self) -> str: | |
| return ( | |
| self.__class__.__name__ | |
| + '(kernel_size=' | |
| + str(self.kernel_size) | |
| + ', ' | |
| + 'sigma=' | |
| + str(self.sigma) | |
| + ', ' | |
| + 'border_type=' | |
| + self.border_type | |
| + 'separable=' | |
| + str(self.separable) | |
| + ')' | |
| ) | |
| def forward(self, input: torch.Tensor) -> torch.Tensor: | |
| return gaussian_blur2d(input, self.kernel_size, self.sigma, self.border_type, self.separable) |