Нужна помощь в моделировании потемнения солнечного лимба

редактировать: на веб-сайте Обсерватории солнечной динамики (SDO) я только что нашел изображение sdo.gsfc.nasa.gov/assets/img/latest/latest_1024_HMIIC.jpg . Цветовой градиент потемнения конечности кажется очень похожим на изображение Викимедиа ниже. Я обнаружил, что это называется «раскрашенная диаграмма интенсивности», а цветовой градиент чисто искусственный — данные представляют собой интенсивность одного канала. Потемнение конечностей, безусловно, реально (сравните с искусственно «сплющенным» дисплеем!)

Из http://www.solarham.net/latest_imagery/hmi1.htm

введите описание изображения здесь

Я хотел бы попытаться понять, как на самом деле «выглядит» солнце с точки зрения человеческого зрения, если предположить, что яркость уменьшилась.

Как и у газовых планет-гигантов, у Солнца нет резкой поверхности, оно просто становится все плотнее и горячее, плотнее и горячее по мере того, как вы уходите вглубь.

Одним из последствий этого является потемнение конечностей . По мере того, как материал становится более плотным, чем глубже вы идете, он становится более непрозрачным, поэтому, грубо говоря, свет, который вы видите, включая цвет и яркость, определяется слоями выше этой точки.

Если вы посмотрите в центр солнечного диска, вы увидите более глубокие и горячие части. Если вы смотрите вблизи края солнца или солнечного лимба, падение происходит косо, и вы не видите так глубоко или так жарко.

Солнечная физика и теория переноса фотонов сложны, но в видимой части спектра можно считать, что синий свет рассеивается гораздо сильнее, чем красный. В густой, плотной солнечной атмосфере он достаточно рассеивается, чтобы затухнуть. Так что в голубом свете вы видите еще мельче, он еще холоднее и, следовательно, тусклее в голубом.

Прямо сейчас мне просто нужно какое-нибудь хорошее аналитическое приближение потемнения края солнца, зависящее от длины волны, или несколько реальных линейных изображений (до веб-обработки) солнца на различных видимых длинах волн, чтобы я мог сделать свое собственное приближение .

Вот изображение из вики - медиа под названием 2012_Transit_of_Venus_from_SF , которое я разделил на каналы RGB и отобразил яркость по горизонтальному (сплошной) и вертикальному (пунктирная) диаметрам шириной 20 пикселей. Вы можете увидеть разительную разницу в поведении различных длин волн. Поскольку изображение «из Интернета», у меня нет информации о линейности, так что это иллюстративный пример, а не то, что вы считаете данными.

введите описание изображения здесь

import numpy as np
import matplotlib.pyplot as plt

img = plt.imread("sun limb darkening.png") 
# FROM: https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/2012_Transit_of_Venus_from_SF.jpg/600px-2012_Transit_of_Venus_from_SF.jpg

w, c, hw  = 600, 300, 10   # image happens to be 600x600 pixels square!

hor = img[    c-hw:c+hw].sum(axis=0) / (2*hw)
ver = img[ :, c-hw:c+hw].sum(axis=1) / (2*hw)

plt.figure()

plt.imshow(img)

r, g, b = c - 0.67*c*hor.T

plt.plot(r, '-r')    
plt.plot(g, '-g')    
plt.plot(b, '-b')    

r, g, b = c - 0.67*c*ver.T

plt.plot(r, '--r')    
plt.plot(g, '--g')    
plt.plot(b, '--b')

plt.plot([0, w], [c, c], '-k')
plt.xlim(0, 599)
plt.ylim(599, 0)

plt.text(150, 137, 'R', fontsize=18)
plt.text(156, 192, 'G', fontsize=18)
plt.text(170, 272, 'B', fontsize=18)

