Показаны сообщения с ярлыком изображение. Показать все сообщения
Показаны сообщения с ярлыком изображение. Показать все сообщения

Как склеить фотографии в панораму с помощью nip2



19 коммент.
Когда люди задаются вопросами типа "как склеить фотографии в фотошопе" или "чем склеить панораму", то находят программы Photoshop или Hugin. Ответ на этот вопрос становится гораздо менее очевидным, когда нужно склеивать много больших изображений и при этом их просматривать. Фотошопы на таких задачах выпадают в осадок от нехватки памяти, Хьюджины корёжат изображение. Однако в недрах наших дистрибутивов Linux имеется замечательнейшее средство от всех болезней разом обработки изображений, которое называется nip2.
Читать далее

Рисуем графическим планшетом в MyPaint



11 коммент.
эпиграф:
Мама, я его рисую, мама, это будет что-то,
Мама, почему тоскуют те, кто заслужил полета,
Мама, я хочу такое, я уже умею...
//Суровая сибирская музыка.



Преамбула
Этот обзор несколько необычен: он написан целиком под Windows. Удивление читателя понятно и будет удовлетворено. Дело в том, что программа художественной растровой графики MyPaint имеется только в сильном тестинге Debian, притом даже из этого самого тестинга при установке кучи пакетов попытка запуска заканчивается вот так
Читать далее

Векторная графика в Linux на примере редактора Inkscape



28 коммент.
Некоторое время назад мне потребовалось оформлять плакат для выставки. У меня не возникло вопросов, в чём создавать плакат - разумеется, в векторном редакторе Inkscape! Однако мои молодые коллеги, с изумлением глядя на двухметровый плакат, предлагая самые безумные версии от Microsoft Paint до Word, под конец закидали меня вопросами о том, где бы такое сделать. Пост написан по результатам наших бурных обсуждений и моих скромных находок.


Векторная графика

Если очень кратко, то дело обстоит так: растровая графика оперирует с пикселями и их значениями, в то время как для векторной графики существуют линии, кривые и узлы. В растровой графике, например, чёрный прямоугольник будет задан множеством чёрных точек - пикселей. В векторной - прямоугольником со сторонами A и B, толщиной линии, и цветом линии и заливки. Разница будет ещё очевиднее, если вы захотите нарисовать изогнутую линию. В растровом виде это будет сделать трудно, зато в векторном - легче лёгкого: вам помогут кривые Безье, которые можно представить как гибкую линейку. Задаём точки и изгибы в каждом узле, и получаем кривые самых невообразимых видов.

Векторная графика имеет ещё одно большое преимущество: масштабируемость. То есть если вы сделали плакат на формат А4, а печатать надо на формат А0, с векторной графикой нет проблем - просто растянули и всё. С растровой вы обязательно получите артефакты, квадратики и прочую гадость.

Не буду пересказывать википедию, так как многие вещи лучше просто попробовать и понять, нужны они вам или нет. Тем более, что в Debian это делается щелчком мыши \ одной командой: установить inkscape. Почему именно Inkscape? Это самый продвинутый и доведённый до ума это векторный редактор в Linux (если среди читателей есть те, кто ищут аналог Adobe Illustrator в Linux - так вот это он :-)). Есть его Gimp-подобный аналог Sodipodi, но активности оттуда что-то не видно. Развивается проект sK1, но до повседневного использования ему ещё далеко. В общем, все примеры будут приводиться исключительно для Inkscape.


Inkscape - быстрый старт

Для примера приведу свой плакат с выставки - он целиком сделан в Inkscape.
После запуска нас ждёт главное окно программы: панель инструментов рисования слева (выделено синим цветом на скриншоте), цветовая палитра внизу (там же управление слоями - выделено жёлтым), и несколько полезных кнопок на главной панели сверху (группировка\разгруппировка объектов, свойства текста, выравнивание объектов - группа выделена зелёным цветом). Собственно, скриншот во всей красе:



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



Это легко поправить: выбираем инструмент "Редактировать узлы контуров" (стрелка с узлом, помечено на скриншоте красным цветом). После этого выбираем фигуру, которую нарисовали, и начинаем дёргать за узлы (чтобы их переместить) или "усы", которые от узлов отходят (они отвечают за изгиб кривой). С узлами можно поступать как с любыми другими объектами - удалять, добавлять или изменять. Для этого, после выбора инструмента "Редактировать узлы контуров", появится группа инструментов на верхней панели (отмечено зелёным цветом на скриншоте), которые позволят это сделать. Немного тренировки, чуток практики, и вы будете рисовать как завзятых художник.


Стрелки в Inkscape
Как-то мимо меня пробегала ссылка на пост, в котором автор рыдал в три ручья об отсутствии возможности в Inkscape ставить стрелки на линиях - очень нужная опция для рисования схем и простых чертежей. И она-таки в Inkscape есть, причём сокрыта не очень глубоко: по нарисованной линии щёлкаем правой кнопкой, выбираем пункт контекстного меню "Заливка и штрих", идём в "Стиль штриха", и там выбираем любую понравившуюся нам стрелку в пункте "Конечные маркеры" и "Начальные маркеры". Результат на скриншоте:



Об эстетике результата можно спорить, но стрелку в Inkscape поставить можно запросто. Может она не по ГОСТ ил ISO, но выглядит приемлемо и нареканий особых не вызывает.


Интересные возможности Inkscape
Немного потренировавшись рисованию в Inkscape, вы заметите, что часть инструментов (линии, текст, градиент, пипетка) вам уже знакомы из Gimp. Но так как Inkscape векторный редактор, а не растровый, в нём есть и отличия: например, инструменты для выравнивания объектов (на главной панели, вверху, на скриншоте помечено голубым цветом). Например, мне нужно было выровнять названия и прямоугольные блоки по центральной оси. Этим-то инструментом выравнивания я и воспользовался:



В Inkscape можно проворачивать много трюков - так много, что можно даже завести отдельный блог для этого :-) Но я все описывать не стану, а только те, которые мне реально пригодились (и детали которых я часто забываю).


Трассировка растровой графики в векторную в Inkscape
Часто удобно хранить вставляемые в Inkscape изображения в векторном виде - но картинка-то изначально растровая! В самом Inkscape есть очень и очень приличный плагин трассирования растровых изображений в векторные - он использует трассировщик potrace. Хотя работает трассировщик не быстро и имеет минимум параметров, результат очень хорош. Например, он позволяет быстро и точно трассировать сложные логотипы, которые некоторые несознательные граждане присылают в растровом виде.
Для того, чтобы им воспользоваться, импортируем в Inkscapе растровое изображение, выделяем его и идём в меню "Контуры" искать пункт "Векторизовать растр...". Перед нами появится незамысловатый диалог:



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


Временное сокрытие сложных объектов

Вот это было для меня крепким орешком: дело в том, что в плакате были сложные отрассированные объекты, которые сильно тормозят отрисовку. Часто нужно их просто скрыть на некоторое время, и не городить при этом слоёв. Вроде бы всё просто: для этого можно выделить объект, нажать правую кнопку и в свойствах объекта поставить флажок "Hidden".
В документации по этому поводу говорится:
While these are solutions, the ultimate solution is just to not
hide objects. Instead put them on a separate Layer and hide the
Layer (see the section called "Layers").

