Отрегулируйте яркость изображения
Я пытаюсь отрегулировать среднюю яркость изображения с помощью imagemagick. Я преобразовал размер и цвет изображений, чтобы они были в оттенках серого, как показано ниже:
Затем мне нужно отрегулировать яркость каждого изображения, чтобы они соответствовали (для исследования). Среднее значение яркости составляет 189.
Я использовал этот код, чтобы получить значение яркости:
$ convert image -colorspace LAB -channel r -separate +channel -format "%[mean]\n" info:
Что дает значение из 65535 ( из этого поста)
Я использовал уравнение x/65535 = 189/255, чтобы понять, какова моя цель для высококачественных изображений: 48573.
Выше изображение в настоящее время 29319,5
Есть ли способ отрегулировать это значение и установить его на 48573 в командной строке?
Я старался:
convert image -colorspace LAB -channel r -evaluate set 48573
А ТАКЖЕ
convert image -colorspace LAB -channel r -evaluate set "48573"
А ТАКЖЕ
Я пытался изменить окончательное число на 189, 89 и 0,89 (если я был в неправильных измерениях) каждый раз, когда ошибка была в указанном числе.
> convert: `.89' @ error/convert.c/ConvertImageCommand/3272
Я продолжил работать над этой проблемой и скорректировал ее, основываясь на комментариях, оставленных ниже, так что теперь я здесь:
Я запустил следующий скрипт:
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
Но вот выходное изображение, которое кажется слишком темным. Кто-нибудь может увидеть ошибку?
Используя ответ GeeMac ниже, я написал:
casey$ input=F201_background_gray_resized.jpg
casey$ magick $input -brightness-contrast "%[fx:${lumin}-(mean*100)]" ${input}_lumintwo.jpg
и получил это изображение, которое выглядит лучше!
1 ответ
Если вы используете IM7, вы можете сделать много вычислений непосредственно в команде "magick ...". Эта команда, например, читает входное изображение и регулирует яркость так, чтобы выходное изображение имело среднее значение 74,12%...
lumin=74.12
magick input.jpg -brightness-contrast "%[fx:${lumin}-(mean*100)]" output.jpg
Я не знаю, как это сравнивается с внесением корректировок с "-modulate N", но когда я проверяю вывод с этим...
magick output.jpg -format "%[fx:mean*100]\n" info:
... результат - "74.1219", или любое другое значение ${lumin}. Это может дать вам другой подход для рассмотрения.