Зарегистрировано: 332




Помощь  Карта сайта

О чем пишут?

Вычисление и вывод периода дроби в C#

Задача: Дано два целых числа A и B. нужно вывести строку, которая является результатом деления A / B. Если в дроби есть период, то его выделить в скобки. Например: 1/3 = 0.(3) 1/8 = 0.125 4/3 = 1.(3) 1/11 = 0.(09) Решение: using ..
Дальше..

Я так вижу!

PICT0101.JPG

PICT0101.JPG



Воробино
Через турбуленцию к звездам
В блоге представлены фото с моего сетапа. Первую зиму телескоп пережил на кухне, летом поселился на балконе с видом на залив, на окраине Петербурга. См. статью про наблюдения через балконную дверь. На балконе сиинг лучше, но места меньше. В итоге, была сделана мини-опора, вместо штатной треноги, а теперь в планах ..
Письмо | Сообщение | ВКонтакте | Астрофорум |

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





Зачем нужны 16 бит? Сотый раз на те же грабли
/pterodactilus vulgaris/
23.09.2022


Всем, кто берется за планеты в качестве затравки было бы полезно почитать Астро-съемка Луны и планет видео камерой для сведения картины мира воедино. Там изложена не только теория, но практика, не противоречащая ей и описаны основы планетной съемки. Данная статья это следующий уровень, для продвинутых и сомневающихся. Но не менее полезная и дополняющая первую.

Для затравки неплохо бы посмотреть Расчет масштаба изображения, увеличения и разрешения астрографа и для окончательного усвоения О шумах и накоплении в астрофото. Тогда вы сможете считать себя экспертом, останется только научиться применять полученные знания на практике. Но сначала немного теории, все по порядку.

Краткое содержание предыдущих серий.

По дипскаю все условно - апертура может выстрелить (и успешно стреляет) не только по планетам. Поэтому сэмплинг заведомо гнуть под болотный сиинг = лишать себя шанса раскрыть эту апертуру. Универсальные рецепты здесь все те же - битность на максимум, самую слабую звезду на сумме положить в 3 пикселя, выдержку не задирать. По обработке все сложнее. Классическая обработка выезжает на чудесах шумодавов, волшебных "устранителях" градиентов и "магическом" алгоритме сложения. Современный софт устал соревноваться, кто кого перехитрит в рисовании. Что PI что PS, что остальные. На деле все проще - в астрофото работает простая физика и надо быть ближе к естеству.

Пара слов про кодировку цвета.

Отличие цветной камеры от монохромной в том, что с ней сложение идет после дебайеризации, а это гарантированно переводит сигнал в 8 бит. Даже если снимался 16 разрядный SER. Поэтому вы и не видите разницы между съемкой в 8 и 16 бит на цветной камере. По этой причине поканальная монохромная 16 бит съемка как правило выглядит богаче, менее зашумленной и с более насыщенным цветом.

Вы никак не обработаете снимки с цветной камеры с разрядностью больше 8 бит, если используете СТАНДАРТНЫЕ паттерны дебайеризации. Я не в курсе, как устроен тот или иной софт. Внутри они все закрыты от изучения. Я имел дело с паттернами работающими в OpenCV. Это стандартная библиотека. На выходе получается всегда 8 бит, независимо от конкретной матрицы цвета. Пример

Разумеется, 8 бит после дебайеризации можно привести к 16 бит, как на приведенном примере на нижнем снимке, но информации ему это уже не добавит. Поэтому при стандартных подходах цветная камера всегда проигрывает монохромной.

Но есть нестандартные. Например вы раскладываете ваш 16 бит SER на моноканалы в 16 бит. И обрабатываете их по отдельности. Тогда ответ неоднозначный. Но смысла и в этом случае немного. Потому как цветовой сигнал там "грязный" и слабый, по сравнению с честным монохромным 16 битным каналом. Грубо 1/3 по уровню + перетекание цвета из канала в канал + падение разрешения в ~2 раза за счет апроксимации пикселей. Потому нормой на цветной камере является серятина.

Если рассуждать логически, получаем следующее: например, имеем цветную камеру с ADC 14 бит. Пиксель по определению монохромен. Цвет мы получаем дебайером, т.е интерполяцией сетки соседних "отфильрованных" пикселей. Что отдает камера? Она отдает монохром в 14 бит, упакованный в 2 байта. Т.е. на выходе с камеры мы имеем псевдо 16 бит, у которого 2 разряда обрезаны (big ending, little ending), что не есть суть.

Далее, поток с камеры идет в программу, читающую его. Этой программе надо его расшифровать. Расшифровку программа делает согласно некоторой договоренности с камерой о "зашитой" в поток "матрице" расшифровки. В случае с цветной камерой, данной матрицей расшифровки является паттерн дебайеризации, за который и отвечает кодек, как посредник, между мозгами камеры и потребителями картинок с нее. Так вот вопрос в том, что нет такой договоренности, что цвет кодируется в 16 бит на канал, но есть куча договоренностей, что он зашит в 8 бит на канал. А так, в принципе, никаких вопросов и нет, кроме того, что это никем до сих пор не реализовано.
Так вот, когда говорят о цвете в 16 бит, это немного напрягает. Может я что-то упустил. Вопрос в том, что именно?

