bash - 设置特定图像亮度

标签 bash image-processing imagemagick image-manipulation

我会在一开始就解决这个问题:这可能是一个非常愚蠢的问题,而且它也可能属于不同的 SE,所以请随时告诉我是否是这种情况。

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

我想尽可能地“均匀化”这组图像的亮度(不一定是完美的)。

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

这就是我目前的想法,利用 ImageMagick(一些 bash 伪代码和实际代码,因为我在 OSX 上使用 CLI imagemagick,但其他解决方案会没问题):

步骤 1

读入我的一组“引用图像”,其亮度/灰度级我可以接受并获得平均灰度级:

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 函数,但我到目前为止找到的示例需要百分比“增亮/变暗”,例如:

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

我是不是完全找错了树?


编辑

一些示例图像:

引用“足够亮”的图像:

enter image description here

“深色”图像示例:

enter image description here

直方图均衡图像 - 这似乎工作得很好,但在某些区域引入了一些白色伪影。 enter image description here

最佳答案

使用 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 命令行测试过这个,但这个概念应该可行。

关于bash - 设置特定图像亮度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50335759/

相关文章:

json - "Argument list too long"吞吐 JSON 文件时

linux - 如何在 bash 脚本中将所有文件从一个目录复制到另一个目录

algorithm - 如何计算该图像中的 Blob 数?

c++ - 从图像中移除像素值总和 < 阈值的连通分量

java - 如何从图像中剪切并保存矩形?

ruby - RMagick - ImageMagick 给出错误 "no decode delegate for this image format"

python - 如何使用 Wand 在 Python 中创建动画 gif?

bash - jq - 使用参数构造选择器

linux - 在 sed 命令中使用变量

PHP APC 和 Imagick 与 cpanel