Java-парсер для фотографий с поддержкой глубины обрабатывает файлы изображений в формате XDM (eXtensible Device Metadata) и извлекает метаданные, внедренные в файлы изображений, создавая XML-файлы. Кроме того, это приложение анализирует XML-файлы, извлекая из них данные цветных изображений и данные карт глубины. Это основа для использования фотографий с поддержкой глубины, например для просмотра изображений, изменения глубины резкости, параллакса и измерений.
В качестве входных данных приложение использует файлы изображений XDM, а на выходе мы получаем XML-файлы, файлы цветных изображений и файлы карт глубины.

XDM


Сначала мы описываем входные данные для этого приложения: файлы изображений XDM. XDM — стандарт для хранения метаданных в контейнере изображения при сохранении совместимости с существующими программами для просмотра изображений. Этот стандарт предназначен для технологии Intel RealSense. Метаданные включают информацию, связанную с устройством: карту глубины, положение устройства и камеры, модель перспективы объектива, данные о поставщике, облако точек. На рисунке выше показан пример, где в файле 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.
Смещение байта, длина Значение поля Имя поля Комментарии
0, 2 байт 0xFFE1 APP1 Маркер APP1 указывает раздел метаданных.
2, 2 байт 2 + 29 + длина XMP-пакета Lp Размер в байтах этой величины плюс двух следующих частей.
4, 29 байт Строка ASCII без кавычек, заканчивающаяся нулевым символом namespace URI пространства имен XMP, используется в качестве уникального идентификатора
33, < 65 503 XMP-пакет Должен быть в кодировке UTF-8.
Если размер XMP-пакета после сериализации превышает 64 КБ, то этот пакет может быть разделен на основной сегмент (StandardXMP) и расширенный сегмент (ExtendedXMP), хранящиеся в нескольких указанных маркерами сегментах JPEG. Формат записей в сегменте ExtendedXMP аналогичен сегменту StandardXMP, но используется другое пространство имен.
На следующем рисунке показаны сегменты StandardXMP и ExtendedXMP, внедренные в файл изображения JPEG.



Это приложение определяет три класса следующим образом.
  1. XDMJavaParser. Это основной класс, который осуществляет анализ изображения XDM, выводит XML-файлы и анализирует XML-файл XMP для вывода цветных изображений и изображений карт глубины.
  2. XMLJavaParser. Этот класс анализирует XML-файл XMP.
  3. XMLJavaParserHandler. Это класс-обработчик, реализующий анализ XML-файла XMP.

В следующем фрагменте кода показаны две функции, использующиеся для анализа XDM-изображения в классе XDMJavaParser.
  • findMarker. Анализ JPEG-файла (т. е. буфера), начиная с указанного места (расположение), и поиск маркера 0xFFE1. Если маркер обнаружен, возвращается расположение маркера, если нет, возвращается –1.
  • findHeader. Поиск пространства имен StandardXMP и пространства имен ExtendedXMP в JPEG-файле (т. е. в буфере), начиная с указанного места (расположение). При обнаружении возвращается соответствующее пространство имен, в противном случае возвращается пустая строка.



XML


Метаданные XMP можно внедрять непосредственно в XML-документ 4. Согласно спецификации XDM, структура данных XML определяется следующим образом.
Device Revision Версия спецификации XDM, например 1.0,1.1,1.2, 2.0 и т. д. (в пространстве имен указывается только основной номер версии, например 1.0, 2.0 и т. п.)
Vendorlnfo Информация о производителе устройства
Положение устройства Положение устройства по отношению к окружающему миру
Cameras (RDF-последовательность одной или нескольких камер) Vendorlnfo Информация о производителе камеры
CameraPose Положение камеры по отношению к устройству
Image Изображение, предоставленное камерой. Изображение-контейнер сопоставляется с первой камерой, т. е. camera 0
ImagingModel Модель получения изображения (модель объектива)
Depthmap Информация о глубине, включая карту глубины и модель шума
PointCloud Данные облака точек

Файл изображения содержит следующие элементы, как показано в приведенной выше таблице, в формате RDF/XML. Вот описание общей структуры.
  • Изображение-контейнер. Это внешнее изображение (по отношению к XDM), его можно просматривать в приложениях, не поддерживающих XDM.
  • Device. Рутовый объект документа RDF/XML согласно стандарту Adobe XMP.
    • Revision — версия спецификации XDM.
    • VendorInfo — информация о производителе устройства.
    • DevicePose — положение устройства по отношению к окружающему миру.
    • Cameras — последовательность RDF одной или нескольких камер.
      • Camera — вся информация для одной камеры. Для получения любых изображений должна быть хотя бы одна камера. Изображение-контейнер сопоставляется с первой камерой, которая считается основной камерой изображения.
      • VendorInfo — информация о производителе камеры.
      • CameraPose — положение камеры по отношению к устройству.
      • Image — изображение, предоставленное камерой.
      • ImagingModel — модель получения изображения (модель объектива).
      • Depthmap — информация о глубине, включая карту глубины и модель шума.
      • NoiseModel — свойства матрицы камеры, касающиеся шума.
      • PointCloud — данные облака точек.

Следующий фрагмент кода является основной функцией этого приложения в классе 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-файлы и извлекает из них файлы цветных изображений и файлы карт глубины. Это приложение не зависит ни от каких других программ. Оно является базовым для различных сценариев использования фотографий с поддержкой глубины.

Справочные материалы и ссылки


Комментарии (0)