EXIF теги в Linux: зачем нужен EXIF



7 коммент.
В различных форматах графических файлов возможность хранить дополнительные сведения, например, время выдержки, значение диафрагмы, время или ещё что-нибудь. Это обеспечивает формат EXIF (Exchangeable Image File Format). В Linux для работы с EXIF данными есть такой мощный пакет утилит, как exiftools, всю полезность которого автор этих строк испытал на себе. Вот, например, потребовалось вам сохранить какие-то пометки о том, где сделан этот снимок - тут-то вам exiftools и пригодится.


Например, выдираем теги из RAW-файла на примере цифровой камеры Canon EOS 400D
exiftool IMG_0383.CR2 :
beast@notebeast:~$ exiftool IMG_0383.CR2
ExifTool Version Number : 6.57
File Name : IMG_0383.CR2
File Size : 8 MB
File Modification Date/Time : 2008:10:22 12:48:10
File Type : CR2
MIME Type : image/x-raw
Image Width : 1936
Image Height : 1288
Bits Per Sample : 8 8 8
Compression : JPEG (old-style)
Make : Canon
Camera Model Name : Canon EOS 400D DIGITAL
Preview Image Start : 79450
Orientation : Horizontal (normal)
Preview Image Length : 68724
X Resolution : 72
Y Resolution : 72
Resolution Unit : inches
Modify Date : 2008:10:15 15:44:26
Exposure Time : 1
F Number : 6.3
Exposure Program : Manual
ISO : 100
Exif Version : 0221
Date/Time Original : 2008:10:15 15:44:26
Create Date : 2008:10:15 15:44:26
Components Configuration :
Shutter Speed Value : 1
Aperture Value : 6.3
Flash : Off
Focal Length : 55.0mm
Macro Mode : Normal
Self-timer : 0
Quality : RAW
Canon Flash Mode : Off
Continuous Drive : Single
Focus Mode : Manual Focus
Canon Image Size : Unknown (-1)
Easy Mode : Manual
Digital Zoom : None
Contrast : Normal
Saturation : Normal
Sharpness : +3
Metering Mode : Center-weighted averaging
Focus Range : Not Known
Canon Exposure Mode : Manual
Long Focal : 55
Short Focal : 18
Focal Units : 1
Max Aperture : 5.6
Min Aperture : 32
Flash Activity : 0
Flash Bits : (none)
Focus Continuous : Unknown (8)
Zoom Source Width : 0
Zoom Target Width : 0
Photo Effect : Off
Color Tone : Normal
Focal Type : Zoom
Focal Plane X Size : 23.04mm
Focal Plane Y Size : 15.37mm
Auto ISO : 100
Base ISO : 100
Measured EV : -6.12
Target Aperture : 6.3
Exposure Compensation : 0
White Balance : Auto
Slow Shutter : None
Shot Number In Continuous Burst : 0
Flash Guide Number : 0
Flash Exposure Compensation : 0
Auto Exposure Bracketing : Off
AEB Bracket Value : 0
Focus Distance Upper : 0.77
Focus Distance Lower : 1
Bulb Duration : 0
Camera Type : EOS Mid-range
Auto Rotate : None
ND Filter : Unknown (-1)
Self-timer 2 : 0
Canon Image Type : Canon EOS 400D DIGITAL
Canon Firmware Version : Firmware 1.0.4
Owner's Name : unknown
Camera Body No. : 0730325266
Set Button Cross Keys Func : Set: Picture Style
Long Exposure Noise Reduction : Off
Flash Sync Speed Av : Auto
Shutter-AE Lock : AF/AE lock
AF Assist Beam : Emits
Exposure Level Increments : 1/3 Stop
Mirror Lockup : Disable
E-TTL II : Evaluative
Shutter Curtain Sync : 1st-curtain sync
Magnified View : Image review and playback
LCD Display At Power On : Display
Canon Model ID : EOS Digital Rebel XTi / 400D / Kiss Digital X
Num AF Points : 9
Canon Image Width : 3888
Canon Image Height : 2592
Canon Image Width As Shot : 3504
Canon Image Height As Shot : 2336
AF Points Used : (none)
Serial Number Format : Format 2
Original Decision Data : 0
File Number : 128-0000
Bracket Mode : Off
Bracket Value : 0
Bracket Shot Number : 0
Noise Reduction : Off
WB Bracket Mode : Off
WB Bracket Value AB : 0
WB Bracket Value GM : 0
Filter Effect : None
Toning Effect : None
Lens Type : EF-S18-55mm f/3.5-5.6
Internal Serial Number : H0885505
Dust Removal Data : (Binary data 1024 bytes, use -b option to extract)
Tone Curve : Standard
Sharpness Frequency : n/a
Sensor Red Level : 0
Sensor Blue Level : 0
White Balance Red : 0
White Balance Blue : 0
Color Temperature : 5200
Picture Style : Standard
Digital Gain : 0
WB Shift AB : 0
WB Shift GM : 0
Sensor Width : 3948
Sensor Height : 2622
Sensor Left Border : 52
Sensor Top Border : 23
Sensor Right Border : 3939
Sensor Bottom Border : 2614
WB RGGB Levels As Shot : 2236 1024 1024 1507
Color Temp As Shot : 5211
WB RGGB Levels Auto : 2236 1024 1024 1507
Color Temp Auto : 5211
WB RGGB Levels Measured : 2236 1024 1024 1507
Color Temp Measured : 5211
WB RGGB Levels Daylight : 2236 1024 1024 1507
Color Temp Daylight : 5200
WB RGGB Levels Shade : 2615 1024 1024 1253
Color Temp Shade : 7000
WB RGGB Levels Cloudy : 2427 1024 1024 1367
Color Temp Cloudy : 6000
WB RGGB Levels Tungsten : 1589 1086 1086 2509
Color Temp Tungsten : 3200
WB RGGB Levels Fluorescent : 1889 1034 1034 2126
Color Temp Fluorescent : 3769
WB RGGB Levels Kelvin : 2236 1024 1024 1507
Color Temp Kelvin : 5211
WB RGGB Levels Flash : 2479 1024 1024 1339
Color Temp Flash : 6262
WB RGGB Levels PC1 : 512 1024 1024 512
Color Temp PC1 : 4255
WB RGGB Levels PC2 : 512 1024 1024 512
Color Temp PC2 : 4255
WB RGGB Levels PC3 : 512 1024 1024 512
Color Temp PC3 : 4255
WB RGGB Levels Custom : 1201 1133 1133 5999
Color Temp Custom : 2400
User Comment :
Flashpix Version : 0100
Color Space : sRGB
Exif Image Width : 3888
Exif Image Length : 2592
Interoperability Index : R98 - DCF basic file (sRGB)
Interoperability Version : 0100
Focal Plane X Resolution : 4433.295
Focal Plane Y Resolution : 4453.608
Focal Plane Resolution Unit : inches
Custom Rendered : Normal
Exposure Mode : Manual
Scene Capture Type : Standard
Thumbnail Offset : 78336
Thumbnail Length : 1114
Photometric Interpretation : RGB
Samples Per Pixel : 3
Rows Per Strip : 256
Planar Configuration : Chunky
Strip Offsets : 443086
Strip Byte Counts : 7543495
Aperture : 6.3
Drive Mode : Single-frame shooting
Flash : Off
Image Size : 1936x1288
Lens : 18.0 - 55.0mm
Preview Image : (Binary data 68724 bytes, use -b option to extract)
Scale Factor To 35mm Equivalent : 1.6
Shooting Mode : Manual
Shutter Speed : 1
Thumbnail Image : (Binary data 1114 bytes, use -b option to extract)
WB RGGB Levels : 2236 1024 1024 1507
Blue Balance : 1.47168
Circle Of Confusion : 0.019 mm
Focal Length : 55.0mm (35mm equivalent: 85.9mm)
Hyperfocal Distance : 24.97 m
Lens : 18.0 - 55.0mm (35mm equivalent: 28.1 - 85.9mm)
Light Value : 5.3
Red Balance : 2.183594

