CHDK проявитель необработанных файлов CHDK-RAW. Практика применения.


Два повода для огорчения и одна загадка.

Подготовка второй части (первая часть) статьи о встроенном в CHDK модуле обработки RAW файлов, кроме опыта использования CHDK, дала два повода для огорчения и принесла одну загадку.

Для начала — про первый повод огорчаться. Из пяти камер, которыми мне пришлось много снимать (речь не идет об отечественной продукции, для которой самостоятельные наладочные работы с минимальной сборкой и разборкой были привычным и, даже, приятным делом), в четырех мне приходилось вытряхивать из корпуса то, что там вдруг начинало греметь. Это оказывались болтики. Во всех случаях, кроме двух зеркалок, у которых болтики выпали через дырку для объектива, приходилось выполнять частичную разборку. Лучше потерять гарантию (вообще, лучше нести в сервис, если есть время и желание), чем дождаться, пока маленькая железка замкнет что-то в тонкой электронике камеры, заклинит в объективе или в приводах. Пришлось извлекать болтик и из Canon PowerShot G9, который прослужил меньше года. Камера работать не перестала, но понятно, что болтик был не лишней деталью и, в конце концов, что-то внутри камеры может отвалиться.

Второй повод для огорчения — количество «битых» пикселей на матрице. Их оказалось на момент измерения 8 Кп из 12 Мп. А их реальное наблюдение, как черных точек на изображении, что возможно при некоторых настройках обработки RAW файлов с помощью CHDK конвертера, огорчает еще больше. Для проверки матрицы на битые пиксели, их подсчета и создания карты для их маскировки в СHDK (версии 0.9.7-719, описанной в первой части) есть скрипт badpixel.bin (входит в текущие прошивки):

badpixel.bin

Без паники! Битых пикселей 8057.
Представляю, как сложно было бы работать продавцам, будь у камер штатная функция отображения информации о дефектах матрицы. Но, если подумать, меньше 0,1% дефектов — не такая уж большая проблема.

Битые пиксели при преобразовании RAW файлов в нормально видимое на дисплее изображение маскируются интерполяцией по соседним. И на фотографии их заметишь, только если карта дефектов матрицы не соответствует тому, что есть на самом деле или процессор не выполняет обработку дефектов. С черными точками на обработанных средствами CHDK JPEG файлах я столкнулся, когда пробовал применить при съемке функцию «кривые» (смотри первую часть). И вот при работе над второй частью снова получил на изображении этот дефект, пытаясь сделать HDR фотографию.

Наличие функции усреднения RAW файлов позволяет снимать и прямо в камере получать HDR фотографии, как в RAW (CHDK), так и в JPEG. Для этого сначала надо сделать серию снимков с разной выдержкой, а затем через меню CHDK усреднить их и «проявить».

Чтобы снимать HDR серию было удобно, я использую скрипт (он, как и другие, «скомпилирован» из многочисленных скриптов, приведенных на сайте CHDK; исходный скрипт UBASIC/Scripts: HDR for G7):

Скрипт HDR

Скрипт можно применить для решения разных задач, в которых требуется снять серию с изменением параметра, управляемого колесиком настроек камеры Canon PowerShot G9 (и аналогичных). Для этого в скрипте используются команды wheel_right и wheel_left, прочие команды — стандартные для скриптовых языков. Если на момент запуска скрипта активной (той, которой управляет колесо настроек) настройкой была диафрагма, скрипт сделает серию с вилкой по диафрагме. Если активной настройкой будет дистанция в режиме ручной фокусировки — можно получить заготовки для снимка с большой или очень малой глубиной резкости.

Для съемки HDR нужно:
настроить камеру на съемку в режиме RAW CHDK;
настроить вручную фокусировку (для нормальных условий освещения и статичного сюжета можно оставить и автофокус);
выбрать режим съемки «M» (ручные выдержка и диафрагма);
настроить правильно экспозицию на камере, причем окончательное состояние управления должно быть таким, что колесо управления регулирует именно выдержку;
выбрать диапазон изменения экспозиции для HDR серии (переменная «e», в скрипте подразумевается, что один шаг по выдержке равен трем минимальным «поворотам» колеса настроек, у других камер может быть иначе, к примеру два поворота; скрипт легко модифицировать, если нужен шаг иной чем «три поворота»);
установить начальную задержку (переменная «d») — таймер;
установить «безопасную» задержку («s», при длинных выдержках камера без этой задержки-паузы может «пропустить» отдельные этапы скрипта; вообще большой необходимости в паузах нет, но ради надежности и наглядности изменения параметров на дисплее камеры в процессе работы скрипта, я паузы использую);
установить количество серий (параметр «k», при хорошем освещении достаточно одной серии с вилкой по выдержке; больше серий может понадобиться, чтобы усреднением бороться с шумом при съемке с повышенным ISO).