Я не могу с ними согласиться: иногда слоёв и так много, и городить ещё один совсем не хочется. Потом, чаще всего объект перерисовывается и хочется просто оставить его на месте и вообще не трогать. Наконец, сдаётся мне, что такие вот "ultimate solution" есть дешёвая отмазка при отсутствии инструментов работы со скрытыми объектами: дескать, сие не баг но фича. Но мы-то знаем... :-)
Но тут появляется маленькая проблема: как его обратно показать!? Это (по крайней мере в версии 0.45) несколько неочевидно. Это даже стало поводом для скриншота:



Так вот, чтобы сделать объект снова видимым, сначала щёлкаем на любом видимом объекте и открываем окно "Свойства объекта". Далее нажимаем CTRL+F для поиска, отмечаем галку "Включая скрытые", и в поле Стиль подставляем display:none

Ищем - Inkscape будет по очереди находить скрытые объекты. Когда он доберётся до искомого, отобразится его (скрытого объекта) рамка. Тут-то нам и пригодится заблаговременно открытое окно "Свойства объекта" - оттуда мы убираем галку "СКРЫТЬ" у найденного скрытого объекта. Всё, он должен снова стать видимым.

Есть ещё такой вариант: нажимать на кнопку TAB для выделения объектов и смотреть, когда появится рамка вокруг скрытого объекта. При этом в настройках Inkscape (Файл - Настроить Inkscape - Выделение) должна быть снята галка "Игнорировать скрытые объекты".

Заключение
Это, разумеется, далеко не полный перечень возможностей Inkscape (которые к тому же постоянно развиваются). Здесь я только упомянул о нескольких вещах (трассировка, выравнивание и особенно сокрытие объектов, о котором я постоянно забываю). Буду рад, если для кого-то векторные редакторы станут ещё одним полезным инструментов для работы и творческого самовыражения.
Читать далее

Чтение MAT-файлов MATLAB в nip2



3 коммент.
То, о чём так долго говорили красные, белые, зелёные, и даже голубые - свершилось. Теперь замечательный графический анализатор nip2 полностью поддерживает чтение MAT-файлов, в которых MATLAB записывает данные рабочего окружения с двойной точностью (double precision). И хотя в основной ветке этой возможности ещё нет, в SVN-репозитории оно уже появилось благодаря скромным усилиям автора этих строк и John Cupitt - одного из авторов nip2 и библиотеки VIPS.

На всякий случай: nip2 это графический анализатор изображений (это не привычный gimp или photoshop), который создавался специально для работы с огромными файлами и научных применений. Но он может быть полезен и простым пользователям: с его помощью легко открывать, просматривать, кадрировать огромные файлы. Или, например, склеить две фотографии в одну - как склеивают панорамы.


Для чего нужно открывать MAT-файлы в nip2
Упреждая возможные вопросы "а зачем нам проприетарный mat когда есть csv" отвечу: запись в открытый формат CSV в матлабе происходит несколько нетривиальным образом и можно записать только одну переменную. Более того, если забыть указать несколько важных параметров, можно сильно потерять в точности сохраняемых данных. И главное, что уже много результатов научных экспериментов сохранено в MAT-формате.

Периодически возникает необходимость быстро просмотреть эти данные (это изображения) в каком-нибудь просмотрщике без необходимости загружать MATLAB. Таковых просмотрщиков я не знаю - открыть MAT-файл может только GNU/Octave с помощью библиотеки matio. Так что эта возможность очень нужна и востребована.

Установка nip2 и VIPS

Хотя об установке nip2 я уже писал, тем не менее, повторюсь. Сначала нужно скачать отсюда из support-зоны самый свежак. Сначала собираем VIPS и устанавливаем пакет, потом собираем nip2 и тоже устанавливаем. Последние версии (vips7.18.XX) со старыми версиями Питона могут не собраться, так что для этого при сборке пользуем ключ --without-python и собираем.

Для себя и своих студентов я собрал пакеты под Debian Etch и архитектуру i386 (да-да, я в конкретном бронепоезде):
После этого добавляем программу в меню вашего оконного менеджера или запускаем прямо из графической консоли командой nip2.


Просмотр MAT-файлов MATLAB в nip2

Здесь всё довольно просто: в диалоге открытия явно указываем, что хотим просмотреть MATLAB's mat-files и далее открываем такой файл. Пример на скриншоте - легендарная Лена
(а кто такая Лена?)


А теперь примерчик посложнее - загружаем изображение усреднённых темновых шумов цифровой камеры и берём от них Фурье-преобразование (на том же скриншоте открыта в левом нижнем углу неудачная фотография от скоростной съёмки):


Так что наши данные теперь можно просмотреть без томительного ожидания, пока MATLAB откроет эти файлы. Кстати о данных в форматах CSV и MAT...


Данные в CSV и MAT-форматах: особенности записи MATLAB и просмотр nip2
Эту заметку я хотел сделать отдельным постом, но решил выложить здесь же. Появился тут вопрос: как сохраняет MATLAB данные с плавающей точкой в разных форматах. Для этого мы провели маленькое расследование...


Подготовка
Ответ состоит из нескольких частей. Да, Матлаб может сохранять данные в своём формате mat, и его может прочесть та же Octave (теперь и nip2 с использованием библиотеки matio). Для проверки сгенерируем матрицу

>> a = magic(5)

a =

17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

>> b =a./3

b =

5.6667 8.0000 0.3333 2.6667 5.0000
7.6667 1.6667 2.3333 4.6667 5.3333
1.3333 2.0000 4.3333 6.6667 7.3333
3.3333 4.0000 6.3333 7.0000 1.0000
3.6667 6.0000 8.3333 0.6667 3.0000

>> b(2,2)=1.09878432753084573248523475
>> b(2,3)=2^20

Видим только первые четыре числа после запятой - это потому, что по умолчанию MATLAB отображает числа в коротком формате. Изменить этот формат можно командой format type.

Чтобы сделать задачу более наглядной, в матрицу записали два числа: одно с разными числами после запятой, а второе - очень большое (2^20). Теперь сохраняем в MAT-файл и CSV командами:
save('magic5x5doubleafterformatlong.mat', 'b'); %% это сохраняется MAT-файл
csvwrite('magic5x5double-afterformatlong.csv',b); %% это сохраняется CSV-файл

Теперь открываем их и сравниваем с исходниками...

Данные в MAT-файле.
В MAT-файлах всё чисто: он сохраняет так же, как и открывает.
>> load('magic5x5doubleafterformatlong.mat')
>> b
b =
1.0e+06 *
Columns 1 through 4
0.00000566666667 0.00000800000000 0.00000033333333 0.00000266666667
0.00000766666667 0.00000109878433 1.04857600000000 0.00000466666667
0.00000133333333 0.00000200000000 0.00000433333333 0.00000666666667
0.00000333333333 0.00000400000000 0.00000633333333 0.00000700000000
0.00000366666667 0.00000600000000 0.00000833333333 0.00000066666667
Column 5
0.00000500000000
0.00000533333333
0.00000733333333
0.00000100000000
0.00000300000000
>> b(2,2)
ans =
1.09878432753085
>> b(2,3)
ans =
1048576

Данные в CSV-файле.
А вот тут начинаются приключения. MATLAB записывает в CSV формат данные с точностью, такой же, как при отображении. То есть, например, при отображении используется вывод только первых 4 чисел после запятой - следовательно, сохранены они в CSV будут так же.