Забавно, да, а что ещё можно с EXIF делать? Например, чтобы выцедить из RAW-файла время выдержки, сделать надо вот что:
exiftool -shutterspeed IMG_0383.CR2
Shutter Speed : 1
Для того, чтобы использовать exif-теги, надо запросить список тегов в которые возможна запись. Пишем:
exiftool -listw IMG_0383.CR2

Так, например из кучи тегов мы хотим писать в тег City. Для этого:

$ exiftool -City=Moscow IMG_0383.CR2
1 image files updated
И теперь:

$ exiftool -City IMG_0383.CR2
City : Moscow

Ура, теперь мы в тег City записали, что хотели. Утилита exiftools может не только читать, но и записывать информацию в EXIF-теги. Это может быть полезно и нужно для хранения в RAW-файлах информации о съёмке.


И зачем всё это надо!?
Причины, по которым есть необходимость модифицировать EXIF-данные в RAW-файлах могут быть разные. Вот, например, ув. тов. jetxee хочет в фотографиях хранить геотеги, то есть где фотография была снята.

Мне это потребовалось вот для чего. Результатами моих научных экспериемнтов являются куча RAW-файлов, и в каталоге лежит небольшой файл с условиями эксперимента (что снималось и для чего). Разные не очень технически продвинутые коллеги любят эти файлы копировать и использовать их где-то ещё (типа проверить и посмотреть), а потом говорят: "слушай, вот я тут картинку обработал, и результаты такие и такие - не помнишь, откуда этот файл!?". Хуже дело, если взяли по одному файлу из нескольких разных экспериментов и вот теперь надо разобраться, что откуда взято.