После настроек параметров скрипта HDR, запускам съемку (камеру нужно установить на штатив или как-либо иначе обеспечить ее неподвижность на время съемки серии):

CHDK, скрипт HDR

… и получаем серию. К примеру из пяти снимков:

Серия

От левого до правого снимка выдержка меняется так: 1/4, 1/8, 1/15, 1/30, 1/60 с.

Снимок серии

Миниатюра и фрагменты 1:1 одного из снимков серии.

Для получения HDR снимка просто усредняем в CHDK (как описано в первой части статьи) все пять снимков (чтобы эффект HDR был более заметен, лучше усреднять только явно переэкспонированные и недоэкспонированные снимки) и, если нет желания доводить итоговый RAW на компьютерном конвертере, в СHDK конвертируем усредненный RAW в JPEG.

HDR

Миниатюра и фрагменты 1:1. Усреднение всех пяти снимков серии.

В результате получаем итоговый снимок с более-менее проработанными светами и тенями. Если результат не совсем устраивает, можно еще «усреднить» (причем многократно) полученный на предыдущем этапе HDR RAW с одним из снимков серии, более темным или более светлым. Или сделать новый HDR, выбрав другие снимки серии.

HDR

Миниатюра и фрагменты 1:1. Усреднение полученного на предыдущем этапе HDR RAW и четвертого RAW снимка серии.

Даже без компьютера складыванием разных исходных и промежуточных RAW файлов можно очень гибко настраивать картинку. А ведь еще можно применить настройки баланса белого, контраста и цветности из стандартного меню камеры, как это описано в первой части.

На итоговых HDR JPEG снимках видны черные точки. Это и есть битые пиксели — второй повод для огорчения. В нем же и загадка. Загадка, с которой я столкнулся, состояла в том, что при нормальной CHDK «проявке» каждого отдельного RAW снимка серии, эти битые пиксели не видны. Так же они не видны, если в серии усреднения попадают только снимки с выдержками длиннее 1/10 с или короче 1/30 с (для Canon PowerShot G9). Но если в серии есть снимки из обеих поддиапазонов, на итоговой картинке «проявляются» битые пиксели. Причем, как при проявке усредненного RAW в CHDK, так и при проявке его на компьютере.

Мои поиски объяснения эффекта на сайте CHDK результатов не дали (возможно, плохо искал). Но я нашел упоминание о том, что в штатной прошивке камеры могут быть два файла описания дефектов — для длинных выдержек и для коротких. Граница лежит в области выдержек около 1/20 с. Я полагаю, эффект проявляется потому, что в серии есть снимки и из диапазона «коротких», и из диапазона «длинных» выдержек. А к усредненному RAW применяется карта маскировки, описывающая не все дефекты (только для коротких).

Эта особенность CHDK накладывает некоторые ограничения на возможности встроенного RAW конвертера для получения готовых HDR фотографий. В серии должны быть снимки из одного диапазона выдержек — либо все длиннее 1/10 с, либо все короче 1/30 с. Возможно, с помощью функций CHDK удастся заменить две карты дефектов для разных диапазонов выдержек на одну, в которой больше дефектов, и тогда ограничения будут сняты. (Еще раз подчеркну, проверено для Canon PowerShot G9 с CHDK 0.9.7-719, у других камер может быть все иначе.)

Усреднение и суммирование, практика

В оставшейся части статьи описано, для чего еще можно использовать функции усреднения и суммирования на практике. Так как усредняются и суммируются файлы серии, нужен скрипт облегчающий серийную съемку. К примеру, такой:

n_shot_time_lapse_photos.bas