plt.show()
Вы правы, образ плохой. Настоящее солнце белое, поэтому все, что вы видите, выключено. Однако не нашел хорошего источника для такого изображения...
@PearsonArtPhoto За эти годы я, вероятно, прочитал «Принципы технологии цвета» Биллмейера и Зальцмана от корки до корки как минимум дважды. Хотя я понимаю, что и «солнце белое», и «белое: цвет солнца » могут быть правильным способом взглянуть на него, и коричневый на самом деле ЯВЛЯЕТСЯ просто темно-желтым, я все же думаю, что мне больше повезет, если я пойму , из многообразий и бифуркаций, прежде чем я когда-нибудь смогу понять цветовые пространства.
@PearsonArtPhoto Я надеюсь, что может быть спутник или телескопическое исследование с линейными монохромными изображениями в диапазонах длин волн в видимом диапазоне. Это или аналитическое приближение, основанное на подобных данных из старой статьи, написанной тогда, когда ее было достаточно просто читать — без магнитогидродинамики и т. д.
@PearsonArtPhoto, но хотя вы могли бы назвать цвет солнечного света белым, вы были бы вынуждены признать, что середина солнца была слегка синей, чтобы компенсировать покраснение солнечного лимба. Там действительно есть что-то вроде эффективного сдвига цветовой температуры от центра к краю,
@PearsonArtPhoto сюжет сгущается - см. редактирование выше!
Вам нужно будет объединить его с солнечным спектром и функциями согласования цветов CIE , а затем преобразовать из CIE XYZ в sRGB (или выбранное вами цветовое пространство). Я мог бы попробовать это во время обеденного перерыва сегодня.
@2012rcampion Ах! Я видел эту газету несколько недель назад. Хотя большинство формул предполагают ряд α к , зависимость от длины волны, приведенная в таблице 2, относится только к одному α , который, как я предполагал, входит в уравнение 1, который затем нуждается в ты - и я не мог понять, что ты использовать с этим α . Я бы купил тебе обед (если бы мог), если ты сможешь собрать его воедино! Кстати, это преобразование действительно интересно - будет отличным ответом :)
пожимаю плечами . Я помню, как наблюдал за Солнцем в телескоп с обычным тусклым фильтром, и оно выглядело определенно оранжевым.

Ответы (1)

Я использовал документ Зависимость от длины волны потемнения края Солнца для данных потемнения края Солнца.

В нем используется следующая модель нормированного распределения яркости по диску Солнца:

я ( мю ) знак равно 1 ты ( 1 мю α )

Здесь, мю – нормированное расстояние от лимба; вдали от Солнца его можно выразить через нормализованное расстояние от центра диска, р :

мю знак равно 1 р 2

ты а также α являются параметрами. В статье не очень ясно указано значение ты , но похоже, что они использовали ты знак равно 0,85 .

Эта формула говорит нам, как яркость меняется от центра солнечного диска к краю для данной длины волны. Чтобы правильно представить цвет Солнца, нам также необходимо знать относительную яркость различных диапазонов длин волн.

Для этого нам нужны данные о солнечном спектре, которые я взял отсюда (это данные для «нулевой воздушной массы», то есть нашим результатом будет то, как выглядело бы Солнце вне земной атмосферы).

Я предполагаю, что этот спектр усреднен по всему диску, и в этом случае нам нужно иметь возможность масштабировать модель затемнения к краю по средней, а не по пиковой (центральной) яркости. В статье приведена формула:

я среднее 0 1 я ( мю ) мю   г мю 2 + α ( 1 ты ) 2 + α

Последняя часть головоломки — преобразовать спектр в цвет. В этом случае я сначала вычисляю цвет в цветовом пространстве CIE XYZ, затем преобразовываю в линейный RGB, а затем в sRGB. (См. этот ответ , который я разместил на photography.SE для получения более подробной информации о вычислении цвета XYZ спектра, и страницу Википедии sRGB для получения более подробной информации о преобразовании в sRGB.) Я использовал стандартные таблицы колориметрических наблюдений отсюда .


Вот код Mathematica , который я использовал:

