Как лучше обрабатывать и собирать данные JWST с помощью Python для получения более красивых космических изображений?Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Как лучше обрабатывать и собирать данные JWST с помощью Python для получения более красивых космических изображений?

Сообщение Гость »

Я подумал, что было бы интересно попробовать свои силы в создании красивых астрономических изображений, используя данные космического телескопа Джеймса Уэбба (JWST), которые можно бесплатно загрузить... если вы понимаете в этом смысл.
/>Существует множество руководств, объясняющих отдельные части задачи, а также крохи, оставленные другими в том же путешествии, которые увели меня дальше, чем мне хотелось бы думать. Однако я чувствую, что исчерпал все рекомендации, которые смог найти с помощью поиска, и меня просто не устраивают результаты.
В качестве ориентира я пытаюсь воссоздать знаменитую Изображение туманности Южного кольца: https://webbtelescope.org/contents/medi ... 7K3N3ASSEB
Это кажется хорошим подходом, поскольку это НАСА, поэтому они любезно объясняют часть своих процесс.
С этой страницы: «Эти изображения представляют собой совокупность отдельных снимков, полученных космическим телескопом Джеймса Уэбба с использованием инструмента NIRCam. Для выборки узких и широких диапазонов длин волн использовалось несколько фильтров. Цвет получается в результате присвоения разных оттенков (цветов) каждому монохроматическому (в оттенках серого) изображению, связанному с отдельным фильтром». Это изображение представляет собой комбинацию экспозиций шести длин волн.
Итак, у меня есть данные об экспозиции (на данный момент я стараюсь не называть их изображениями) в подходящем формате.
Загрузка, обработка и отображение одного кадра
В качестве первого шага при обработке и просмотре одного кадра:
  • < li>Небольшая обрезка границ, поскольку данные датчиков не полностью заполняют массив.
  • Замените 0 на nan, а затем отфильтруйте их, что исправит дыры в центре звезд.
  • Выполните очень простое сопоставление яркости, поскольку данные датчика не преобразуются непосредственно в видимое изображение.

Код: Выделить всё

from astropy.io import fits
import matplotlib.pyplot as plt
import numpy as np
import sys
from astropy.convolution import Gaussian2DKernel, interpolate_replace_nans

fits_filename = sys.argv[1]

hdulist = fits.open(fits_filename, mode="readonly")
h_ref = hdulist[1].header
img_array = hdulist[1].data[80:-80, 80:-80]  # crop

img_array[img_array == 0] = np.nan  # 0s -> nans
kernel = Gaussian2DKernel(x_stddev=3)
img_array = interpolate_replace_nans(img_array, kernel)  # filter out nans

# brightness mapping
xp = [np.nanpercentile(img_array, 4), np.nanpercentile(img_array, 99.9)]
yp = [0, 255]
img_array = np.interp(img_array, xp, yp).astype("uint8")

plt.figure(1, figsize=(6, 6))
im = plt.imshow(img_array, cmap='gray')
plt.show()
Что для экспозиции F090W выглядит так:
[img]https://i.stack .imgur.com/tcaTW.png[/img]

"Выравнивание по звездам" / проекция
Далее, чтобы сложить несколько экспозиций, их необходимо выровнять поскольку космический телескоп всегда движется. Я видел методы «выравнивания звезд», но информация о координатах неба находится в заголовке подгонок, поэтому я использую reproject для проецирования и интерполяции второй подгонки на первую эталонную подгонку, что работает хорошо:

Код: Выделить всё

from astropy.io import fits
from reproject import reproject_interp

hdulist = fits.open(reference_fits, mode="readonly")
reference_header = hdulist[1].header

hdulist = fits.open(second_fits, mode="readonly")
img_array, footprint = reproject_interp(hdulist[1], reference_header)
img_array = img_array[80:-80, 80:-80]
Итак, конечно, я создал графический интерфейс для загрузки нескольких экспозиций, выравнивания, настройки сопоставлений яркости, назначения цветов для каждого «слоя», а затем складывания их для создания цветного изображения.
Изображение
Отображение яркости
Версия с графическим интерфейсом использует несколько более продвинутое сопоставление яркости, которое обеспечивает больше возможностей настройки и лучшие результаты. Графический интерфейс настроен таким образом, чтобы можно было легко настраивать параметры и переставлять их.

Код: Выделить всё

xp = [0, kneein, peak]
yp = [0, kneeout, 255]
img_array = np.interp(img_array, xp, yp).astype("uint8")
Раскрашивание и совмещение
Чтобы сложить слои вместе, я использую цвета из палитры цветов графического интерфейса, чтобы создать цветное изображение каждого слоя, а затем " сложите их с помощью np.fmax.

Код: Выделить всё

# starting here with lists of img_arrays and color_rgb
img_stack = None
for i, img_array in enumerate(img_arrays):
r = np.multiply(img_array, color_rgb[i][0] / 255.0)
g = np.multiply(img_array, color_rgb[i][1] / 255.0)
b = np.multiply(img_array, color_rgb[i][2] / 255.0)
layer_color = np.dstack((r, g, b))
if img_stack is None:
img_stack = layer_color
else:
img_stack = np.fmax(layer_color, img_stack)
img_stack = img_stack.astype("uint8")
Кажется, все это работает, но результаты просто несопоставимы:

Особо обратите внимание, насколько больше задутая часть звезды в центре моей. и почему «текстурированные» детали туманности на изображении НАСА намного ярче.
Вопрос 1: отображение яркости
Я не знаю Я не знаю, чего я здесь не знаю. Я думаю, что есть много возможностей для легкого улучшения за счет улучшения отображения яркости, но, похоже, это выходит за рамки простого выбора правильных настроек с помощью моей интерполяции с одним коленом.
Итак, мой первый вопрос: существуют ли другие, более эффективные методы отображения яркости? В этом наборе данных интересные особенности туманностей, которые я не показываю, имеют заранее нанесенные на карту значения яркости в диапазоне 5–40, в то время как яркость звезд быстро возрастает до сотен и достигает максимума в несколько тысяч.Отрегулируйте настройки «колена», чтобы блики звезд соответствовали НАСА, и туманность была едва видна, но отрегулируйте их так, чтобы туманность была такой же яркой, а звезды сильно раздулись. Помогут ли дополнительные точки в интерполяции? Если да, то какова стратегия? Есть ли какая-то тема или метод, о которых я просто не знаю, о которых мне следует погуглить и прочитать, которые могли бы помочь мне в разработке здесь?
Вопрос 2: наложение слоев
Мой второй вопрос: правильно ли я складываю слои? По сути, я комбинирую цветные изображения с помощью np.fmax, беря из стека самые яркие значения пикселей каждого канала. Поскольку слоям присвоены произвольные цвета, а не обязательно только основные цвета, их суммирование определенно неверно, но мне интересно, неверно ли также fmax. Конечно, это приводит к странным результатам: может показаться, что слои закрывают друг друга.
Вопрос 3: другое соответствует данным
Последний вопрос: есть ли дополнительная информация в файле подгонок я должен каким-то образом использовать, например, для уменьшения величины яркости звезды или для чего-то еще? Там есть много того, чем я не пользуюсь.

Подробнее здесь: https://stackoverflow.com/questions/781 ... ace-pictur
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»