В общем случае экспериментатор при таком вопросе бледнеет и начинает громко говорить плохими словами. Но этого можно не делать: внедрить информацию в сам RAW-файл в какой-нибудь хитрый тэг. Потом так проще отследить файлы.

И теперь, чтобы избавить себя от нервотрёпки, делаем так: находим любой записываемый тег, и пишем туда то, что относится к эксперименту. После этого записываем нужные данные во ВСЕ файлы RAW скопом:
exiftool -City='Moscow Engineering Physics Institute' *.CR2

10 image files updated

С удовлетворением видим:
exiftool -City *.CR2
======== IMG_0383.CR2
City : Moscow Engineering Physics Institute
======== IMG_0384.CR2
City : Moscow Engineering Physics Institute
======== IMG_0385.CR2
City : Moscow Engineering Physics Institute
======== IMG_0386.CR2
City : Moscow Engineering Physics Institute
======== IMG_0387.CR2
City : Moscow Engineering Physics Institute
======== IMG_0388.CR2
City : Moscow Engineering Physics Institute
======== IMG_0389.CR2
City : Moscow Engineering Physics Institute
======== IMG_0390.CR2
City : Moscow Engineering Physics Institute
======== IMG_0391.CR2
City : Moscow Engineering Physics Institute
======== IMG_0392.CR2
City : Moscow Engineering Physics Institute
10 image files read

И всё дела. И уж теперь ваши нерадивые коллеги не введут вас в ступор вопросом: а отуда этот файлик!?

Здесь же, кстати, следует отметить, что EXIF данные можно записывать не только в RAW-файлы, но и в TIFF например. Однако полей для записи в TIFF меньше, хотя их тоже можно использовать.
Читать далее

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 можно на сайте авторов.
Читать далее

Toshiba Netbook NB-100: маленькое японское чудо



18 коммент.
Надумал купить себе небольшой нетбук, который удобно было бы таскать с собой для разного рода выступлений, лекций и презентаций. Большие мощности там ни к чему, нужно просто крутить PDF-презентации на внешнем мониторе, работать с текстом и время от времени выходить в интернет. И вот, поискав доступные варианты, остановился на Toshiba NB-100 с предустановленной Ubuntu Netbook Remix.


Нетбук сразу из коробки
Первое впечатление - "ой, какой маленький!" И это именно так: нетбук очень мал и компактен, лёгок и изящен. Хитрые японцы сделали клавиатуру как раз такого размера, что ещё чуть-чуть меньше, и работать на ней уже просто невозможно. То есть клавиатура в целом неплоха, но набирать на ней длинные тексты, конечно, утомительно. Работа с такими маленькими кнопкам требует небольшого привыкания, но в целом не смертельно. Маленький тачпад довольно чуток к прикосновениям, отрабатывает нажатия вполне прилично. Динамик расположен внизу экрана, и довольно громкий; наверху экрана есть вебкамера, хотя её 0.3 мегапикселей едва хватает для сколько-нибудь приличной видеоконференции.

Хочется отметить, что вариант процессора Intel Atom в нетбуке от Тошибы с Hyperthreading, что вместе с SATA-винчестером положительно влияют на скорость работы машины: всё работает очень быстро и плавно, что не может не радовать. Маленький 8.9" монитор Тошибы намного ярче моего Asus M5200AE, так что на нём можно работать даже в яркий солнечный день. Глянцевый монитор, хоть мне и не нравится его гламурность и способность отражать всё и вся, очень хороший и яркий, работать за ним приятно.

По умолчанию предустановлена Ubuntu 8.04 с ядром 2.6.24-19lpia, как оно себя называет. При первом запуске в магазине настройка заняла не больше минуты, в то время как рядом сидевшие с Windows Vista ждали первый запуск аж 15 минут. После вопросов о логине\пароле, текущем часовом поясе и прочих мелочах загрузилась Ubuntu с интерфейсом вида "Netbook desktop":


Заблудиться тут в общем негде, но как переключаться между задачами я, честно говоря, не сразу понял. Побродив по настройкам, смог переключиться в нормальный убунтушный гномовский интерфейс, который называется "Classic desktop":


Не думаю, что прожжённые КДЕшники будут рады такому названию, но для Убунты оно действительно Классик. Шут с ним, впрочем, с названием - перед нами обычный GNOME на нетбуке:


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

Порадовало то, что Ubuntu сама нашла мою проводную сеть и тут же к ней подключилась по DHCP:



Приятная мелочь, так что теперь можно немного побродить по Интернету с помощью Firefox, который так же имеется в комплекте предустановленного софта. Тут начинаются лёгкие минусы: в Firefox натолкали столько панелей инструментов, что хоть беги - никто не подумал, что экран нетбука всего 1024x600 пикселей, там и так ни черта не видать:


