1

我遇到了一些合并 EXR 的问题。使用 PNG 或其他任何东西,都没有问题(使用 ImageMagick)。

我有 4 张相同大小的图像,应该将它们组合起来以获得更大的图像。每个图像代表更大图像的一部分(左上、右上、左下和右下)。每个图像包含 N 层,其中包含信息(颜色、深度等)。这些层必须在最终图像中组合。

每个图像都有这个签名:

$ identify imput_tile_0001.exr
imput_tile_0001.exr EXR 400x225 400x225+0+0 16-bit DirectClass 2.501MB 0.000u 0:00.000

我尝试 ImageMagick 简单的命令,例如

$ convert +append *.exr out.exr
$ montage *.exr -tile 2x2 -geometry +0+0 out.exr

这些命令返回一个完全黑色的图像,具有正确的大小,并且只有 1 层。

我愿意接受任何使用任何语言或任何软件的解决方案,在 Debian 上工作。

编辑:可以在这里找到 4 个 EXR 磁贴: https ://www.dropbox.com/sh/p6h8kh5wlroy5bb/AACMuR8WieZ-SqB3qXHFwk_ea?dl= 0(这些是“imput_tile...exr”)。

任何想法?

4

1 回答 1

1

我不是(好吧,我什至从未见过)EXR 格式图像的专家,但我知道它vips能够处理它们。我什至无法说出你的图像是什么样的,但我认为/希望这可能是你想要的。

首先,我检查您的图像,发现它们是 4 个 400x225 像素的波段,像这样

vips im_printdesc input_tile_0000.exr
400x225 float, 4 bands, srgb, setbuf VipsImage (0x7fda0984f000) count=1 9600 bytes
width: 400
height: 225
bands: 4
format: 6 - float
coding: 0 - none
interpretation: 22 - srgb
xoffset: 0
yoffset: 0
xres: 1.000000
yres: 1.000000
filename: "input_tile_0000.exr"

然后我做一个left-right join得到你想要的结果的第一行:

vips im_lrjoin *0.exr *1.exr top.v

然后我做另一个left-right join得到你想要的结果的底行:

vips im_lrjoin *2.exr *3.exr bot.v

然后我做一个top-bottom join加入顶部和底部以获得最终结果:

vips im_tbjoin top.v bot.v result.v

如果我查看它,它似乎具有正确的尺寸以及与您的原件相同的带数和编码:

vips im_printdesc result.v
800x450 float, 4 bands, srgb, openin VipsImage (0x7f975b84d010) count=1
width: 800
height: 450
bands: 4
format: 6 - float
coding: 0 - none
interpretation: 22 - srgb
xoffset: 0
yoffset: 0
xres: 1.000000
yres: 1.000000
filename: "result.v"

笔记

  1. xyz.v格式是vips's 内部的、高效的图像格式

  2. vips可与多种语言绑定 - 请参阅此处vips的网站。

  3. 它可能能够缓存我创建的中间文件(top.vbot.v),但我不知道如何

  4. vips维护者以@user894763 的身份在 SO 上,他可能能够对我的想法有更多的了解——希望如此!

于 2015-06-28T10:15:26.177 回答