如何使用 python 显示 16 位彩色 FITS 图像

How to display a 16 bit colour FITS image using python

我想在 python 中显示 FITS 图像。我使用 astropy(FITS 加载器)和 matplotlib 以及灰度图像来完成所有这些工作。但是我有 16 位颜色的图像和 RGGB 的拜耳矩阵,我不知道如何将其显示为 RGB 彩色图像。

这适用于灰度图像:

import numpy as np
import matplotlib.pyplot as plt
from astropy.io import fits
m42 = fits.open('FITS Data/frame-u-006073-4-0063.fits')
imagedata = m42[0].data
plt.imshow(imagedata, cmap='gray')
plt.colorbar()

但是我有第二张图像,每像素 16 位,我不知道如何将这些位映射到 r、g、b 值并在 matplotlib 中显示它们。

例如(第一个像素为3148):

pixel = imagedata[0][0]
r = (pixel & 0b1111000000000000) >> 12
g = (pixel & 0b0000111100000000) >> 8
g = int((g + ((pixel & 0b0000000011110000) >> 4)) / 2)
b = pixel & 0b0000000000001111

分别为红色、绿色和蓝色给出 0、8 和 12。如何将整个数组 imagedata 映射到 RGB 并让 matplotlib 显示它?还假设您平均两个绿色值?任何帮助表示赞赏。

更新:我是否误解了带有拜耳矩阵的 16 位图像的格式?每个像素的完整 16 位是 R、G、G 还是 B?在哪种情况下我需要先查看图像去马赛克/去拜耳化?

答案是使用 OpenCV 对图像进行 debayer,然后对数据进行归一化。

import cv2
debayered_image = cv2.cvtColor(imagedata, cv2.COLOR_BayerBG2BGR)
normalised_image = cv2.normalize(debayered_image, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
imgplot = plt.imshow(normalised_image)