Skip to content

Commit

Permalink
fix: center_crop occasionally outputs off-by-one dimension matrix (#3…
Browse files Browse the repository at this point in the history
…0934)

If required padding for a crop larger than input image is odd-numbered,
the padding would be rounded down instead of rounded up, causing the
output dimension to be one smaller than it should be.
  • Loading branch information
mattlbeck authored May 21, 2024
1 parent daf281f commit 3b09d3f
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/transformers/image_transforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
# limitations under the License.

import warnings
from math import ceil
from typing import Iterable, List, Optional, Tuple, Union

import numpy as np
Expand Down Expand Up @@ -483,9 +484,9 @@ def center_crop(
new_image = np.zeros_like(image, shape=new_shape)

# If the image is too small, pad it with zeros
top_pad = (new_height - orig_height) // 2
top_pad = ceil((new_height - orig_height) / 2)
bottom_pad = top_pad + orig_height
left_pad = (new_width - orig_width) // 2
left_pad = ceil((new_width - orig_width) / 2)
right_pad = left_pad + orig_width
new_image[..., top_pad:bottom_pad, left_pad:right_pad] = image

Expand Down
4 changes: 4 additions & 0 deletions tests/test_image_transforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,10 @@ def test_center_crop(self):
self.assertEqual(cropped_image.shape, (300, 260, 3))
self.assertTrue(np.allclose(cropped_image, expected_image))

# Test that odd numbered padding requirement still leads to correct output dimensions
cropped_image = center_crop(image, (300, 259), data_format="channels_last")
self.assertEqual(cropped_image.shape, (300, 259, 3))

# Test image with 4 channels is cropped correctly
image = np.random.randint(0, 256, (224, 224, 4))
expected_image = image[52:172, 82:142, :]
Expand Down

0 comments on commit 3b09d3f

Please sign in to comment.