将 OpenEXR 拆分为不同的曝光图像
Splitting OpenEXR into different exposure images
我正在尝试使用这个可以下载的 dataset to do Exposure Meging (Fusion) in Python. Each image in the dataset has an OpenEXR 文件(我对这种文件格式没有太多经验)。
我想从具有不同曝光度的 OpenEXR 文件中提取不同的样本(jpg 或 png)。
我在 Darktable 中做到了:
- 打开 OpenEXR 文件(图像)
- 改变曝光度
- 另存为 jpg
- 重做每个曝光值(-3EV、-2EV、-1EV、0EV、1EV、2EV、3EV)。
问题:我有 100 张图像,我想自动执行此过程。知道怎么做吗?
提前致谢
因为每次 EV 增量 ("Exposure Value") 对应于加倍曝光,并且 EXR
文件是线性光(非伽马编码) ,您会期望可以将 EXR
文件中的像素值加倍以添加 1EV 并将它们减半以执行 -1EV...
所以,我从 here 下载了 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。
然后我使用 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"
在对它进行终生分析之前,请仔细检查它是否适合您...
关键字:图像处理、HDR、高动态范围、EXR、EV、曝光值、f-stop、停止、停止、曝光、增加、减少、色调图、 ImageMagick.
我正在尝试使用这个可以下载的 dataset to do Exposure Meging (Fusion) in Python. Each image in the dataset has an OpenEXR 文件(我对这种文件格式没有太多经验)。
我想从具有不同曝光度的 OpenEXR 文件中提取不同的样本(jpg 或 png)。
我在 Darktable 中做到了:
- 打开 OpenEXR 文件(图像)
- 改变曝光度
- 另存为 jpg
- 重做每个曝光值(-3EV、-2EV、-1EV、0EV、1EV、2EV、3EV)。
问题:我有 100 张图像,我想自动执行此过程。知道怎么做吗?
提前致谢
因为每次 EV 增量 ("Exposure Value") 对应于加倍曝光,并且 EXR
文件是线性光(非伽马编码) ,您会期望可以将 EXR
文件中的像素值加倍以添加 1EV 并将它们减半以执行 -1EV...
所以,我从 here 下载了 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。
然后我使用 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"
在对它进行终生分析之前,请仔细检查它是否适合您...
关键字:图像处理、HDR、高动态范围、EXR、EV、曝光值、f-stop、停止、停止、曝光、增加、减少、色调图、 ImageMagick.