О графических форматах
Как известно существует большое количество разных типов файлов:
- Текстовые (TXT, ...)
- Программные (EXE, DLL, BAT, COM, ...)
- Архивы (ZIP, GZ, ARJ, RAR, ...)
- Графические (BMP, JPEG, PNG, GIF, ...)
- Видео (AVI, MPEG, MP4, MKV, ...)
- Звуковые (WAV, MP3, OGG, WMA, FLAC, APE, ...)
- И другие
Графические в свою очередь делятся на векторные (WMF, CDR, SVG, ...) и растровые (BMP, JPEG, PNG, TIFF, RAW, ...).
А вот растровые я бы поделил ещё на две группы:
- Для хранения и обработки (RAW, BMP, HDR, TIFF, PSD, XCF и другие)
- Для публикации (JPEG, GIF, PNG и другие)
Форматы для хранения и обработки хранят информацию с большей точностью и достоверностью, чем форматы для публикации. Они занимают больший объём и, чаще всего, имеют более простую структуру.
А вот форматы для публикации имеют своей целью показать какую-нибудь особенность при минимальном объёме. Например:
Особенность | Формат |
---|---|
Прозрачность | GIF, PNG |
Анимация | GIF |
Стерео эффект | JPS (обычный JPEG с двумя ракурсами в одном файле) |
Информация о времени и месте съёмки (EXIF data) | JPEG |
Практически у каждого формата есть те или иные достоинства и недостатки. Всё же лидером по популярности благодаря поддержки 24-разрядному цвету и эффективному сжатию является JPEG. Для поддержки прозрачности или других свойств приходится использовать систему из нескольких файлов (возможно в разных форматах).
Собственно создание графического формата, который имел бы модульную архитектуру и поддержку различных свойств (желательно в нескольких вариантах, например сжатие с потерями или без потерь, палитра фиксированного размера или True Color) и есть одна из актуальнейших задач нашего времени!
О свойствах графических форматов
Я хотел бы назвать те из них, которые, на мой взгляд, являются особенно важными и необходимыми для публикации в сети:
- Большой динамический диапазон;
- Стерео эффект;
- Массив глубины;
- Многослойность, поддержка нескольких слоёв;
- Панорамные свойства;
- Переменная плотность пикселей;
- Возможность добавления поясняющего текста, гиперссылок, звуков, видео, картинок в результирующее изображение.
Рассмотрим указанные свойства более подробно.
Большой динамический диапазон (HDR) часто используется фотографами для передачи высоко контрастных сцен. Однако изображения в форматах HDR занимают очень много места на диске. Ещё лет 10 назад были попытки создания HDR панорам на основе JPEG + значение освещённости для квадрата 8x8 пикселей (формат fjpg). Пример 3D-панорамы в этом формате доступен по адресу. К сожалению, формат не стал популярен. Вкратце затрону проблемы и решения. Изменение освещённости на реальных сценах может достигать 1 000 000: 1, а форматы вроде JPEG позволяют представить динамический диапазон порядка 1 000:1. Кроме того, обычные мониторы и телевизоры тоже не могут отобразить очень широкий динамический диапазон (по крайней мере в статике). Как вариант, можно использовать алгоритм «человеческого глаза», когда идёт подстройка яркости по некоторой текущей области, соответственно, то что имеет большую яркость будет белым, а что имеет невысокую яркость в сравнении с текущей областью будет очень тёмным. Вот страничка с примерами динамической подстройки яркости, правда работает только в Google Chrome и к HDR не имеет отношения.
Стерео эффект в изображениях для просмотра на компьютере получил широкое распространение в последнее время благодаря появлению мониторов с поляризованными экранами и мониторов с высокой частотой кадров. Хотя для простейшего применения достаточно анаглифных очков, всё же качественную цветопередачу с ними не увидишь. Для создания собственных стерео фотографий подойдёт бесплатное приложение StereoPhoto Maker. Это приложение содержит средства публикации и Java-аплет для просмотра стереоснимков с помощью браузера.
Массив глубины поистине был бы волшебным свойством изображений если бы была возможность для его быстрого и относительно точного вычисления еще на этапе съёмки. Пока же его строят используя стереопару изображений. С помощью массива глубины можно легко выделять те или иные области на изображении, объединять несколько изображений, накладывая их друг на друга. Кроме того, информацию о расстоянии до объектов можно было бы использовать для анализа сцен, да и для распознавания самих объектов. Это просто кладезь для исследований! Многое уже реализовано в контроллерах Kinect. Неплохо строит карту глубин программа Triaxes StereoTracer. К сожалению мне неизвестны бесплатные аналоги. Используя массив глубины можно было бы добиться еще одного интересного эффекта, реализованного уже аппаратным способом в Lytro. В зависимости от положения курсора мыши находить текущую глубину и делать резкими (отображать нормально) те области, у которых глубина такая же. Остальные же области размывать тем сильнее, чем больше разница в глубине.
Поддержка нескольких слоёв есть в большинстве форматов для хранения и обработки данных. В форматах же для публикации эта опция напрочь отсутствует, если не считать GIF-анимацию. В то же время это не такая уж бесполезная штука! Можно хранить в виде слоёв изображения снятые в обычном и инфракрасном или ультрафиолетовом спектре. Или, например, как в Google Maps или Яндекс-картах, использовать для отображения карт в виде изображений из космоса, схемы или их комбинации.
Многие фотоаппараты имеют возможность автоматической склейки панорам. Панорамные свойства напрямую никак не влияют на содержимое изображения, однако информация о том, что изображение является панорамой (сферической, цилиндрической или ограниченной определёнными углами) было бы явно не лишним. Современные средства просмотра панорам включают Java-аплеты, Flash-плагины и HTML5-скрипты. Но было бы гораздо лучше, если бы браузер или программа просмотра автоматически отображали изображение как панорамное. Необходимо лишь встроить эту информацию в файл подобно тому как хранится информация о месте и параметрах съёмки в данных EXIF в JPEG'ах. Тогда программа просмотра показывала бы лишь окно, внутри которого можно было бы просматривать (вращать, двигать) панораму, а не показывала бы всё изображение целиком (так смотреть неудобно).
Переменная плотность пикселей.
Я занимаюсь разработкой программы, которая позволяет выделять на исходном изображении различные области, присваивать им различное качество и сохранять исходное изображение в новом формате. Смысл этой разработки в сохранении изображения так, чтобы размер файла был минимален, но в то же время, чтобы указанные детали были доступны для просмотра. Например, фотография размером 16 Мегапикселей занимает 6 Мегабайт. На этой фотографии изображены автомобиль и два человека. Мы хотим уменьшить размер изображения, но тогда становится невозможным прочитать номер автомобиля и идентифицировать лица людей. Воспользовавшись программой мы выделяем лица и номер и указываем для них 100% качество, тогда же как для всего остального изображения качество существенно понижаем. На результирующем снимке размером 1,5 Мегабайт мы видим ту же картину, правда в несколько худшем качестве, при этом лица и номер автомобиля видны так же, как и на исходном снимке. Бесплатную бета-версию программы можно взять отсюда.
Возможность добавления поясняющего текста, гиперссылок, звуков, видео, картинок в результирующее изображение.
В настоящее время это можно реализовать с помощью технологий Flash, Java-аплетов и JavaScript. В качестве примера могу привести своё приложение (http://habrahabr.ru/sandbox/64818/). В нём, кстати, есть возможность динамической подстройки яркости, упоминавшаяся выше.
Мечта
Теперь я хотел бы подвести некоторый итог и показать, каким мне видится будущий графический формат для публикаций в Сети. Пользователь заходит на сайт, просматривает страничку и видит на ней опубликованное изображение с какого-то мероприятия. Одевает поляризационные или затворные очки для и наслаждается стерео эффектом. Проводит мышкой по изображению и темные места становятся светлее, а детали в тенях различимыми, когда курсор проходит по этим тёмным областям. Вдруг пользователя заинтересовало что то на самом краю изображения. Нажимая левую кнопку мыши он плавно панорамирует изображение, просматривая ранее недоступную область. Хм, кто это там стоит? Работаем зумом и на фоне квадратиков (из за сильного увеличения) видим своего старого знакомого в отличном качестве. Наводим курсор прямо на него и видим всплывающую подсказку, с его именем и контактами, щёлкаем по ней мышью и переходим на сайт, фирмы «Рога и копыта».
В принципе, всё, что описано абзацем выше, можно реализовать и сейчас, однако не в виде одного графического файла в каком-то формате, а в виде некоторого приложения. Я же надеюсь, что в будущем появятся аппаратно-программные комплексы, позволяющие упростить и автоматизировать создание подобных изображений.
О фотоаппаратах
Кто-то говорит, что современные зеркалки уже не нужны, смартфоны по мегапикселям их уже догоняют и обгоняют! По моему мнению, будущее за фотокамерами, которые будут обладать следующими интересными возможностями:
Возможность | Где это уже реализовано |
---|---|
Съёмка с большим динамическим диапазоном | Sony NEX-5N, NEX-7, SLT-A35, iPhone 5 и другие |
Стереосъёмка | FujiFilm FinePix REAL 3D W1 |
Возможность автоматического построения массива глубины/td>Lytro (частично), контроллер Kinect |
Автор: alekseev_ap