редактировать: на веб-сайте Обсерватории солнечной динамики (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()
Я использовал документ Зависимость от длины волны потемнения края Солнца для данных потемнения края Солнца.
В нем используется следующая модель нормированного распределения яркости по диску Солнца:
Здесь, – нормированное расстояние от лимба; вдали от Солнца его можно выразить через нормализованное расстояние от центра диска, :
а также являются параметрами. В статье не очень ясно указано значение , но похоже, что они использовали .
Эта формула говорит нам, как яркость меняется от центра солнечного диска к краю для данной длины волны. Чтобы правильно представить цвет Солнца, нам также необходимо знать относительную яркость различных диапазонов длин волн.
Для этого нам нужны данные о солнечном спектре, которые я взял отсюда (это данные для «нулевой воздушной массы», то есть нашим результатом будет то, как выглядело бы Солнце вне земной атмосферы).
Я предполагаю, что этот спектр усреднен по всему диску, и в этом случае нам нужно иметь возможность масштабировать модель затемнения к краю по средней, а не по пиковой (центральной) яркости. В статье приведена формула:
Последняя часть головоломки — преобразовать спектр в цвет. В этом случае я сначала вычисляю цвет в цветовом пространстве 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) от края к центру (маленькая черная стрелка). Галочки на спектральном локусе — это длина волны в нм, а галочки на планковском локусе — это температура в К.
ПирсонИскусствоФото
ооо
ооо
ооо
ооо
2012rчемпион
2012rчемпион
ооо
СФ.