创建彩色RGB图像#

RGB图像可以使用matplotlib的能力生成三种颜色的图像。一般来说,RGB图像是一个MxNx3数组,其中M是y维,N是x维,length-3层分别表示红色、绿色和蓝色。可以指定表示alpha(不透明度)值的第四层。

Matplotlib有几个工具可以在 matplotlib.colors .

Astropy的可视化工具可用于更改RGB图像各个层的拉伸和缩放。对于浮点数,每个图层的刻度必须为0-1(整数为0-255);超出该范围的值将被剪裁。

使用Lupton等人(2004)方案创建彩色RGB图像#

Lupton et al. (2004) 描述一个从三个独立的高动态范围阵列产生红-绿-蓝复合图像的“最佳”算法。此方法在中实现 make_lupton_rgb 作为一个方便的包装函数和一组相关的类来提供可选的缩放。SDSS SkyServer彩色图像是使用这一技术的变体制作的。要使用默认(arcsinh)缩放生成彩色PNG文件,请执行以下操作:

import numpy as np
import matplotlib.pyplot as plt
from astropy.visualization import make_lupton_rgb
rng = np.random.default_rng()
image_r = rng.random((100,100))
image_g = rng.random((100,100))
image_b = rng.random((100,100))
image = make_lupton_rgb(image_r, image_g, image_b, stretch=0.5)
plt.imshow(image)

(png, svg, pdf)

../_images/rgb-1.png

这种方法要求三幅图像对齐,并且具有相同的像素比例和大小。改变 minimum 会改变黑色等级,而 stretchQ 将更改黑白之间的值的缩放方式。

有关更深入的示例,请下载 gri 在Hickson 88组周围区域的SDSS帧(它们将分别用作蓝色、绿色和红色通道),并尝试下面的示例并将其与图1进行比较 Lupton et al. (2004)

import matplotlib.pyplot as plt
from astropy.visualization import make_lupton_rgb
from astropy.io import fits
from astropy.utils.data import get_pkg_data_filename

# Read in the three images downloaded from here:
g_name = get_pkg_data_filename('visualization/reprojected_sdss_g.fits.bz2')
r_name = get_pkg_data_filename('visualization/reprojected_sdss_r.fits.bz2')
i_name = get_pkg_data_filename('visualization/reprojected_sdss_i.fits.bz2')
g = fits.open(g_name)[0].data
r = fits.open(r_name)[0].data
i = fits.open(i_name)[0].data

rgb_default = make_lupton_rgb(i, r, g, filename="ngc6976-default.jpeg")
plt.imshow(rgb_default, origin='lower')

(png, svg, pdf)

../_images/rgb-2.png

上面的图像是用默认参数生成的。然而,使用不同的比例,例如Q=10,拉伸=0.5,星系的微弱特征就会显现出来。与图1比较 Lupton et al. (2004)SDSS Skyserver image .

rgb = make_lupton_rgb(i, r, g, Q=10, stretch=0.5, filename="ngc6976.jpeg")
plt.imshow(rgb, origin='lower')

(png, svg, pdf)

../_images/rgb-3.png