ImageMagick 中的 Gimp AutoInputLevels

Gimp AutoInputLevels in ImageMagick

我正在尝试在 Imagemagick 中重新创建 Gimp 的 AutoInputLevels(颜色>Levels>AutoInputLevels)(需要批处理 1000 个文件)。这是用于红外图像。我尝试了 contrast_stretch、规范化和自动级别,但它们没有帮助。有什么建议吗?

谢谢。

编辑:我无法提供代表性图片。然而,当我说它们没有帮助时,我正在使用 GIMP 中的其他操作。做同样的事情(自动级别和 ImageMagick 中的 hard_light)并没有提供相同的结果。

由于您没有提供代表性图像或预期结果,我使用如下代码合成了具有三种不同分布的红色、绿色和蓝色像素的图像:

#!/usr/bin/env python3

from PIL import Image
import numpy as np

w, h = 640, 480

# Synthesize red channel, mu=64, sigma=3
r = np.random.normal(64, 3, size=h*w)

# Synthesize green channel, mu=128, sigma=10
g = np.random.normal(128, 10, size=h*w)

# Synthesize blue channel, mu=192, sigma=6
b = np.random.normal(192, 6, size=h*w)

# Merge channels to RGB and round
RGB = np.dstack((r,g,b)).reshape((h,w,3)).astype(np.uint8)

# Save
Image.fromarray(RGB).save('result.png')

然后我应用了您所询问的 GIMP AutoInputLevels 对比度拉伸,并保存了结果。生成的直方图是:

这似乎表明已经为每个通道独立设置了黑点和白点级别。所以,在 ImageMagick 中,我猜你会想要分离通道,独立地对每个通道应用一些对比度拉伸,然后沿着这些线重新组合通道:

magick input.png -separate -contrast-stretch 0.35%x0.7%  -combine result.png

如果您提供有代表性的输入和输出图像,您可能会得到更好的答案。

添加到@Mark Setchell 的回答中,我可以稍微调整一下并接近使用:

输入:

convert redhat.jpg -channel rgb -contrast-stretch 0.6%x0.6% im.png

ImageMagick 结果:

GIMP 自动输入级别结果:

并进行数值比较:

compare -metric rmse gimp.png im.png null:

363.484 (0.00554641)

大约有 0.5% 的差异。