Да, это можно отключить, но зачем же это по умолчанию!?

Идём по софту, который есть прямо из коробки. Имеем OpenOffice 2.4, F-spot, Firefox, Evolution, Stardict - это то, что сразу бросилось в глаза. В общем, софта хватает. Единственное, что поразило - не установленный по умолчанию GiMP. Это для меня большая загадка. Впрочем, используя замечательные репозитории DebianUbuntu это можно быстро преодолеть. К слову сказать, процесс установки софта в Убунте меня очень порадовал: все красиво, понятно, с подсказками и большими глянцевыми кнопками, чтобы не промахнуться. :-) Мои олдскульные замашки с aptitude install от рута здесь не проходят.



И тут начались первые косяки. Задумал поставить программу Planner, которая помогает планировать своё время - однако при установке сразу запустился некий scrollkeeper и отожрал всё процессорное время, при этом отказываясь продолжать установку. Пришлось использовать грубую физическую силу в виде sudo killall и выдирать его оттуда. Мне удалось поставить GIMP, чтобы сделать пару скриншотов, и на этом я удовлетворился.

Побродив по всему этому глянцевому гламуру с весёлыми кнопками, я заскучал по своим любимым приложениям: MC, Yakuake, Kate... К тому же иногда хочется немного покрасноглазить и поработать от root для того, чтобы что-то подогнать под себя в системных настройках. А постоянно писать sudo мне непривычно. И вот я уже готовлю загрузочную флешку с установщиком Debian Lenny для водружения привычной среды обитания на нетбук.


Debian Lenny и Toshiba NB100
Загрузка с флешки имела один забавный момент в моём случае: если у вас в USB-порт воткнуто ещё что-то кроме флешки, загрузиться с флешки не удастся. После вытыкания мыши всё пошло как по маслу: знакомый инсталлятор (ссылка на Установку Дебиан) сам быстро нашёл мою проводную сеть, предложил выбрать интернет-репозиторий, разбить диск и выбрать по желанию пакеты для дальнейшей установки. Вопросов инсталлятор Lenny задаёт ощутимо меньше, чем Etch-евский.

Я разбил весь диск одним куском, файловая система ext3, свопа нет (только swap-file), на что инсталлятор мне попенял (но , предупредив о последствиях, согласился со словами "ты жираф, тебе видней"). Без разговоров был установлен загрузчик Grub и прогрессивная локаль UTF8 (мои старпёрские привычки к Lilo и koi8 не учитывались). Установка прошла быстро и без проблем: даже учитывая моё медленное соединение в 64кБ/сек базовая система развернулась за 30 минут.

Устройства нашлись ядром все - вот вывод lspci для NB-100:
00:00.0 Host bridge: Intel Corporation Mobile 945GME Express Memory Controller Hub (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GME Express Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 02)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02)
00:1f.2 SATA controller: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA AHCI Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 02)
02:00.0 Ethernet controller: Atheros Communications Inc. AR242x 802.11abg Wireless PCI Express Adapter (rev 01)


Дальше было всё ещё скучнее - никаких увлекательных триллеров с погоней, стрельбой и развратными женщинами по настройке Wifi или, скажем, cardreader, не было. Стандартное ядро из Lenny за номером 2.6.26-2 подняло ВСЁ оборудование сразу же и без лишних телодвижений. Мне потребовалось только быстро доставить все нужные мне службы и поставить иксы, которые тут же завелись сразу на widescreen 1024х600. Здесь меня встретила только одна маленькая неприятность, отнявшая у меня минут 10 на гуглёж и решение: совершенно чудовищных размеров шрифты. Решилось довольно быстро:

  1. При старте иксов вручную идём править файл /etc/X11/xinit/xserverrc в котором исправляем строку exec /usr/bin/X -nolisten tcp на строку exec /usr/bin/X -nolisten tcp -dpi 96
  2. Если иксы стартуют автоматически при загрузке машины (а это так скорее всего и будет), всё немножко сложнее. Нужно иксам указать явно, что мы хотим 96dpi на мониторе. Для этого в файле /etc/X11/xorg.conf вписываем
Section "Monitor"
...
DisplaySize AA BB # 96 DPI @ 1280x960
...
EndSection

Заменяем АА и ВВ на числа, посчитанные так: АА=1024 x 25.4 / 96 и BB = 600 x 25.4 / 96 Здесь подставлено моё разрешение экрана нетбука 1024х600. После этого в разделе Device section вписываем параметр:

Option "NoDDC" "true"

Всё, это выставит нормальное разрешение и сделает шрифты на нетбуке приличных размеров. За этот трюк спасибо великолепному Arch Wiki.