>> b(2,2)

ans =

1.0988

С большими числами тоже самое: они сохраняются в экспоненциальной форме с точностью, установленной для отображения (по умолчанию 4 знака). Это так же видно в CSV-файле (записывает с той точностью, с которой отображает). У одной и той же матрицы, сохранённой в CSV и MAT сходный размер.


>> b(2,3)=2^20

b =

1.0e+06 *

0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 1.0486 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000

>> b(2,3)

ans =

1048600

>> 2^20

ans =

1048576

Именно так оно и происходит по умолчанию: MATLAB просто округляет числа при записи в CSV до четырёх значащих чисел. Для того, чтобы запись происходила с нужной нам точностью в CSV, следует использовать команду dlmwrite и явно указывать точность. Например так:

>> dlmwrite('magic5x5double1-dlmwrite-precision12f.csv', b, 'precision', '%12.12f')

Это записывает матрицу в CSV формат с переменной b и обеспечивает точность 12 значащих чисел. Так что стоит аккуратнее обходиться с командами записи: csvwrite вам запишет, конечно, переменную, но с малой точностью. Это может стать источником трудноуловимых проблем.


Отображение данных в MAT и CSV форматах в nip2
Теперь, возвращаясь к теме поста, в последних версиях (nip2 и vips > 7.18.2) замечательного графического анализатора nip2 можно просматривать не только данные в CSV, но и в MAT-файлах. Это очень и очень удобная возможность: например, усреднённое изображение в MAT-файле можно проанализировать и посмотреть без необходимости загружать лишний раз MATLAB. Особенно это актуально, если изображение в MAT-файле больших размеров. Точность просмотра CSV и MAT-данных составляет 5 значащих цифр.
Читать далее

Luminance HDR: создание HDR в Linux из нескольких кадров



12 коммент.
В этой заметке приводится краткое описание и впечатления по созданию изображений с высоким динамическим диапазоном HDR (High Dynamic Range). Изображения HDR в Linux можно с помощью программы Qtpfsgui, которая теперь называется Luminance HDR.

Небольшой исторический экскурс
Как справедливо отмечают авторы ресурса HDRmania, первое сообщение о процессе компрессии динамического диапазона обычных цифровых изображений, снятых с экспокоррекцией, появилось в 1993 г. А в 1995 году последовало появление соответствующей математической теории.
В 1997 году на конференции SIGGRAPH (Special Interest Group on GRAPHics and Interactive Techniques) Пол Дебевек (Paul Debevec), исследователь из Института Южной Калифорнии, представил метод соединения нескольких изображений, сделанных с разной экспозицией, для формирования единого HDR изображения. С ростом популярности цифровых фотоаппаратов и удобного для использования программного обеспечения термин HDR начал широко применяться для обозначения этого процесса. Более подробный обзор, с указанием на научные статьи, есть у меня на английском.


Cъёмка HDR-изображений
Для того, чтобы получить HDR-изображение, потребуется снять несколько кадров с разным значением экспозиции (или экспокоррекции). Напомню, что экпокорреция это поправка в экспозицию снимка относительно той, которая определена при помощи экспонометра. Для регистрации HDR-изображения:
  1. Устанавливаем камеру на штативе.
  2. Переводим камеру в ручной режим установки экспозиции. Выберите нужное значение диафрагмы для вашего кадра (например, f/8 или меньше, если вам нужна большая глубина резкости) и установите минимальное значение ISO.
  3. Изменяем освещённость в самой яркой части кадра (точечным замером или в режиме Av, чтобы учесть только её) и отмечаем время экспозиции. Сделайте то же самое с самой глубокой тенью в кадре.
  4. Определяем число и величину нужных экспозиций. Для этого возьмите за основу выдержку, измеренную для светлой части. Умножьте это число на 4, чтобы получить следующее значение экспозиции, отличающееся на 2 EV. Умножайте на 4 для получения следующих значений, пока не превысите экспозицию, измеренную для тени. Для большинства кадров вне помещения, не включающих солнце, 3 экспозиций с шагом 2 EV часто достаточно, чтобы покрыть весь динамический диапазон.
Напомню, что сдвиг экспозиции на 1 EV означает изменение количества света, попавшего на фотоматериал, в 2 раза. Для создания HDR-снимка часто достаточно сфотографировать три кадра: с экспокоррекцией -1 EV, 0 EV и +1 EV.


Работа с Luminance HDR в Linux

Трудновыговариваемое название программы Qtpfsgui объясняется самими авторами так: Qt это библиотека Qt4 для отображения графических элементов, pfs - главная внутренняя библиотека, а gui - Graphical User Interface, графический интерфейс пользователя. На такие названия, конечно, хочется попенять авторам - и они таки услышали! Теперь программа называется Luminance HDR. Сайт программы
Luminance HDR всё там же. Новые версии становятся всё удобнее и гламурнее:
From forBlogs


Итак, фотографии сняты и теперь можно приступить к созданию HDR-снимка. Запускаем Luminance HDR в Linux и выбираем все файлы изображений для HDR-фотографии сразу. После этого нас спросят об алгоритме построения HDR снимка. Это показано на рисунке ниже:


После этого будет рассчитано HDR-изображение из указанных снимков. Созданное изображение появится в главном окне программы:


Созданное изображение можно сохранить в один из форматов, поддерживающих HDR:
  1. OpenEXR (расширение: exr )
  2. Radiance RGBE (расширение: hdr)
  3. Tiff: 16bit, 32bit (float) и LogLuv (расширение: tiff)
  4. Raw (различные расширения)
  5. PFS native format (расширение: pfs)
Если же требуется просматривать созданное изображение обычными графическими просмотрщиками, имеет смысл прибегнуть к тональной компрессии снимка и сохранить его в JPEG/TIFF. Тональная компрессия это преобразования тональных значений изображения из более широкого диапазона в более узкий. Например, HDR изображение с динамическим диапазоном 100 000:1 будет преобразовано в изображение с тональными значениями в диапазоне от 0 до 255. Для этого нажимаем на кнопку Tonemap the HDR и выбираем один из методов тональной компрессии. Qtpfsgui содержит 8 алгоритмов тонального отображения, среди которых можно отметить следующие алгоритм Drago и Fattal.

Алгоритм Drago предназначен для имитирования восприятия человеческого глаза и полезен, когда нужно добиться естественных тонов. Алгоритм Fattal хорош для создания сюрреалистических, очень эффектных фотографий, однако он усиливает шумы и может создавать при одних и тех же параметрах из HDR фотографий при тоновой компрессии фотографии, выглядящие по-разному.

Для примера приведу HDR-изображение, которое я снял своей древней как мамонт камерой Casio QV-4000: три фотографии со значениями экпокоррекции -2EV, 0EV и +2EV пересчитаны в изображение с высоким динамическим диапазоном:

После применения тональной компрессии полученное HDR-изображение можно сохранить в форматах JPG или TIFF.

Ссылки
Ответы на часто задаваемые вопросы по HDR можно найти тут (на английском) и здесь, а так же можно посмотреть на образцы фотографий. Скачать Qtpfsgui можно на сайте авторов.
Читать далее

Обработка изображений: История одной камеры



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


