Как стать автором
Обновить

Комментарии 59

отличные результаты, респектус
Безумно круто. Оно наверно ещё и шумы матрицы скушает неплохо если с большими iso снимать.
А не поделитесь реализацией? А то есть у меня камера и 3M-5CA тоже интересный объектив. По итоговой резкости иногда превосходит mto100. Хочется попробовать что-нибудь такое.
Если камера скоростная, то есть смысл попробовать. Иначе уже просто неинтересно
Очень даже неплохо убирает шумы, без всяких дополнительных фильтров. Сказывается избыток информации при высокочастотной съемке
Впечатлило практическое применение распознавания номера машины аж за 2 километра.
Ух ты ж, как круто!!! А камеры с такими «антишоками» когда начнут выпускать? :) Уже хочу!
Вы сможете себе позволить камеру за пару миллионов долларов? =D
Серьезно?!?? Почему такие суммы?
Скоростная светочувствительная камера + активная оптика.
На сколько усложняется модель для RGB?

Результаты — очень впечатлили!
Не сильно. Ввиду слабой зависимости турбулентных искажений от длины волны можно все цвета обрабатывать одинаково. Ну нет у меня подходящей цветной камеры. Собственно, из-за воздушной дымки насыщенность цветов сильно падает, поэтому большой разницы между цветной и черно-белой картинкой не будет
Автор молодец! Мне периодически приходится фотографироваь через марево — результат как правило печален. Хотя мои объекты довольно крупные, но марево тем не менее дает существенные искажения.

Не пробовали сравнивать свой результат с AviStack, Registax, DeepSkyStacker?
Плюсую. Использовал регистакс, вроде суть та же. Непонятно чем готовый продукт хуже/лучше того, что в статье.
Чуть ниже я написал, чем лучше и хуже
Регистакс у меня есть, естественно, сравнивал. В принципе, результаты одинаковые, если долго ковыряться в его многочисленных настройках и смотреть только финальный кадр. Достоинство Регистакса в обилии всяких опций (программист все-таки писал), основные недостатки — фильтрация, настраиваемая вслепую, «методом тыка», ненадежное определение смещений (я проверял, если вычислять корреляцию через фурье, будет хуже!) и, разумеется, конечный результат в виде одной фотки, а не видеопоток в реальном времени. Вообще Регистакс, как я понимаю, предназначен для ручной творческой работы, причем специально с астрономическими объектами.
Корреляция через преобразования фурье должна теоретически давать в точности тот же рузультат, что и прямая свёртка. В вашей статье же написано про сумму модулей. Правильно ли я вас понял, что результаты с суммой модулей были лучше, чем с корреляцией?
Да, я почти уверен, что лучше. Для массивов размером менее 100х100 пикселей еще и считается быстрее. Для больших массивов (я пробовал делать стабилизацию участка 512х512), естественно, с фурье считается намного быстрее и вполне точно.
НЛО прилетело и опубликовало эту надпись здесь
К плагину для обеспечения нужной эффективности необходима соответствующая оптическая система и сопряженная с ней скоростная камера, установленные на опорно-поворотном устройстве
Насколько скоростная?
А вы можете рассказать про «опорную звезду», формируемую лазером?
Для почти полной компенсации атмосферных искажений в активной оптике необходимо отслеживать волновой фронт с частотой не менее ~100Гц (а лучше — больше). Использовать реальные звезды на таких частотах невозможно (слишком мало света), поэтому-то и «зажигают» опорную искусственную звезду. Датчик волнового фронта (чаще всего это — датчик Шака-Гартманна) формирует матрицу углов наклона волнового фронта по зеркалу, по которой генерируется набор управляющих сигналов для пьезокерамических актуаторов активной оптики вторичного зеркала. Так как первый коэффициент Цернике (наклон) почти полностью компенсирует атмосферное дрожание изображения, коррекцию коэффициентов более высоких порядков обычно не проводят (это будет сильно дороже).
Примерная стоимость такого счастья (активная оптика с искусственной звездой) не менее ста миллионов рублей (как-то были разговоры о внедрении на БТА, но из-за слишком высокой цены отказались — если начать внедрять, то реально цена наверняка намного больше выйдет).
Ну, скажем, 500 кадров в секунду. Будет видно значительно лучше, чем к меня.

Лазерная звезда — это свечение слоя атомов натрия в стратосфере, возбуждаемое лазером. Насколько я понимаю, она выглядит ярким точечным объектом, похожим на настоящую звезду, но зажигать ее можно в любом нужном нам месте (в поле зрения телескопа)
Ну, скажем, 500 кадров в секунду

Такое реально лишь для искусственной «звезды».

«Лазерная звезда» на самом деле отнюдь не точечный объект: это скорее эдакая «игла». Однако, угловые размеры ее действительно невелики.