Пример из жизни. Я начал писать PGMania в 14-м году потому, что хотел делать 16 битный видео из монохромных 16 битных картинок, для того, чтобы не терять разрядность при обработке. Первое, на что я напоролся, что софта, умеющего это делать в принципе не существует. Кроме ffmpeg. А это "не читаемый" cmd line из 100000 строк при обработке ролика. Интернет молчал, пришлось копать.
Оказалось, что в ffmpeg используются lossless кодеки, способные решить эту задачу. О них мало кому было известно, как я понял, кроме их разработчиков и узкого круга посвященных. Сейчас PGMania клепает 16 бит AVI на лету парой кликов мышкой. И есть всего один плеер(русский) https://windowsplayer.ru, который их читает и нормально воспроизводит. Ну еще есть Я.Диск и пр, который их тоже читают, но при воспроизведении конвертят в похабный пожатый AVI со всеми вытекающими. А сколько в мире есть плееров? Сотни. Но они не читают 16 бит AVI. К чему это я?

К тому, что с 16 битным цветом такая же история - пока его кто-то не реализует программно, его не существует. Есть куча графических форматов в 16/32 bit. Монитор не способен показать ничего, кроме 8 бит на канал. Нет способа отправить на монитор и показать пользователю цветную картинку в 16 бит. Для этого существуют цветовые пространства. Для мониторов и web cтандартным является sRGB.
Сами по себе цветовые пространства разрядность не ограничивают, это делают кодеки. Так вот они и кодируют цвет в 8 бит на канал для того, чтобы физические устройства могли его корректно отобразить.

У нас с вами другие цели. Нам надо не отображать в стандартах, а обрабатывать с максимальным качеством. Сами программы при обработке никаких ограничений на кодировку цвета не накладывают.
Но у нас нет способа доставить в них эту информацию. Понятно, да? 21-й век на дворе. Почему бы производителям астрокамер не разработать собственный формат и кодеки для передачи 16 битного цвета. Это их прямой бизнес. В общем, тут вопросов больше, чем ответов.

Вернемся к нашим планетам.

Мы снимаем небо. Небо шумит. При съемке дипская на отн. длинных выдержках шумы камеры заведомо меньше или сопоставимы с шумом неба и засветкой. Дипскайщики наперегонки соревнуется в наведенной на серый космос красоте. Там вытягиваются настолько тонкие материи, что любая экономия на разрядности при съемке и в обработке напрямую выходит боком. В первую очередь вылезают шумы. Поэтому при накоплении и в обработке идет настоящая война за разрядность и SNR.

Так что с планетами? Тут люди почему-то упорно ничему не учатся. С этим реальная беда. Давным давно появились малошумящие чувствительные "планетные" камеры, а на форуме до сих пор ведутся споры, нужно ли снимать с высокой разрядностью? Воз и ныне там - 8 бит достаточно. Ну да.

Ну ладно. Если смысл всего сказанного опять не был понят, 16 бит надо запретить за ненадобностью. Планетный софт ведь в принципе ничего не делает, кроме как усредняет тысячи картинок? И на монитор идет 8 бит. Значит, и так сойдет?

Нет.Разрядность влияет на шумы в первую очередь. В 16 бит вес единицы шума в 256 раз меньше, чем в 8 бит. Хотя бы поэтому уже следует снимать на максимальной разрядности.

Сравнение шума 16 и 8 бит

При съемке планет выдержка минимальна, засветка и шумы неба не накапливаются. В первую очередь за счет способа обработки - картинки не складываюся, как в дипскае, а "усредняются".
Отсюда шумы камеры и фотонн ый шум выходят на 1-й план. Это т.н. "белый" шум, имеющий хаотичную структуру. И подчиняются они простому закону - шумы суммы обратно пропорциональны квадратному корню из количества кадров идущих в сложение. Т.е. при сложении N кадров получим отношение сигнал/шум: SNR ~ f/SQR(N), где f некая функция сложения сигнала. Примем ее за 100% ДД.

Давайте посчитаем удава в попугаях. Например, у нас есть камера, способная снимать в 8 и в 16 битах. Любой шум оцифровывается, не так ли? Допустим, шум настолько слабый, что занимает 1 разряд. А сигнал настолько яркий, что занимает весь ДД.

При съемке в 8 битах сколько весит 1 бит шума? 1/256 часть ДД. При съемке в 16 битах 1/65535 часть ДД. Для 1000 кадров множитель шума составит: k = 1/SQR(1000)= 0,031623
Этот коэффициент не зависит от разрядности, а зависит только от количества кадров, участвующих в сложении(1000). Если принять, что шум как минимум занимает 1 младший разряд матрицы (меньше о
н быть не может), и для 8 битовой съемки его вес принять за 1, то для 16 бит его вес будет в 256 раз меньше (1/65535 это вес младщего разряда 16-битной матрицы). На сумме 1000 кадров в 16 бит множитель шума составит ~ 0,031622 /256. Это условность, но шумовую картину описывает.