Хотелось как лучше,
получилось - как всегда
(с) Золотая Классика


Фотографии в полной темноте
Иногда нужно сделать фотографию либо в полной темноте, либо в условиях плохого освещения. Для этого сначала надо навестись на резкость - а света мало. Что можно сделать? Например, подсветить это вспышкой, однако это может испортить снимок (например, если снимается животное в темноте) или сильно посадить аккумуляторы.

Что придумала компания Sony в своём фотоаппарате Sony DSC-V1? Она вставила туда ИК-подсветку и механически отодвигаемый ИК-фильтр. Очень интересное решение: вроде бы обычная цифровая камера, но есть возможность снимать не только в видимом, но и в инфракрасном диапазоне.
Зачем на матрице ИК-фильтры? Очень просто: дело в том, что твердотельные матрицы очень воспринимают ИК-диапазон - максимальная чувствительность обычно в районе 800 нм. Если ИК-фильтр перед матрицей не поставить, это собьёт цветопередачу на снимке.
Возможность съёмки в ИК-диапазоне сильно расширяет возможности фотографа. В ИК деревья с листьями выглядят как покрытые снегом, а облака отлично прорабатываются (в ИК "дымка" прозрачна). Практически вся зеленая растительность отлично отражает ИК. А значит, на снимке будет не черной, как могло бы показаться через красный светофильтр, а ярко-белой. А небо и вода, наоборот, становятся темным - почти черным. Облака при этом остаются ярко-белыми. Очень красивыми получаются снимки с растительностью и камнями: белые листья хорошо контрастируют с темным камнем.

Какие же ещё применения можно найти съёмке в ИК-диапазоне? Ну, например, можно прочесть текст, залитый чернилами, осветив его ИК-прожектором и сфотографировав.



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

Сие открывает заманчивые перспективы для хулиганствующих элементов: на пляже можно фотографировать таким фотоаппаратом весёленькие снимки сквозь одетые купальники красивых барышень...
Возможность съёмки сквозь одежду и синтетические ткани - чрезвычайно увлекательная перспектива, которая так же может найти применение в охранных системах. Не всякая ткань ИК-прозрачна (искусственные - достаточно прозрачны, натуральные, за исключением шелка, значительно меньше). Чем дальше от объекта расположена ткань, тем больше рассеяние и тем хуже виден сам объект. От угла подсветки видимость практически не зависит. Совсем непрозрачны ткани толстые - джинсовка, шерсть или махровые полотенца. Очень хорошо просвечиваются полимерные пленки (любого цвета - как белые, так и черные), например непрозрачные полиэтиленовые пакеты.
Не удивительно, что эта камера быстро стала лидером продаж, однако вскоре компанию Sony завалили жалобы. Нет, обладатели камер как раз тихо сопели и щёлкали затворами - жаловались объекты съёмки (как правило, прекрасного пола). По этому поводу был большой скандал, и камеру, разумеется, сняли с производства и начали отзыв из магазинов.

Фотоаппараты с режимом ``ночной съемки`` (например, NightShot у Sony, NightView или MagicVU у Panasonic), имеющие отключаемый (убираемый механически) фильтр, больше не производятся, но дело их живёт. Есть несколько компаний, предлагающих за несколько большую стоимость серийные фотоаппараты, из которых убраны ИК-фильтры - таким образом, вы можете использовать её и как ИК-камеру, и как обычную фотокамеру. Эти компании обычно занимаются ещё и производством светофильтров.


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



Демонтаж ИК-фильтра - дело непростое и вы запросто можете повредить камеру: её придётся разбирать с задней части почти полностью - вынимая электронные платы и отсоединяя кабели.


Заключение
Ни одно хорошее дело, как известно, не остаётся безнаказанным - идея у Sony была интересной, но дело дальше не пошло из-за человеческих слабостей. Однако при желании и небольших финансовых вливаниях можно возродить это увлечение...

А вы говорите, что ИК-спектр и прочие физические термины - тоска зелёная...
Читать далее

От фотонов до фотографии: от сырых данных к изображению



10 коммент.
В коммерческих цифровых фотокамерах используются CMOS и CCD фотосенсоры, сходные с теми, которые используются в технических цифровых камерах. Отклик таких фотосенсоров прямо пропорционален зарегистрированному излучению (если только это не логарифмическая камера). Однако фотография, сделанная в линейном режиме, выглядит бледной и мало контрастной. Для того, чтобы такое изображение было похоже на фотографию, применяются различные методы обработки изображений: интерполяция, гамма-коррекция, контрастирования и прочие. В общем, если хотите узнать, что происходит внутри камеры и как получается изображение - читайте.

Большинство современных цифровых фотокамер поддерживают вывод данных в ``сыром'' формате. При использовании соответствующего программного обеспечения и параметров конвертации, возможно получить необработанные данные из ``сырых'' данных фотокамеры, которые необходимы для широкого круга задач обработки изображений. К таким программным конвертерам можно отнести конвертер RAW-файлов DCRAW.

Следует, впрочем, отметить, что не все RAW-файлы являются необработанными. В случае CMOS-фотосенсоров предварительное шумоподавление происходит уже на сенсоре (об этом чуть ниже). Более того, некоторые производители коммерческих цифровых камер применяют нелинейную компрессию RAW-файлов, например некоторые камеры Nikon:
Leaving off Uncompressed NEF is potentially significant--we've been
limited in our ability to post process highlight detail, since some of
it is destroyed in compression.<...> There is some loss of data, mostly in the form of lowered resolution in the highlights.
<...>

In another disturbing development in Nikon's RAW formats saga, it seems they are encrypting white balance information in the D2X and D50 NEF format.

Однако большинство современных камер позволяют получать всё-таки линейные RAW-файлы.

В бытовой камере происходит обработка полученного с фотосенсора изображения прежде, чем оно будет записано в файл. И эта обработка - во всяком случае для CMOS фотосенсоров - начинается уже на сенсоре. Вот что происходит в цифровой камере перед выдачей красивой цветной фотографии:

0. Шумоподавление на чипе. Этот этап имеет место для CMOS фотосенсоров. Ещё до квантования из данных вычитается темновой пространственный шум (данные о шуме накапливаются в том же пикселе) и устраняется неоднородность усиления по столбцам (метод Correlated Double Sampling). Такие операции производятся прямо на пикселе (активные пиксели, технология 4/5Т) и электроникой камеры.

1. Квантование и запись сырых данных.
На этом этапе данные квантуются АЦП и записываются в память фотокамеры в виде RAW-файла. Этот файл содержит линейные данные и информацию об условиях съёмки (время экспозиции, диафрагма, значение ISO и проч.). Эти данные могут быть извлечены только специализированными конвертерами.

2. Удаление постоянной составляющей шума. На этом этапе конвертер вычитает из данных среднее значение шума чтения. Это значение вычисляется из данных ``вторичных пикселей'' (secondary pixels), закрытых от света и присутствующих на матрице (как правило, это ``рамка'' з пикселей толщиной 5-10 пикселей). Например, конвертер DCRAW при этом выводит диагностическое сообщение Scaling with black 256.

