Камера обскура - первый девайс для получения изображений
Опыт использования различных устройств для создания реальных изображений нашего мира уходит очень далеко. Камера обскура – самое простое, но от этого не менее интересное устройство. Считают, его использовали некоторые художники для создания фотореалистичных картин еще в 15 веке. Процесс такой работы показан на рисунке 1.1.
Часто приводят в качестве примера картину голландского художника Яна ван Эйка «Портрет четы Арнольфини» (1434 г.). Мы его тоже приведем на рисунке 1.2. Очень знакомые лица.
Для своего времени эта картина отличалась невероятной детализацией. Зеркало, в котором отражается вся комната, и металлический канделябр сложной формы часто печатаются отдельными фрагментами как доказательство виртуозности мастера. Посмотрите на рисунок 1.3. Зеркало выпуклое, блики на элементах показывают, что они покрыты лаком. Четки из стекла. Такая реалистичность достигается точнейшей передачей цвета и светотени. Но на глаз сделать такую работу почти невозможно, так как блики меняются, стоит лишь двинуть головой или перевести взгляд.
Стеклянные линзы и первые фотоаппараты
С появлением стеклянных линз стало все гораздо интереснее… и сложнее. Фотография завладела умами многих энтузиастов. На рисунке 1.4 показана схема и внешний вид одного из самых ранних фотоаппаратов. Принцип работы точно такой же как и у «камера обскура». В чем преимущество линзой над отверстием камеры обскура? Попадает больше света, а именно он нужен для химической реакции, которая позволяет регистрировать изображение на носителе.
Первые фотографии были далеки от идеала. Требовали большого времени регистрации изображения из-за несовершенства технологии. Но постоянная работа огромного количества людей над увлекательной задачей фотографирования давала свои плоды. Процесс стал быстрее, качество изображений росло. На рисунке 1.5 представлены две известные фотографии. Изображение, снятое Жозефом Нисефором Ньепсом и известное как «Вид из окна в Ле Гра», было создано в 1826 году с помощью камеры-обскуры (даже пока без использования линзы) на пластинке, покрытой тонким слоем битума. На втором изображении реконструкция и оригинал первого селфи за авторством Роберта Корнелиуса. Вот он уже точно использовал фотоаппарат с линзовым объективом. 1839 год.
Несмотря на то, что до появления возможности получать цветные изображения было еще очень далеко, российский изобретатель Прокудин-Горский придумал, как можно сохранить информацию о цвете. Три фотографии через три цветных фильтра. Даже сейчас смотрится очень круто. А до изобретения цветной пленки на тот момент было еще 25 лет. На рисунке 1.6 мы привели примеры того, как выглядели оригиналы фотографий и результаты восстановления таких изображений.
Рисунок 1.6 – Фотографии сделанные Прокудиным-Горским: восстановление из трех фото одного цветного и восстановленная фотография Эмира Бухарского (1911 г.)
Современные объективы
Как и любая технология, объективы фотоаппаратов стали развиваться, усложняться и эволюционировать. Теперь это могут быть очень сложные, тяжелые и дорогие устройства, способные прекрасно решать возложенную на них задачу – собирать нужное количество света и фокусировать его в нужное место. На рисунке 1.7 показан один из современных объективов в разрезе и один из самых (но не самый) тяжелых серийных телеобъективов.
И даже объективы в мобильных устройствах являются вершиной технологий. Они маленькие и сложные. На рисунке 1.8 показано из скольких элементов может состоять объектив мобильной камеры.
Дифракционная оптика
Несколько десятилетий назад с появлением серьезной вычислительной техники появилась возможность рассчитывать поведение света при прохождении через сложные поверхности на прозрачных элементах. Так началась история дифракционной оптики. На рисунке 1.9 примерный вид получаемого элемента.
Эти сложные поверхности могут преломлять свет так, как нужно нам. При этом высота рельефа может быть всего 10 мкм. Значит, мы можем создать дифракционный элемент, который будет работать как линза и быть при этом очень тонким (и легким). Хм… Плоская линза. Где-то это уже было. Действительно, есть линза Френеля (рисунок 1.10). Дифракционная линза по своей идее очень похожа на линзу Френеля, только тоньше, точнее, НАМНОГО тоньше! На рисунке видно как на круглом стекле нанесены «окружности». Эти окружности высотой всего несколько микрометров. Они и есть наша линза. Если захотеть можно такой элемент создать на очень тонком стекле или даже на плёнке.
Итак, у нас есть линза. Но работает она не совсем так как привычные нам стеклянные линзы. Из-за того, что все происходит на поверхностях с очень низким, сравнимым с длиной волны света рельефом, начинают проявляться другие эффекты.
-
Дифракционный оптический элемент (ДОЭ) рассчитывается для точного значения длины волны. Так, например, для лазерного излучения, которое имеет одну длину волны, дифракционная линза работает идеально — фокусирует такой пучок в нужной точке пространства. Но видимый свет включает в себя множество длин волн. Можно представить обычный свет, отраженный от какого-то предмета, как множество лазерных пучков, каждый из которых обладает своей длиной волны и своей интенсивностью. Многие из вас и так поняли, что речь идет о спектре света. Так вот, дифракционная линза будет каждый пучок, отличающийся по длине волны от расчётного, фокусировать немного в другое место, ближе к линзе или дальше. При этом на изображении, которое мы получаем дифракционной линзой каждая точка будет выглядеть как немного размытое пятно. И сила такого размытия неодинакова и зависит от спектра света.
-
Кроме этого, есть эффект, выглядящий на изображениях как ореол, накладывающийся на другие объекты. Этот ореол обусловлен перераспределением энергии при фокусировке.
На рисунке 1.11 один пример изображения, снятого на дифракционную линзу. На рисунке 1.12 изображение, полученное через обычный объектив, с более близкого расстояния и с другого ракурса.
И тут возникает вопрос, а как же бороться с такими искажениями? Неужели не получится заменить обычную толстую линзу на дифракционную? Можно сделать такое изображение полезным, хотя бы буквы различить? Можно! На рисунке 1.13 пример того, что можно вытащить из снимка.
Проводить испытания в лаборатории, где идеальные условия, тепло и сухо, в какой-то момент стало скучно. Всегда было интересно посмотреть, как оно вживую может работать, на максималках! Мы решили отправить наш объектив в космос.
Чтобы проверить, как работает наш объектив, нам нужен был спутник. Такой спутник решили запустить ребята из Высшей Школы Экономики. Спутник в формате CubeSat 3U обладает небольшими размерами 10×10×30 см, но нам много места пока и не было нужно. Был разработан и изготовлен корпус для нашего объектива методом трехмерной печати из порошкового металла (рисунок 2.1).
В корпус мы установили дифракционную линзу и цифровую матрицу, и команда из ВШЭ поместили корпус в спутник (рисунок 2.2).
21 марта 2021 года спутник был успешно выведен на расчетную орбиту и началась работа. Настройка режимов съемки, передача на Землю несжатых изображений, работа по улучшению изображений, анализ ошибок и переобучение нейронных сетей. Работа и сейчас ведется постоянно. На рисунке 2.3 первое несжатое полноразмерное изображение с нашего объектива, которое мы получили и с которым начали работать.
Задача, которую мы решаем — получить изображение с разрешающей способностью на поверхности не хуже 100 метров на 1 пиксель. А какими способами можно улучшить полученные снимки мы подробно опишем дальше. Это можно сделать при помощи графического редактора, можно использовать программную реконструкцию, или использовать нейронные сети.
Давайте посмотрим на исходное изображение на рисунке 3.1.
На изображении часть побережья. Что же с ним не так? Изображение недостаточно контрастно и довольно сильно размыто. Всё, как мы любим! Повысить резкость и увеличить контраст можно с помощью графических редакторов (Gimp, Photoshop). Все графические редакторы предоставляют неплохой набор инструментов. Возьмём Adobe Photoshop просто для примера. Попробуем поработать с контрастностью. Глазу приятнее, когда изображение сбалансировано по свету, присутствуют и темные и светлые части. Для начала нужно выровнять гистограмму изображения. За это отвечает инструмент Кривые (Изображение → Коррекция → Кривые) рисунок 3.2.
Выравниваем гистограмму и делаем S-кривую с небольшой кривизной, для этого нам хватит всего четырёх точек. Две точки зафиксируют места, где на изображении уже нет информации — самые яркие (левая часть гистограммы) и самые тёмные (правая часть гистограммы). Самая левая поставленная на кривой точка у нас отвечает за белый цвет, самая правая за черный. Две внутренние точки задают цвета которые на изображении будут наиболее различимыми. На рисунке 3.3 показано, как такие изменения влияют на изображение.
Стало гораздо приятнее глазу. Но осталось то, что заметно портит ощущение от изображения — шум, мелкие частые точки, похожие на пыль. Для устранения высокочастотного шума (а мелкие частые точки это именно такой шум) применяем размытие по Гауссу (Фильтр → Размытие → Размытие по Гауссу...) с радиусом 1,6 пикселей. При этом все будет выглядеть, как на рисунке 3.4.
Теперь было бы неплохо увеличить чёткость (она же резкость) границ предметов на изображении. Инструментом Контурная резкость (Фильтр → Усиление резкости → Контурная резкость...) повышаем резкость на границах светлых и тёмных участков (рисунок 3.5).
А теперь посмотрим, что было в самом начале и что получилось в результате (рисунок 3.6). Необходимо убедиться, что важная информация сохранилась. При неудовлетворительном результате нужно подобрать чуть другие параметры фильтров.
Неплохо получилось, но работа в графическом редакторе хоть и позволяет все делать на глаз, для стабильного результата требует большого опыта работы. Поэтому мы используем графический редактор только для того, чтобы быстро оценить картинку или подготовить её для печати, чтобы на бумаге или на экране она выглядела чуть приятнее. Те же задачи, которые мы решали с помощью инструментов графического редактора, можно решать при помощи алгоритмов, где мы точно будем знать, что и как происходит с изображением. Дальше начинается медленное погружение в инженерный и научный подход к улучшению изображений. Поэтому и язык описания будет чуть строже, терминология станет чуть более жёсткой и появятся отсылки к научным публикациям, которые будут приведены в конце.
Приведенные в разделе 3 базовые методы цветовой коррекции выполнены вручную в специальной программе обработки растровых изображений. Здесь мы разберём, как похожие операции выполнить используя Python
, библиотеки NumPy
, Matplotlib
и OpenCV
.
Обработку по шагам можно выполнить онлайн на платформе Google Colaboratory
, используя прилагаемый блокнот (python notebook). Удобство работы с кодом на Python
в Google Colaboratory
заключается в том, что для работы вам даже не нужно устанавливать Python
на свой компьютер. Тоже самое вы можете сделать на своём компьютере, сохранив блокнот в формате *.ipnb на локальный диск и запустив Jupyter notebook на вашем компьютере.
В блокноте Python notebook в Google Colaboratory приведен код и краткое описание шагов выполнения. Далее будут приведены ссылки на конкретные секции блокнота. Перейдем непосредственно к обработке изображений на Python
.
На исходном изображении присутствует высокочастотный шум, который желательно отфильтровать перед тем как приступить к восстановлению изображения. Алгоритм фильтрации шумов описан в работе [1]. В данном алгоритме используется два настраиваемых параметра: параметр регуляризации λ∈[0,1] и количество итераций iter_count. При λ=0 алгоритм шумоподавления сглаживает шумы сильнее, выравнивая текстурную составляющую изображения, пренебрегая контурной. При λ=1 алгоритм шумоподавления сглаживает шумы слабее, но при этом сохраняет контуры на изображении. Количество итераций влияет на точность получаемого результата. В начальном приближении рекомендуется установить следующие значения: λ=0.5,iter_count=300. Варьирование данных параметров позволит получить результат обработки, в котором будет найден компромисс между сглаживанием текстурной и сохранением контурной информации на зашумленном изображении.
Код для запуска модуля шумоподавления приведен здесь.
На рисунке 4.1 изображены примеры фильтрации шумов с параметрами λ=0.8,iter_count=300 и λ=0.2,iter_count=300. На рисунке 4.2 приведены увеличенные фрагменты.
Рисунок 4.1 – Демонстрация работы алгоритма шумоподавления, слева направо:
результат обработки с параметрами λ=0.8,iter_count=300,
исходное изображение без обработки,
результат обработки с параметрами λ=0.2,iter_count=300
Рисунок 4.2 – Демонстрация работы алгоритма шумоподавления (увеличенные фрагменты), слева направо:
результат обработки с параметрами λ=0.8,iter_count=300,
исходное изображение без обработки,
результат обработки с параметрами λ=0.2,iter_count=300
На рисунке 4.2 видно, что в случае выбора параметра λ=0.8 шум немного сгладился, но тем не менее его присутствие видно невооруженным взглядом. Контуры очертания материка не пострадали. На изображении, обработанным алгоритмом с заданным параметром λ=0.2, от шумов не осталось и следа, однако, очертания суши значительно “смягчились”.
Работа с гистограммой цветного изображения позволяет существенно улучшить цветовой контраст изображения и его визуальное восприятие. Растянутая по всему диапазону гистограмма дает более высокое визуальное качество изображения, однако график гистограммы получается более рваный. Такая «рваная» гистограмма приводит к так называемому эффекту постеризации изображения (вырождения детальности изображения), особенно сильно проявляющемуся после нейросетевой обработки или повышения чёткости изображения. Пример такой постеризации приведён ниже.
С учетом сказанного, предпочтительным результатом обработки является сдвиг гистограммы влево с растяжением, при этом получается компромиссный вариант по улучшению цвета изображения (рисунок 5.2) с минимальным эффектом постеризации, результат приведен на рисунке 5.3.
Код для запуска модуля цветовой коррекции приведен здесь.
Изображения, получаемые при помощи плоских объективов, подвержены значительным хроматическим аберрациям (искажениям, определяемым цветом объектов) и сильно уступают в качестве современным многолинзовым объективам. Однако, применение вычислительной постобработки позволяет улучшить качество таких изображений. Рассмотрим два подхода к повышению качества изображения:
- Классический — применение цветовой коррекции и обратной свёртки для повышения чёткости изображения;
- Нейросетевой подход — применение предварительно обученной свёрточной нейронной сети. В данном разделе рассмотрим применение метода обратной свёртки на основе метода минимизации полной вариации [2]. Предлагаемый подход основан на следующих этапах:
- идентификация ядра размытия — функции размытия точки;
- реализация обратной свёртки на основе метода минимизации полной вариации. Получение оценки ядра размытия основано на сравнении получаемого снимка калибровочного изображения и его четкого оригинала (рисунок 6.1). Изображение калибровочной шкалы содержит белый шум, равномерное распределение интенсивностей от 0 до 255.
Идентификация функции размытия точки осуществлялась в лаборатории перед отправкой объектива в космос. Перед применением обратной свертки с рассчитанным ядром смаза осуществляется цветовая коррекция изображения с использованием трехмерных таблиц поиска (3D LUT). Для вычисления параметров цветовой коррекции так же использовались калибровочные цветовые шкалы. Пример такой шкалы приведён на рисунке 6.2.
Результат применения цветовой коррекции с использованием 3D LUT и алгоритма обратной свёртки приведён на рисунке 6.3.
Код для запуска модуля реконструкции с использованием обратной свертки приведен здесь.
В данном разделе приведён пример восстановления качества изображения с помощью нейронной сети U-Net. Архитектура сети и процедура обучения описаны в работе [3]. Нейросетевая реконструкция изображений относится к области вычислительной фотографии. Ознакомление с данной темой рекомендуется начать со статьи [4]. На рисунке 7.1 представлено наше исходное изображение, полученное плоским дифракционным объективом и поступающее на вход нейросети.
Перед обработкой нейронной сетью U-Net предлагается устранить высокочастотный шум на основе алгоритма, описанного в разделе 4 (рисунок 7.2). Также после подавления шума предлагается сдвинуть гистограмму изображения влево с растяжением (рисунок 7.3). Процедура описана в разделе 5. Результирующее изображение подается на вход нейронной сети. На рисунке 7.4 представлен результат нейросетевой реконструкции.
Код для запуска модуля реконструкции с использованием нейронной сети приведен здесь.
- Nikonorov, A. Vessel segmentation for noisy CT data with quality measure based on single-point contrast-to-noise ratio / A. Nikonorov, A. Kolsanov, M. Petrov, Y. Yuzifovich, E. Prilepin, S. Chaplygin, P. Zelter, K. Bychenkov // Communications in Computer and Information Science. – 2016. – V. 585. – P. 490-507.
- Heide, F. High-Quality Computational Imaging Through Simple Lenses / F. Heide, M. Rouf, M. B. Hullin et. al. // ACM Transactions on Graphics (TOG). – 2013. – Vol. 32, Iss. 5, No. 149.
- Евдокимова, В.В. Нейросетевая реконструкция видеопотока в дифракционных оптических системах массового производства / В.В. Евдокимова, М.В. Петров, М.А. Клюева, Е.Ю. Зыбин, В.В. Косьянчук, И.Б. Мищенко, В.М. Новиков, Н.И. Сельвесюк, Е.И. Ершов, Н.А. Ивлиев, Р.В. Скиданов, Н.Л. Казанский, А.В. Никоноров // Компьютерная оптика. – 2021. – Т. 45, № 1. – С. 130-141. – DOI: 10.18287/2412-6179-CO-834.
- https://vas3k.ru/blog/computational_photography/