А «зажигать» ее нужно как можно ближе к реальному изображению объекта, иначе свет от объекта и свет от искусственной звезды пройдут через разные неоднородности и ничего не получится.
На лазерную звезду датчик ВФ смотрит практически вдоль луча лазера, а апертура у него обычно гораздо меньше, чем у телескопа, так что для него область свечения будет почти точка
Кстати, к вопросу «как работает лазерная звезда». Вот небольшой фильм, имитирующий работу адаптивной системы, снятый в лабораторных условиях.
В качестве объекта использовалась спираль от электролампочки, а лазерной звездой был, собственно, лазер. Атмосфера имитировалась нагретым чайником, стоящим перед лампочкой и создающим вертикальные потоки воздуха. Расположив звезду поближе к спирали, можно добиться, чтобы «атмосферные» искажения были примерно одинаковы как для звезды, так и для объекта. Датчика волнового фронта и гибкого зеркала у меня не было, поэтому пришлось искажения для каждого кадра считать программно. Левый верхний квадрат (ЛВ) – это исходное изображение объекта (будем считать, что это «галактика») и опорной лазерной звезды чуть правее и ниже. Правый верхний квадрат (ПВ) – то, что видит «датчик ВФ» (только искаженную опорную звезду, или, иначе говоря, мгновенную функцию рассеяния точки). Правый нижний квадрат (ПН) – идеальное изображение точки для данной оптической системы, то, что должно быть в отсутствие искажений. Эту картинку (ПН) легко вычислить. Дальше надо вычислить ОПФ для каждого кадра как отношение фурье-образов ПВ и ПН. Зная ОПФ, делим фурье-образ ЛВ на ОПФ, берем обратное фурье и получаем левый нижний квадрат (ЛН), т.е. исправляем все точки изображения «галактики» в каждом кадре. Еще надо имитировать длительную экспозицию, как в астрономии, т.е. просто сложить все кадры и сравнить, что получилось:

img-fotki.yandex.ru/get/6436/46744491.0/0_8194b_cd5fef4c_XXL.jpeg
Видим, что разрешение «галактики» в ЛН по сравнению с ЛВ улучшилось в несколько раз, а опорная звезда, как и следовало ожидать, вообще идеально восстановилась, даже дифракционное кольцо видно.
В настоящей адаптивной системе датчик ВФ, сравнивая ПВ и ПН, должен выдавать на гибкое зеркало такие сигналы, чтобы ПВ, отраженный в гибком зеркале, получился такой же, как ПН. Тогда автоматически и ЛВ, отраженный в том же зеркале, преобразуется в ЛН. Т.е. суть одинакова, только реализация механическая, а не программная.
В астрофизике такие методы называются superresolution. На практике не используются почти никогда, т.к. шаг
умножение полученного спектра на обратную оптическую передаточную функцию H(x,y), вычисленную в [2,3]

приводит к делению на ноль (в худшем случае) или сильным ошибкам вблизи нулей и полюсов передаточной функции (в лучшем).

Для задач распознавания объектов (когда сохранение распределения интенсивности излучения — вопрос второстепенный) этот метод еще кое-как можно применять, но и в этом случае основная проблема — нахождение передаточной функции. А найти ее можно только используя специальную калибровочную миру. Причем калибровку нужно делать как можно чаще, т.к. атмосфера довольно быстро меняется. Без калибровки можно лишь немного улучшить разрешение, обрабатывая ряд изображений.
Сверхразрешение — это не совсем то же самое. Если вы заметили, у меня в ОПФ стоит дополнительный множитель с арккосинусом. Он там стоит не просто так, а для того, чтобы не было «сильных ошибок вблизи нулей».

Усредненная атмосферная передаточная функция в принципе зависит только от радиуса Фрида, который можно периодически вычислять по дисперсии дрожаний. Я, правда, пока так не делаю, а двигаю ползунок на форме в небольших пределах.
Это хорошо, когда у вас есть несколько кадров. Но в реальности получить за одну ночь несколько кадров невозможно: даже за те десятки минут экспозиции у вас могут измениться атмосферные условия.
А вообще, фотометрия не столь интересна, как спектроскопия. Но там уже совсем другие экспозиции: для многих объектов даже ночи не хватит, чтобы нормальный спектр получить.
На астрономические наблюдения я не претендую, хотя и совсем не чужд этому. И спектрометр у меня есть
Ну я и тугодум. Только сейчас до меня дошло, что речь идет не о получении научных данных, а об обычном любительском астрофото! Там — да, приходится сильно ухищряться, т.к. любителю нереально потратить миллионы на телескоп, светоприемник и приличный фотометр (я уже молчу об активной оптике с искусственной звездой).
Почему миллионы. Вот Meade 250 мм у меня на работе есть, всего 150 тыс., полный автомат
Науки на миде вы не сделаете (кроме исследования атмосферы или наблюдения за метеорами). Нужен как минимум метровый телескоп.
Я — совсем тугодум! Тут, оказывается, еще и замечательное видео было. Пока в хромом не открыл — не замечал (т.к. оно на флеше, а не html5).

