Разделение OpenEXR на различные изображения экспозиции - PullRequest
1 голос
/ 07 ноября 2019

Я пытаюсь использовать этот набор данных , чтобы сделать Экспозиция Meging (Fusion) в Python. Каждое изображение в наборе данных имеет файл OpenEXR , который можно загрузить (у меня нет большого опыта работы с этим форматом файла).

Я хочу извлечь разные сэмплы (jpg или png) из файла OpenEXR с разными экспозициями.

Мне удалось сделать это в Darktable :

  • Открыть файл OpenEXR (изображение)
  • Изменить экспозицию
  • Сохранить как jpg
  • повторить для каждого значения экспозиции (-3EV, -2EV, -1EV,0EV, 1EV, 2EV, 3EV).

Проблема: у меня есть 100 изображений, и я хочу автоматизировать этот процесс. есть идеи как это сделать?

Заранее спасибо

1 Ответ

2 голосов
/ 07 ноября 2019

Поскольку каждое приращение EV ( «Значение экспозиции» ) соответствует удвоению экспозиции, а файлы EXR представлены в линейном свете (без гамма-кодирования), можно ожидать, что вы можете удвоитьзначения пикселей в файле EXR для добавления 1EV и деления их пополам на -1EV ...

Итак, я скачал файл Luxo EXR из здесь . Затем я вошел в Photoshop и нажал:

Image -> Mode -> 8-bits/channel

, выбрал Method = Exposure and Gamma, установил exposure=+1 и сохранил полученный файл как JPEG с +1 в его имени. Я повторил это для EV-3, EV-2, EV + 0, EV + 1, EV + 2, EV + 3.

enter image description here

Iзатем посмотрел на полученные файлы с помощью ImageMagick , используя в терминале команды, подобные приведенным ниже, чтобы проверить среднее значение объединенного изображения RGB:

magick identify -verbose image-EV+2.jpg

Затем я приступил к получению тех же средних значений. значений и обнаружил, что работает следующее:

# To increase 1 EV
magick input.exr -evaluate multiply 2 result.jpg

# To increase 2 EV
magick input.exr -evaluate multiply 4 result.jpg

# To increase 3 EV
magick input.exr -evaluate multiply 8 result.jpg

И так далее ...


Итак, я написал скрипт bash для этого следующим образом, который выможно сохранить в вашем каталоге HOME как adjust.sh:

#!/bin/bash

# Default file, if none specified
file=${1:-/Users/mark/Desktop/LuxoDoubleChecker.exr}

# Default EV of +1, if none specified
EV=${2:-1}

# Strip extension
base="${file%.*}"

# Apply given EV to file and save with new name
new="${base}EV${EV}.jpg"
echo "Applying EV $EV to $file, saving as $new"
magick "$file" -evaluate multiply $(bc -l <<< "2^$EV") "$new"

Затем, просто необходимо один раз, сделать его исполняемым:

chmod +x $HOME/adjust.sh

И затем запустить его так, чтобы добавить + 3EVв SomeImage.exr:

~/adjust.sh SomeImage.exr 3

Пример вывода

Applying EV 3 to SomeImage.exr, saving as SomeImageEV3.jpg

В качестве альтернативы, если вы сохраните этот скрипт как allEVs.sh, он загрузитуказанное изображение только один раз и сгенерируйте все 7 экспозиций за один раз, не перечитывая входной файл EXR 7 раз:

#!/bin/bash

# Default file, if none specified
file=${1:-/Users/mark/Desktop/LuxoDoubleChecker.exr}

# Strip extension to get base without extension
base="${file%.*}"

magick "$file" \
    \( +clone -evaluate multiply 0.125 -write "${base}EV-3.jpg" +delete \)  \
    \( +clone -evaluate multiply 0.25  -write "${base}EV-2.jpg" +delete \)  \
    \( +clone -evaluate multiply 0.5   -write "${base}EV-1.jpg" +delete \)  \
    \( +clone -evaluate multiply 1     -write "${base}EV-0.jpg" +delete \)  \
    \( +clone -evaluate multiply 2     -write "${base}EV+1.jpg" +delete \)  \
    \( +clone -evaluate multiply 4     -write "${base}EV+2.jpg" +delete \)  \
              -evaluate multiply 8     "${base}EV+3.jpg"

enter image description here

Пожалуйста, проверьте внимательночтоЭто работает правильно для вас, прежде чем основывать на нем анализ всей жизни ...

Ключевые слова : обработка изображений, HDR, высокий динамический диапазон, EXR, EV, значение экспозиции, f-stop, stop, остановки, экспозиция, увеличение, уменьшение, тональная карта, ImageMagick.

...