Nano Hash - криптовалюты, майнинг, программирование

Получение цветовой матрицы и информации о балансе белого из Camera2 API (для пользовательской необработанной обработки)

Я работаю над приложением, в котором мне нужно сделать много снимков (возможно, десятки тысяч), и они должны быть в формате RAW, которые я обрабатываю в собственном коде. Прямо сейчас я конвертирую RAW в DNG и в нативном коде распаковываю их с помощью libraw. Я получаю цветовые множители баланса белого и цветовую матрицу из файла dng.

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


Ответы:


1

Эта информация доступна в объектах CameraCharacteristics и CaptureResult, которые вы передаете DngCreator, в частности такие поля, как:

https://developer.android.com/reference/kotlin/android/hardware/camera2/CameraCharacteristics#sensor_dication_transform1 https://developer.android.com/reference/kotlin/android/hardware/camera2/CameraCharacteristics#sensor_color_transform1 https://developer.android.com/reference/kotlin/android/hardware/camera2/CameraCharacteristics#sensor_forward_matrix1 htt ps://developer.android.com/reference/kotlin/android/hardware/camera2/CameraCharacteristics#sensor_reference_illuminant1 https://developer.android.com/reference/android/hardware/camera2/CaptureResult#SENSOR_NEUTRAL_COLOR_POINT

Большинство этих полей напрямую сопоставляются со спецификацией DNG, но вы можете попробовать посмотреть на реализацию DngCreator, чтобы увидеть, как перейти от API camera2 к полям DNG: https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/jni/android_hardware_camera2_DngCreator.cpp;l=1217

Хотя официального примера использования этой информации для обработки необработанного буфера не существует, тесты на совместимость с Android включают простой конвертер RAW на Java, используемый для подтверждения того, что результирующее изображение разумно соответствует изображению JPEG, предоставленному устройством (чтобы дважды проверить, что различные поля метаданных достаточно корректны): https://cs.android.com/android/platform/superproject/+/master:cts/tests/camera/src/android/hardware/camera2/cts/rs/RawConverter.java;l=279

27.04.2020
  • Спасибо. Это то, что я собирался сделать в конечном итоге, хотя это означает, что мне также нужно посмотреть исходный код libraw, чтобы увидеть, откуда он берет некоторые вещи из файла dng. 28.04.2020
  • Что ж, после более внимательного изучения спецификаций DNG я заметил, что libraw делает несколько других вещей, таких как создание матрицы srgb, которую можно напрямую применить к необработанным данным (после дебайеризации), а в Android такой матрицы нет. . Я думаю, что работы больше, чем я изначально предполагал :) 30.04.2020
  • Создание этой матрицы требует принятия решений о желаемом балансе белого выходного изображения. Возможно, libraw использует рекомендованную DNG точку белого для создания матрицы, но, безусловно, большинство процессоров необработанных изображений хотят иметь мнение о настройках баланса белого. Вы можете найти этот код полезным: это часть тестов соответствия Android, реализующая простой конвертер raw в rgb с использованием только API camera2: cs.android.com/android/platform/superproject/+/master :cts/тесты/ 30.04.2020
  • На самом деле, libraw дает вам эту матрицу плюс множители баланса белого r, g, b для каждого канала. Я попытался посмотреть исходный код dcraw, чтобы увидеть, как получается эта матрица, но код не очень интуитивно понятен. Я посмотрю на этот код, когда буду делать последнюю оптимизацию обхода формата dng. До тех пор у меня есть гораздо более серьезная проблема, которую я не могу решить, касающаяся выполнения собственного кода из класса широковещательного приемника: / В любом случае, большое спасибо за ваш вклад, это было очень полезно. 30.04.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..