mirror of
https://github.com/wassname/scikit-image.git
synced 2026-09-12 12:50:49 +08:00
Merge pull request #1639 from stefanv/gray2rgb_alpha
Add alpha layer support to gray2rgb
This commit is contained in:
@@ -56,7 +56,7 @@ from __future__ import division
|
|||||||
from warnings import warn
|
from warnings import warn
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy import linalg
|
from scipy import linalg
|
||||||
from ..util import dtype
|
from ..util import dtype, dtype_limits
|
||||||
|
|
||||||
|
|
||||||
def guess_spatial_dimensions(image):
|
def guess_spatial_dimensions(image):
|
||||||
@@ -715,13 +715,16 @@ def rgb2gray(rgb):
|
|||||||
rgb2grey = rgb2gray
|
rgb2grey = rgb2gray
|
||||||
|
|
||||||
|
|
||||||
def gray2rgb(image):
|
def gray2rgb(image, alpha=None):
|
||||||
"""Create an RGB representation of a gray-level image.
|
"""Create an RGB representation of a gray-level image.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
image : array_like
|
image : array_like
|
||||||
Input image of shape ``(M, N [, P])``.
|
Input image of shape ``(M, N [, P])``.
|
||||||
|
alpha : bool, optional
|
||||||
|
Ensure that the output image has an alpha layer. If None,
|
||||||
|
alpha layers are passed through but not created.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
@@ -734,11 +737,39 @@ def gray2rgb(image):
|
|||||||
If the input is not a 2- or 3-dimensional image.
|
If the input is not a 2- or 3-dimensional image.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if np.squeeze(image).ndim == 3 and image.shape[2] in (3, 4):
|
is_rgb = False
|
||||||
|
is_alpha = False
|
||||||
|
dims = np.squeeze(image).ndim
|
||||||
|
|
||||||
|
if dims == 3:
|
||||||
|
if image.shape[2] == 3:
|
||||||
|
is_rgb = True
|
||||||
|
elif image.shape[2] == 4:
|
||||||
|
is_alpha = True
|
||||||
|
is_rgb = True
|
||||||
|
|
||||||
|
if is_rgb:
|
||||||
|
if alpha == False:
|
||||||
|
image = image[..., :3]
|
||||||
|
|
||||||
|
elif alpha == True and not is_alpha:
|
||||||
|
alpha_layer = (np.ones_like(image[..., 0, np.newaxis]) *
|
||||||
|
dtype_limits(image)[1])
|
||||||
|
image = np.concatenate((image, alpha_layer), axis=2)
|
||||||
|
|
||||||
return image
|
return image
|
||||||
elif image.ndim != 1 and np.squeeze(image).ndim in (1, 2, 3):
|
|
||||||
|
elif image.ndim != 1 and dims in (1, 2, 3):
|
||||||
image = image[..., np.newaxis]
|
image = image[..., np.newaxis]
|
||||||
return np.concatenate(3 * (image,), axis=-1)
|
|
||||||
|
if alpha:
|
||||||
|
alpha_layer = (np.ones_like(image) * dtype_limits(image)[1])
|
||||||
|
return np.concatenate(3 * (image,) + (alpha_layer,), axis=-1)
|
||||||
|
else:
|
||||||
|
return np.concatenate(3 * (image,), axis=-1)
|
||||||
|
|
||||||
|
return image
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise ValueError("Input image expected to be RGB, RGBA or gray.")
|
raise ValueError("Input image expected to be RGB, RGBA or gray.")
|
||||||
|
|
||||||
|
|||||||
@@ -454,6 +454,23 @@ def test_gray2rgb_rgb():
|
|||||||
assert_equal(x, y)
|
assert_equal(x, y)
|
||||||
|
|
||||||
|
|
||||||
|
def test_gray2rgb_alpha():
|
||||||
|
x = np.random.random((5, 5, 4))
|
||||||
|
assert_equal(gray2rgb(x, alpha=None).shape, (5, 5, 4))
|
||||||
|
assert_equal(gray2rgb(x, alpha=False).shape, (5, 5, 3))
|
||||||
|
assert_equal(gray2rgb(x, alpha=True).shape, (5, 5, 4))
|
||||||
|
|
||||||
|
x = np.random.random((5, 5, 3))
|
||||||
|
assert_equal(gray2rgb(x, alpha=None).shape, (5, 5, 3))
|
||||||
|
assert_equal(gray2rgb(x, alpha=False).shape, (5, 5, 3))
|
||||||
|
assert_equal(gray2rgb(x, alpha=True).shape, (5, 5, 4))
|
||||||
|
|
||||||
|
assert_equal(gray2rgb(np.array([[1, 2], [3, 4.]]),
|
||||||
|
alpha=True)[0, 0, 3], 1)
|
||||||
|
assert_equal(gray2rgb(np.array([[1, 2], [3, 4]], dtype=np.uint8),
|
||||||
|
alpha=True)[0, 0, 3], 255)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
from numpy.testing import run_module_suite
|
from numpy.testing import run_module_suite
|
||||||
run_module_suite()
|
run_module_suite()
|
||||||
|
|||||||
Reference in New Issue
Block a user