Это модификация скрипта UBASIC/Scripts:Time Lapse Photography. Скрипт интересен тем, что использует функцию get_tick_count считывания текущего времени для учета времени на съемку и подготовку и, таким образом, пытается как можно более точно соблюдать интервалы между снимками. Текстовый файл скрипта.

Снимая и усредняя снимки серии можно устранить из фотографии случайные объекты (к примеру, машины и людей; об этом в статье Владимира Копылова Цейтраферная съемка). Для этого нужно выполнить неподвижной камерой несколько десятков снимков.

Серия

Десять из шестидесяти снимков серии.

Снимок

Миниатюра и фрагмент 1:1 отдельного файла снимка серии.

Усреднение

Миниатюра и фрагмент 1:1 снимка, полученного из 10 фотографий в режиме усреднения. На снимке остались «следы» прохожих. Усредняя всего 2-3 снимка можно получить эффектные фотографии «призраков».

Усреднение

Миниатюра и фрагмент 1:1 снимка, полученного из 60 фотографий в режиме усреднения. Найти призраки можно лишь зная заранее, где искать (где в момент съемки находились более-менее неподвижные группы прохожих). Сборные снимки можно сделать ее чище, если при усреднении исключить из процесса самые «людные». К сожалению, в большой серии даже при небольшом ветре на снимке окажутся размытыми ветви и флаги (белые полотнища на фрагменте справа внизу).

Серия

10 снимков (миниатюры) серии из 60. Особенность снимка — облака и людная улица.

Снимок

Миниатюра и фрагмент 1:1 отдельного снимка серии.

Усреднение

Миниатюра и фрагменты 1:1 при усреднении всех снимков серии (60) и при исключении из процесса десяти самых «людных» (50).

При усреднении серии снимков, снятых солнечным днем с облаками на небе, итоговый снимок будет менее контрастным, а облака превратятся в дымку. Аналогично облакам, при съемке текущей воды с последующим усреднением или сложением получатся размытые потоки, подобные тем, которые бывают на снимках, сделанных при длинных выдержках. С «усреднением» или «суммированием» отпадает необходимость использовать плотные неитральные фильтры, чтобы добиться подобного эффекта.

Функцию суммирования можно использовать, чтобы «набрать» длительную выдержку, если просто снимать на длинных выдержках не удается.

Снимок

Снимок, полученный при выдержке 1/4 с.

Сложение 20 снимков в 1

Фотография и фрагмент 1:1, результат суммирования 20 «темных» снимков с выдержкой 1/4 с при съемке для получения суммарной выдержки 5 с. «Проявка» CHDK RAW в JPEG выполнялась при установке ISO 80.

Сложение 20 снимков в 1

Фотография и фрагмент 1:1, полученный при сложении 20 «темных» снимков. «Проявка» CHDK того же RAW файла, из которого был получен и предыдущий JPEG снимок, выполнялась при установке ISO 400. Проявка при повышении светочувствительности на момент выполнения снимка-проявки позволяет снизить шумы.

Снимок

Фотография и фрагмент 1:1, полученные при ISO 80 и выдержке при съемке 5 с. Canon PowerShot G9 очень хорошо (для компактных камер) снимает при длительных выдержках и необходимости «набирать» выдержки до 64 с (что позволяет CHDK) нет. Но если нужно снимать десятками минут, функция сложения при проявке RAW файлов будет полезной.

Чем больше приходится разбираться с CHDK, тем больше эта альтернатива нравится. Цифровая камера — тот же компьютер, но с матрицей и объективом. И возможность программировать его действия, в принципе, так же естественна, как возможность съемки. Производители пока не горят желанием штатно встраивать в камеры терминалы для программирования. Но все же хочется надеяться, что в возникновении такого явления, как Canon Hacker's Development Kit есть заслуга не только Хакеров (о чем в статье Canon Power Shot A650IS), но и самой компании. В конце концов, многие «рукастые» выбрали камеры Canon, узнав, что с этими мыльницами можно что-то сделать. А дополнительные покупатели компании нужны. Может поймут это и другие производители и будут сначала NHDK, SHDK, PaHDK, PeHDK, а там и буква H из названия пропадет за ненадобностью. Хотя пока надежда именно на эту букву «Х».






Дополнительно

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.