Я пытаюсь сохранить массив NumPy RGB (трехмерный массив размером 512x512x3) в файл .fits, используя astropy.io
. Сохранение этого массива в файле .png работает нормально, но когда я пытаюсь сохранить его в файле .fits с помощью HDUList.writeto
, он создает просто мусорные цвета. Кроме того, мне нужно изменить форму изображения следующим образом:
img = img.reshape(img.shape[2], img.shape[0], img.shape[1])
или он попытается сохранить только 3 столбца изображения вместо 512.
Каждый элемент массива 3d содержит значение от 0 до 255.
Раньше я не занимался обработкой астрономических изображений, но, поскольку на этот вопрос нет ответа, я попробую - надеюсь, что это принесет пользу. Если проблема более специфична, пример кода/образец изображения, вероятно, будет полезен для дальнейшей диагностики, но в остальном этот пример может помочь. В нем обсуждается процесс записи 3-канального изображения в отдельные изображения FITS. Я бы сначала попробовал это и проверил, не является ли этот вывод мусором - это может быть просто проблема с тем, как вы используете функцию HDUList.writeto(). Соответствующий код вставлен ниже (с парой правок, так как в примере сначала используется класс Pillow Image):
r, g, b = img[:, :, 0], img[:, :, 1], img[:, :, 2]
red = fits.PrimaryHDU(data=r)
red.writeto('red.fits')
green = fits.PrimaryHDU(data=g)
green.writeto('green.fits')
blue = fits.PrimaryHDU(data=b)
blue.writeto('blue.fits')
Также из любопытства - почему ваш «пустой массив RGB» хранит значения от 0 до 512? Стандартом для изображений обычно являются целые числа от 0 до 255 или числа с плавающей запятой от 0 до 1; но я предполагаю, что астрономия требует большей разрядности? В любом случае вы также должны убедиться, что dtype вашего массива numpy достаточно велик для желаемой битовой глубины — часто изображения хранятся с dtype="uint8", который находится в диапазоне от 0 до 255.
Питер Эрвин