Отрегулируйте яркость изображения

Я пытаюсь отрегулировать среднюю яркость изображения с помощью imagemagick. Я преобразовал размер и цвет изображений, чтобы они были в оттенках серого, как показано ниже:

body_heavy_female_gray_resize

Затем мне нужно отрегулировать яркость каждого изображения, чтобы они соответствовали (для исследования). Среднее значение яркости составляет 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}. Это может дать вам другой подход для рассмотрения.

Другие вопросы по тегам