После этого процесс настройки пошёл, как и прежде, без сучка и задоринки: установил IceWM и все необходимые приложения. Я был снова поражён скоростью работы системы, особенно винчестера: установка пакетов была просто молниеносной, и я не успевал набирать новые названия пакетов. В целом за полтора часа я установил всё: openoffice 3.1, gimp, cinepaint, inkscape, kate, kile, yakuake, mocp, octave, MATLAB, firefox, opera, samba, cups, alsa, imagemagick...

Немного поигрался с темами для IceWM и нашёл пару тем с маленькими размерами заголовков окон и панелью задач. Вот, например, тема Thin Black для IceWM на фоне нескольких приложений:

Практически - кроме ещё одной маленькой партизанской засады под названием Clone Mode. В переводе это значит, что я хочу гонять презентации не только на своём мониторе, но и на проекторе. Тут я вспомнил уважаемых комментаторов, намекавших на Xrandr в этом вопросе, и решил попробовать, благо xrandr у меня на нетбуке с Debian Lenny версии 1.2. Небольшой гуглёж сразу вывел на решение всех проблем: просто пишем
$ xrandr --output VGA --auto
и тут же получаем желаемый Clone Mode без всяких правок xorg.conf
Тут нам сразу наступает счастье: осталось только запустить OpenOffice Impress и крутить презентации.


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

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



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


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


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

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

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



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

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

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


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



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


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

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

Отслеживание версий документов LaTeX с помощью скрипта на Python



18 коммент.
... и сверху ещё майонезом полить :-) На самом деле, задача вполне актуальная, а именно: есть документ LaTeX, с которым работает много людей - в документ вносятся правки. Большинство людей LaTeX не приемлют по личным причинам. По рукам ходит много распечаток документа разных версий, и нужно отслеживать, какая версия документа у каждого из них.

Публикуемое решение задачи довольно простое: LaTeX с помощью скрипта на Python узнаёт номер версии документа, находящегося под контролем системы управления версиями Subversion, и впечатывает в документ номер версии.
В примере приводится система контроля версий Subversion, о которой уже говорилось, но при желании можно использовать вашу любимую систему контроля версий.

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

Далее нам нужно в текст LaTeX-документа добавить скрипт на Python. Для этого сначала нужно научиться вызывать Python внутри LaTeX, что довольно просто благодаря замечательной статье Python внутри LaTeX ув. тов. jetxee. Итак, требуется:

  • скачать файл python.sty и скопировать его в каталог с документом;
  • в документе в преамбуле включить \usepackage{python};
  • внутри документа фрагменты кода на Python помещать в окружение \begin{python} ... \end{python} - теперь всё, что они выведут, станет частью конечного документа;
  • запускать LaTeX теперь нужно с опцией -shell-escape для запуска встроенного кода из-под LaTeX
Ну и, естественно, нужно иметь рабочий Python на машине. Впрочем, если у вас десктоп с графической оболочкой и обвешан разными рюшками, Python у вас скорее всего уже есть.

Так, всё по отдельности у нас есть, и осталось запалить всё это вместе. Для этого в документ вставляем код (кусок реального документа, чтобы было понятно):

\documentclass[a4paper,10pt,oneside]{article}
\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[russian,english]{babel}
\usepackage{amssymb,amsfonts,amsmath,mathtext}
\usepackage{cite,enumerate,float,indentfirst}
\usepackage{caption2,tabularx}
\usepackage[dvips]{graphicx}
\graphicspath{{pictures/}}

%<--------------Pythonated trick starts HERE!
\usepackage{fancybox,fancyhdr}
\usepackage{python}
\fancyhead[R]{}
\fancyhead[L]{}
\fancyhead[C]{}
\fancyfoot[R]{}
\fancyfoot[C]{\textit{\textbf{\input{svnstatus}}}}
\fancyfoot[L]{}
\begin{python}
#! /usr/bin/python
import os, string
cmd = 'svn status ИМЯФАЙЛАТУТ.tex -v'
fpipe = os.popen(cmd)
piperesult = fpipe.read()
fpipe.close()
results = piperesult.split()
if results[0] == 'M':
out = 'Subversion revision of this document is '+results[1]+', last modified by '+results[3]+', STATUS: '+results[0]
else:
out = 'Subversion revision of this document is '+results[1]+', last modified by '+results[2]
FileName='svnstatus.tex'
fout=open(FileName,'w')
fout.write(out)
fout.close()
\end{python}
%<--------------Pythonated trick ends HERE!