3. Цветовое масштабирование данных. Эта операция требуется для того, чтобы восстановить правильный баланс цветов на изображении. Для этого ``сырые'' данные в пикселях R G B G (составляющих баеровский шаблон светофильтров) умножаются на рассчитанные камерой константы. Например, DCRAW выводит такое диагностическое сообщение: multipliers 2.630775 1.000000 1.249379 1.000000, то есть пиксели R G B G умножаются соответственно на эти числа.

4. Цветовая интерполяция. Чтобы полутоновое изображение, каким является в RAW-файл, стало цветным, требуется восстановить недостающие цветовые компоненты для каждого пикселя: для пикселя R - синюю и зелёную компоненту, для G - красную и синюю, для B - красную и зелёную. Например, можно найти среднее между значениями ближайших соседних пикселей каждого цвета. Алгоритмы современных конвертеров более изощрённые, в результате чего артефактов на цветном изображении после интерполяции почти не заметно. Таким образом, изображение после интерполяции становится цветным.

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

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

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

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



А казалось бы - простая вещь, цифровая фотокамера...
Читать далее

Установка и впечатления новой версии графического анализатора NIP2



7 коммент.
Не так давно вышла новая версия библиотеки обработки изображений VIPS, а вместе с ней и графическая оболочка nip2. Несколько слов о том, что изменилось и как новую версию быстро собрать и использовать.

Как уже говорилось тут, nip2 - это уникальный графический анализатор изображений любой разрядности и динамического диапазона. Новая версия nip2 за номером 7.14.1 стала ещё быстрее и появились новые возможности для анализа изображений.

Самые последние версии nip2 забираем отсюда из support-зоны, где самый свежак. Скачиваем vipsXXX.tar.gz и nip2XXX.tar.gz, при сборке последовательность такая же: сначала собираем VIPS и устанавливаем пакет, потом собираем nip2 и тоже устанавливаем. Последние версии (vips7.18.XX) могут не собраться, если Python старой версии - для этого указываем при сборке ключ --without-python и собираем.

Сборка и установка
Так как nip2 только вышел и вообще не так распространён, как например Gimp, придётся собрать пакет самостоятельно. Это нетрудно, однако могут потребоваться зависимости для того, чтобы nip2 работал на полную мощность.

Сначала собираем VIPS, для чего распаковываем в каталог vips-7.14.1 скачанный архив, и от рута даём команду:
dh_make --createorig
Далее пишем
debuild
VIPS должен собраться без вопросов. Полученный пакет устанавливаем
dpkg -i vips_7.14.1-1_i386.deb
После этого собираем сам nip2. Очерёдность важна, так как при сборке nip2 потребуются файлы из VIPS, на которой графический анализатор и основан. Кроме того, на этапе сборке могут произойти ошибки - чаще всего из-за отсутствия необходимых пакетов:

checking for PKGFLAGS... configure: error: Package requirements (gthread-2.0 gtk+-2.0 >= 2.4.9 libxml-2.0 vips-7.14) were not met:
No package 'gtk+-2.0' found
No package 'vips-7.14' found
Собственно, ставим эти пакеты.
aptitude install libgtk2.0-0 libgtk2.0-common libgtk2.0-bin libgtk2.0-dev
Так же могут потребоваться следующие пакеты:
aptitude install fftw3 fftw3-dev libxml2 libxml2-dev libxml++2 gsl-bin libgsl0-dev libxml++1.0-dev libxml++1.0c2a libtiff4 libtiff4-dev flex
Последний пакет, flex, я поставил только тогда, когда сборка вываливалась с ошибкой на файле parce.c и я не мог понять из-за чего. Конечно, в файле README было сказано, что он нужен, но кто ж его читать-то будет!? :-)

Итак, сборка должна успешно завершиться и собранный пакет ставим dpkg. Конечно, автора можно упрекнуть за такую "наколеночную" сборку пакетов, однако надо быстренько получить новую версию нужной утилиты, а не кружавчики вышивать.


Изменения в Nip2
Расширился состав фильтров, теперь в официально включён шумоподавляющий фильтр GREYstoration, ряды можно именовать по своему усмотрению, расширены функции программирования. А главное - Nip2 стал ощутимо быстрее предыдущей версии, так что если вы им часто пользуетесь, то есть смысл обновиться.

Фильтры
В составе Nip2 теперь улучшенные фильтры морфологического анализа (пока только бинарная морфология), многие фильтры получили возможность точной настройки (custom kernels), а так же включён шумоподавляющий фильтр GREYstoration, основанный на анизотропной диффузии. GREYstoration интересен тем, что реализует подавление шума при помощи весьма изощрённого "сглаживания" изображения. В результате это важные детали не размываются, а шума становится намного меньше. Техника anisotropic diffusion известна довольно давно, однако реализация в Nip2 достаточно быстрая и нетребовательная к памяти, что важно при работе с большими изображениями.
Пример приведён на этом скриншоте:

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


Именование рядов
Это полезная функция, если требуется анализировать много изображений. Тогда можно задать один workspace и просто заменять одно изображение - остальное пересчитается автоматически. Именованные ряды позволяют проще отличать конечные результаты анализа от промежуточных подсчётов.
Просто впишите в пустую клетку:

Mean=Math_stats_item.Mean_item.action A1
и вы получите именованную ячейку, содержимое которой есть среднее значение изображения в ячейке А1. Именовать по-русски пока нельзя, только на английском.


Горячие клавиши на элементы меню
Очень и очень полезная возможность! Открываем меню, доходим до нужной нам функции, подсвечиваем её и наживаем к примеру CTRL+M - и теперь на функцию повешена горячая кнопка. Теперь, чтобы посчитать среднее значение на изображении, просто выделяем изображение и нажимаем CTRL+M.


Заключение
В общем и целом, релиз удался: nip2 стал ещё быстрее и получил новые фильтры и методы анализа изображений.
Читать далее

Цифровые фотокамеры Canon: характеристики и документация



6 коммент.
Те, кто занимается астрономией или оптикой, часто используют обычные зеркальные камеры. Параметрых этих камер - большая тайна, но кое-что раскопать всё-таки удаётся.
Спецификации, они же White Papers, есть правда разной степени сермяжности о том, что же засунул производитель в фотокамеру. Особенно волнует многих вопрос насчёт сенсоров и его характеристик. Относительно Canon огорчу: они делают сенсоры сами и делиться относительно параметров сенсоров, похоже, не намерены.

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

Огромное спасибо комментатору Павлу за дополнительные ссылки!

А вот это есть просто кладезь полезного и интересного: не жалейте мегабайтов трафика, друзья, ибо это есть подробное описание полнокадрового CMOS сенсора, который разработали ребята из Canon (Full Frame CMOS sensor). Там без кучи формул, на простом языке говорится, почему они перешли на CMOS и как отважно они решали свои проблемы.
Читать далее

Цифровые камеры Canon EOS 400D и 40D - так ли они отличаются?



22 коммент.
Не так давно вышла новая цифровая камера от Canon - Canon EOS 40D. Было анонсировано, кроме прочего, наличие 14-битного АЦП. Думаю, что многие загорелись возможностью купить такую цифровую камеру и использовать её для измерительных целей: такая же техническая камера стоит раз в 30 дороже. Однако позже выяснилось горькая правда - внутри установлена та же самая матрица и, есть обоснованные подозрения, что и сходное АЦП. В переводе на русский это означает, что дополнительные биты вы получите ценой усиления шума, что сводит на нет всю прелесть 14-битного АЦП.

