设置特定图像亮度

Setting specific image brightness

我会在一开始就解决这个问题:这可能是一个非常愚蠢的问题,它也可能属于不同的 SE,所以如果是这样的话请随时告诉我。

我有一堆图像,它们是灰度和绿色通道的合并。有些图像比其他图像暗得多,而其余图像则大致相同。

我想 'homogenise' 尽我所能地调整图像集的亮度(不一定要完美)。

有谁知道是否有一种相当简单的方法来做到这一点?

这就是我目前考虑的方法,利用 ImageMagick(一些 bash 伪代码和实际代码,因为我在 OSX 上使用 CLI imagemagick,但是其他解决方案也可以):

第 1 步

阅读我的 'reference images' 集,brightness/grey 级别我还可以,得到平均灰度级别:

greyvals = ()
for file in an_array_of_image_files ; do
     # get array of grey values
     greyval=$(convert $file -colorspace Gray -format "%[mean]" info:)
     greyvals+=$greyval

# average the greyvals of the reference set through some mean function.

第 2 步

这才是我真正的问题所在。有没有办法将图像调亮或调暗到指定的灰度级?

ImageMagick 提供了 modulate 功能,但我目前找到的示例需要百分比 'brightening/darkening',例如:

convert $file -modulate 200% ${file%.*}_bright.png

我是不是完全找错树了?


编辑

一些示例图片:

参考 'bright enough' 图片:

示例'dark' 图片:

直方图均衡图像 - 这看起来效果很好,但在某些区域引入了一些白色伪像。

使用 ImageMagick 7 我会考虑这种方法...

magick input.png -brightness-contrast %[fx:50-(mean*100)] output.png

这将调整每张输入图像,使其整体平均亮度为 50%。使用 IM6,您可以使用这样的命令将所需的值放入变量中...

adjuster=`convert input.png -format %[fx:50-(mean*100)] info:`

然后使用该变量作为命令中“-brightness-contrast”运算符的参数,例如我上面的 IM7 示例,类似这样...

convert input.png -brightness-contrast $adjuster output.png

我还没有从 *nix 命令行对此进行测试,但这个概念应该可行。

使用我的 ImageMagick 脚本 histmatch 和 matchimage,这里有一些使用您的两个图像的结果。 ImageMagick 6.9.9.43 Q16 和 Mac OSX Sierra.

histmatch -c rgb reference.jpg dark.png dark_histmatch_rgb.png

histmatch -c gray reference.jpg dark.png dark_histmatch_gray.png

matchimage -c hsi dark.png reference.jpg dark_matchimage_hsi.png

matchimage -c ycbcr dark.png reference.jpg dark_matchimage_ycbcr.png