Загрузить PDF [PDF 684 KB]
Загрузить образцы кода [ZIP 25 KB]
Java*-парсер для фотографий с поддержкой глубины обрабатывает файлы изображений в формате XDM (eXtensible Device Metadata)и извлекает метаданные, внедренные в файлы изображений, создавая XML-файлы. Кроме того, это приложение анализирует XML-файлы, извлекая из них данные цветных изображений и данные карт глубины. Это основа для использования фотографий с поддержкой глубины, например для просмотра изображений, изменения глубины резкости, параллакса и измерений.
В качестве входных данных приложение использует файлы изображений XDM,
а на выходе мы получаем XML-файлы, файлы цветных изображений и файлы карт глубины.
XDM
Сначала мы описываем входные данные для этого приложения: файлы изображений XDM. XDM — стандарт для хранения метаданных в контейнере изображения при сохранении совместимости с существующими программами для просмотра изображений. Этот стандарт предназначен для технологии Intel® RealSenseTM. Метаданные включают информацию, связанную с устройством: карту глубины, положение устройства и камеры, модель перспективы объектива, данные о поставщике, облако точек. На следующем рисунке показан пример, где в файле XDM хранится карта глубины (справа) в качестве метаданных вместе с цветным изображением (слева).
Стандарт Adobe XMP *
В настоящее время спецификация XDM поддерживает четыре типа форматов изображений-контейнеров: JPEG, PNG, TIFF и GIF. Метаданные XDM проходят сериализацию и внедряются в файл изображения-контейнера. Формат хранения основывается на стандарте XMP — стандарте расширяемой платформы метаданных Adobe. Это приложение разработано специально для формата JPEG. Затем мы вкратце описываем, как метаданные XMP внедряются в файлы изображений JPEG и как анализатор обрабатывает XMP-пакеты.
В стандарте XMP фрагменты данных обозначаются двухбайтовыми маркерами. Маркеры типа 0xFFE0–0xFFEF обычно используются для данных приложений, они имеют имя вида APPn. Маркер APPnначинается со строки, указывающей назначение. Эта строка называется строкой пространства имен или строкой подписи. Маркер APP1указывает метаданные EXIF и TIFF; маркер APP13обозначает ресурсы изображения Photoshop *, содержащие метаданные IPTC, еще один или несколько маркеров APP1обозначают расположение XMP-пакетов.
В следующей таблице показан формат записей в разделе StandardXMP в файлах JPEG.
- 2-байтовый маркер APP1 0xFFE1.
- Длина этого XMP-пакета — 2 байта.
- Стандартное пространство имен StandardXMP (http://ns.adobe.com/xap/1.0/) длиной 29 байт.
- XMP-пакет длиной не более 65 503 байт.
Если размер XMP-пакета после сериализации превышает 64 КБ, то этот пакет может быть разделен на основной сегмент (StandardXMP) и расширенный сегмент (ExtendedXMP), хранящиеся в нескольких указанных маркерами сегментах JPEG. Формат записей в сегменте ExtendedXMP аналогичен сегменту StandardXMP,
но используется другое пространство имен: http://ns.adobe.com/xmp/extension/.
На следующем рисунке показаны сегменты StandardXMP и ExtendedXMP, внедренные в файл изображения JPEG.
Это приложение определяет три класса следующим образом.
- XDMJavaParser. Это основной класс, который осуществляет анализ изображения XDM, выводит XML-файлы и анализирует XML-файл XMP для вывода цветных изображений и изображений карт глубины.
- XMLJavaParser. Этот класс анализирует XML-файл XMP.
- XMLJavaParserHandler. Это класс-обработчик, реализующий анализ
XML-файла XMP.
В следующем фрагменте кода показаны две функции, использующиеся для анализа XDM-изображения в классе XDMJavaParser.
- findMarker.Анализ JPEG-файла (т. е. буфера), начиная с указанного места (расположение), и поиск маркера 0xFFE1. Если маркер обнаружен, возвращается расположение маркера, если нет, возвращается –1.
- findHeader.Поиск пространства имен StandardXMP (http://ns.adobe.com/xap/1.0/) и пространства имен ExtendedXMP (http://ns.adobe.com/xmp/extension/) в JPEG-файле (т. е. в буфере), начиная с указанного места (расположение). При обнаружении возвращается соответствующее пространство имен, в противном случае возвращается пустая строка.
XML
Метаданные XMP можно внедрять непосредственно в XML-документ 4. Согласно спецификации XDM, структура данных XML определяется следующим образом.
Файл изображения содержит следующие элементы, как показано в приведенной выше таблице, в формате RDF/XML. Вот описание общей структуры.
- Изображение-контейнер. Это внешнее изображение (по отношению к XDM), его можно просматривать в приложениях, не поддерживающих XDM.
- Device. Рутовый объект документа RDF/XML согласно стандарту Adobe XMP.
- Revision — версия спецификации XDM.
- VendorInfo — информация о производителе устройства.
- DevicePose — положение устройства по отношению к окружающему миру.
- Cameras — последовательность RDF одной или нескольких камер.
- Camera — вся информация для одной камеры. Для получения любых изображений должна быть хотя бы одна камера. Изображение-контейнер сопоставляется с первой камерой, которая считается основной камерой изображения.
- VendorInfo — информация о производителе камеры.
- CameraPose — положение камеры по отношению к устройству.
- Image — изображение, предоставленное камерой.
- ImagingModel — модель получения изображения (модель объектива).
- Depthmap — информация о глубине, включая карту глубины и модель шума.
- NoiseModel — свойства матрицы камеры, касающиеся шума.
- PointCloud — данные облака точек.
- Camera — вся информация для одной камеры. Для получения любых изображений должна быть хотя бы одна камера. Изображение-контейнер сопоставляется с первой камерой, которая считается основной камерой изображения.
Следующий фрагмент кода является основной функцией этого приложения в классе XDMJavaParser. Он анализирует входной JPEG-файл, пытаясь найти в нем маркер APP1 0xFFE1. Если такой маркер найден, выполняется поиск строк пространств имен StandardXMP и ExtendedXMP. Если найдена первая строка, код вычисляет начальную точку и размер метаданных, извлекает метаданные и создает XML-файл StandardXMP. Если найдена вторая строка, код вычисляет начальную точку и размер метаданных, извлекает метаданные и создает XML-файл ExtendedXMP. Приложение выводит два XML-файла.
Следующий фрагмент кода — класс XDMJavaParser, отвечающий за анализ
XML-файла XMP:
Следующий фрагмент кода в классе XMLJavaParserHandler анализирует XML-файл и извлекает цветное изображение и карту глубины для фотографирования с поддержкой глубины. Все работает очень просто. Функция startElement() ищет атрибут с именем IMAGE:DATAи извлекает соответствующие данные, то есть цветное изображение, в JPEG-файл. При обнаружении нескольких атрибутов создается несколько JPEG-файлов. Функция также ищет атрибут с именем DEPTHMAP:DATAи извлекает соответствующие данные, то есть карту глубины, в PNG-файл. При обнаружении нескольких атрибутов создается несколько
PNG-файлов. На выходе приложения мы получаем JPEG- и PNG-файлы.
Заключение
В этом документе описывается формат файлов XDM, стандарт Adobe XMP и структура данных XML. Анализатор Java для фотографий с поддержкой глубины обрабатывает файлы изображений XDM и выдает XML-файлы StandardXMP и ExtendedXMP. Затем он обрабатывает XML-файлы и извлекает из них файлы цветных изображений и файлы карт глубины. Это приложение не зависит ни от каких других программ. Оно является базовым для различных сценариев использования фотографий с поддержкой глубины.
Справочные материалы
«Спецификация eXtensible Device Metadata (XDM), версия 1.0»: /ru-ru/articles/the-extensible-device-metadata-xdm-specification-version-10
Технология Intel® RealSenseTM: http://www.intel.com/content/www/ru/ru/architecture-and-technology/realsense-overview.html
Центр разработки Adobe XMP: http://www.adobe.com/devnet/xmp.html
«Спецификация XML 1.0», консорциум World Wide Web. Получено 22 августа 2010 г.
Использованные компоненты и решения
В этом проекте используется API SAX (http://www.saxproject.org) для XML в Java. Проект SAX не относится к общественному достоянию. Информацию об авторских правах на этот проект см. по следующей ссылке: http://www.saxproject.org/copying.html
Об авторе
Ю Бай (Yu Bai) — инженер по разработке приложений в отделе Intel® Software and Services Group (SSG). Она работает с внешними независимыми разработчиками программного обеспечения, добиваясь безупречной работы их приложений на платформах Intel®. До поступления в SSG она работала в компании Rudolph Technologies в качестве старшего инженера по программному обеспечению, занималась разработкой приложений, используемых при работе высокоточного фотолитографического оборудования, используемого в промышленном оборудовании для производства полупроводников. До компании Rudolph она работала в компании Marvell Semiconductor в качестве штатного инженера и занималась анализом электропитания и моделированием электропитания для прикладных процессоров этой компании. Ю перешла в компанию Marvell при приобретении этой компанией технологии Intel® XScale в 2006 году.
Ю получила учетную степень магистра, а затем и доктора наук в области электротехники и информатики в Университете Брауна. Ее дипломная работа была посвящена проектированию архитектуры компьютеров высокой производительности с низким потреблением электроэнергии. Ю владеет шестью патентами США и опубликовала в журналах и материалах международных конференций более 10 статей, посвященных управлению и оптимизации мощности и электропитания.
Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.