\makeatletter
\bibliographystyle{unsrt} %Стиль библиографических ссылок БибТеХа
% Заменяем библиографию с квадратных скобок на точку:
\renewcommand{\@biblabel}[1]{#1.}
\makeatother
% Рис.1. - как у нас принято.
\renewcommand{\captionlabeldelim}{.}

% Меняем поля страницы
\usepackage{geometry}
\geometry{left=2cm}
\geometry{right=2cm}
\geometry{top=2cm}
\geometry{bottom=3cm}

\begin{document}

\pagestyle{fancy}


\begin{abstract}
The registration of correlation signals....
\end{abstract}
Небольшие комментарии к коду. Я использовал возможности пакета fancyhdr для того, чтобы вставить упоминание о ревизии документа в колонтитуле - чтобы на каждой странице это было видно. Питонистый скрипт довольно прост, а если вы захотите его оптимизировать - напильник вам в руки.

Как сделать отслеживание версий для Mercurial [добавлено]
Для Mercurial код немного проще, приведу его кусок здесь:
%<--------------Pythonated trick starts HERE!
\usepackage{fancybox,fancyhdr}
\usepackage{python}
\begin{python}
#! /usr/bin/python
import os, string
cmd = 'hg id -n -i'
fpipe = os.popen(cmd)
piperesult = fpipe.read()
fpipe.close()
results = piperesult.split()
out = 'HG Mercurial revision hash of this document is '+results[0]+', revision number is '+results[1]
FileName='paperstatus.tex'
fout=open(FileName,'w')
fout.write(out)
fout.close()

\end{python}
\fancyhead[R]{}
\fancyhead[L]{}
\fancyhead[C]{Page \thepage}
\fancyfoot[R]{}
\fancyfoot[C]{\textit{\textbf{\input{paperstatus}}}}
\fancyfoot[L]{}

%<--------------Pythonated trick ends HERE!

После этого в ваш документ внизу страницы будет вставляться номер его ревизии в Subversion, что будет видно и при печати. Мне это сэкономило много нервов и седых волос.
Читать далее

Шумоподавление на чипе современных CMOS-фотосенсоров



11 коммент.
По материалам кандидатской диссертации

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

Большинство современных цифровых фотокамер оснащены CMOS-сенсорами. Как известно, одним из главных недостатков CMOS-сенсоров является их высокий уровень шума. Тем не менее, современные CMOS-фотосенсоры, произведённые по 4/5Т-технологии, позволяют получать изображения с уровнем шумов, сравнимым с уровнем шумов CCD-фотосенсоров. Это достигается шумоподавлением на самом фотосенсоре и CMOS-пикселе. Данное обстоятельство следует учитывать при проведении измерений и регистрации сигналов на CMOS-фотоприёмники, а так же при оценке характеристик CMOS-сенсоров. 

Широкое применение CMOS-сенсоров связано с их весьма важным достоинством: при увеличении размеров фотосенсора энергетические затраты на передачу данных об изображении практически не увеличиваются. Если количество считывающих каналов в CMOS-сенсорах остаётся неизменным, то энергопотребление сенсора остаётся одинаковым и не возрастает при увеличении размера сенсора (см.Рис. 1). С другой стороны, CCD-сенсоры перемещают зарядовые пакеты, и это существенно более энергозатратно. Убыстрение процесса считывания в CCD-сенсорах так же приводит к дополнительному расходу энергии, что нежелательно в портативной технике. Даже по сравнению с малыми сенсорами, CCD-сенсоры потребляют вдвое больше энергии, чем CMOS, что видно на Рис.1. Сравнение полноформатных, 35-мм сенсоров показывает, что CCD-сенсоры потребляют почти втрое больше энергии, чем CMOS.

Рис.1: Сравнение энергопотребления современных CMOS и CCD-фотосенсоров.
Однако при проведении оценки характеристик CMOS-сенсоров следует учитывать то обстоятельство, что получаемые изображения для оценки темновых и световых шумов в значительной степени предобработаны электроникой камеры ещё до записи в RAW-файл или передачи в компьютер для последующей обработки. Ниже следует краткое описание методов шумоподавления на CMOS-фотосенсорах
Для того, чтобы устранить высокий уровень шумов CMOS-сенсоров, требуется создавать фотосенсоры с большим количеством транзисторов. Именно это позволяет производить шумоподавление внутри каждого пикселя, что приводит к существенному снижению уровня шума. Это потребовало создания сложных технологий 4/5Т производства CMOS-фотосенсоров.

Подавление темновых шумов

Называемый так же FPN, Fixed Pattern Noise, этот шум представляет собой разное смещение уровня сигнала для разных пикселей фотосенсора. В CMOS-сенсорах, помимо FPN, имеется так же неоднородность сигнала по столбцам. Основным методом устранения такого шума является метод CDS, Correlated Double Sampling. Процесс шумоподавления по методу CDS проиллюстрирован на Рис.2.


Рис.2: Метод CDS для подавления фиксированного шума на изображениях, зарегистрированных фотосенсорами CMOS.
В методе CDS производится одновременное считывание светового сигнала и темнового двумя независимыми считывателями. Темновой сигнал накапливается в пикселях фотосенсора, которые защищены от света. Сначала считывается только информация о темновом шуме, потом считывается световой сигнал вместе с темновым шумом. Далее из считанного сигнала вычитается темновой шум. После этого на изображении, зарегистрированным CMOS-фотоприёмником, фиксированный шум FPN компенсирован (см.Рис.3). Для этого использование технологии 4/5T является критичным.

Рис.3: Процесс шумоподавления по методу CDS.
Однако большее искажение в регистрируемое изображение вносит шум, связанный с неоднородностью фоточувствительности. Это вытекает из того факта, что технологически невозможно изготовить миллионы одинаковых CMOS-пикселей с усилителями внутри.

Подавление шума, зависящего от светового сигнала

Так как каждый пиксель CMOS-сенсора содержит несколько транзисторов, управляющих передачей данных, технологически невозможно сделать их идентичными. Это приводит к неоднородности величины сигнала даже при регистрации плоского светового поля, что проиллюстрировано на Рис. 4

Рис.4: Сигнал, подверженный шуму, вызванному неоднородностью фоточувствительности.
Изображения, полученные с ранних образцов CMOS-сенсоров, были подвержены шуму неоднородности фоточувствительности из-за того, что сброс темнового заряда на фотодиодах был неполным (см.Рис. 5)
Сначала производится сброс значения фотодиода, затем производится регистрация полезного сигнала (S). Следует заметить, что в процессе регистрации светового сигнала так же регистрируется и шум (S+N1). Далее считывался сигнал вместе с шумом (S+N1), фотодиод сбрасывался и считывалось значение шума (N2). Это приводило к тому, что на изображении оставался шум.

Рис.5: Неполный сброс значений фотодиодов приводит к считыванию сигнала с остаточным шумом.
Развитие технологии производства фотодиодов по 4/5Т-технологии сенсоров CMOS позволило более эффективно подавлять шумы, связанные с неоднородностью фоточувствительности. Так, был разработан метод полной передачи заряда. Каждый фотодиод содержит ячейку для запоминания темнового шума и ячейку для накопления светового сигнала (см.Рис. 6).

Рис.6: Метод полной передачи заряда для устранения шума, связанного с неоднородностью фоточувствительности.
Сначала считывается остаточный заряд, включающий в себя темновой и световой сигнал. Этот сигнал остаётся в ячейке фотодиоде, хранящей информацию об уровне шума, после чего производится сброс всех фотодиодов матрицы фотосенсора.
После завершения экспозиции, значение сигнала и значение шума считываются независимо - происходит замер текущего уровня шума.
Темновой заряд (N) и световой заряд (S) накапливается в разных ячейках одного и того же фотодиода. После того, как уровень шума (N) считывается, передаётся количество заряда из ячейки фотодиода, которая накапливала световой заряд. Происходит объединение уровней заряда (S+N) и считывание как целого. Так как уровень шума (N) известен для того же фотодиода, происходит их вычитание и, таким образом, считывается только информация о сигнале. Это и составляет основу метода полной передачи заряда
Кроме того, шум, вызванный неоднородностью фоточувствительности, возрастает с увеличением усиления ISO. Поэтому в ряде коммерческих цифровых фотокамер применяются технологии, которые усиливают сигнал в зависимости от уровня ``сигнал/шум'' на изображении. Сигналы с высоким соотношением ``сигнал/шум'' посылаются на усилители с большим коэффициентом усиления. Это позволяет CMOS-фотосенсорам выдавать изображения высокого качества в условиях съёмки, требующих высокого значения ISO и длинных экспозиций.

Ссылки
Пост подготовлен по материалам технической документации компании Canon на цифровые камеры Canon серии EOS и полноформатные фотосенсоры.
Читать далее

Настройка Dual-Head в Linux на примере ноутбука Asus M5200AE



24 коммент.
Итак, нужно настроить режим отображения на два разных монитора - чтобы между разными экранами можно переносить окна приложений. Такой режим, в отличие от Clone Mode (клон, на второй мониторе тоже, что и на первом), называется Dual Head ("две головы", второй монитор отображает другое).

Для этого нужно поправить xorg.conf, и править его придётся несколько больше, чем для Clone mode. В режиме Dual Head требуется описать два монитора и две видеокарты в xorg.conf (напомню, что конфиг этот лежит в /etc/X11/ и отвечает за весь графический режим). После того, как всё это будет сделано, нужно включить расширение Xinerama. Ну и естественно, перед тем, как вы начнёте крошить ваш xorg.conf, нужно сделать резервную копию старого конфига.

Режим Dual Head в Linux - xrandr
Если у вас свежий дистрибутив и xrandr новых версий (старше 1.2), то двухголовый режим можно сделать так:
xrandr --output VGA --auto --output LVDS --mode 1280x800 --left-of VGA
При этом xrandr может выдать ошибку, что режим не может быть установлен - для этого нужно увеличить размер виртуального экрана в конфигурационном файле
/etc/X11/xorg.conf следующим образом:

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"

Subsection "Display"
Virtual 4096 2048
EndSubsection
EndSection
Для отключения режима dualhead в linux пишем в консоли:
xrandr --output VGA --off
Если на консоль у вас аллергия и вообще терминалофобия, есть графические утилиты вроде gxrandr.

Режим Dual Head в Linux - вариант с Xorg.conf
Итак, привожу рабочий конфиг xorg.conf Что-то в нём будет отмечено серым - это не важно. Цветом я выделил наиболее критичные куски, которые ещё отдельно прокомментирую. Начало конфига трогать не надо - там нет ничего, что относится к двухголовости: пути к шрифтам и настройки раскладки клавиатуры. Поэтому пропускаем и идём дальше.

# XF86Config-4 (XFree86 X Window System server configuration file)
#
# This file was generated by dexconf, the Debian X Configuration tool, using
# values from the debconf database.
#
# Edit this file with caution, and see the XF86Config-4 manual page.
# (Type "man XF86Config-4" at the shell prompt.)
#
# This file is automatically updated on xserver-xfree86 package upgrades *only*
# if it has not been modified since the last upgrade of the xserver-xfree86
# package.
#

Section "Files"
# FontPath "unix/:7100" FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/lib/X11/fonts/Type1"
FontPath "/usr/share/fonts/X11/CID"
FontPath "/usr/lib/X11/fonts/CID"
FontPath "/usr/lib/X11/fonts/Speedo"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/lib/X11/fonts/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "/usr/lib/X11/fonts/75dpi"
EndSection

Section "Module"
Load "bitmap"
Load "dbe"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "record"
Load "vbe"
EndSection

Section "InputDevice"
Identifier "Default Keyboard"
Driver "keyboard"
Option "CoreKeyboard"
Option "XkbRules" "xfree86"
Option "XkbModel" "pc102"
Option "XkbLayout" "us,ru(winkeys)"
Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll"
EndSection

Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
EndSection


Теперь переходим к разделу Device - тут надо описать две видеокарты. Названия идентификаторов важны, так как на них
вы будете ссылаться дальше. Мониторы имеют номера 0 и 1, BusID остаётся один и тот же.
Section "Device"
Identifier "Intel Corporation Intel Default Card"
Driver "i810"
BusID "PCI:0:2:0"
Option "MonitorLayout" "CRT,LFP"
Screen 0
EndSection

Section "Device"
Identifier "Intel Corporation Intel Default Card External"
Driver "i810"
BusID "PCI:0:2:0"
Option "Display" "CRT"
Option "MonitorLayout" "CRT,LFP"
Screen 1
EndSection


Отлично, теперь к двум видеокартам надо описать два монитора. Будьте внимательны и указывайте правильные частоты HorizSync и VertRefresh.
Section "Monitor"
Identifier "Default Monitor"
HorizSync 28-50
VertRefresh 43-75
Option "DPMS"
EndSection

Section "Monitor"
Identifier "External Monitor"
HorizSync 30-81
VertRefresh 56-75
DisplaySize 372 301
Option "DPMS"
EndSection


Дальше описываем разрешения, которые могут реализовать наши мониторы - не перепутайте частоты для Default monitor и External monitor. Также следует указать правильные идентификаторы видеокарт.
Section "Screen"
Identifier "Default Screen"
Device "Intel Corporation Intel Default Card
Monitor
"Default Monitor"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 4
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 8
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 15
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 16
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 24
Modes "1024x768"
EndSubSection
EndSection

Section "Screen"
Identifier "External Screen"
Device
"Intel Corporation Intel Default Card External"
Monitor
"External Monitor"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x1024" "1024x768" "800x600"
EndSubSection
EndSection

А если вы хотите таскать окошки приложений между мониторими, нужно включить расширение Xinerama (оно содержится в пакетах libdmx1 и libxinerama1).
Section "ServerLayout"
Identifier "Default Layout"
Option "Xinerama" "true"
Screen 0 "External Screen"
Screen 1 "Default Screen" LeftOf "External Screen"
InputDevice "Default Keyboard"
InputDevice "Configured Mouse"
EndSection

Section "DRI"
Mode 0666
EndSection
Указание параметра LeftOf, как можно догадаться, делает внешний экран слева от основного.

Если Xinerama не включить, то при старте иксов на внешнем мониторе появится стандартная сеточка, но перетащить туда ничего не получится.

Что ещё
Режим Dual Head особенно актуален: например, вашему научруку резко плохеет от текста статьи, оформленной в LaTeX, но текст нужно обсудить, а перегон в Word это безумие. Что делать? Берём и настраиваем режим Dual Head, на главном мониторе у вас Kile, и вы можете править текст. На внешний монитор вытаскиваем Kdvi, где текст отрисовывается в конечном виде. Все довольны и счастливы: и вы работаете в привычной среде, и ваше начальство видит привычную картинку.

Ссылки

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