Java*-парсер для фотографий с поддержкой глубины

Загрузить 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.

Это приложение определяет три класса следующим образом.

  1. XDMJavaParser. Это основной класс, который осуществляет анализ изображения XDM, выводит XML-файлы и анализирует XML-файл XMP для вывода цветных изображений и изображений карт глубины.
  2. XMLJavaParser. Этот класс анализирует XML-файл XMP.
  3. 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 — данные облака точек.

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

java-parser-for-depth-photo-whitepaper.pdf (684,22 КБ)

sample-codes-java-parser-for-depth-photo.zip (24,25 КБ)

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

ВложениеРазмер
Иконка PDF java-parser-for-depth-photo-whitepaper.pdf684.22 КБ
Иконка пакета sample-codes-java-parser-for-depth-photo.zip24.25 КБ
Иконка изображения 4.PNG30.8 КБ
Иконка изображения 1.png326.56 КБ
Иконка изображения 2.PNG20.75 КБ
Для получения подробной информации о возможностях оптимизации компилятора обратитесь к нашему Уведомлению об оптимизации.
Возможность комментирования русскоязычного контента была отключена. Узнать подробнее.