【发布时间】:2019-03-26 21:35:31
【问题描述】:
我正在尝试使用 imagemagick 调整图像的平均亮度。我已经转换了图像的大小和颜色,因此它们现在处于灰度状态,如下所示:
接下来我需要调整每张图像的亮度,使其匹配(用于研究)。目标亮度平均值为 189。
我用这段代码来获取亮度值:
$ convert image -colorspace LAB -channel r -separate +channel -format "%[mean]\n" info:
这给出了 65535 (from this post) 中的值
我使用公式 x/65535 = 189/255 来了解我的高质量图像目标:48,573。
上图目前是29319.5
有没有办法调整这个值并在命令行中将其设置为 48573?
我试过了:
convert image -colorspace LAB -channel r -evaluate set 48573
与
convert image -colorspace LAB -channel r -evaluate set "48573"
与
每次出现错误时,我都尝试将最终数字更改为 189、89 和 .89(以防我的尺寸错误)。
> convert: `.89' @ error/convert.c/ConvertImageCommand/3272
我一直在努力解决这个问题,并根据下面留下的 cmets 进行了调整,所以现在我在这里:
我运行了以下脚本:
target_percent_luminance=74.12
hundred=100
echo "working on ${target_pic}"
gray_mean_val=$(magick identify -verbose ${target_pic} | grep mean | awk '{print $2}' | sed -n '1p')
percent_gray_mean_val=$(echo $hundred\*$gray_mean_val/255 | bc)
echo $percent_gray_mean_val
difference=$(echo 74.12-$percent_gray_mean_val | bc)
echo $difference
magick convert ${target_pic} -modulate ${difference}% ${target_pic}_luminance.jpg
每一行都有效——输出:
casey$ target_percent_luminance=74.12
casey$ hundred=100
casey$ echo "working on ${target_pic}"
working on F201_background_gray_resized.jpg
casey$ gray_mean_val=$(magick identify -verbose ${target_pic} | grep mean | awk '{print $2}' | sed -n '1p')
casey$ percent_gray_mean_val=$(echo $hundred\*$gray_mean_val/255 | bc)
casey$ echo $percent_gray_mean_val
40
casey$ difference=$(echo 74.12-$percent_gray_mean_val | bc)
casey$ echo $difference
34.12
casey$ magick convert ${target_pic} -modulate ${difference}% ${target_pic}_luminance.jpg
但这里是output image,看起来太黑了。任何人都可以看到错误吗?
使用下面我写的 GeeMac 的答案:
casey$ input=F201_background_gray_resized.jpg
casey$ magick $input -brightness-contrast "%[fx:${lumin}-(mean*100)]" ${input}_lumintwo.jpg
得到了this image,看起来更好!
【问题讨论】:
-
看看 Anthony 的 Color Modification 文章。 “直方图重新分配方法”部分可能是您的尝试。
-
如果您已经有了灰度图像,那您为什么要转换为 LAB 并提取亮度?发布您的原始彩色图像,以便我们进行测试。我通常转换为百分比并在 -evaluate 集中使用百分比。你的 189 等于 100*189/255=74.12%。您的命令中没有指定用于更改图像的输出图像,也没有指定 -format %[mean] info:。请始终显示您使用的完整命令。还要始终提供您的 ImageMagick 版本和平台,因为语法可能不同。
-
我转换为 LAB 只是为了提取亮度,因为我的印象是它需要采用 LAB 格式来提取亮度值。这是我使用的完整命令,因为我是 ImageMagick 的新手,我正试图弄清楚。我使用的是 Q16 版本。我会试试你提到的转化百分比@fmw42 谢谢
-
我还是一头雾水。您是从彩色图像还是从您发布的灰度图像开始?如果是后者,将其更改为 LAB 是错误的。您应该从彩色图像开始,以使您的命令起作用。我对使用百分比的建议仅此而已。您也可以在原始 16 位值中设置 -evaluate。
-
嗨@fmw42 我从灰度开始,因为这是我需要调整亮度的灰度。我不相信改变颜色的亮度然后改变背景和灰度会使图像使亮度保持在同一水平(这是为了神经成像刺激之间的连续性)。我根据您的建议修改了我一直在编写的脚本,您看到我对原始帖子的“编辑”了吗?
标签: imagemagick luminance