Это мой первый пост на хабре, поэтому критика приветствуется, но камни попрошу кидать хоть и сильно, но аккуратно, по заветам Лёлика из бриллиантовой руки. Сегодня, думаю, уже у любого человека, который хоть чуть-чуть старается идти в ногу с прогрессом, в наличии имеется фотокамера, ну или хотя бы телефон с функцией фото/видеосъёмки. И наверняка, пусть и немногие, увлекающиеся фотосъёмкой любители в какой-то момент пробовали снимать и ночное небо в том числе. И задавались вопросом: "а почему же на своих снимках я вижу одно, а в интернете, порой на том же самом оборудовании, люди получают совершенно другое?.." В дальнейшем оказывается, что для того чтобы снимать небо нужно и выезжать из города, и свет копить не секундами, а минутами, экспозиций лучше делать как можно больше, а потом всё это надо ещё и обрабатывать. При этом даже когда основы фотографии уже вроде бы известны, треугольник экспозиции с его тремя углами уже понятен как свои три пять пальцев, всё-таки остаются некоторые вопросы. Например: если я зафиксирую диафрагму и буду увеличивать ISO, снижая при этом выдержку, то понятно, что шумы будут расти. Но насколько? Ведь даже имея в своём распоряжении астротрекер, мы далеко не всегда можем копить свет неограниченно. Существует ошибка установки полярной оси этого самого трекера (или в более продвинутом случае — монтировки). Есть погрешности ведения. Засветка. Облака в конце концов тоже могут налететь и испортить нам кадр, даже если монтировка отработала безупречно. Предполагая, что читатель уже знаком с основами фотографии (а может и астрофотографии) и хочет разобраться с подбором оптимальных параметров в астросъёмке с математической точки зрения, я и буду вести повествование. Читатель знаком с понятием экспозиции, диафрагмы, светочувствительности и как их взаимосвязь влияет на итоговое изображение хотя бы на интуитивном уровне. Съёмка производится в режиме RAW, т.к. для jpg-файлов пост-обработка в виде сложения хотя и возможна, но при этом теряется львиная доля полезной информации, да и вся математическая сторона процесса остаётся за кадром (или за процессором камеры). Во времена плёночной фотографии чувствительность эмульсии определялась её химическим составом и размерами зерна, именно поэтому чем выше ISO, тем явственнее на снимке проявлялся характерный гранулярный эффект. В цифровом фотоаппарате у нас есть только одна матрица. Однако тем не менее мы можем "выбирать" её чувствительность к свету. Происходит это ещё на уровне аналоговой работы с сигналом. Попадающие на фоточувствительный элемент фотоны увеличивают (или уменьшают, нам сейчас это неважно) заряд пикселя. Предположим пиксель накопил некоторое количество заряда. Дальше мы можем подать этот сигнал на аналогово-цифровой преобразователь (АЦП) и записать выданное нам значение. А можем сначала умножить наш сигнал на некую константу, и лишь после этого оцифровать. Если бы сам АЦП не шумел — не было бы никакой разницы, оцифровали мы сигнал до умножения или же после. Однако ж он-таки шумит. Поэтому, если скажем уровень этого шума находится на уровне 6 электронов, а у нас их в пикселе накопилось всего 12, то мы внесём довольно ощутимый шум в процессе оцифровки. Однако если мы предварительно "увеличим чувствительность" нашей матрицы, скажем в 4 раза, то те же 6 шумовых электронов на фоне 48 будут выделяться уже значительно меньше. Можно сказать, что в первом случае соотношение сигнал/шум (snr) был 2, а мы его увеличили до 8. Казалось бы, почему тогда не увеличить чувствительность до максимально возможного значения? Во-первых, любому фотографу, который дорос до съёмки в RAW известно такое понятие, как "пересвет" — когда динамического диапазона камеры не хватает, чтобы отобразить самую яркую деталь снимаемой сцены без потери деталей. Просто потому что ёмкость пикселя ограничена (некоторые старые зеркалки даже страдали от эффекта блюминга). Если наш пиксель способен удержать например 2^15 фотоэлектронов, и на получающемся кадре соответствующая область уже становилась абсолютно белой, то умножив это число на 4, мы эффективно вчетверо уменьшим глубину потенциальной ямы для фотоэлектронов, т.к. теперь уже 2^(15-2) фотоэлектронов будут соответствовать белому цвету, а всё что больше — тем более. Ну а во-вторых — принципиально новой информации мы от такого умножения всё равно не получаем — лишь снижаем вклад шумов АЦП. Для того чтобы приблизиться к желаемой цели, а, напомню, мы хотим подобрать оптимальные параметры для съёмки тусклых ночных объектов, нам в первую очередь необходимо определить какое ISO какому усилению сигнала соответствует. Итак, представим, что в нашем распоряжении есть некий чёрный ящик — фотоаппарат. Который полученный свет (выбитые фотонами электроны) умножает на какой-то коэффициент и оцифровывает получившееся значение. Мы хотим каким-либо способом этот коэффициент узнать. В этом нам поможет так называемый "фотонный шум". Источник света с определённой яркостью испускает некое число фотонов в секунду, и в среднем оно будет величиной постоянной. Однако если взять определённый временной интервал число фотонов будет случайно флуктуировать вокруг некой средней величины. Величина этой флуктуации, согласно распределению Пуассона, равна корню квадратному из среднего значения. То есть нам нужен источник света с заранее известной, и контролируемой в процессе измерения, яркостью. Для этого вполне подойдёт экран монитора с равномерно залитым фоном, который мы будем снимать близко расположенным длиннофокусным объективом. Дополнительно можно расфокусировать изображение, чтобы пиксели экрана уж точно не отразились на нашей фотографии. Также нам нужна будет программа, которая умеет читать, а главное — отображать RAW файлы в естественной линейной форме. Т.к. те кадры, что мы видим как итоговое изображение включают в себя целую кучу нелинейных преобразований в которые я даже не хочу сейчас углубляться. От себя могу предложить пять вариантов, четыре из которых совершенно бесплатны: Iris, Fitswork, Pixinsight, Siril, DSS. (Я пользуюсь в 90% первым из них, который хотя и поддерживает только целочисленную математику обладает широчайшим набором функций и из бесплатных, на мой взгляд — до сих пор в лидерах.) Если ссылка не открывается — передавайте привет Роскомнадзору. ;) с его гениальным решением блокировать IP адреса без разбора... Необходимо также не забыть, что все эти программы после открытия в них RAW файлов представляют данные "as is" — без дебайеризации и нелинейных преобразований. И если последнее — это именно то, что нам нужно, то наличие взаимно перемешанных RGGB четырёх изображений в одном — осложняет нам работу. В своём любимом Iris я использую команду split_cfa z1 z2 z3 z4 чтобы разбить один кадр на четыре изображения с соответствующими именами, т.к. цветные изображения анализировать нужно поканально. Итак, предположим мы сняли пару фотографий нашего плоского поля, вычли из них мастер-кадр тока смещения (30-40 кадров, снятых с закрытой крышкой с минимальной выдержкой и усреднённых будет вполне достаточно), разбили байеровский массив на 4  отдельных изображения, и выбрали область свободную от пыли, градиентов и прочей бяки. Какая информация теперь у нас есть, и что мы можем с ней сделать? Как я уже говорил выше — число электронов зависит от числа упавших (и зарегистрированных) фотонов, а итоговый оцифрованный сигнал ADU (analog-to-digital units) — число фотоэлектронов, умноженное на коэффициент усиления, т.е. для двух кадров мы имеем: Из-за наличия фотонного шума среднее значение e1, будет варьировать в пределах ± корня из e1, как и e2. Удобно найти величину этой вариации, вычтя N1 из N2, получив Т.к. в среднем N1 = N2 наша разность даст величину стандартного отклонения безо всяких смещений. По формуле для ошибки для косвенных измерений: С другой стороны для среднего арифметического: Видно, что из последних двух уравнений можно получить нашу k: Т.е. вычитаем из одного изображения второе, находим стандартное отклонение и возводим его в квадрат, а потом делим на удвоенное среднее. Чем больше таких независимых пар при разной яркости монитора мы получим, тем точнее будет наша оценка гейна. А величина равная 1/k даст нам число электронов, приходящееся на единицу АЦП. Для пущего увеличения точности можно применить линейную регрессию. Поставить монитор на максимальную яркость и получить пару кадров с самой длинной выдержкой, такой, чтобы ещё не было пересвета ни в одном из каналов (ориентироваться лучше не по гистограмме фотоаппарата, а по реальным значениям, контролируя их в программе). После этого убавлять яркость монитора и продолжать делать пары экспозиций, не меняя параметров в течение всей сессии. Полученные средние отложить по оси икс, а стандартные отклонения — по игрек и определить коэффициент наклона: так мы используем МНК для решения избыточной системы уравнений для увеличения точности. Для нативного ISO должна получиться картинка вроде этой: Зная гейн, определить число электронов, соответствующих насыщению матрицы уже не составляет труда: максимальный отсчёт делим на гейн. Соответственно полную ёмкость пиксела надо искать на минимально доступном ISO. В принципе, можно даже обойтись всего одним кадром: измерить среднее значение пикселей, измерить дисперсию и если квадрат дисперсии совпал со средним — то мы попали пальцем в небо. Если больше в 2/4/0.5 раза — в соответственное число раз меньшее ISO соответствует единичному гейну. Однако при наличии пыли или горячих/холодных пикселей на матрице такая прикидка может выдать ошибочный результат, поэтому лучше перестраховаться. На этом предлагаю пока остановиться и если освещаемая тема окажется интересной — то я продолжу.