alphaRaw = ImportString[(* copy and paste from the PDF table *), "Table"];
(* remove headers *)
Select[ArrayQ] @ SplitBy[alphaRaw, Head@*First];
(* join corresponding columns *)
Flatten[Partition[%, 2], {{2}, {1, 3}}];
(* resample to 1 nm *)
{alphaPS, alphaNL} = (Interpolation[#] /@ Range[360, 830]) & /@ %;

введите описание изображения здесь

spectrumRaw = Import["http://rredc.nrel.gov/solar/spectra/am0/E490_00a_AM0.xls"];
(* resample to 1 nm (inputs in um!) *)
spectrum = Interpolation[spectrumRaw[[1, 2 ;;, ;; 2]]] /@ (Range[360, 830] / 1000);

введите описание изображения здесь

cieRaw = Import["http://www.cis.rit.edu/research/mcsl2/online/CIE/StdObsFuncs.xls"];
(* pair each color function column with the wavelength column *)
Transpose[{cieRaw[[1, 6 ;;, 2 ;; 4]]], #}] & /@ cieRaw[[1, 6 ;;, 2 ;; 4]]];
(* resample to 1 nm *)
cieXYZ = (Interpolation[#] /@ Range[360, 830]) & /@ %;

введите описание изображения здесь

With[{u = 0.85},
  (* compute color at 101 points evenly spaced in mu *)
  colorXYZ = Transpose @ Table[
               Total[ (* integration -> summation *)
                 Transpose @ cieXYZ
                 * spectrum
                 * (1 - u (1 - mu^alphaPS))
                 / ((2 + alphaPS (1 - u)) / (2 + alphaPS))
               ],
               {mu, 0, 1, 0.01}
             ];
  (* scale so maximum = 1 *)
  colorXYZ /= Max[colorXYZ / {0.97, 1, 0.83}];
  (* dim by 15% *)
  colorXYZ *= 0.85;
]

введите описание изображения здесь

(Я не уверен, почему Mathematica отображает цвета XYZ с голубым оттенком.)

colorRGBlinear = {{3.2406, -1.5372, -0.4986}, {-0.9689, 1.8758, 0.0415}, {0.0557, -0.2040, 1.0570}}.colorXYZ;
colorRGBlinear /= Max[colorRGBlinear];
colorRGBlinear *= 0.85;

введите описание изображения здесь

gamma = With[{a = 0.055}, If[# <= 0.0031308, 12.92 #, (1 + a) #^(1/2.4) - a] &];
colorSRGB = Map[gamma, colorRGBlinear, {2}];

введите описание изображения здесь

График изменения цвета (в координатах CIE xy) от края к центру (маленькая черная стрелка). Галочки на спектральном локусе — это длина волны в нм, а галочки на планковском локусе — это температура в К.

введите описание изображения здесь

Хороший!! Вы знаете эти диаграммы цветового пространства CIE с линией цветовой температуры? Можете ли вы сделать один с точками, скажем, 0, 0,5, 0,8, 0,9 и 0,95? р д я с к и добавить "белую" точку? Или какой-то другой способ показать небольшое изменение цвета для людей, у которых может не хватить «остроты оттенков», чтобы увидеть это здесь? И/или сделать какой-то график диаметров R, G и B? Эти образы того, «как бы выглядело солнце», безусловно, прекрасны, но мне нужно что-то количественное. Тем временем я постараюсь опубликовать эквивалент Python для тех, у кого нет 300 долларов США.
@uhoh Цвета остаются очень близкими к белому, с цветовой температурой около 5100 К на краю и 6200 К в центре. График xyY не очень интересен, он просто выглядит как крошечный сегмент планковского локуса. Что касается атмосферы, то я не думаю, что будет какой-либо эффект (линейная RGB-картинка выглядит примерно так же, как я видел в солнечные телескопы).
Хорошо, не могли бы вы найти хотя бы какой-то способ показать смещение центра к краю, который по-прежнему был бы доступен для более чем 4% пользователей stackexchange, страдающих какой-либо формой дальтонизма? Я предложил два метода, может быть, есть и другой, но, пожалуйста, что-то однозначное, помимо едва различимого рисунка градиента оттенка. Спасибо! примечание: я также обновляю свой сюжет в вопросе :)
@uhoh Какого конечного результата ты пытаешься достичь? Будет ли таблица более полезной, чем график?
Лично я могу понять ваше объяснение, математику и Mathematica просто отлично - это ВЕЛИКОЛЕПНО! (В работе также есть некоторые аналитические выражения для спада α с длиной волны в качестве короткого пути). Я думаю, что ваш ответ также замечателен для обычного читателя с «номинальным» цветовосприятием. Я просто прошу еще одну вещь: отображение смещения цвета по сравнению с радиусом, не основанное на восприятии оттенка, которое все еще может использовать пользователь stackexchange с монохромным зрением. Как сюжет или график, " инженерный стиль " :)
Эй, красавица! Спасибо за график цветовой температуры - мне он очень интересен. Я как-то пропустил уведомление об обновлении. Это отличный ответ!
вы проделали такую ​​большую работу здесь, вам может быть интересно посмотреть , как выглядело бы небо, если бы Земля вращалась вокруг красного гиганта на безопасном расстоянии?
@uhoh Модель основана на эмпирических данных, поэтому, к сожалению, она применима только к Солнцу.
Конечно, это другой расчет, но просто показалось, что вам может понравиться и этот вызов, поскольку в нем есть некоторые трехцветные аспекты.