Полученные данные позволяют утверждать, что в цифровых камерах Canon EOS 400D и 40D установлены фотосенсоры одной и той же модели. Более того, возможно, что к АЦП на камере 40D двухступенчатый, на что указывает график зависимости стандартного отклонения темнового шума от значения ISO. Многие параметры фотосенсора, например, BLO (Black Level Offset), стандартное отклонение шума, величина сигнала при насыщении, особенности зависимости сигнала от шума при некоторых значениях освещённости говорят о том, что в 40D и 400D установлены идентичные фотосенсоры. На это же намекают в whitepaper на камеру 40D:
Although the EOS 40D’s single-piece CMOS sensor is based on the Canon EOS Digital Rebel XTi’s sensor design and manufacturing technology, new processes were incorporated in the CMOS semiconductor fabrication and microlens-forming process.
Курсивом отмечены золотые слова: КМОП-сенсор 40D основан на дизайне и производственной схеме 400D (он же Digital Rebel), а что они там нахимичили в микролинзах - это дело десятое.

А это значит, что преимущество 14-битного АЦП в таком случае нивелируется возросшим уровнем шумов и, как следствие, уменьшением величины отношения ``сигнал/шум'' при том же динамическом диапазоне.


Экспериментальные данные
Из рисунков Рис.9а) и б) можно видеть, что среднее значение темнового шума увеличивается с ISO очень медленно, однако величина постоянного темнового шума
отличается в 4 раза. Это можно объяснить увеличением разрядности АЦП
при том же фотосенсоре.

Более того, анализируя графики зависимости стандартного отклонения темнового шума от ISO (рис.1) можно сделать вывод, что скорее всего АЦП на Canon 40D двухступенчатый.
Это объясняет характерные провалы СКО шума на промежуточных значениях
ISO, однако если соединить точки 100, 200, 400, 800 и 1600, то
получится гладкая кривая, значения которой опять-таки примерно в 4 раза
отличаются от тех, которые имеют место быть на Canon 400D.


а)
б)

Рис.1: Изменение среднего значения темнового шума
от величины ISO: а) для Canon 400D, б) для Canon 40D.

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

а)
б)
Рис.2: Изменение стандартного отклонения темнового шума
от ISO: а) для Canon 400D, б) для Canon 40D.

Видно, что в точках 100, 200, 400, 800 и 1600 соответственно стандартное отклонение темнового шума отличается так же почти в 4 раза - это свидетельствует о том, что АЦП установлены со сходными характеристиками.

Более того, на зависимости сигнала от шума имеется аномальное отклонение для данных, полученных с Canon EOS 400D - наблюдающийся провал на зависимости, приведённой на рис. 3 воспроизводится даже при некотором изменении параметров эксперимента.

а)
б)

Рис.3: Зависимость сигнала от шума для данных, обработанных
DCRAW в документальном режиме (данные приведены для красного канала):
а) для Canon 400D, б) для Canon 40D.

На рис.3 приведены данные по световым шумам фотосенсоров Canon 400D и 40D в
красном канале. Видно, что в обоих случаях имеется аномальное поведение зависимости сигнала от шума - и эта аномалия одна и та же для двух рассматриваемых камер. Это однозначно указывает на то, что фирма Canon установила ту же самую матрицу в модель 40D, которая устанавливалась и в 400D. А это в свою очередь означает, что 14-битный АЦП ничего не даёт в плане увеличения динамического диапазона камеры, если её рассматривать в качестве измерительной.

Так, для 12-битной камеры Canon EOS 400D были получены следующие характеристики:
  • Предельное значение сигнала: 3726 DN.
  • Оптический динамический диапазон (ODR): 59 dB.
  • Линейный динамический диапазон (LDR): 58 dB.
  • Максимальный "сигнал/шум": 117 (6.9 bit).
  • Стандартное отклонение темнового шума: 1.6 DN.
В то же время, для 14-битной камеры Canon EOS 40D измерительные характеристики хуже:
  • Предельное значение сигнала: 13825 DN.
  • Оптический динамический диапазон (ODR): 56 dB.
  • Линейный динамический диапазон (LDR): 52 dB.
  • Максимальный "сигнал/шум": 75 (6.2 bit).
  • Стандартное отклонение темнового шума: 6.0 DN.
Во всех случаях минимальный сигнал\шум принимался равным 2.

Выводы:
Если вы используете цифровые зеркальные фотокамеры в качестве измерительных приборов, то выбор в этом качестве Canon EOS 40D не оправдан из-за меньшего значения линейного динамического диапазона и более высокой стоимости.
Читать далее

Измерительные возможности цифровой камеры Canon 40D



6 коммент.
Этот пост будет интересен тем, кто использует цифровые фотокамеры в качестве измерительных. Чаще всего это физики, техники и астрономы. Здесь приведены фрагменты технического отчёта для одной из лабораторий МИФИ, которая дала нам на время 40D. Так что не ждите здесь дифирамбов Live-view и прочим потребительским штучкам. Нас она интересует как измерительное устройство.

Для выяснения правды был использован конвертер DCRAW, о чём уже писалось здесь. Для просмотра и анализа сырых данных из RAW-файла следует использовать графический анализатор nip2, о котором так же есть что почитать там и тут.



Как сделать из обычной камеры измерительную
Используем DCRAW с ключами:
dcraw -4 -D -T img0001.cr2

Ключ -4 имеет решающее значение: это позволяет выводить изображение в 16-битный формат, в котором содержится только 14 бит необработанных данных.

После этого данные можно загружать в MATLAB или Octave для работы или использовать nip2 для анализа данных.


Немного теории
Теоретический верхний предел значений пикселей фотокамеры равен разрядности АЦП - в данном случае это значение 16384 цифровых единиц. В современных цифровых камерах устанавливаются, как правило, 12-битные АЦП, однако в камерах высокой ценовой категории могут быть АЦП больших разрядностей (14 и 16 бит).

Несмотря на то, что значения, получаемые с фотосенсора, линейно зависят от времени экспозиции постоянного источника света, при подходе к теоретическому пределу значений отклик фотосенсора становится нелинейным. Значение насыщения меньше теоретического предела АЦП: например, для 12-битного АЦП, применяющегося в большинстве современных зеркальных камер, предел экспериментально получаемых значений меньше теоретического на 10-20%.


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

После этого в системе численных математических расчётов MATLAB / Octave обрабатываются снимки по выделенной области интереса: анализируется ход среднего значения по области интереса и дисперсия значений в выбранной области. Это позволяет узнать, насколько линеен фотоприёмник камеры и при каких значениях освещённости начинается насыщение.

Как видно из хода зависимостей, на уровень насыщения, который равен значению 13826 из 16384, сенсор фотокамеры Canon D40 выходит плавно, и до уровня 12000-13000 зависимость от интенсивности зарегистрированной освещённости можно считать линейной с достаточно хорошей точностью (см.рис.1). В качестве погрешности отложено стандартное отклонение данных плоского поля размером 64х64 отсчёта.


a)



б)


Рис.1: Линейность фотосенсора в зависимости от сигнала:
а) на малых экспозициях (логарифмический масштаб),
б) на больших экспозициях (линейный масштаб).