Замечательные примеры! Я как раз с другом лет 6 назад подобными вещами пытался заниматься (а он, кстати, даже немного смог заработать, распознав лицо человека сквозь пелену табачного дыма на видеосъемке).
Действительно, ваши бы труды — да в библиотечку!
здорово! молодцы!
Наверняка кто-то зайдёт в коменты, чтобы найти эту картинку:
image
Бредятина, разумеется. В кино можно сделать все, что угодно
Это я не умею
Выложите код на github, вам помогут, например я. Если есть желание, конечно.
Если алгоритм актуален, есть математическое описание и пример реализации, думаю сообщество примет. Это тоже спросить можно.
вот бы на самом деле реализовать это аппаратно. в камере или телефоне.
Нет смысла. Обычно камеры в телефонах с их микроскопическими объективами просто не замечают никакой турбулентности. Искажения, как правило, имеют величину порядка секунд, или десятков секунд (угловых), что для маленьких объективов недоступно.
А нельзя ли формулами как то показать вашу модель искажения/получения данных? А то совершенно непонятно что именно вы компенсируете…

Например, что то вроде этого Y(x,y) = X(x+a,y+b) + c, где Y — наблюдаемое изображение, X — истинное, а a,b,c — случайные величины какого-то распределения.
Такой формулой, как вы написали, нельзя. Со всякими интегралами и усреднениями — наверное, можно
Круто! Думаю, то что-то подобное делает человеческий глаз (постоянно, подсознательно), принимая на себя различные виды вибрации.
Именно так. В этом легко убедиться, если сравнить какой-нибудь один нескорректированный стоп-кадр из фильма с исправленным. Разница бывает очень большая. В видеопотоке глаз в некоторой степени подсознательно делает что-то подобное, как мне кажется.
А можно такой вопрос: как вы определяли смещение изображения при наклоне (деревья в метель)?
Обычные смещения легко кросс-корреляцией получить, а вот с наклонами дело куда хуже…
Ничего особенного не делал. Смещение определялось так, как написано. Очевидно, вклад фона в корреляционную функцию был больше, чем у тех веток, которые наклоняются. Я думаю, из-за большой частоты кадров изображение успевает заново сформироваться и «размазывание» веток при их поворотах просто малозаметно.
Понятно. Просто я уже давно интересуюсь способом, позволяющим получить значение не только смещения объекта, но и поворота. Увы, пока работает только велосипед, базирующийся на ключевых точках (точность его, понятное дело, крайне невелика).
Вы можете разбить окно на части, для каждой вычислить смещение с помощью корреляции, например, затем проинтерполировать вектор смещения, и применить это проинтерполированное смещение к исходному изображению. Такие итерации повторяются несколько раз. Такой подход применяется в PIV (particle imaging velocimetry). Другой вариант — считать optical flow.
Тогда окно придется делать слишком мелким (чтобы поворот не влиял на ККФ), а это приведет к значительным ошибкам отождествления.
А optical flow тоже не является универсальной штукой.
Поток, по-моему, еще и считать очень долго
Зависит от размера изображения и мощности железа. В принципе, если бы данные из ОЗУ компьютера в ОЗУ видеокарты и обратно перемещались бы хотя бы на пару порядков быстрей, то вполне можно было бы на мощной видеокарте обсчитывать 720p с частотой кадров 5 в секунду.
Для этого и нужны итерации. На первой мы определяем смещения грубо. Но зато устраняем бОльшую часть смещений и поворотов, влагодаря чему на следующей итерации всё отождествляется уже намного точнее.
А такая коррекция работает только на «статичных» изображениях или движущиеся объекты тоже нормально выглядят?
Если использовать камеру, скажем, 400 кадров/сек, то и движущиеся (не слишком быстро) объекты можно наблюдать примерно с таким же улучшением. Например, идущего человека. Правда, возникнут новые проблемы — надо ускорить обработку, компьютер помощнее, сделать другой канал передачи данных, побыстрее, чем 1-Гбитный Ethernet.
У таких скоростных камер главная проблема — интерфейс. Невозможно сделать «full-HD» камеру, которая могла бы снимать видео с частотой ~400 кадров в секунду в течение длительного времени. Те, что есть, имеют буфер (скажем, 64ГБ оперативной памяти DDR3), в который и скидывают накомпленное, т.е. реально они снимают всего лишь несколько секунд.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории