English

Nikon Coolpix 2500

Обработка данных в RAW формате

 

Список версий



Конвертер RAW в DNG: raw2dng.exe

Формат DNG появился в сентябре 2004 года и постепенно, хотя и очень медленно, набирает популярность. Какие плюсы можно извлечь из этого формата?

Имеет ли DNG минусы? Формат новый, развивающийся и имеющий пока мало практических реализаций. К сожалению, даже сам конвертер Adobe написан не без ошибок, которые слегка осложняют работу с DNG.

Кратко о формате, используемом в Adobe DNG Converter. Это стандартный TIFF. Изображение разбивается на прямоугольные блоки (tile), каждый сжимается независимо от других. Размер для RGB матриц 256x256, для CMYG 240x256. Поля справа и снизу дополняются нулями. Данные внутри блока представлены в формате 2x1, т.е. каждая пара отсчетов в строке образует один пиксель. Эти пиксели и подвергаются сжатию. Предсказатель используется только №1, то есть для предсказания используется одноименная компонента предыдущего в строке пикселя. С формальной точки зрения это работает нормально, но если разбираться, то получается в четных строках, к примеру, пиксели состоят из компонент RG (или CM), а в нечетных из GB (YG). В начале каждой строки, кроме нулевой, предсказанием является значение из предыдущей строки (как и в стандарте JPEG), но фактически получается "каша" - из G вычитается R, из B-G. Но поскольку это происходит только для первого пикселя (пары отсчетов), то сильно это коэффициент сжатия не уменьшает. Кстати, в сжатых NEF использован подобный же алгоритм сжатия, но первые пиксели в строках вычитаются из соответствующих пикслей на две строки выше.

В raw2dng я попробовал усложнить представление картинки - вместо двух я объединяю четыре отсчета в один пиксель (два отсчета текущей строки и два следующей). Строки обрабатываются парами. Таким образом становится возможным использование любых предсказателей из стандарта lossless JPEG. Программа перебирает все возможные и оставляет тот, с которым данный блок сжимается лучше. Размер блока также оптимизируется чтобы минимизировать пустые поля справа и снизу. Поле справа заполняется копиями последнего реального пикселя в строке, в поле снизу дублируется последняя пара строк. Все это улучшает сжатие. Не очень сильно, но заметно. Для моей E2500 исходный трехмегабайтный файл сжимается в режиме совместимости на треть, а в оптимальном режиме в два раза.

Есть еще вариант, когда выполняется перебор по количеству блоков (тайлов). Это очень долго, но полезно чтобы раз и навсегда решить, что этого делать не надо. Размер файла с оптимальным размером блоков отличается от выбранного по умолчанию на 16 Кбайт, при 7 мегабайтном выходном файле. К тому же, оптимум полностью зависит от самого снимка и каждый раз нужно повторять полный перебор.

Коррекция битых пикселей

Стандарт DNG требует, чтобы битые пиксели уже были скорректированны перед записью DNG файла. Большинство камер делает это перед записью raw (даже те, где raw неофициальный). Но камеры Panasonic (FZ-30, LX-1) записывают RAW без маскирования черных пикселей, сигнал с которых всегда равен 0. Поэтому я добавил возможность коррекции таких файлов, а за одно и коррекцию постоянно светящихся пикселей. Программа получает файл dead_pix.txt (опция -d dead_pix.txt) со списком битых пикселей и маскирует их, то есть замещает другим пикселем.

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

Для подготовки файла dead_pix.txt можно использовать программу dead_pix.

dead_pix.exe

Для работы dead_pix.exe необходимо подготовить тестовые файлы. Для обнаружения постоянно светящихся пикселей необходимо сделать снимок с закрытой крышкой объектива (а ещё лучше в полной темноте). Выдержка должна быть достаточно длинной, но при этом Noise Reduction (вычитание темнового кадра) должно быть выключено. (Для автоматических камер годится режим FIREWORK, "Фейерверк".)

Дальше надо запустить dead_pix со следующими параметрами:

dead_pix -b -d dead_pix.txt black_raw_shot.raw Здесь -b говорит программе, что это снимок черный, и надо искать яркие пиксели. Можно задать порог поиска -t100 - чем он больше, тем меньше пикселей будет найдено. -d dead_pix.txt задает имя файла с таблицей битых пикселей. Имя файла дано только для примера, оно может быть любым, и умолчания нет.

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

Алгоритм поиска подобен алгоритму коррекции. Считываем восемь пикселей вокруг проверяемого и находим самый яркий из них. Если разность значений проверяемого пикселя и самого яркого соседа больше порога - считаем пиксель битым.

Хочу обратить внимание: программа обнаруживает только одиночные светящиеся пиксели. Пары пикселей с одинаковой светимостью обнаружены не будут. Но и вероятность этого крайне мала. (При большом желании можно добавить пиксели в список руками - файл текстовый.)

Для обнаружения несветящихся пикселей необходим снимок белого листа бумаги, сильно расфокусированный, с короткой выдержкой, не переэкспонированный (серый). (В автоматических камерах можно использовать режим LANDSCAPE (Пейзаж), камера выставит фокус на бесконечность.)

Дальше надо запустить dead_pix со следующими параметрами:

dead_pix -w -d+ dead_pix.txt white_raw_shot.raw Здесь -w говорит программе, что это снимок белый, и надо искать черные пиксели. -d+ dead_pix.txt заставляет дописать результат в указанный файл. Программа находит только совершенно черные пиксели, с нулевым значением. При испытаниях на реальном снимке, черные пиксели на светлом фоне, естественно, находятся хорошо. Но в темных областях так же много совершенно черных пикселей. Тем не менее замена пикселей с нулевым уровнем на их соседей с уровнем в несколько единиц на глаз незаметно, а хорошо заметные пиксели на светлом фоне удаляются.

raw2dng.exe

Собственно программа raw2dng.exe написана на базе raw2nef.exe, изменился только формат выходного файла. Как и raw2nef.exe программа умеет читать raw данные полученные из камер Nikon Coolpix и некоторых других, близких по устройству, или имеющих технологические режимы сохранения raw. Формат этих данных задается в файле raw2nef.ini. Кроме этого, программа умеет читать свои собственные DNG файлы, DNG созданные в Adobe DNG Converter (2.x и 3.x), NEF файлы фотоаппаратов Nikon Coolpix 8700, 5700, 5400 (примеров 5000, 8400 у меня нет и их я не проверял), NEF файлы созданные raw2nef.exe, ORF файлы Olympus C8080WZ, C5050Z, SP500UZ (другие не проверял), RAW файлы Panasonic FZ30, LX1.

Для запуска программы достаточно запустить её, передав список исходных файлов. Подробности можно посмотреть в сообщении, если запустить её без параметров. У каждого файла программа заменяет расширение на DNG и записывает файл с получившимся именем. (Для DNG файлов она работает точно также, но раз расширение совпадает с исходным, файл будет перезаписан новым.)

Конвертер RAW в DNG, версия с графическим интерфейсом (raw2dngw.exe)

По многочисленным просьбам (и для собственного удовольствия) появилась версия программы с графическим интерфейсом. Суть таже самая. Оболочка решает задачу по определелению типа исходного файла, в какой формат его преобразовать и куда положить. Первая версия вызывала оригинальные приложения, текущая имеет встроенные конвертеры, скомпилированные из тех же самых исходников.

  • Добавление исходных файлов

    Можно перетаскивать файлы мышкой из Windows Explorer. Если вы кладете директорию, она сканируется и файлы со знакомыми расширениями помещаются в список. Если кладете файлы - то все файлы помещаются в список, с пометкой, если формат неизвестен. Но настоящие JPEG файлы в список никогда не включаются. Так как обычно имеется мешанина raw файлов и jpeg, то их можно перетаскивать всей кучей - программа сама разберется, что к чему. Список известных расширений, зашитый в программу: ".JPG;.RAW;.DNG;.NEF;.ORF;.PEF;.MRW;.SR2;". Его можно изменить, задав переменную HKCU\Software\raw2dng\KnownExtensions, сами знаете где.

    Можно передать список файлов или директорий в командной строке. Правила добавления файлов такие же как и при drag&drop.

    Еще вариант: жмете Ins и открывается стандартный диалог для выбора файлов (но только файлов).

  • Поддерживаемые форматы входных данных
  • Поддерживаемые выходные форматы
  • Диалог свойств файла

    Этот диалог позволяет задать явно имя выходного файла, имя файла EXIF и установить дополнительные опции. Окошко с предварительными результатами показывает процесс автоматического определения типа файла. Если программа ошиблась - можно выбрать тип из списка камер имеющих такой же размер сырых файлов, как и текущий файл.

  • Диалог дополнительных установок

    Это диалог вызывается из главного окна и из диалога свойств файла. Можно установить дополнительные опции, задать таблицу битых пикселей, и т.д. Параметры установленные для всей программы замещаются параметрами, заданными для конкретного файла.

  • Обработка файлов

    Для начала обработки нажмире кнопку Convert. Программа обрабатывает все файлы из списка, которые помечены как Ready.

    Результат обработки или Success, или Fault. Подробный отчет об ошибках можно посмотреть в свойствах файла.

  • Усреднение нескольких файлов

    Цифровые камеры не дружат с длинными выдержками. Однако если у вас есть штатив, ваш фотоаппарат умеет фиксировать фокус и у вас есть какое-нибудь устройство для дистанционного спуска - вы можете сделать несколько снимков одного сюжета без смещения камеры. Дальше эти снимки можно просуммировать в любом редакторе изображений. Но еще лучше сделать это прямо в raw, получив в результате еще один raw файл, в котором уровень шумов будет заметно ниже, чем в исходных файлах.

    Поскольку raw2dng умеет и читать и писать raw файлы, добавить такую возможность совсем не сложно. (Сложно объяснить зачем это опция именно в этой программе - а потому что отдельную писать лень).

    Итак, выделяем несколько файлов из списка - (это ваша проблема найти такие, в которых действительно нет сдвига) жмем правую кнопку мыши и выбираем пункт Combine Pixels (F6). Откроется диалог, в котором можно указать, как именно усреднять пиксели разных кадров и куда и в каком виде записать результат.

    Коротко, что означают эти цифры. Пусть у нас есть N кадров. Мы можем просто сложить пиксели всех кадров и промасштабировать результат, чтобы он влез в 12 бит результата. Для этого достаточно выбрать begin=0, end=N-1. Но, вдруг в процессе экспозиции не все кадры вышли совершенно одинаковыми? Например, в одном кадре пробежала собака, в другом проехала машина. Можно выбрать среднее значение, медиану. Для этого нужно отсортировать пиксели разных кадров и выбрать средний из списка. При этом в результирующий файл попадет только то, что было на большинстве кадров. Можно продолжить. А почему бы не отбросить самые яркие пиксели (от фар машины) и самые темные (от собаки и кузова машины), а остальные усреднить? В общем, все зависит от конкретной ситуации. Самая большая проблема - получить исходные снимки без сдвига, или отобрать из имеющихся кадров, полностью совпадающие, за исключением шумов.

    Жмем OK, и ждем.

    Я понимаю, что дай людям волю, и они наснимают тысячи файлов и попытаются их обработать. В принципе, это возможно, но ждать придется долго. Если усреднить все кадры, то достаточно последовательно обработать кадр за кадром - это самый быстрый вариант. В других случаях требуется присутствие в памяти всех кадров одновременно. Если они не влезают в память, то программа обрабатывает их сегментами. Считывает по кусочку из всех файлов, сортирует пиксели, усредняет и записывает в результирующий кадр.

    Для сомневающихся, почему это должно работать. Измерения складывается из суммы трех величин - сигнал, шум, и систематические ошибки. Основной источник систематических ошибок в ПЗС - это темновой ток. Ячейки ПЗС так устроены, что накапливают не только падающий на них свет, но и паразитный сигнал обусловленным темновым током. Некоторые ячейки имеют повышенный темновой ток, в них уровень паразитного сигнала растет особенно быстро - их называют "горячими" пикселями. Именно темновой ток ограничивает длительность выдержек в цифровых камерах. Снизить влияние темнового тока можно двумя путями - охлаждением матрицы и уменьшением выдержки. (Есть и другие методы, но сейчас не о них.)

    Когда мы складываем несколько кадров, сигналы изображения суммируются всегда синфазно, (т.е. амплитуда сигнала растет линейно). Шумы имеют случайную фазу от кадра к кадру и сложение шума приводит к линейному росту дисперсии шума (т.е. эффективная амплитуда шума растет как корень из N). Систематические ошибки также суммируются синфазно, но относительно сигнала их уровень не изменяется (и то и другое растет в N раз). Таким образом, мы имеем возможность повысить отношение сигнал/шум, но необходимо принять меры к снижению систематических ошибок.

    Об условиях распространения

    Программа бесплатна, пользуйтесь, как хотите. Программа и исходные тексты упакованны в архив программой 7-zip. Скорей всего она понадобится вам для распаковки. (См. http://www.7-zip.org)

    Как правило, архив содержит:


    e2500.narod.ru предыдущая версия
    Hosted by uCoz