Данные о шумах для камеры Canon 40D
Для этих целей следует использовать экспозицию с закрытой крышкой. Данные, полученные в ходе обработки таких данных, позволяют судить о росте уровня шума в зависимости от экспозиции и ISO. Следует отметить, что усиление сигнала (соответствующее значению ISO) происходит до записи изображения в RAW-файл. С возрастанием величины усиления возрастают и шумы.



a)


б)
Рис.2: Изменение статистических параметров темнового шума от величины ISO:
а)среднее значение,
б) стандартное отклонение от среднего значения



На рис.2 приведена зависимость среднего значения сигнала темнового кадра от ISO и стандартное отклонение этих значений при постоянном времени экспозиции. Видно, что стандартное отклонение возрастает с изломами (возможно, используется многоступенчатый АЦП).

На рис.3 представлены зависимости величины шума (стандартное отклонение пикселей при многократном усреднении одной и той же сцены для разных величин пикселей) от сигнала.


Рис.3: Зависимость сигнала от шума для данных, обработанных
DCRAW в документальном режиме.
Данные приведены для красного канала.



Рис.4: Зависимость сигнала от шума для данных,
обработанных DCRAW в документальном режиме.
Данные приведены для зелёного канала.



По нашим данным, при обработке получаемых изображений конвертером DCRAW, можно оценить полный динамический диапазон как 56 dB и линейный динамический диапазон как 52 dB.

Это очень хороший результат для бытовой камеры, т.к. аналогичное устройство класса "scientific graduated" стоит как минимум в 3-4 раза дороже. Так что Canon 40D можно вполне использовать в любительской астрономии и в качестве фоторегистратора в оптических экспериментах.

Читать далее

Cinepaint - простой и быстрый графический редактор



7 коммент.
Есть ряд специфических задач при обработке фотографий в Линукс, таких как HDR-фотографии и обработка изображений с высокой битностью. Это позволяет сделать - и очень быстро - графический редактор Cinepaint. Простой, быстрый и в меру функциональный.


Как говорится на официальном сайте проекта, Cinepaint ориентирован прежде всего на редактирование изображений для фильмов и анимации. И в этой области Cinepaint действительного многого достиг: полная поддержка форматов CIN, DPX и EXR, а так же поддержка разрядности изображения 8, 16 и 32 бита.


Интерфейс

Тяжёлое наследие гимпа в интерфейсе - куча окошек и без табового менеджера окон обойтись трудно.



Есть инструменты рисования, кадрирования и работа со слоями, и если вы боролись с интерфейсом GiMP, то здесь вы почувствуете себя уверенно.


Работа в Cinepaint
В ряде случаев Cinepaint быстрее GiMP, и в нём можно редактировать 16-битные изображения, получаемые с современных цифровых фотокамер при помощи RAW-конверторов, например UFRaw и dcraw.

Цвета - только оттенки серого или RGB. Для видеоредактора особенно большего и не надо. Зато разрядность цвета 8, 16 и 32 бита. Есть возможность работы с цветопередачей - имеется возможность применения ICC-профилей. Кроме того, обычные инструменты типа "Кривые", "Уровни" и коррекция оттенков.

Интересная возможность визуальной цветокоррекции в меню Image - Colors - Color correction.



Это позволяет быстро оценивать и менять направление цветокоррекции.


Интересная возможность Cinepaint

У Cinepaint есть уникальная возможность - автоматическое создание HDR-изображений по нескольким снимкам. Здесь дано подробное руководство со ссылками на весьма авторитетных исследователей в этой области.
Неприятность в том, что когда вы снимаете тропический рассвет на фоне моря и леса, вы попадаете в сложную ситуацию. Если рассчитывать экспозицию относительно неба, то оно на снимке будет проработано хорошо, но лес будет чёрным пятном (проработается слабо). Если же брать экспозицию по тёмным участкам, то проработаются они, а небо будет "выбито". Решение есть, и оно в общем простое: сделать несколько снимков с "недодержкой" (по теням), обычное и с "передержкой" (по светлой части). На каждом снимке получаете детали из каждой области - комбинируя три (или больше) изображения, получаете свой тропический рассвет на фоне отлично проработанного леса.

Это довольно кропотливое занятие сильно облегчает Cinepaint: в нём уже есть модуль, который рассчитывает, откуда взять участки изображений для получения изображения с высоким динамическим диапазоном.
На самом деле, зная порог насыщения своей камеры и приблизительно ориентируясь на встроенный экспонометр, можно всё сделать и за один кадр - динамического диапазона у камеры с лихвой для этого хватит (как правило, это около 11 бит, или около 50dB). Но это потребует применения совсем иных средств обработки, таких как nip2, MATLAB/Octave и dcraw со специальными ключами.
В общем, Cinepaint - это ещё один инструмент в арсенале фотографов и любителей работы с растровыми изображениями. Не без недостатков и со своими преимуществами.


Выводы
Как метко говорят мои заокеанские коллеги-блоггеры, "Cinepaint needs some serious love" :-) Для графического редактора в 2007 году gtk-1 это даже не смешно, а очень грустно. Но это не единственный недостаток:
  1. очень, очень мало фильтров обработки изображений;
  2. те, что есть, в большинстве своём не интерактивны (нет возможности предпросмотра) и бедны настройками;
  3. алгоритмов шумоподавления в комплекте нет вовсе;
Есть и плюсы:
  1. То, что есть, как правило весьма быстро работает :-)
  2. возможность работы с 8, 16 и 32-битным цветом;
  3. возможность работы с цветовыми профилями;
  4. уникальные возможности по работе и созданию HDR-изображений;
В общем, не гимпом единым, как говорится. Быстрый, в меру функциональный графический редактор, много места не занимает. Достойный помощник GiMP там, где это требуется.
Читать далее

Экспозиция более 30 секунд на цифровой камере: Long-time remote shooting



12 коммент.
Задача: требуется фотографировать с выдержками более 30 секунд ("от руки") и есть необходимость этот процесс автоматизировать.
Решение: при помощи паяльника, доступных электрических компонентов и скрипта на bash можно снимать с длительными выдержками без необходимости стоять с камерой и держать кнопку.


Исходные данные
Имеется цифровая фотокамера Canon EOS 400D, Debian-powered ноутбук и необходимость снимать фотографии с выдержкой более 30 секунд. Если немного погуглить, то можно найти замечательную схему, которую предлагает Michael A. Covington здесь. На всякий случай дублирую её тут:



Схема прекрасная, но она подходит для Canon EOS 300D, а для 400D нет - если её спаять и попробовать управлять 400D, то затвор будет только подниматься, но не опускаться. То есть нет возможности остановить экспозицию в нужный момент, кроме как выключить камеру.


Схема для Canon EOS 400D
Долго ли, коротко, однако я с коллегой, Алексеем Ропяным, экспериментальным путём выяснили, что закрывает затвор фотоаппарат по сигналу с другого контакта, и Алексей предложил схему изменить вот так:



И это сработало: наш лабораторный Canon EOS 400D стал открывать и закрывать затвор по команде с компьютера!


Необходимые компоненты
Для того, чтобы спаять шнурок управления камерой, требуется некоторое количество четырёхжильного кабеля (от аудиоаппаратуры или простой телефонный провод), jack на 2.5мм (он же 3/32 inch), указанные на схеме радиоэлементы (можно купить в Chip&Dip), 9-контактный COM-порт и соответственно переходник USB-COM (чтобы можно было использовать и на современных компьютерах, и на старых), а так же паяльник и немного терпения.

