diff --git a/skimage/color/colorconv.py b/skimage/color/colorconv.py index 137c14c0..1eb63721 100644 --- a/skimage/color/colorconv.py +++ b/skimage/color/colorconv.py @@ -707,10 +707,18 @@ def rgb2gray(rgb): >>> img = data.astronaut() >>> img_gray = rgb2gray(img) """ - if rgb.ndim == 2: - return rgb - return _convert(gray_from_rgb, rgb[:, :, :3])[..., 0] + if rgb.ndim == 2: + return np.ascontiguousarray(rgb) + + rgb = _prepare_colorarray(rgb[..., :3]) + + gray = 0.2125 * rgb[..., 0] + gray[:] += 0.7154 * rgb[..., 1] + gray[:] += 0.0721 * rgb[..., 2] + + return gray + rgb2grey = rgb2gray diff --git a/skimage/color/tests/test_colorconv.py b/skimage/color/tests/test_colorconv.py index 4c991416..96057e3b 100644 --- a/skimage/color/tests/test_colorconv.py +++ b/skimage/color/tests/test_colorconv.py @@ -226,6 +226,15 @@ class TestColorconv(TestCase): assert_equal(g.shape, (1, 1)) + def test_rgb2grey_contiguous(self): + x = np.random.rand(10, 10, 3) + assert rgb2grey(x).flags["C_CONTIGUOUS"] + assert rgb2grey(x[:5, :5]).flags["C_CONTIGUOUS"] + + def test_rgb2grey_alpha(self): + x = np.random.rand(10, 10, 4) + assert rgb2grey(x).ndim == 2 + def test_rgb2grey_on_grey(self): rgb2grey(np.random.rand(5, 5))