【问题标题】:imagemagick mean image sequence and ignore alpha channelimagemagick 平均图像序列并忽略 alpha 通道
【发布时间】:2017-10-02 05:56:33
【问题描述】:

我想使用 Imagemagick 获得一系列图像的平均值。因此我使用以下命令:

convert *.png -evaluate-sequence mean MEAN.png

我的每张图片都包含一个 Alpha 通道。我想要的是:通过忽略 alpha 通道组合所有图像。

当我组合图像时,alpha 通道被考虑在“平均”方法中,我的最终图像具有透明度。这不是我想要的。

结果:

我尝试添加参数 -alpha off,但 Imagemagick 将 alpha 通道转换为黑色。

convert *.png -alpha off -evaluate-sequence mean MEAN.png

结果:

Photoshop 做得对。我将所有图像加载到堆栈中并创建一个智能对象。当我在 Photoshop 中使用“均值”方法时,最终结果中不考虑 Alpha 通道。

我想要 Imagemagick 的结果:

有人知道如何使用 Imagemagick 做到这一点吗?

【问题讨论】:

  • 不确定你的意思。尝试在-evaluate-sequence 之前添加-channel RGB
  • 啊!我现在可以看到图像了!它适用于 ImageMagick 7.x 版。你在运行旧版本吗...identify -version 会告诉你。
  • 我的版本是 Version: ImageMagick 6.8.9-9 Q16 x86_64 2017-03-14 imagemagick.org -channel RGB won't work
  • 我认为这个版本已经有好几年了——可能是时候升级了。
  • 我在 IM 版本 7 中尝试了 -channel RGB。结果是黑色图像

标签: imagemagick photoshop mean alpha


【解决方案1】:

您需要做的是使用 Alpha 通道作为每个图像的加权图像。来自所有 Alpha 通道的每个像素的白色值的总比例将是用于平均值的权重。所以这样的事情应该做你想做的,或者至少是接近的。

首先,cd 到您的图像目录。然后运行以下命令。

convert *.png -evaluate-sequence mean \
\( -clone 0 -alpha off \) \
\( -clone 0 -alpha extract \) \
-delete 0 +swap -compose divide -composite result.png

如果每个像素处有来自至少一个图像的一些图像纹理,这将起作用。也就是说,在给定像素处,所有图像都不是全黑(透明)。

compare -metric rmse result.png mean_photoshop.png null:
125.167 (0.00190993)

所以这表明我的结果与您从 Photoshop 获得的结果之间存在大约 0.2% 的差异

【讨论】:

  • 对不起,我很困惑。首先你说它工作正常。然后你说它只适用于 IM 7。请澄清。它是否适用于 IM 6 和 IM 7 或仅适用于其中一个。如果只有一个,您的确切 IM 版本是什么。
  • 我用 Ubuntu 16.04 和 IM 6 测试过,结果是假的。当我使用带有 IM 7 的 Ubuntu 16.04 和带有 IM 7 的 Windows 时,它工作正常。也许我的带有 IM 6 的 Ubuntu 虚拟机有问题。
  • Ubuntu 14.04 IM:ImageMagick 6.7.7-10 另一个是 ImageMagick 7.0.5-5
  • IM 6.7.7.10 很古老——大约有 200 个版本。可能存在错误,因为在此期间它正在经历一些重大变化。如果可能,我建议您升级。
【解决方案2】:

也许这种工作方式会帮助你到达那里 - 或者至少解释问题:

convert xc:"rgba(255,0,0,1)" xc:"rgba(0,0,0,1)" xc:"rgba(0,0,0,0)" -depth 8 -evaluate-sequence mean txt:

输出

# ImageMagick pixel enumeration: 1,1,65535,srgba
0,0: (21845,0,0,43690)  #550000AA  srgba(85,0,0,0.666667)

【讨论】:

    【解决方案3】:

    使用 IM 6.8.9.4 Q16 或 IM 7.0.5.5 Q16 Mac OSX Sierra,这对我来说似乎工作正常:

    制作透明图片

    convert logo: -transparent white logot.png
    

    变得刻薄

    convert logot.png logot.png logot.png -alpha off -evaluate-sequence mean result.png
    
    magick logot.png logot.png logot.png -alpha off -evaluate-sequence mean result.png
    

    这似乎也有效:

    convert logot.png logot.png logot.png -channel rgb -evaluate-sequence mean -alpha off result.png
    

    所以也许您需要升级您的 ImageMagick(和/或 libpng?)

    您能否发布一些输入图像的 zip 文件,以便我们使用您的图像进行测试?

    【讨论】:

    【解决方案4】:

    我看到的一个问题是,您提供的 PNG 图像在透明区域下方有黑色,而不是图像纹理。因此,当您按照我上面的命令禁用 alpha 时,您会看到黑色,黑色会平均到最终结果中。您是否在 Photoshop 中使用了这些相同的 PNG 图像,或者您是否有 Photoshop PSD 图像或您使用然后导出为 PNG 的其他图像,这些图像可能在透明区域下放置了黑色。您是否尝试过在 Photoshop 中使用相同的 PNG 图像进行平均?

    事实上,您有 8 位彩色(调色板)图像,其中一种颜色(黑色)被指定为透明色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-06
      • 2019-03-27
      • 2011-11-09
      • 2021-07-21
      • 1970-01-01
      • 2011-10-12
      • 2016-05-09
      • 1970-01-01
      相关资源
      最近更新 更多