Переходник USB-COM лучше всего брать на чипе Profilic 2303 - это самый распространённый чип и в Линукс работает "из коробки".


Программное обеспечение
Для управления камерой требуется одна маленькая утилита, которую мне подсказали на Астрофоруме (обсуждение велось в теме "Выдержка более 30 сек. через комп?" тут и "Чем Linux полезен ЛА?" здесь).

Программа называется setSerialSignal и её исходник находится здесь. Скомпилировать её GCC, который входит в любой дистрибутив *nix-систем:
gcc -o setSerialSignal setSerialSignal.c
Проверялось на системе Debian GNU/Linux v4.0 r.0 "Etch", gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21).

На всякий случай дублирую исходный код программы:

/*
* setSerialSignal v0.1 9/13/01
* www.embeddedlinuxinterfacing.com
*
*
* The original location of this source is
* http://www.embeddedlinuxinterfacing.com/chapters/06/setSerialSignal.c
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* setSerialSignal
* setSerialSignal sets the DTR and RTS serial port control signals.
* This program queries the serial port status then sets or clears
* the DTR or RTS bits based on user supplied command line setting.
*
* setSerialSignal clears the HUPCL bit. With the HUPCL bit set,
* when you close the serial port, the Linux serial port driver
* will drop DTR (assertion level 1, negative RS-232 voltage). By
* clearing the HUPCL bit, the serial port driver leaves the
* assertion level of DTR alone when the port is closed.
*/

/*
gcc -o setSerialSignal setSerialSignal.c
*/


#include
#include
#include

/* we need a termios structure to clear the HUPCL bit */
struct termios tio;

int main(int argc, char *argv[])
{
int fd;
int status;

if (argc != 4)
{
printf("Usage: setSerialSignal port DTR RTS\n");
printf("Usage: setSerialSignal /dev/ttyS0|/dev/ttyS1 0|1 0|1\n");
exit( 1 );
}

if ((fd = open(argv[1],O_RDWR)) < 0)
{
printf("Couldn't open %s\n",argv[1]);
exit(1);
}
tcgetattr(fd, &tio); /* get the termio information */
tio.c_cflag &= ~HUPCL; /* clear the HUPCL bit */
tcsetattr(fd, TCSANOW, &tio); /* set the termio information */

ioctl(fd, TIOCMGET, &status); /* get the serial port status */

if ( argv[2][0] == '1' ) /* set the DTR line */
status &= ~TIOCM_DTR;
else
status |= TIOCM_DTR;

if ( argv[3][0] == '1' ) /* set the RTS line */
status &= ~TIOCM_RTS;
else
status |= TIOCM_RTS;

ioctl(fd, TIOCMSET, &status); /* set the serial port status */

close(fd); /* close the device file */
}



Посылаемые сигналы
Программу собираем и даём ей необходимые права на выполнение, а ниже - сигналы, посылаемые в порт программой, и их передача setSetialSignal:

Сигнал DTR
setSerialSignal /dev/ttyS0 1 0



Сброс сигнала DTR
setSerialSignal /dev/ttyS0 0 0


Сигнал RTS
setSerialSignal /dev/ttyS0 0 1


Сброс сигнала RTS
setSerialSignal /dev/ttyS0 1 1


Всё это обеспечивает вам возможность управления камерой: открытие происходит по сигналу DTR, закрытие - сигналу RTS.


Скрипт управления камерой
Дальше удобно воспользоваться простым скриптом, который написал Евгений Ромас aka BrainBug, но для случая с 400D я скрипт немного поправил, и теперь он выглядит так:

#!/bin/bash

for i in `seq $3`; do
{
setSerialSignal /dev/ttyUSB0 0 0 &&
sleep $1 && setSerialSignal /dev/ttyUSB0 0 1 &&
sleep 0.3 && setSerialSignal /dev/ttyUSB0 0 0 &&
sleep $2 && setSerialSignal /dev/ttyUSB0 1 1 && echo "One more image captured!" &&
sleep $4;

}
done

echo "Done!"

Параметры скрипта:
1: задержка поднятия зеркала
2: время выдержки в секундах
3: количество кадров
4: задержка между кадрами

Пример:
make_captures 4 60 30 2

Скрипт расчитан на работу с переходником USB-COM, и если у вас другой номер порта - естественно, скрипт нужно немного поправить.


Как это работает
Итак, шнурок спаян, переходник USB-COM включён в USB или сам шнурок вставлен в COM-порт, софт скомпилирован и наделён необходимыми правами. Изложение ориентировано на любую *nix-систему, в данном случае это Debian GNU/Linux.
  • Включаем камеру, переводим её в режим BULB, выставляем значение диафрагмы и ISO, а так же другие параметры при необходимости.
  • Вставляем jack в разъём фотокамеры, а противоположный конец в COM-порт или COM-USB переходник и далее в USB-порт компьютера.
  • Убеждаемся (в случае USB), что переходник опознан и работает: dmesg должен выдать что-то вроде:
usb 2-1: new full speed USB device using uhci_hcd and address 2
usb 2-1: configuration #1 chosen from 1 choice
drivers/usb/serial/usb-serial.c: USB Serial support registered for pl2303
pl2303 2-1:1.0: pl2303 converter detected
usb 2-1: pl2303 converter now attached to ttyUSB0
usbcore: registered new interface driver pl2303
drivers/usb/serial/pl2303.c: Prolific PL2303 USB to serial adaptor driver
  • Всё готово, теперь снимаем при помощи команды:
    make_capture 1 5 2 3
В этом примере будет сделано 2 кадра с экспозицией 5 секунд, задержка между кадрами 3 секунды, задержка поднятия зеркала 1 секунда.
Следует так же отметить, что таким способом можно отсекать выдержки от 1 секунды и больше по Exif. Физически передавать сигнал можно и быстрее, однако в Exif при этом пишутся неправильные данные. Точно так же, выдержки в данном случае отсекаются с точностью 1 секунда. Впрочем, для установки, которая должна отсекать длинные выдержки, это приемлемо.

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

Работает на камерах по крайней мере с firmware 1.0.4, имеются частные сообщения, что оригинальная схема должна работать с 400D. Выясняется в настоящее время.

Благодарности
Эта статья появилась в результате усилий многих людей, которых мне хотелось бы поблагодарить за помощь:
  • Michael A. Covington for his original article "Building a Cable Release and Serial-Port Cable for the Canon EOS 300D Digital Rebel".
  • Евгению Ромасу aka BrainBug за ссылку на оригинальную статью по управлению фотоаппаратом при помощи COM-порта, а так же за ценные мысли, высказанные в частных сообщениях.
  • Антону aka NTRNO за то, что выискал ключевые посты в недрах Астрофорума и выдал идеи по управлению камерой в Linux.
  • Всем участникам Астрофорума, так или иначе участвовавших в темах управления фотокамерой при помощи компьютера.
  • Алексею Ропяному, который экспериментально выяснил особенность фотокамеры, предложил изменить схему и использовать сигнал DTR для закрывания затвора.
  • Леониду Серёжкину за реализацию схемы в железе.
А так же огромная благодарность сотрудникам кафедры Физики твёрдого тела №25 МИФИ за поддержку и понимание.
Читать далее