Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Предисловие
Т.к. помидорами меня за первую часть не закидали — то я продолжу. Там я коснулся аппаратной стороны дела, а именно — определение того, что за рабочая лошадка камера нам досталась:сколько фотоэлектронов она способна удержать, какое усиление сигнала происходит в ряду её характерных ISO, и что шум, зовущийся фотонным, может быть очень даже полезным, даже если он и шум.
В этой части я предлагаю обсудить теоретическую сторону вопроса, а именно: если мы пока предположим, что будем снимать на нативном ISO, когда каждому дополнительному фотоэлектрону будет соответствовать один отсчёт АЦП ( 1e- = 1 ADU), то каким критерием мы должны руководствоваться для того, чтобы наши исходники были наименее шумными.
Теория
Прежде чем бросаться сразу в астрофотографию, предлагаю сначала провести мысленный эксперимент. Предположим у нас есть объект с абсолютно однородной поверхностью, например серая карта, которой любят пользоваться фотографы профессионалы для установки баланса белого. Если мы снимаем её с достаточно большого расстояния, то все мельчайшие неоднородности на ней сольются и мы должны получить однородно серый фон: то есть все пиксели должны были бы иметь строго одну и ту же яркость, например 128 единиц. На реальном же снимке, если мы поводим по нему той же пипеткой в фотошопе, то мы увидим, что яркость в среднем одинакова, но и отклонения от неё также присутствуют. Эти-то отклонения от среднего значения мы и будем называть шумом.
Как уже было сказано ранее, фотоны от объекта прилетают случайным образом, как капли дождя. Мы можем сказать сколько их в среднем падает на некоторую площадку, но в какие конкретно моменты времени они на неё приземляются — сказать не можем. Если за единичный интервал времени их прилетает N, то за следующий момент времени или на (другую аналогичную площадку) их прилетит столько же с отклонением ± корень из N.
Казалось бы: чем больше N, тем больше и разброс вокруг среднего, и тем больше шум. С одной стороны — это так. А с другой — абсолютная ошибка редко бывает информативной. Предположим, что ошибка в расстоянии равна тысяче километров. Но если это расстояние до галактики Андромеды, то величина будет очень точной. Поэтому гораздо удобнее выражать её в соотношении с измеряемой величиной, а тут уже с ростом сигнала ошибка уменьшается, как раз-таки в корень из N раз. Назовём это частное — соотношением сигнал-шум:
Итак, мы получили, что для идеального фотоаппарата чем больше света мы накопили (до возникновения эффектов пересвета), тем меньше шума на изображении мы получим. Это будет наша фотонная составляющая. А какие ещё у нас есть? Ну, как мы уже выяснили, сам АЦП вносит шумы в изображение просто в процессе оцифровки. А если у нас ещё и лето на дворе и матрица тёплая (а они ощутимо греются в процессе работы), то внутри фотодиода, который копит свет возможны процессы спонтанного возникновения электронно-дырочных пар, даже когда света никакого на матрицу и не приходит. Это — так называемый темновой ток. Астрофотографы хорошо с ним знакомы и клянут его на чём свет стоит, потому что утром, когда процесс съёмки основного объекта уже закончен, они мы вынуждены снимать калибровочные кадры с такой же длительностью, что и основная экспозиция (лайты), именно для того, чтобы оценить величину этого паразитного сигнала, который ещё и в каждом пикселе разный.
Поскольку все эти ошибки измерения: фотонный шум, темновой ток, шум считывания — работают абсолютно независимо друг от друга, все их вклады в погрешности суммируются по теореме Пифагора, как корень из суммы квадратов. В итоге мы получаем формулу для snr в виде:
где nl — частота появления фотоэлектронов от наблюдаемого объекта, nd — частота возникновения фотоэлектронов в результате тепловых процессов без засветки матрицы, RN — шум считывания в электронах, а t — время экспозиции. Для случая съёмки слабых объектов на засвеченном небе сюда же в знаменатель под корень надо добавить и фотонный шум от неба: nst. Именно поэтому в городе ничего путного не снять: фотонный шум от неба забивает нашу яму фотоэлектронами, но это не те дроиды, что вы ищете фотоны, которые нам нужны.
Оценка вкладов каждого из шумов
После того как мы определились, что именно мы называем шумом, надо оценить вклад каждого из них в итоговый результат.
Начну я с темнового тока, потому что от его дальнейшего рассмотрения я, по-крайней мере пока, хочу отказаться, т.к. задача и так обрастает множественными факторами и мы рискуем просто утонуть в деталях. Во-первых, тепловой шум потому и называется тепловым, потому что его величина зависит от температуры. Происходит это потому что концентрация носителей заряда с ростом температуры в полупроводниках увеличивается. А зная характер этой зависимости можно даже из данных по темновым кадрам, снятым при разной температуре, найти эту самую пресловутую энергию активации, о которой написано в процитированном источнике. Так например для матриц ASI производитель предоставляет информацию о зависимости темнового тока от температуры. И из того факта, что примерно на каждые 10 градусов темновой ток удваивается, можно сделать вывод, что энергия активации примерно равна 0.4 еВ:
Однако я отвлёкся. Даже если мы предположим, что наша матрица имеет тепловой шум сходной величины — при выдержке в 2 минуты и температуре матрицы 0 градусов мы нахватаем 6 тепловых фотоэлектронов. Много это или мало? В принципе не очень, т.к. шум считывания обычно сходного порядка, однако при росте температуры до 30 градусов (а летом это практически неминуемо), 6 могут превратиться и в 48, что уже весьма ощутимо. Но, как я уже сказал, чтобы не усложнять и без того непростую задачу вернёмся к двум другим шумам: фотонному шуму от объекта+неба (засветку мы к сожалению выключить не можем — только уехать) и шуму считывания. Очевидно, что чем бо́льшую выдержку мы поставим, тем больше полезного сигнала мы наловим. И это справедливо до тех пор, пока снимаемый нами объект не уходит в область пересвета.
Интересно, однако, узнать насколько сильным должен быть полезный сигнал, чтобы последнее слагаемое, отвечающее за неустранимый шум считывания, перестало нас волновать? Видно, что в формуле для snr все наши величины стоят в знаменателе под корнем. Выразим фотонный шум в единицах шума считывания и построим график того, какую долю от полного шума вносит шум считывания:
Графики выше были получены следующим образом: принимаем шум считывания за единицу и вычисляем полную сумму ошибок, а потом делим на случай, когда шум считывания принимается равным нулю:
Видно, что когда фотонный шум вдвое больше шума считывания, то вклад последнего снижается до 11%. Дальнейшее уменьшение даётся всё сложнее, что видно как из графиков, так и из таблички:
Вклад от шума считывания, % | Требуемый уровень фотонного шума. |
11 | 2.08 |
5 | 3.12 |
4 | 3.50 |
3 | 4.05 |
2 | 4.98 |
1 | 7.05 |
А поскольку фотонный шум растёт как корень из числа фотоэлектронов — это увеличивает требуемую выдержку квадратично! Поэтому я предлагаю не жадничать и ограничиться таким уровнем фона, при котором шум считывания внесёт в итоговое изображение не больше 3%, т.е. (Δnlt)2= 4RN или nlt=16RN2. Можно конечно пойти и дальше, и попытаться дожать фон до таких значений, что добавка к итоговому шуму будет 1%, однако это потребует в 49/16=3 раза бо́льшей выдержки. А динамический диапазон, как мы помним, у нас не бесконечный, и яркие объекты типа звёзд всё также продолжают копить свет как и фон, так что мы рискуем получить пересвеченные блямбы (каждое удвоение выдержки снимает нам как минимум один EV стоп по ярким объектам).
Но ведь ранее я произносил следующую фразу:
Итак, мы получили, что для идеального фотоаппарата чем больше света мы накопили (до возникновения эффектов пересвета), тем меньше шума на изображении мы получим.
Вроде бы это входит в противоречие с тем, что мы, даже имея возможность поставить длинную выдержку, пытаемся её зачем-то ограничить! Но на самом деле, подобрав оптимальную длину субэкспозиции, мы воспользуемся тем замечательным фактом, что сумма распределения Пуассонов — это тоже Пуассон. Причём со средним значением, лежащим на сумме исходных распределений и с дисперсией равной сумме дисперсий. Именно это и позволяет нам без всяких сложных математических преобразований просто суммировать наши изображения для получения более "чистого" результата. При сложении n независимых кадров, имеющих одинаковый snr, результирующий кадр будет обладать snr в корень из n раз бо́льшим. То есть полная формула для snr запишется как:
Что логично. Будь у нас матрица с неограниченной ямой, монтировка с идеальным ведением и небо без его рассветов/закатов/облаков/дымки — мы бы могли всё снять одним длинным кадром. Если бы не шум АЦП — мы могли бы порезать наше полное наблюдательное время T на кусочки произвольной длительности: хоть один час, хоть одна миллисекунда. Все фотоэлектроны, которые бы мы поймали — пошли бы в итоговую сумму, и единственное в чём бы мы выиграли — это в удобстве съёмки: ниже требования к точности ведения, налетевшие облака можно просто выбросить из итоговой суммы и т. п. Но вот этот противный шум считывания всё портит. Необходимо накопить некий минимальный пакет информации, чтобы провести его через границу, заплатив не слишком много.
Прямо как с покупками какой-нибудь мелочёвки в зарубежных магазинах: когда доставка может быть дороже самого товара.
С чем я нас и поздравляю. Мы только что прошли по всем тем граблям, маршрут по которым был уже давным давно расписан в одной научной статье, которая мне попалась совсем недавно.
Эксперимент
Теперь, когда с теорией немного разобрались, приступим проверке. Во-первых, насколько все эти теоретические изыскания сопоставляются с реальностью, данной нам в аппаратных ощущениях. И во-вторых, попробуем оценить насколько хорошо работает правило трёх процентов вклада от шума считывания. Вдруг это окажется слишком завышенной величиной? Я буду проводить эксперимент над своим старичком Canon EOS 450Dα, на котором, согласно моим измерениям, нативное ISO = 200. На нём я и буду снимать, чтобы пока не заморачиваться с учётом влияния гейна. Шум считывания при этом ISO: RN=10.6, неважно чего — хоть фотоэлектронов, хоть ADU.
Итак, дано:
Монитор, залитый белым светом.
Фотоаппарат с телевиком на штативе и с резкостью установленной на бесконечность.
Что будем делать:
Снимать монитор, варьируя выдержку с шагом в одну ступень, начиная с максимально возможной выдержки, когда ещё нет пересвета, и сделаем 5-6 шагов вниз с интервалом в 1 EV.
Разбивать CFA изображение на составляющие, как при анализе гейна, и смотреть на статистику.
Визуализировать данные в двух видах: переведём CFA в линейные RGB изображения, установим нейтральный баланс белого и путём последовательного умножения на факторы двойки приведём их к одной яркости и посмотрим что получается. А потом эти же файлы обработаем так, как обработали бы стандартную фотографию: с нелинейной растяжкой гистограммы, повышением насыщенности цвета и дополнительным контрастированием.
Превьюшки после первого этапа выглядят вот так:
Как и ожидалось. Последующие два этапа дают нам следующие данные:
№ | t, с | ADU | σ | snr | snrnorm |
1 | 1/10 | 9408.6 | 97.3 | 86.17 | 1 |
2 | 1/20 | 5201.1 | 67.8 | 61.61 | 0.71 |
3 | 1/40 | 3107.4 | 46.9 | 44.42 | 0.52 |
4 | 1/80 | 2057.8 | 33 | 31.33 | 0.361 |
5 | 1/160 | 1540.8 | 24.2 | 21.36 | 0.25 |
6 | 1/320 | 1283.8 | 18.9 | 13.75 | 0.16 |
Всё до безобразия по теории: уменьшение числа фотоэлектронов в два раза, в корень из двух раз увеличивает относительную ошибку. А snr, соответственно, в корень из двух же раз (примерно) убывает на каждом шаге. Из величины нормированного snr можно даже найти какое количество подобных коротких кадров нам бы потребовалось, если бы мы захотели получить snr как на самом длинном кадре:
Квадрат — т.к. snr растёт как корень из числа кадров, и тогда:
№ | 1 | 2 | 3 | 4 | 5 | 6 |
t, с | 1/10 | 1/20 | 1/40 | 1/80 | 1/160 | 1/320 |
n, шт | 1 | 1.95 → 2 | 3.76 → 4 | 7.57 → 8 | 16.3 → 16 | 39.3 → 39 |
Как видно, на последнем кадре шум считывания влез уже достаточно, чтобы его заметить, т.к. кадров потребуется не 32, а на 22.8% больше. Если мы пересчитаем, какой фотонный шум должен быть для того, чтобы шум считывания внёс 23% в наши исходники, то окажется, что он должен быть 1.4RN. Т.е. 14.84 ADU. Если мы посчитаем полный шум на кадре как:
А у нас там на последнем изображении сколько-сколько сигма была? 18.9? Практически идеальное попадание. Значит "оптимальность" экспозиции в критериях шума считывания у нас доказана как приятный бонус. А теперь посмотрим, насколько визуально заметно увеличение шума на несколько процентов:
Разница на краях просто колоссальная, но у нас там и света попало на матрицу в 32 раза меньше, и snr изменился более чем в 5.6 раз. И если на соседних панелях глаз ещё ловит разницу, то если её разделить ещё на восемь, а я напомню, разница между соседями у нас 41%, а мы пытаемся понять, увидим ли мы пятипроцентную добавку, становится совершенно очевидно, что это уже ловля блох. Ведь даже в линейном чрезвычайно растянутом представлении, которое отражено на верхней половине картинки, разница хоть и видна, но даже 40% выглядит уже незначительно. А если мы посмотрим на нижнюю половину, где показано как эта область гистограммы будет выглядеть после стандартной обработки, то мы лишний раз только убедимся, что удлинение экспозиции дольше оптимальной даже в два раза, не даёт уже ничего, а диапазон режет значительно.
Выводы
Что можно сказать на данном этапе:
Основным ограничивающим фактором при съёмке тусклых объектов является шум считывания. Можно было бы снимать и короткими экспозициями и потом складывать кучу изображений, но увы, этот шум неустраним, и поэтому необходимо искать компромисс.
Такой математически обоснованный компромисс — это выдержка, при которой шум считывания втрое-вчетверо меньше, чем фотонный шум от неба, будь оно засвечено или же нет. Дальнейшее увеличение выдержки, как сказали бы англичане: leads to diminishing returns. В том смысле, что усилий требуется всё больше: требования к точности ведения, качеству неба, глубине ямы пикселя — возрастают, а отдача практически экспоненциально уменьшается.
Теория блестяще подтверждается экспериментом.
Остаётся только рассмотреть фактор ISO в задаче. Но об этом я уже буду писать заключительную часть.