diff --git a/test/test_transforms_v2_refactored.py b/test/test_transforms_v2_refactored.py index 9de1ed6d78a..fd8f23f3428 100644 --- a/test/test_transforms_v2_refactored.py +++ b/test/test_transforms_v2_refactored.py @@ -1375,7 +1375,6 @@ def test_transform_noop(self, make_input, device): assert_equal(output, input) -@pytest.mark.filterwarnings("ignore:The provided center argument has no effect") class TestRotate: _EXHAUSTIVE_TYPE_AFFINE_KWARGS = dict( # float, int diff --git a/torchvision/transforms/v2/_geometry.py b/torchvision/transforms/v2/_geometry.py index ba3e690dd4d..76679690c4e 100644 --- a/torchvision/transforms/v2/_geometry.py +++ b/torchvision/transforms/v2/_geometry.py @@ -593,6 +593,11 @@ class RandomRotation(Transform): Note that the expand flag assumes rotation around the center and no translation. center (sequence, optional): Optional center of rotation, (x, y). Origin is the upper left corner. Default is the center of the image. + + ..note:: + + In theory, ``center`` has no effect together with ``expand=True``. In practice however, this can lead to + off-by-one differences of the resulting image size compared to ``center=None``. fill (number or tuple or dict, optional): Pixel fill value used when the ``padding_mode`` is constant. Default is 0. If a tuple of length 3, it is used to fill R, G, B channels respectively. Fill value can be also a dictionary mapping data type to the fill value, e.g. diff --git a/torchvision/transforms/v2/functional/_geometry.py b/torchvision/transforms/v2/functional/_geometry.py index 7838d7e3eae..5ca5c875ee4 100644 --- a/torchvision/transforms/v2/functional/_geometry.py +++ b/torchvision/transforms/v2/functional/_geometry.py @@ -977,9 +977,6 @@ def rotate_image( center_f = [0.0, 0.0] if center is not None: - if expand: - # TODO: Do we actually want to warn, or just document this? - warnings.warn("The provided center argument has no effect on the result if expand is True") # Center values should be in pixel coordinates but translated such that (0, 0) corresponds to image center. center_f = [(c - s * 0.5) for c, s in zip(center, [width, height])] @@ -1017,9 +1014,6 @@ def _rotate_image_pil( ) -> PIL.Image.Image: interpolation = _check_interpolation(interpolation) - if center is not None and expand: - warnings.warn("The provided center argument has no effect on the result if expand is True") - return _FP.rotate( image, angle, interpolation=pil_modes_mapping[interpolation], expand=expand, fill=fill, center=center ) @@ -1033,9 +1027,6 @@ def rotate_bounding_boxes( expand: bool = False, center: Optional[List[float]] = None, ) -> Tuple[torch.Tensor, Tuple[int, int]]: - if center is not None and expand: - warnings.warn("The provided center argument has no effect on the result if expand is True") - return _affine_bounding_boxes_with_expand( bounding_boxes, format=format,