Посчитаем шумы суммы при сложении 10000 кадров: k = 1/SQR(10000)= 0,01. Как и в случае выше, примем это за 1 для 8 бит. Для 16 бит при сложении 10000 кадров, получим отношение сигнал/шум: 0,01/256 = 0.0000390625

Отсюда получим разницу в шумах на сумме 10000 кадров в 16 бит по сравнению с суммой 1000 кадров в 8 бит: выигрыш по шумам составит 0,031623/0,0000390625 = 809,54 раз или 10(!) двоичных разрядов. Снять 10000 кадров в 16 бит на современных матрицах труда составит не намного больше, чем 1000 кадров в 8 бит. Выводы делайте сами.

Отлично. Предположим, мы вытащили 10 разрядов. Вы его на 8 битах куда засунете? Он просто обрежется и выигрыша вы не увидите. А на 16? А на 16 битах у вас всегда есть место для него. Поэтому сложение ведется в 16 битах или больше. 10 разрядов - много это или мало? Для 16 разрядной картинки это 1/64 динамического диапазона или максимального уровня сигнала. Вроде немного. Но шумы в 800 раз меньше! А это очень много значит для качества итоговой картинки.

Но если вы снимали в 8 бит.. этот приз вам не достанется. Максимум, что вы получите на 10000 кадрах это 3 бита в плюс к имеющимся изначально 8. Шум составит минимум 1 разряд. На сигнал остается 10. Остальное нули. Так вот получается, у нас 2 итоговые картинки:

1. Сумма с ДД 15 бит и шумом 1 разряд
2. Сумма с ДД 10 бит и шумом 1 разряд

Вопрос - какая картинка будет менее защумленная? У которой вес шума 1/2^15 ДД или та, у которой вес шума 1/2^10 ДД? Если вы ответили на него правильно, эта статья была написана не зря.

После сложения формат так и так обрежется до 8 бит при конвертации в jpg. Можно сохранять сумму в png в 16 битах, не суть. Суть в том, что складывать надо 16 битный исходный сигнал, а не 8. Это 2 большие разницы. А вот готовый результат на экране 8 и 16 бит отличить уже не так просто. Хотя и тут все зависит от исходников. 16 битные исходники дадут более глубокие цвета даже на 8 битной сумме. 8 битные исходники переводить в 16 бит не имеет смысла. Там просто не будет информации в младших разрядах. Если посмотреть в PS на серый линейный градиент 8 и 16 бит, разница будет хорошо заметна.

Еще раз про суть. Увеличение разрядности уменьшило вес шума исходников в 256 раз.
Переход от съемки 1000 кадров к 10000 кадров снизил шумы суммы в 3 раза.
Если бы шум исходников был бы 1 бит (это фантастика), мы бы получили снижение шума в ~3*256 раз.
Но на практике это не реализуемо. Зашумленность картинки зависит от кучи факторов. Основные из них: чувствительность камеры, выдержка, апертура, 1/f. Это факторы, обеспечивающие наполнение пикселя светом. Чем больше света ляжет на пиксель, тм меньше будет фотонный шум. Бонусы обозначены. Еще есть сиинг, прозрачность неба, засветка (для планет не критична). Это вредные факторы, снижающие качество картинки и увеличивающие фотонный шум. В зависимости от того, что вы сможете выжать из своей аппаратуры и условий наблюдения, вы и получите соответствующие результаты. Тенденции обозначены.

Едем дальше.

Предположим, что это уже известный и доказанный факт, что при сложении разрядность суммы увеличивается. Так вот слабый сигнал, тонущий в шумах, потому и вылезает на сумме, что переходит границу зашумленности именно на сумме. Но как его вытащить, если он находится на пороге чувствительности камеры и занимает 1 разряд, как и шум?

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

Теперь вернемся к цифрам - в каком случае мы вытащим более слабый сигнал? Догадайтесь сами. Школу прогуливали все, это нормально. Но здравый смысл отрицать чего для? Видите вы разницу, не видите, не верите цифрам - смотрите на картинки, которые я приводил выше. Там хорошо видно, что 8-ми битный шум жирнее и контрастнее.

А по дипскаю что, работают другие принципы? Там вообще один мрак на исходниках. Те же самые принципы. Но там никто не догадывается снимать в 8 бит. Понятно, что на 8 битах можно снимать быстрее. Меньше требования к железу. Ну так никого и не принуждают снимать в 16. Это дело добровольное. Но у меня вопрос - а зачем вы покупаете все эти новые камеры, если вы их не используете по назначению? Чисто похвастаться крутой камерой и деньги потратить? А сложить и поделить две цифры религия не позволяет?

(С)p.v., 11.2021, СПб (upd. 09.2022)