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% 的差异。
我正在尝试在 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% 的差异。